Token Mint Your EGG
Overview ERC-721
Total Supply:
1,169 EGG
Holders:
524 addresses
Contract:
Balance
1 EGG
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MYEGG
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-01-20 */ // File: contracts/libraries/Base64.sol pragma solidity ^0.8.0; /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF) ) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF) ) out := shl(8, out) out := add( out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF) ) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // 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 v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // 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 v4.4.1 (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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // 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: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: contracts/MYEGG.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** ████ ██░░░░██ ██░░░░░░░░██ ██░░░░░░░░██ ██░░░ ░░ ░░░██ ██░░░█ ░░█ ░░░██ ██░░░░░░░░░░░░██ ██░░░ ░░░██ ████████ eg @author goldendilemma */ struct EggPart { string svg; string name; } struct Egg { string svgBody; string jsonBody; } uint8 constant CAT_BODY = 0; uint8 constant CAT_MOUTH = 1; uint8 constant CAT_HAIR = 2; uint8 constant CAT_EYES = 3; uint8 constant CAT_GLASSES = 4; uint8 constant CAT_ACCESSORY = 5; contract MYEGG is ERC721Enumerable, ERC721URIStorage, Ownable, ReentrancyGuard { uint constant EGG_PER_WALLET = 1; uint public maxEggs; uint public price = 0; bool public paused = true; bool public singleMint = true; mapping (bytes32 => bool) eggs; mapping (address => bool) hasEgg; uint public eggCount = 0; event MintEgg (address indexed wallet, uint tokenId); constructor( string memory name, string memory ticker, uint maxMints ) ERC721(name, ticker) { maxEggs = maxMints; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function getFill (uint8 fillIndex) private pure returns (string memory) { return ["FF0000", "FF8800", "FFFF00", "00FF00", "00FFFF", "FF00FF", "0000FF", "F9E8CF", "CEAB97", "D1D1D1", "393939"][fillIndex]; } function getPart (uint8 catIndex, uint8 attrIndex, uint8 fillIndex) private pure returns (EggPart memory) { uint8 catLength = [4, 3, 1, 2, 1, 11][catIndex]; uint8 catStart = [1, 5, 8, 9, 11, 12][catIndex]; bool isRemovable = [false, true, true, false, true, true][catIndex]; if (attrIndex == 0) { require(isRemovable, "EGG_BROKE_1"); // not removable } else { require(attrIndex >= catStart && attrIndex < catStart + catLength, "EGG_BROKE_2"); // out of bounds } EggPart memory part = [ EggPart({ name: 'none', svg: '' }), EggPart({ name: 'regular', svg: string(abi.encodePacked('<path class="eo" d="M10 11H14V12H15V14H16V19H15V20H14H10H9V19H8V14H9V12H10V11Z" fill="#', getFill(fillIndex) ,'"/><path class="eo" d="M13 11H14V12H13V11ZM14 12H15V13H14V12ZM16 14H15V15H16V14ZM15 18H16V19H15V18ZM15 19V20H14V19H15ZM9 19H10V20H9V19ZM9 19H8V18H9V19Z" fill="black" fill-opacity="0.5"/><path class="eo" d="M13 11H11V12H12V13H13V15H14V17H13V18H12V19H10V20H12H15V19H16V15V14H15V13H14V12H13V11Z" fill="black" fill-opacity="0.29"/>')) }), EggPart({ name: 'transparent', svg: '<path class="eo" d="M13 11H11V12H12V13H13V15H14V17H13V18H12V19H10V20H12H15V19H16V15V14H15V13H14V12H13V11Z" fill="black" fill-opacity="0.29"/><path class="eo" d="M11 11H10V12H9V14H8V16H9V15H10V14H11V13H12V12H14V11H12H11Z" fill="white" fill-opacity="0.78"/>' }), EggPart({ name: 'rainbow', svg: '<rect x="10" y="11" width="1" height="9" fill="#FFFF00"/><rect x="11" y="11" width="1" height="9" fill="#88FF00"/><rect x="12" y="11" width="1" height="9" fill="#00FF88"/><rect x="13" y="11" width="1" height="9" fill="#00FFFF"/><rect x="14" y="12" width="1" height="8" fill="#0088FF"/><rect x="15" y="14" width="1" height="5" fill="#0000FF"/><rect x="8" y="14" width="1" height="5" fill="#FF0000"/><rect x="9" y="12" width="1" height="8" fill="#FF8800"/><path class="eo" d="M13 11H14V12H13V11ZM14 12H15V13H14V12ZM16 14H15V15H16V14ZM15 18H16V19H15V18ZM15 19V20H14V19H15ZM9 19H10V20H9V19ZM9 19H8V18H9V19Z" fill="black" fill-opacity="0.5"/><path class="eo" d="M13 11H11V12H12V13H13V15H14V17H13V18H12V19H10V20H12H15V19H16V15V14H15V13H14V12H13V11Z" fill="black" fill-opacity="0.29"/><path class="eo" d="M11 11H10V12H9V14H8V16H9V15H10V14H11V13H12V12H14V11H12H11Z" fill="white" fill-opacity="0.78"/>' }), EggPart({ name: 'eggtrix', svg: '<path class="eo" d="M10 11H14V12H15V14H16V19H15V20H14H10H9V19H8V14H9V12H10V11Z" fill="#1C712F"/><path class="eo" d="M12 11H11V12H12V11ZM14 11H13V12H14V11ZM9 13H10V14H9V13ZM12 13H11V14H12V13ZM13 13H14V14H13V13ZM16 15H15V16H16V15ZM13 15H14V16H13V15ZM12 15H11V16H12V15ZM9 15H10V16H9V15ZM10 17H9V18H10V17ZM13 17H14V18H13V17ZM14 19H13V20H14V19Z" fill="#00FF00"/><path class="eo" d="M13 11H11V12H12V13H13V15H14V17H13V18H12V19H10V20H12H15V19H16V15V14H15V13H14V12H13V11Z" fill="#03A360" fill-opacity="0.36"/><path class="eo" d="M11 11H10V12H9V14H8V16H9V15H10V14H11V13H12V12H14V11H12H11Z" fill="#00FF38" fill-opacity="0.4"/><path class="eo" d="M13 11H14V12H13V11ZM14 12H15V13H14V12ZM16 14H15V15H16V14ZM15 18H16V19H15V18ZM15 19V20H14V19H15ZM9 19H10V20H9V19ZM9 19H8V18H9V19Z" fill="black" fill-opacity="0.5"/>' }), EggPart({ name: 'smile', svg: '<path class="eo" d="M15 17H14V18H10V19H14V18H15V17Z" fill="black"/>' }), EggPart({ name: 'ooo', svg: '<rect x="11" y="18" width="1" height="1" fill="black"/>' }), EggPart({ name: 'egg', svg: '<path d="M10 18H13V20H10V18Z" fill="black"/>' }), EggPart({ name: 'cap', svg: string(abi.encodePacked('<path class="eo" d="M13 10H15V11H16V12H17V14H14H6V13H8V12V11H9V10H13Z" fill="#', getFill(fillIndex),'"/><rect x="6" y="13" width="8" height="1" fill="white" fill-opacity="0.4"/><path class="eo" d="M15 10H13V11H14V12V14H17V12H16V11H15V10Z" fill="black" fill-opacity="0.19"/>')) }), EggPart({ name: 'regular', svg: '<path class="eo" d="M11 15H10V17H11V15ZM14 15H13V17H14V15Z" fill="white"/><path class="eo" d="M10 15H9V17H10V15ZM13 15H12V17H13V15Z" fill="black"/><path class="eo" d="M11 15H9V16H11V15ZM14 15H12V16H14V15Z" fill="black" fill-opacity="0.15"/>' }), EggPart({ name: 'high-af', svg: '<path class="eo" d="M11 16H10V17H11V16ZM14 16H13V17H14V16Z" fill="#FF0000"/><path class="eo" d="M10 16H9V17H10V16ZM13 16H12V17H13V16Z" fill="black"/>' }), EggPart({ name: 'sunglasses', svg: '<path class="eo" d="M9 15H11H12H14V17H12V16H11V17H9V15Z" fill="#000000"/>' }), EggPart({ name: 'bathing-ring', svg: string(abi.encodePacked('<path class="eo" d="M5 16H6V17H7V18V19H8V20H16V19H17V20V21H16V22H14V23H10V22H8V21H7V20H6V19H5V18V17V16Z" fill="#', getFill(fillIndex), '"/><rect x="4" y="18" width="1" height="1" fill="black"/><path class="eo" d="M6 17H5V18H6V17ZM15 20H9V21H15V20Z" fill="white" fill-opacity="0.5"/><path class="eo" d="M7 20H8V21H7V20ZM10 22V21H8V22H10ZM14 22V23H10V22H14ZM16 21V22H14V21H16ZM16 21H17V20H16V21Z" fill="black" fill-opacity="0.36"/>')) }), EggPart({ name: 'cigarette', svg: '<rect x="7" y="18" width="4" height="1" fill="#F0F0F0"/><rect x="7" y="18" width="1" height="1" fill="#FFA800"/><path class="eo" d="M6 12H5V16H6V12ZM7 17H6V18H7V17Z" fill="#C4C4C4" fill-opacity="0.5"/>' }), EggPart({ name: 'earring', svg: string(abi.encodePacked('<rect x="16" y="16" width="1" height="1" fill="#', getFill(fillIndex), '"/><path class="eo" d="M17 15H16V16H15V17H16V18H17V17H18V16H17V15ZM17 16V17H16V16H17Z" fill="black"/>')) }), EggPart({ name: 'easter-egg', svg: '<path class="eo" d="M15 16H16V17H15V16ZM15 20H14V18V17H15V18V20ZM18 20V21H15V20H18ZM18 18V20H19V18V17H18V16H17V17H18V18Z" fill="#3E62FE"/><path class="eo" d="M16 15H17V17H18V20H17H16H15V17H16V15Z" fill="#113EFF"/><rect x="15" y="17" width="3" height="1" fill="#FB512A"/><path class="eo" d="M14 18H15V19H14V18ZM18 19V20H15V19H18ZM18 19H19V18H18V19Z" fill="#F1FF0E"/><path class="eo" d="M16 17H15V18H16V17ZM18 17H17V18H18V17ZM15 19H16V20H15V19ZM18 19H17V20H18V19Z" fill="black" fill-opacity="0.18"/><path class="eo" d="M17 15H16V16H17V15ZM15 17H14V20H15V21H18V20H19V17H18V20H15V17Z" fill="black" fill-opacity="0.35"/>' }), EggPart({ name: 'jindujun', svg: '<path class="eo" d="M13 19H16V20H17V22V23H16V24H14H12H10H9H7V23H6V20H7H8H9V19H10V20H12H13V19Z" fill="white"/><path class="eo" d="M9 19H10V20H9V19ZM7 21H8V20H9V21V22H7V21ZM7 21H6V20H7V21ZM14 19H13V20H14V19ZM14 22V23H12V22V21H13V22H14ZM12 21H11V20H12V21ZM16 23H15V24H16V23ZM16 21H17V22H16V21ZM10 24V23H8V24H10Z" fill="black" fill-opacity="0.11"/><path class="eo" d="M9 20H10V21H9V20ZM16 21H15V22H16V23H13V24H16V23H17V22H16V21ZM10 23H12V24H10V23ZM7 21H6V22H7V21ZM9 22H8V23H9V22Z" fill="black" fill-opacity="0.3"/>' }), EggPart({ name: 'knife', svg: '<rect x="6" y="19" width="3" height="1" fill="#FFE794"/><path class="eo" d="M6 19H2V20H3V21H6V20V19Z" fill="#EDEDED"/><rect x="3" y="20" width="3" height="1" fill="black" fill-opacity="0.13"/><rect x="3" y="20" width="1" height="1" fill="white" fill-opacity="0.38"/>' }), EggPart({ name: 'lollipop', svg: string(abi.encodePacked('<rect x="5" y="15" width="1" height="6" fill="white"/><path class="eo" d="M4 10H7V11H8V14H7V15H4V14H3V11H4V10Z" fill="#', getFill(fillIndex), '"/><path d="M4 11H7V12H4V11Z" fill="white" fill-opacity="0.58"/><path class="eo" d="M7 12H6V13H5V14H6H7V12Z" fill="white" fill-opacity="0.39"/><path class="eo" d="M7 10H6V11H7V12H8V11H7V10ZM7 13H8V14H7V13ZM6 15H7V14H6V15ZM5 15V16H6V15H5ZM4 14H5V15H4V14ZM4 14H3V13H4V14ZM3 11H4V12H3V11ZM4 11V10H5V11H4Z" fill="black" fill-opacity="0.15"/>')) }), EggPart({ name: 'chikin', svg: string(abi.encodePacked('<path class="eo" d="M14 17H15V18H14V17ZM16 20H17V21H16V20Z" fill="#FFC107"/><rect width="1" height="1" transform="matrix(-1 0 0 1 16 16)" fill="#', getFill(fillIndex), '"/><path class="eo" d="M19 17H18V18H19V17ZM16 18H17H18V19V20H15V19V18V17H16V18Z" fill="white"/><path class="eo" d="M18 17H19V18H18V19H16V18H18V17Z" fill="black" fill-opacity="0.06"/>')) }), EggPart({ name: 'pills', svg: '<path class="eo" d="M15 18H14V21H15H16V18H15Z" fill="#FF0000"/><path class="eo" d="M19 19H16V20V21H19V20V19Z" fill="#00FFFF"/><path class="eo" d="M16 18H15V21H16H19V20H16V18Z" fill="black" fill-opacity="0.28"/><path class="eo" d="M15 18H14V19H15V18ZM19 19H18V20H19V19Z" fill="white" fill-opacity="0.71"/>' }), EggPart({ name: 'rune-scimitar', svg: '<path class="eo" d="M8 18H9V19H10V20V21H9H8V20H7V19H8V18Z" fill="#EDC715"/><path class="eo" d="M5 12H6V13V14V15H7V17H8V18V19H7H6V18H5V17H4V16H3V14H4V13H5V12Z" fill="#3F7DA4"/><path class="eo" d="M3 14H4V16H3V14ZM5 17H4V16H5V17ZM6 18H5V17H6V18ZM6 18H7V19H6V18ZM9 19H8V20H9V19Z" fill="black" fill-opacity="0.23"/><path class="eo" d="M5 12H6V13H5V12ZM5 13V14H4V13H5ZM9 18H8V19H7V20H8V19H9V20H10V19H9V18Z" fill="white" fill-opacity="0.38"/>' }) ][attrIndex]; return part; } function eggsists ( uint8[6] memory attributes, uint8[6] memory fillIndexes ) public view returns (bool) { return eggs[idEgg(attributes, fillIndexes)]; } function idEgg ( uint8[6] memory attributes, uint8[6] memory fillIndexes ) private pure returns (bytes32) { bytes memory temp; for (uint8 i = 0; i < attributes.length; i++) { temp = [false,true,false,false,false,false,false,false,true,false,false,false,true,false,true,false,false,false,true,true,false,false][attributes[i]] ? abi.encodePacked(temp, attributes[i], fillIndexes[i]) : abi.encodePacked(temp, attributes[i]); } return keccak256(temp); } function createEgg ( uint8[6] memory attributes, uint8[6] memory fillIndexes ) private pure returns (Egg memory) { Egg memory egg; EggPart[6] memory parts = [ getPart(CAT_BODY, attributes[0], fillIndexes[0]), getPart(CAT_MOUTH, attributes[1], fillIndexes[1]), getPart(CAT_HAIR, attributes[2], fillIndexes[2]), getPart(CAT_EYES, attributes[3], fillIndexes[3]), getPart(CAT_GLASSES, attributes[4], fillIndexes[4]), getPart(CAT_ACCESSORY, attributes[5], fillIndexes[5]) ]; egg.svgBody = string( abi.encodePacked( // border & inside '<g class="border"><path class="eo" d="M14 10H10V11H9V12H8V14H7V19H8V20H9V21H15V20H16V19H17V14H16V12H15V11H14V10ZM14 11V12H15V14H16V19H15V20H9V19H8V14H9V12H10V11H14Z" fill="black"/></g>', '<g class="inside"><path class="eo" d="M14 14H13V15H11V16H13V15H14V14Z" fill="#F2BC2F"/><path class="eo" d="M11 13H12H13V14H12H11V13ZM11 14V15H10V14H11Z" fill="#FFE76B"/><rect x="11" y="14" width="2" height="1" fill="#FFD600"/></g>', abi.encodePacked( '<g class="body" id="a', Strings.toString(attributes[CAT_BODY]), '">', parts[CAT_BODY].svg, '</g>', '<g class="mouth" id="a', Strings.toString(attributes[CAT_MOUTH]), '">', parts[CAT_MOUTH].svg, '</g>', '<g class="hair" id="a', Strings.toString(attributes[CAT_HAIR]), '">', parts[CAT_HAIR].svg, '</g>' ), abi.encodePacked( '<g class="eyes" id="a', Strings.toString(attributes[CAT_EYES]), '">', parts[CAT_EYES].svg, '</g>', '<g class="glasses" id="a', Strings.toString(attributes[CAT_GLASSES]), '">', parts[CAT_GLASSES].svg, '</g>' '<g class="accessory" id="a', Strings.toString(attributes[CAT_ACCESSORY]), '">', parts[CAT_ACCESSORY].svg, '</g>' ) ) ); egg.jsonBody = string(abi.encodePacked( '{ "trait_type": "body", "value": "', parts[CAT_BODY].name,'" },' '{ "trait_type": "mouth", "value": "', parts[CAT_MOUTH].name,'" },' '{ "trait_type": "hair", "value": "', parts[CAT_HAIR].name,'" },' '{ "trait_type": "eyes", "value": "', parts[CAT_EYES].name,'" },' '{ "trait_type": "glasses", "value": "', parts[CAT_GLASSES].name,'" },' '{ "trait_type": "accessory", "value": "', parts[CAT_ACCESSORY].name,'" }' )); return egg; } function setMaxEggs (uint newMaxEggs) public onlyOwner { maxEggs = newMaxEggs; } function setPrice (uint newPrice) public onlyOwner { price = newPrice; } function setPaused (bool newState) public onlyOwner { paused = newState; } function setSingleMint (bool newState) public onlyOwner { singleMint = newState; } function withdraw(uint256 amount) public onlyOwner { (bool success, ) = msg.sender.call { value: amount }(""); require(success, "NOT_ENOUGH_FUNDS"); } function eggIt ( uint8[6] memory attributes, uint8[6] memory fillIndexes ) public payable nonReentrant { bytes32 eggId = idEgg(attributes, fillIndexes); require(!eggs[eggId], "NON_UNIQUE_EGG"); if (msg.sender != owner()) { require(eggCount < maxEggs, "OUT_OF_EGGS"); require(msg.value >= price, "NOT_ENOUGH_FUNDS"); require(!paused, "WERE_CLOSED"); if (singleMint == true) { require(!hasEgg[msg.sender], "FBI_OPEN_UP_ONE_EGG"); } } uint newTokenId = eggCount; Egg memory newEgg = createEgg(attributes, fillIndexes); string memory image = string( abi.encodePacked("data:image/svg+xml;base64,", Base64.encode(bytes( abi.encodePacked( '<svg width="100%" height="100%" viewBox="0 0 24 24" id="egg" fill="none" xmlns="http://www.w3.org/2000/svg">', '<style>.eo{fill-rule:evenodd;clip-rule:evenodd;}#egg{transform-origin:center center;shape-rendering:crispEdges;}#egg:active{transform:scaleX(-1);}</style>', newEgg.svgBody, '</svg>' ) )) )); string memory encodedMetaData = Base64.encode(bytes(string(abi.encodePacked( '{', '"name": "EGG #', Strings.toString(newTokenId), '",', '"description": "', 'Mint Your EGG','",', '"image":', '"', image, '",', '"attributes":', '[', newEgg.jsonBody, ']', '}' )))); string memory tokenUri = string(abi.encodePacked( "data:application/json;base64,", encodedMetaData )); _safeMint(msg.sender, newTokenId); _setTokenURI(newTokenId, tokenUri); eggs[eggId] = true; eggCount++; hasEgg[msg.sender] = true; emit MintEgg(msg.sender, newTokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"ticker","type":"string"},{"internalType":"uint256","name":"maxMints","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":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"MintEgg","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":"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":"eggCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[6]","name":"attributes","type":"uint8[6]"},{"internalType":"uint8[6]","name":"fillIndexes","type":"uint8[6]"}],"name":"eggIt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8[6]","name":"attributes","type":"uint8[6]"},{"internalType":"uint8[6]","name":"fillIndexes","type":"uint8[6]"}],"name":"eggsists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxEggs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","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":"uint256","name":"newMaxEggs","type":"uint256"}],"name":"setMaxEggs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setSingleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600e819055600f805461ffff19166101011790556012553480156200002a57600080fd5b506040516200605b3803806200605b8339810160408190526200004d9162000273565b8251839083906200006690600090602085019062000100565b5080516200007c90600190602084019062000100565b5050506200009962000093620000aa60201b60201c565b620000ae565b6001600c55600d5550620003239050565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010e90620002e6565b90600052602060002090601f0160209004810192826200013257600085556200017d565b82601f106200014d57805160ff19168380011785556200017d565b828001600101855582156200017d579182015b828111156200017d57825182559160200191906001019062000160565b506200018b9291506200018f565b5090565b5b808211156200018b576000815560010162000190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001ce57600080fd5b81516001600160401b0380821115620001eb57620001eb620001a6565b604051601f8301601f19908116603f01168101908282118183101715620002165762000216620001a6565b816040528381526020925086838588010111156200023357600080fd5b600091505b8382101562000257578582018301518183018401529082019062000238565b83821115620002695760008385830101525b9695505050505050565b6000806000606084860312156200028957600080fd5b83516001600160401b0380821115620002a157600080fd5b620002af87838801620001bc565b94506020860151915080821115620002c657600080fd5b50620002d586828701620001bc565b925050604084015190509250925092565b600181811c90821680620002fb57607f821691505b602082108114156200031d57634e487b7160e01b600052602260045260246000fd5b50919050565b615d2880620003336000396000f3fe6080604052600436106101d85760003560e01c80635c975abb1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610527578063d0be191b14610547578063e985e9c514610567578063f2fde38b146105b057600080fd5b806395d89b41146104bc578063a035b1fe146104d1578063a22cb465146104e7578063b88d4fde1461050757600080fd5b8063715018a6116100d1578063715018a61461044a5780638a4e6f2a1461045f5780638da5cb5b1461047e57806391b7f5ed1461049c57600080fd5b80635c975abb146103d05780635c9af1a2146103ea5780636352211e1461040a57806370a082311461042a57600080fd5b806318160ddd1161017a5780632f745c59116101495780632f745c591461035d57806342842e0e1461037d5780634f6ccce71461039d57806355859a73146103bd57600080fd5b806318160ddd146102f257806323b872dd146103075780632e1a7d4d146103275780632e60bdca1461034757600080fd5b8063081812fc116101b6578063081812fc14610254578063095ea7b31461028c5780630ff52032146102ae57806316c38b3c146102d257600080fd5b806301ffc9a7146101dd5780630570a2941461021257806306fdde0314610232575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612f11565b6105d0565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506101fd61022d366004612ff3565b6105e1565b34801561023e57600080fd5b5061024761060c565b6040516102099190613081565b34801561026057600080fd5b5061027461026f366004613094565b61069e565b6040516001600160a01b039091168152602001610209565b34801561029857600080fd5b506102ac6102a73660046130c9565b61072b565b005b3480156102ba57600080fd5b506102c4600d5481565b604051908152602001610209565b3480156102de57600080fd5b506102ac6102ed366004613103565b610841565b3480156102fe57600080fd5b506008546102c4565b34801561031357600080fd5b506102ac61032236600461311e565b61087e565b34801561033357600080fd5b506102ac610342366004613094565b6108af565b34801561035357600080fd5b506102c460125481565b34801561036957600080fd5b506102c46103783660046130c9565b610968565b34801561038957600080fd5b506102ac61039836600461311e565b6109fe565b3480156103a957600080fd5b506102c46103b8366004613094565b610a19565b6102ac6103cb366004612ff3565b610aac565b3480156103dc57600080fd5b50600f546101fd9060ff1681565b3480156103f657600080fd5b506102ac610405366004613103565b610df7565b34801561041657600080fd5b50610274610425366004613094565b610e3b565b34801561043657600080fd5b506102c461044536600461315a565b610eb2565b34801561045657600080fd5b506102ac610f39565b34801561046b57600080fd5b50600f546101fd90610100900460ff1681565b34801561048a57600080fd5b50600b546001600160a01b0316610274565b3480156104a857600080fd5b506102ac6104b7366004613094565b610f6f565b3480156104c857600080fd5b50610247610f9e565b3480156104dd57600080fd5b506102c4600e5481565b3480156104f357600080fd5b506102ac610502366004613175565b610fad565b34801561051357600080fd5b506102ac61052236600461319f565b610fb8565b34801561053357600080fd5b50610247610542366004613094565b610ff0565b34801561055357600080fd5b506102ac610562366004613094565b610ffb565b34801561057357600080fd5b506101fd61058236600461325f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105bc57600080fd5b506102ac6105cb36600461315a565b61102a565b60006105db826110c5565b92915050565b6000601060006105f185856110ea565b815260208101919091526040016000205460ff169392505050565b60606000805461061b90613289565b80601f016020809104026020016040519081016040528092919081815260200182805461064790613289565b80156106945780601f1061066957610100808354040283529160200191610694565b820191906000526020600020905b81548152906001019060200180831161067757829003601f168201915b5050505050905090565b60006106a9826112a2565b61070f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061073682610e3b565b9050806001600160a01b0316836001600160a01b031614156107a45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610706565b336001600160a01b03821614806107c057506107c08133610582565b6108325760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610706565b61083c83836112bf565b505050565b600b546001600160a01b0316331461086b5760405162461bcd60e51b8152600401610706906132c4565b600f805460ff1916911515919091179055565b610888338261132d565b6108a45760405162461bcd60e51b8152600401610706906132f9565b61083c838383611417565b600b546001600160a01b031633146108d95760405162461bcd60e51b8152600401610706906132c4565b604051600090339083908381818185875af1925050503d806000811461091b576040519150601f19603f3d011682016040523d82523d6000602084013e610920565b606091505b50509050806109645760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454e4f5547485f46554e445360801b6044820152606401610706565b5050565b600061097383610eb2565b82106109d55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610706565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61083c83838360405180602001604052806000815250610fb8565b6000610a2460085490565b8210610a875760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610706565b60088281548110610a9a57610a9a61334a565b90600052602060002001549050919050565b6002600c541415610aff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610706565b6002600c556000610b1083836110ea565b60008181526010602052604090205490915060ff1615610b635760405162461bcd60e51b815260206004820152600e60248201526d4e4f4e5f554e495155455f45474760901b6044820152606401610706565b600b546001600160a01b03163314610ca857600d5460125410610bb65760405162461bcd60e51b815260206004820152600b60248201526a4f55545f4f465f4547475360a81b6044820152606401610706565b600e54341015610bfb5760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454e4f5547485f46554e445360801b6044820152606401610706565b600f5460ff1615610c3c5760405162461bcd60e51b815260206004820152600b60248201526a15d1549157d0d313d4d15160aa1b6044820152606401610706565b600f5460ff61010090910416151560011415610ca8573360009081526011602052604090205460ff1615610ca85760405162461bcd60e51b81526020600482015260136024820152724642495f4f50454e5f55505f4f4e455f45474760681b6044820152606401610706565b6012546000610cb785856115c2565b90506000610ce78260000151604051602001610cd3919061337c565b6040516020818303038152906040526117db565b604051602001610cf791906134f2565b60405160208183030381529060405290506000610d2e610d1685611941565b838560200151604051602001610cd393929190613537565b9050600081604051602001610d439190613655565b6040516020818303038152906040529050610d5e3386611a3f565b610d688582611a59565b6000868152601060205260408120805460ff191660011790556012805491610d8f836136b0565b90915550503360008181526011602052604090819020805460ff19166001179055517fb79703dd766ff483032ccf651a590cf0ae41afe5492c14f156fd223eddae68c090610de09088815260200190565b60405180910390a250506001600c55505050505050565b600b546001600160a01b03163314610e215760405162461bcd60e51b8152600401610706906132c4565b600f80549115156101000261ff0019909216919091179055565b6000818152600260205260408120546001600160a01b0316806105db5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610706565b60006001600160a01b038216610f1d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610706565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610f635760405162461bcd60e51b8152600401610706906132c4565b610f6d6000611ae4565b565b600b546001600160a01b03163314610f995760405162461bcd60e51b8152600401610706906132c4565b600e55565b60606001805461061b90613289565b610964338383611b36565b610fc2338361132d565b610fde5760405162461bcd60e51b8152600401610706906132f9565b610fea84848484611c05565b50505050565b60606105db82611c38565b600b546001600160a01b031633146110255760405162461bcd60e51b8152600401610706906132c4565b600d55565b600b546001600160a01b031633146110545760405162461bcd60e51b8152600401610706906132c4565b6001600160a01b0381166110b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610706565b6110c281611ae4565b50565b60006001600160e01b0319821663780e9d6360e01b14806105db57506105db82611da7565b6000606060005b60068160ff16101561129257604080516102c0810182526000808252600160208301819052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820183905261012082018190526101408201819052610160820181905261018082018390526101a082018190526101c082018390526101e0820181905261020082018190526102208201819052610240820183905261026082019290925261028081018290526102a08101919091528560ff8316600681106111c6576111c661334a565b602002015160ff16601681106111de576111de61334a565b60200201516112275781858260ff16600681106111fd576111fd61334a565b60200201516040516020016112139291906136cb565b60405160208183030381529060405261127e565b81858260ff166006811061123d5761123d61334a565b6020020151858360ff16600681106112575761125761334a565b602002015160405160200161126e939291906136fd565b6040516020818303038152906040525b91508061128a81613739565b9150506110f1565b5080516020909101209392505050565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112f482610e3b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611338826112a2565b6113995760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610706565b60006113a483610e3b565b9050806001600160a01b0316846001600160a01b031614806113df5750836001600160a01b03166113d48461069e565b6001600160a01b0316145b8061140f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661142a82610e3b565b6001600160a01b0316146114925760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610706565b6001600160a01b0382166114f45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610706565b6114ff838383611df7565b61150a6000826112bf565b6001600160a01b0383166000908152600360205260408120805460019290611533908490613759565b90915550506001600160a01b0382166000908152600360205260408120805460019290611561908490613770565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040805180820190915260608082526020820152604080518082019091526060808252602082015260006040518060c0016040528061162260008860006006811061160f5761160f61334a565b60200201518860005b6020020151611e02565b815260200161163b600188816020020151886001611618565b8152602001611654600288816020020151886002611618565b815260200161166d600388816020020151886003611618565b8152602001611686600488816020020151886004611618565b815260200161169f600588816020020151886005611618565b905290506116b78560005b602002015160ff16611941565b8151516116c58760016116aa565b6020840151516116d68960026116aa565b6040808701515190516116f196959493929190602001613788565b60408051601f1981840301815291905261170c8660036116aa565b60608301515161171d8860046116aa565b60808501515161172e8a60056116aa565b60a087015151604051611749969594939291906020016138bd565b60408051601f198184030181529082905261176792916020016139cc565b60408051808303601f19018152918152908352815160209081015181840151820151848401518301516060860151840151608087015185015160a088015186015196516117be979596949593949293919201613be4565b60408051808303601f190181529190526020830152509392505050565b8051606090806117fb575050604080516020810190915260008152919050565b6000600361180a836002613770565b6118149190613db7565b61181f906004613dcb565b9050600061182e826020613770565b67ffffffffffffffff81111561184657611846612f2e565b6040519080825280601f01601f191660200182016040528015611870576020820181803683370190505b5090506000604051806060016040528060408152602001614e1f604091399050600181016020830160005b868110156118fc576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161189b565b506003860660018114611916576002811461192757611933565b613d3d60f01b600119830152611933565b603d60f81b6000198301525b505050918152949350505050565b6060816119655750506040805180820190915260018152600360fc1b602082015290565b8160005b811561198f5780611979816136b0565b91506119889050600a83613db7565b9150611969565b60008167ffffffffffffffff8111156119aa576119aa612f2e565b6040519080825280601f01601f1916602001820160405280156119d4576020820181803683370190505b5090505b841561140f576119e9600183613759565b91506119f6600a86613dea565b611a01906030613770565b60f81b818381518110611a1657611a1661334a565b60200101906001600160f81b031916908160001a905350611a38600a86613db7565b94506119d8565b61096482826040518060200160405280600081525061274a565b611a62826112a2565b611ac55760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610706565b6000828152600a60209081526040909120825161083c92840190612e62565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611b985760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610706565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c10848484611417565b611c1c8484848461277d565b610fea5760405162461bcd60e51b815260040161070690613dfe565b6060611c43826112a2565b611ca95760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610706565b6000828152600a602052604081208054611cc290613289565b80601f0160208091040260200160405190810160405280929190818152602001828054611cee90613289565b8015611d3b5780601f10611d1057610100808354040283529160200191611d3b565b820191906000526020600020905b815481529060010190602001808311611d1e57829003601f168201915b505050505090506000611d5960408051602081019091526000815290565b9050805160001415611d6c575092915050565b815115611d9e578082604051602001611d86929190613e50565b60405160208183030381529060405292505050919050565b61140f8461288a565b60006001600160e01b031982166380ac58cd60e01b1480611dd857506001600160e01b03198216635b5e139f60e01b145b806105db57506301ffc9a760e01b6001600160e01b03198316146105db565b61083c838383612962565b60408051808201909152606080825260208201526040805160c08101825260048152600360208201526001918101829052600260608201526080810191909152600b60a082015260009060ff861660068110611e6057611e6061334a565b602090810291909101516040805160c0810182526001815260059381019390935260089083015260096060830152600b6080830152600c60a0830152915060009060ff871660068110611eb557611eb561334a565b602090810291909101516040805160c08101825260008082526001948201859052918101849052606081018290526080810184905260a08101939093529092509060ff881660068110611f0a57611f0a61334a565b6020020151905060ff8616611f595780611f545760405162461bcd60e51b815260206004820152600b60248201526a4547475f42524f4b455f3160a81b6044820152606401610706565b611fb7565b8160ff168660ff1610158015611f7d5750611f748383613e7f565b60ff168660ff16105b611fb75760405162461bcd60e51b815260206004820152600b60248201526a22a3a3afa12927a5a2af9960a91b6044820152606401610706565b6000604051806102c001604052806040518060400160405280604051806020016040528060008152508152602001604051806040016040528060048152602001636e6f6e6560e01b8152508152508152602001604051806040016040528061201e8a612a1a565b60405160200161202e9190613ea4565b6040516020818303038152906040528152602001604051806040016040528060078152602001663932b3bab630b960c91b8152508152508152602001604051806040016040528060405180610120016040528060ff81526020016158d660ff913981526020016040518060400160405280600b81526020016a1d1c985b9cdc185c995b9d60aa1b81525081525081526020016040518060400160405280604051806103a0016040528061037c815260200161505661037c91398152602001604051806040016040528060078152602001667261696e626f7760c81b8152508152508152602001604051806040016040528060405180610340016040528061031e81526020016159d561031e91398152602001604051806040016040528060078152602001660cacecee8e4d2f60cb1b8152508152508152602001604051806040016040528060405180608001604052806043815260200161501360439139815260200160405180604001604052806005815260200164736d696c6560d81b815250815250815260200160405180604001604052806040518060600160405280603781526020016156a1603791398152602001604051806040016040528060038152602001626f6f6f60e81b815250815250815260200160405180604001604052806040518060600160405280602c8152602001614a53602c913981526020016040518060400160405280600381526020016265676760e81b815250815250815260200160405180604001604052806122658a612a1a565b60405160200161227591906140c8565b60405160208183030381529060405281526020016040518060400160405280600381526020016206361760ec1b8152508152508152602001604051806040016040528060405180610120016040528060f08152602001614d2f60f091398152602001604051806040016040528060078152602001663932b3bab630b960c91b815250815250815260200160405180604001604052806040518060c001604052806095815260200161560c609591398152602001604051806040016040528060078152602001663434b3b416b0b360c91b81525081525081526020016040518060400160405280604051806080016040528060498152602001614ce66049913981526020016040518060400160405280600a81526020016973756e676c617373657360b01b815250815250815260200160405180604001604052806123b88a612a1a565b6040516020016123c8919061421e565b60405160208183030381529060405281526020016040518060400160405280600c81526020016b62617468696e672d72696e6760a01b8152508152508152602001604051806040016040528060405180610100016040528060c9815260200161498a60c9913981526020016040518060400160405280600981526020016863696761726574746560b81b815250815250815260200160405180604001604052806124718a612a1a565b6040516020016124819190614433565b60405160208183030381529060405281526020016040518060400160405280600781526020016665617272696e6760c81b81525081525081526020016040518060400160405280604051806102a001604052806102678152602001614a7f610267913981526020016040518060400160405280600a8152602001696561737465722d65676760b01b815250815250815260200160405180604001604052806040518061022001604052806101fe81526020016156d86101fe91398152602001604051806040016040528060088152602001673534b7323ab53ab760c11b8152508152508152602001604051806040016040528060405180610140016040528061010a815260200161550261010a91398152602001604051806040016040528060058152602001646b6e69666560d81b815250815250815260200160405180604001604052806125cf8a612a1a565b6040516020016125df9190614512565b60405160208183030381529060405281526020016040518060400160405280600881526020016706c6f6c6c69706f760c41b815250815250815260200160405180604001604052806126308a612a1a565b6040516020016126409190614767565b60405160208183030381529060405281526020016040518060400160405280600681526020016531b434b5b4b760d11b8152508152508152602001604051806040016040528060405180610160016040528061013081526020016153d2610130913981526020016040518060400160405280600581526020016470696c6c7360d81b81525081525081526020016040518060400160405280604051806101e001604052806101b48152602001614e5f6101b4913981526020016040518060400160405280600d81526020016c393ab73296b9b1b4b6b4ba30b960991b8152508152508152508760ff16601681106127395761273961334a565b602002015198975050505050505050565b6127548383612b93565b612761600084848461277d565b61083c5760405162461bcd60e51b815260040161070690613dfe565b60006001600160a01b0384163b1561287f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127c1903390899088908890600401614919565b602060405180830381600087803b1580156127db57600080fd5b505af192505050801561280b575060408051601f3d908101601f1916820190925261280891810190614956565b60015b612865573d808015612839576040519150601f19603f3d011682016040523d82523d6000602084013e61283e565b606091505b50805161285d5760405162461bcd60e51b815260040161070690613dfe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061140f565b506001949350505050565b6060612895826112a2565b6128f95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610706565b600061291060408051602081019091526000815290565b90506000815111612930576040518060200160405280600081525061295b565b8061293a84611941565b60405160200161294b929190613e50565b6040516020818303038152906040525b9392505050565b6001600160a01b0383166129bd576129b881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6129e0565b816001600160a01b0316836001600160a01b0316146129e0576129e08382612cd2565b6001600160a01b0382166129f75761083c81612d6f565b826001600160a01b0316826001600160a01b03161461083c5761083c8282612e1e565b604080516101a081018252600661016082018181526504646303030360d41b6101808401528252825180840184528181526504646383830360d41b60208281019190915280840191909152835180850185528281526504646464630360d41b8183015283850152835180850185528281526503030464630360d41b81830152606084810191909152845180860186528381526518182323232360d11b818401526080850152845180860186528381526523231818232360d11b8184015260a0850152845180860186528381526518181818232360d11b8184015260c08501528451808601865283815265231ca29c21a360d11b8184015260e0850152845180860186528381526543454142393760d01b81840152610100850152845180860186528381526544314431443160d01b8184015261012085015284518086019095529184526533393339333960d01b9084015261014082019290925260ff8316600b8110612b8857612b8861334a565b602002015192915050565b6001600160a01b038216612be95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610706565b612bf2816112a2565b15612c3f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610706565b612c4b60008383611df7565b6001600160a01b0382166000908152600360205260408120805460019290612c74908490613770565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612cdf84610eb2565b612ce99190613759565b600083815260076020526040902054909150808214612d3c576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612d8190600190613759565b60008381526009602052604081205460088054939450909284908110612da957612da961334a565b906000526020600020015490508060088381548110612dca57612dca61334a565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612e0257612e02614973565b6001900381819060005260206000200160009055905550505050565b6000612e2983610eb2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612e6e90613289565b90600052602060002090601f016020900481019282612e905760008555612ed6565b82601f10612ea957805160ff1916838001178555612ed6565b82800160010185558215612ed6579182015b82811115612ed6578251825591602001919060010190612ebb565b50612ee2929150612ee6565b5090565b5b80821115612ee25760008155600101612ee7565b6001600160e01b0319811681146110c257600080fd5b600060208284031215612f2357600080fd5b813561295b81612efb565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f6d57612f6d612f2e565b604052919050565b600082601f830112612f8657600080fd5b60405160c0810181811067ffffffffffffffff82111715612fa957612fa9612f2e565b6040528060c0840185811115612fbe57600080fd5b845b81811015612fe857803560ff81168114612fda5760008081fd5b835260209283019201612fc0565b509195945050505050565b600080610180838503121561300757600080fd5b6130118484612f75565b91506130208460c08501612f75565b90509250929050565b60005b8381101561304457818101518382015260200161302c565b83811115610fea5750506000910152565b6000815180845261306d816020860160208601613029565b601f01601f19169290920160200192915050565b60208152600061295b6020830184613055565b6000602082840312156130a657600080fd5b5035919050565b80356001600160a01b03811681146130c457600080fd5b919050565b600080604083850312156130dc57600080fd5b6130e5836130ad565b946020939093013593505050565b803580151581146130c457600080fd5b60006020828403121561311557600080fd5b61295b826130f3565b60008060006060848603121561313357600080fd5b61313c846130ad565b925061314a602085016130ad565b9150604084013590509250925092565b60006020828403121561316c57600080fd5b61295b826130ad565b6000806040838503121561318857600080fd5b613191836130ad565b9150613020602084016130f3565b600080600080608085870312156131b557600080fd5b6131be856130ad565b935060206131cd8187016130ad565b935060408601359250606086013567ffffffffffffffff808211156131f157600080fd5b818801915088601f83011261320557600080fd5b81358181111561321757613217612f2e565b613229601f8201601f19168501612f44565b9150808252898482850101111561323f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561327257600080fd5b61327b836130ad565b9150613020602084016130ad565b600181811c9082168061329d57607f821691505b602082108114156132be57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008151613372818560208601613029565b9290920192915050565b7f3c7376672077696474683d223130302522206865696768743d2231303025222081527f76696577426f783d22302030203234203234222069643d22656767222066696c60208201527f6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f7260408201526b33979918181817b9bb33911f60a11b60608201527f3c7374796c653e2e656f7b66696c6c2d72756c653a6576656e6f64643b636c69606c8201527f702d72756c653a6576656e6f64643b7d236567677b7472616e73666f726d2d6f608c8201527f726967696e3a63656e7465722063656e7465723b73686170652d72656e64657260ac8201527f696e673a637269737045646765733b7d236567673a6163746976657b7472616e60cc8201527f73666f726d3a7363616c6558282d31293b7d3c2f7374796c653e00000000000060ec820152600061010683516134d58183860160208801613029565b651e17b9bb339f60d11b9301908101929092525061010c01919050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081526000825161352a81601a850160208701613029565b91909101601a0192915050565b607b60f81b81526d226e616d65223a2022454747202360901b6001820152835160009061356b81600f850160208901613029565b61088b60f21b600f9184019182018190526f113232b9b1b934b83a34b7b7111d101160811b60118301526c4d696e7420596f75722045474760981b6021830152602e820152671134b6b0b3b2911d60c11b6030820152601160f91b603882015284516135de816039840160208901613029565b61364a61363d61363061362a61361d61360460398789010161088b60f21b815260020190565b6c1130ba3a3934b13aba32b9911d60991b8152600d0190565b605b60f81b815260010190565b88613360565b605d60f81b815260010190565b607d60f81b815260010190565b979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161368d81601d850160208701613029565b91909101601d0192915050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156136c4576136c461369a565b5060010190565b600083516136dd818460208801613029565b60f89390931b6001600160f81b0319169190920190815260010192915050565b6000845161370f818460208901613029565b6001600160f81b031960f895861b8116919093019081529290931b16600182015260020192915050565b600060ff821660ff8114156137505761375061369a565b60010192915050565b60008282101561376b5761376b61369a565b500390565b600082198211156137835761378361369a565b500190565b743c6720636c6173733d22626f6479222069643d226160581b815286516000906137b9816015850160208c01613029565b61111f60f11b601591840191820181905288516137dd816017850160208d01613029565b631e17b39f60e11b60179390910192830152753c6720636c6173733d226d6f757468222069643d226160501b601b8301528751613821816031850160208c01613029565b6031920191820152855161383c816033840160208a01613029565b6138af61389f61389961388b613885613864603387890101631e17b39f60e11b815260040190565b743c6720636c6173733d2268616972222069643d226160581b815260150190565b8a613360565b61111f60f11b815260020190565b87613360565b631e17b39f60e11b815260040190565b9a9950505050505050505050565b743c6720636c6173733d2265796573222069643d226160581b815286516000906138ee816015850160208c01613029565b61111f60f11b60159184019182018190528851613912816017850160208d01613029565b631e17b39f60e11b601793909101928301527f3c6720636c6173733d22676c6173736573222069643d22610000000000000000601b830152875161395d816033850160208c01613029565b60339201918201528551613978816035840160208a01613029565b7f3c2f673e3c6720636c6173733d226163636573736f7279222069643d22610000603592909101918201526139bf61389f6139b961388b6053850189613360565b86613360565b9998505050505050505050565b7f3c6720636c6173733d22626f72646572223e3c7061746820636c6173733d226581527f6f2220643d224d3134203130483130563131483956313248385631344837563160208201527f394838563230483956323148313556323048313656313948313756313448313660408201527f5631324831355631314831345631305a4d31342031315631324831355631344860608201527f313656313948313556323048395631394838563134483956313248313056313160808201527f4831345a222066696c6c3d22626c61636b222f3e3c2f673e000000000000000060a08201527f3c6720636c6173733d22696e73696465223e3c7061746820636c6173733d226560b88201527f6f2220643d224d3134203134483133563135483131563136483133563135483160d88201527f345631345a222066696c6c3d2223463242433246222f3e3c7061746820636c6160f88201527f73733d22656f2220643d224d31312031334831324831335631344831324831316101188201527f5631335a4d31312031345631354831305631344831315a222066696c6c3d22236101388201527f464645373642222f3e3c7265637420783d2231312220793d22313422207769646101588201527f74683d223222206865696768743d2231222066696c6c3d22234646443630302261017882015265179f1e17b39f60d11b610198820152600061140f613bde61019e840186613360565b84613360565b7f7b202274726169745f74797065223a2022626f6479222c202276616c7565223a815261101160f11b602082015260008751613c27816022850160208c01613029565b7f22207d2c7b202274726169745f74797065223a20226d6f757468222c2022766160229184019182015266363ab2911d101160c91b60428201528751613c74816049840160208c01613029565b7f22207d2c7b202274726169745f74797065223a202268616972222c202276616c60499290910191820152653ab2911d101160d11b60698201528651613cc181606f840160208b01613029565b6138af613d92613899613d55613885613d1a613d14606f888a01017f22207d2c7b202274726169745f74797065223a202265796573222c202276616c8152653ab2911d101160d11b602082015260260190565b8d613360565b7f22207d2c7b202274726169745f74797065223a2022676c6173736573222c20228152683b30b63ab2911d101160b91b602082015260290190565b7f22207d2c7b202274726169745f74797065223a20226163636573736f7279222c81526a10113b30b63ab2911d101160a91b6020820152602b0190565b6222207d60e81b815260030190565b634e487b7160e01b600052601260045260246000fd5b600082613dc657613dc6613da1565b500490565b6000816000190483118215151615613de557613de561369a565b500290565b600082613df957613df9613da1565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351613e62818460208801613029565b835190830190613e76818360208801613029565b01949350505050565b600060ff821660ff84168060ff03821115613e9c57613e9c61369a565b019392505050565b7f3c7061746820636c6173733d22656f2220643d224d313020313148313456313281527f483135563134483136563139483135563230483134483130483956313948385660208201527f313448395631324831305631315a222066696c6c3d2223000000000000000000604082015260008251613f28816057850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313320313148313460579390910192830152507f5631324831335631315a4d31342031324831355631334831345631325a4d313660778201527f2031344831355631354831365631345a4d31352031384831365631394831355660978201527f31385a4d31352031395632304831345631394831355a4d39203139483130563260b78201527f3048395631395a4d39203139483856313848395631395a222066696c6c3d226260d78201527f6c61636b222066696c6c2d6f7061636974793d22302e35222f3e3c706174682060f78201527f636c6173733d22656f2220643d224d31332031314831315631324831325631336101178201527f48313356313548313456313748313356313848313256313948313056323048316101378201527f32483135563139483136563135563134483135563133483134563132483133566101578201527f31315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22610177820152661817191c91179f60c91b61019782015261019e01919050565b7f3c7061746820636c6173733d22656f2220643d224d313320313048313556313181527f483136563132483137563134483134483656313348385631325631314839563160208201526d304831335a222066696c6c3d222360901b60408201526000825161413d81604e850160208701613029565b7f222f3e3c7265637420783d22362220793d223133222077696474683d22382220604e9390910192830152507f6865696768743d2231222066696c6c3d227768697465222066696c6c2d6f7061606e8201527f636974793d22302e34222f3e3c7061746820636c6173733d22656f2220643d22608e8201527f4d3135203130483133563131483134563132563134483137563132483136563160ae8201527f314831355631305a222066696c6c3d22626c61636b222066696c6c2d6f70616360ce8201526b34ba3c9e911817189c91179f60a11b60ee82015260fa01919050565b7f3c7061746820636c6173733d22656f2220643d224d352031364836563137483781527f563138563139483856323048313656313948313756323056323148313656323260208201527f483134563233483130563232483856323148375632304836563139483556313860408201526f5631375631365a222066696c6c3d222360801b6060820152600082516142bb816070850160208701613029565b7f222f3e3c7265637420783d22342220793d223138222077696474683d2231222060709390910192830152507f6865696768743d2231222066696c6c3d22626c61636b222f3e3c70617468206360908201527f6c6173733d22656f2220643d224d36203137483556313848365631375a4d313560b08201527f20323048395632314831355632305a222066696c6c3d2277686974652220666960d08201527f6c6c2d6f7061636974793d22302e35222f3e3c7061746820636c6173733d226560f08201527f6f2220643d224d37203230483856323148375632305a4d3130203232563231486101108201527f385632324831305a4d31342032325632334831305632324831345a4d313620326101308201527f315632324831345632314831365a4d31362032314831375632304831365632316101508201527f5a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e61017082015264199b11179f60d91b61019082015261019501919050565b7f3c7265637420783d2231362220793d223136222077696474683d22312220686581526f696768743d2231222066696c6c3d222360801b602082015260008251614484816030850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313720313548313660309390910192830152507f563136483135563137483136563138483137563137483138563136483137563160508201527f355a4d31372031365631374831365631364831375a222066696c6c3d22626c6160708201526431b591179f60d91b6090820152609501919050565b7f3c7265637420783d22352220793d223135222077696474683d2231222068656981527f6768743d2236222066696c6c3d227768697465222f3e3c7061746820636c617360208201527f733d22656f2220643d224d34203130483756313148385631344837563135483460408201527f563134483356313148345631305a222066696c6c3d22230000000000000000006060820152600082516145bc816077850160208701613029565b7f222f3e3c7061746820643d224d34203131483756313248345631315a2220666960779390910192830152507f6c6c3d227768697465222066696c6c2d6f7061636974793d22302e3538222f3e60978201527f3c7061746820636c6173733d22656f2220643d224d372031324836563133483560b78201527f563134483648375631325a222066696c6c3d227768697465222066696c6c2d6f60d78201527f7061636974793d22302e3339222f3e3c7061746820636c6173733d22656f222060f78201527f643d224d3720313048365631314837563132483856313148375631305a4d37206101178201527f3133483856313448375631335a4d36203135483756313448365631355a4d35206101378201527f3135563136483656313548355a4d34203134483556313548345631345a4d34206101578201527f3134483356313348345631345a4d33203131483456313248335631315a4d34206101778201527f3131563130483556313148345a222066696c6c3d22626c61636b222066696c6c6101978201527016b7b830b1b4ba3c9e911817189a91179f60791b6101b78201526101c801919050565b7f3c7061746820636c6173733d22656f2220643d224d313420313748313556313881527f4831345631375a4d31362032304831375632314831365632305a222066696c6c60208201527f3d2223464643313037222f3e3c726563742077696474683d223122206865696760408201527f68743d223122207472616e73666f726d3d226d6174726978282d3120302030206060820152703120313620313629222066696c6c3d222360781b60808201526000825161482b816091850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313920313748313860919390910192830152507f5631384831395631375a4d31362031384831374831385631395632304831355660b18201527f31395631385631374831365631385a222066696c6c3d227768697465222f3e3c60d18201527f7061746820636c6173733d22656f2220643d224d31382031374831395631384860f18201527f31385631394831365631384831385631375a222066696c6c3d22626c61636b2261011182015275103334b63616b7b830b1b4ba3c9e911817181b11179f60511b61013182015261014701919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061494c90830184613055565b9695505050505050565b60006020828403121561496857600080fd5b815161295b81612efb565b634e487b7160e01b600052603160045260246000fdfe3c7265637420783d22372220793d223138222077696474683d223422206865696768743d2231222066696c6c3d2223463046304630222f3e3c7265637420783d22372220793d223138222077696474683d223122206865696768743d2231222066696c6c3d2223464641383030222f3e3c7061746820636c6173733d22656f2220643d224d36203132483556313648365631325a4d37203137483656313848375631375a222066696c6c3d2223433443344334222066696c6c2d6f7061636974793d22302e35222f3e3c7061746820643d224d31302031384831335632304831305631385a222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d31352031364831365631374831355631365a4d31352032304831345631385631374831355631385632305a4d31382032305632314831355632304831385a4d31382031385632304831395631385631374831385631364831375631374831385631385a222066696c6c3d2223334536324645222f3e3c7061746820636c6173733d22656f2220643d224d31362031354831375631374831385632304831374831364831355631374831365631355a222066696c6c3d2223313133454646222f3e3c7265637420783d2231352220793d223137222077696474683d223322206865696768743d2231222066696c6c3d2223464235313241222f3e3c7061746820636c6173733d22656f2220643d224d31342031384831355631394831345631385a4d31382031395632304831355631394831385a4d31382031394831395631384831385631395a222066696c6c3d2223463146463045222f3e3c7061746820636c6173733d22656f2220643d224d31362031374831355631384831365631375a4d31382031374831375631384831385631375a4d31352031394831365632304831355631395a4d31382031394831375632304831385631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3138222f3e3c7061746820636c6173733d22656f2220643d224d31372031354831365631364831375631355a4d31352031374831345632304831355632314831385632304831395631374831385632304831355631375a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3335222f3e3c7061746820636c6173733d22656f2220643d224d3920313548313148313248313456313748313256313648313156313748395631355a222066696c6c3d2223303030303030222f3e3c7061746820636c6173733d22656f2220643d224d31312031354831305631374831315631355a4d31342031354831335631374831345631355a222066696c6c3d227768697465222f3e3c7061746820636c6173733d22656f2220643d224d313020313548395631374831305631355a4d31332031354831325631374831335631355a222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d313120313548395631364831315631355a4d31342031354831325631364831345631355a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3135222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7061746820636c6173733d22656f2220643d224d38203138483956313948313056323056323148394838563230483756313948385631385a222066696c6c3d2223454443373135222f3e3c7061746820636c6173733d22656f2220643d224d3520313248365631335631345631354837563137483856313856313948374836563138483556313748345631364833563134483456313348355631325a222066696c6c3d2223334637444134222f3e3c7061746820636c6173733d22656f2220643d224d33203134483456313648335631345a4d35203137483456313648355631375a4d36203138483556313748365631385a4d36203138483756313948365631385a4d39203139483856323048395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3233222f3e3c7061746820636c6173733d22656f2220643d224d35203132483656313348355631325a4d35203133563134483456313348355a4d39203138483856313948375632304838563139483956323048313056313948395631385a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3338222f3e3c7061746820636c6173733d22656f2220643d224d31352031374831345631384831305631394831345631384831355631375a222066696c6c3d22626c61636b222f3e3c7265637420783d2231302220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223464646463030222f3e3c7265637420783d2231312220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223383846463030222f3e3c7265637420783d2231322220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223303046463838222f3e3c7265637420783d2231332220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223303046464646222f3e3c7265637420783d2231342220793d223132222077696474683d223122206865696768743d2238222066696c6c3d2223303038384646222f3e3c7265637420783d2231352220793d223134222077696474683d223122206865696768743d2235222066696c6c3d2223303030304646222f3e3c7265637420783d22382220793d223134222077696474683d223122206865696768743d2235222066696c6c3d2223464630303030222f3e3c7265637420783d22392220793d223132222077696474683d223122206865696768743d2238222066696c6c3d2223464638383030222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831345631324831335631315a4d31342031324831355631334831345631325a4d31362031344831355631354831365631345a4d31352031384831365631394831355631385a4d31352031395632304831345631394831355a4d3920313948313056323048395631395a4d39203139483856313848395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e35222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3239222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3738222f3e3c7061746820636c6173733d22656f2220643d224d31352031384831345632314831354831365631384831355a222066696c6c3d2223464630303030222f3e3c7061746820636c6173733d22656f2220643d224d31392031394831365632305632314831395632305631395a222066696c6c3d2223303046464646222f3e3c7061746820636c6173733d22656f2220643d224d31362031384831355632314831364831395632304831365631385a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3238222f3e3c7061746820636c6173733d22656f2220643d224d31352031384831345631394831355631385a4d31392031394831385632304831395631395a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3731222f3e3c7265637420783d22362220793d223139222077696474683d223322206865696768743d2231222066696c6c3d2223464645373934222f3e3c7061746820636c6173733d22656f2220643d224d362031394832563230483356323148365632305631395a222066696c6c3d2223454445444544222f3e3c7265637420783d22332220793d223230222077696474683d223322206865696768743d2231222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3133222f3e3c7265637420783d22332220793d223230222077696474683d223122206865696768743d2231222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3338222f3e3c7061746820636c6173733d22656f2220643d224d31312031364831305631374831315631365a4d31342031364831335631374831345631365a222066696c6c3d2223464630303030222f3e3c7061746820636c6173733d22656f2220643d224d313020313648395631374831305631365a4d31332031364831325631374831335631365a222066696c6c3d22626c61636b222f3e3c7265637420783d2231312220793d223138222077696474683d223122206865696768743d2231222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d31332031394831365632304831375632325632334831365632344831344831324831304839483756323348365632304837483848395631394831305632304831324831335631395a222066696c6c3d227768697465222f3e3c7061746820636c6173733d22656f2220643d224d3920313948313056323048395631395a4d372032314838563230483956323156323248375632315a4d37203231483656323048375632315a4d31342031394831335632304831345631395a4d31342032325632334831325632325632314831335632324831345a4d31322032314831315632304831325632315a4d31362032334831355632344831365632335a4d31362032314831375632324831365632315a4d313020323456323348385632344831305a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3131222f3e3c7061746820636c6173733d22656f2220643d224d3920323048313056323148395632305a4d31362032314831355632324831365632334831335632344831365632334831375632324831365632315a4d31302032334831325632344831305632335a4d37203231483656323248375632315a4d39203232483856323348395632325a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e33222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3239222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3738222f3e3c7061746820636c6173733d22656f2220643d224d31302031314831345631324831355631344831365631394831355632304831344831304839563139483856313448395631324831305631315a222066696c6c3d2223314337313246222f3e3c7061746820636c6173733d22656f2220643d224d31322031314831315631324831325631315a4d31342031314831335631324831345631315a4d3920313348313056313448395631335a4d31322031334831315631344831325631335a4d31332031334831345631344831335631335a4d31362031354831355631364831365631355a4d31332031354831345631364831335631355a4d31322031354831315631364831325631355a4d3920313548313056313648395631355a4d313020313748395631384831305631375a4d31332031374831345631384831335631375a4d31342031394831335632304831345631395a222066696c6c3d2223303046463030222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d2223303341333630222066696c6c2d6f7061636974793d22302e3336222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d2223303046463338222066696c6c2d6f7061636974793d22302e34222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831345631324831335631315a4d31342031324831355631334831345631325a4d31362031344831355631354831365631345a4d31352031384831365631394831355631385a4d31352031395632304831345631394831355a4d3920313948313056323048395631395a4d39203139483856313848395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e35222f3ea26469706673582212204b5848bfa36185222eb4c0a8c4a91ba2cded81acd24b567debee0cd5c2ec5ebf64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000d4d696e7420596f7572204547470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80635c975abb1161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610527578063d0be191b14610547578063e985e9c514610567578063f2fde38b146105b057600080fd5b806395d89b41146104bc578063a035b1fe146104d1578063a22cb465146104e7578063b88d4fde1461050757600080fd5b8063715018a6116100d1578063715018a61461044a5780638a4e6f2a1461045f5780638da5cb5b1461047e57806391b7f5ed1461049c57600080fd5b80635c975abb146103d05780635c9af1a2146103ea5780636352211e1461040a57806370a082311461042a57600080fd5b806318160ddd1161017a5780632f745c59116101495780632f745c591461035d57806342842e0e1461037d5780634f6ccce71461039d57806355859a73146103bd57600080fd5b806318160ddd146102f257806323b872dd146103075780632e1a7d4d146103275780632e60bdca1461034757600080fd5b8063081812fc116101b6578063081812fc14610254578063095ea7b31461028c5780630ff52032146102ae57806316c38b3c146102d257600080fd5b806301ffc9a7146101dd5780630570a2941461021257806306fdde0314610232575b600080fd5b3480156101e957600080fd5b506101fd6101f8366004612f11565b6105d0565b60405190151581526020015b60405180910390f35b34801561021e57600080fd5b506101fd61022d366004612ff3565b6105e1565b34801561023e57600080fd5b5061024761060c565b6040516102099190613081565b34801561026057600080fd5b5061027461026f366004613094565b61069e565b6040516001600160a01b039091168152602001610209565b34801561029857600080fd5b506102ac6102a73660046130c9565b61072b565b005b3480156102ba57600080fd5b506102c4600d5481565b604051908152602001610209565b3480156102de57600080fd5b506102ac6102ed366004613103565b610841565b3480156102fe57600080fd5b506008546102c4565b34801561031357600080fd5b506102ac61032236600461311e565b61087e565b34801561033357600080fd5b506102ac610342366004613094565b6108af565b34801561035357600080fd5b506102c460125481565b34801561036957600080fd5b506102c46103783660046130c9565b610968565b34801561038957600080fd5b506102ac61039836600461311e565b6109fe565b3480156103a957600080fd5b506102c46103b8366004613094565b610a19565b6102ac6103cb366004612ff3565b610aac565b3480156103dc57600080fd5b50600f546101fd9060ff1681565b3480156103f657600080fd5b506102ac610405366004613103565b610df7565b34801561041657600080fd5b50610274610425366004613094565b610e3b565b34801561043657600080fd5b506102c461044536600461315a565b610eb2565b34801561045657600080fd5b506102ac610f39565b34801561046b57600080fd5b50600f546101fd90610100900460ff1681565b34801561048a57600080fd5b50600b546001600160a01b0316610274565b3480156104a857600080fd5b506102ac6104b7366004613094565b610f6f565b3480156104c857600080fd5b50610247610f9e565b3480156104dd57600080fd5b506102c4600e5481565b3480156104f357600080fd5b506102ac610502366004613175565b610fad565b34801561051357600080fd5b506102ac61052236600461319f565b610fb8565b34801561053357600080fd5b50610247610542366004613094565b610ff0565b34801561055357600080fd5b506102ac610562366004613094565b610ffb565b34801561057357600080fd5b506101fd61058236600461325f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156105bc57600080fd5b506102ac6105cb36600461315a565b61102a565b60006105db826110c5565b92915050565b6000601060006105f185856110ea565b815260208101919091526040016000205460ff169392505050565b60606000805461061b90613289565b80601f016020809104026020016040519081016040528092919081815260200182805461064790613289565b80156106945780601f1061066957610100808354040283529160200191610694565b820191906000526020600020905b81548152906001019060200180831161067757829003601f168201915b5050505050905090565b60006106a9826112a2565b61070f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061073682610e3b565b9050806001600160a01b0316836001600160a01b031614156107a45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610706565b336001600160a01b03821614806107c057506107c08133610582565b6108325760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610706565b61083c83836112bf565b505050565b600b546001600160a01b0316331461086b5760405162461bcd60e51b8152600401610706906132c4565b600f805460ff1916911515919091179055565b610888338261132d565b6108a45760405162461bcd60e51b8152600401610706906132f9565b61083c838383611417565b600b546001600160a01b031633146108d95760405162461bcd60e51b8152600401610706906132c4565b604051600090339083908381818185875af1925050503d806000811461091b576040519150601f19603f3d011682016040523d82523d6000602084013e610920565b606091505b50509050806109645760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454e4f5547485f46554e445360801b6044820152606401610706565b5050565b600061097383610eb2565b82106109d55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610706565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61083c83838360405180602001604052806000815250610fb8565b6000610a2460085490565b8210610a875760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610706565b60088281548110610a9a57610a9a61334a565b90600052602060002001549050919050565b6002600c541415610aff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610706565b6002600c556000610b1083836110ea565b60008181526010602052604090205490915060ff1615610b635760405162461bcd60e51b815260206004820152600e60248201526d4e4f4e5f554e495155455f45474760901b6044820152606401610706565b600b546001600160a01b03163314610ca857600d5460125410610bb65760405162461bcd60e51b815260206004820152600b60248201526a4f55545f4f465f4547475360a81b6044820152606401610706565b600e54341015610bfb5760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454e4f5547485f46554e445360801b6044820152606401610706565b600f5460ff1615610c3c5760405162461bcd60e51b815260206004820152600b60248201526a15d1549157d0d313d4d15160aa1b6044820152606401610706565b600f5460ff61010090910416151560011415610ca8573360009081526011602052604090205460ff1615610ca85760405162461bcd60e51b81526020600482015260136024820152724642495f4f50454e5f55505f4f4e455f45474760681b6044820152606401610706565b6012546000610cb785856115c2565b90506000610ce78260000151604051602001610cd3919061337c565b6040516020818303038152906040526117db565b604051602001610cf791906134f2565b60405160208183030381529060405290506000610d2e610d1685611941565b838560200151604051602001610cd393929190613537565b9050600081604051602001610d439190613655565b6040516020818303038152906040529050610d5e3386611a3f565b610d688582611a59565b6000868152601060205260408120805460ff191660011790556012805491610d8f836136b0565b90915550503360008181526011602052604090819020805460ff19166001179055517fb79703dd766ff483032ccf651a590cf0ae41afe5492c14f156fd223eddae68c090610de09088815260200190565b60405180910390a250506001600c55505050505050565b600b546001600160a01b03163314610e215760405162461bcd60e51b8152600401610706906132c4565b600f80549115156101000261ff0019909216919091179055565b6000818152600260205260408120546001600160a01b0316806105db5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610706565b60006001600160a01b038216610f1d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610706565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610f635760405162461bcd60e51b8152600401610706906132c4565b610f6d6000611ae4565b565b600b546001600160a01b03163314610f995760405162461bcd60e51b8152600401610706906132c4565b600e55565b60606001805461061b90613289565b610964338383611b36565b610fc2338361132d565b610fde5760405162461bcd60e51b8152600401610706906132f9565b610fea84848484611c05565b50505050565b60606105db82611c38565b600b546001600160a01b031633146110255760405162461bcd60e51b8152600401610706906132c4565b600d55565b600b546001600160a01b031633146110545760405162461bcd60e51b8152600401610706906132c4565b6001600160a01b0381166110b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610706565b6110c281611ae4565b50565b60006001600160e01b0319821663780e9d6360e01b14806105db57506105db82611da7565b6000606060005b60068160ff16101561129257604080516102c0810182526000808252600160208301819052928201819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820183905261012082018190526101408201819052610160820181905261018082018390526101a082018190526101c082018390526101e0820181905261020082018190526102208201819052610240820183905261026082019290925261028081018290526102a08101919091528560ff8316600681106111c6576111c661334a565b602002015160ff16601681106111de576111de61334a565b60200201516112275781858260ff16600681106111fd576111fd61334a565b60200201516040516020016112139291906136cb565b60405160208183030381529060405261127e565b81858260ff166006811061123d5761123d61334a565b6020020151858360ff16600681106112575761125761334a565b602002015160405160200161126e939291906136fd565b6040516020818303038152906040525b91508061128a81613739565b9150506110f1565b5080516020909101209392505050565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112f482610e3b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611338826112a2565b6113995760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610706565b60006113a483610e3b565b9050806001600160a01b0316846001600160a01b031614806113df5750836001600160a01b03166113d48461069e565b6001600160a01b0316145b8061140f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661142a82610e3b565b6001600160a01b0316146114925760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610706565b6001600160a01b0382166114f45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610706565b6114ff838383611df7565b61150a6000826112bf565b6001600160a01b0383166000908152600360205260408120805460019290611533908490613759565b90915550506001600160a01b0382166000908152600360205260408120805460019290611561908490613770565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040805180820190915260608082526020820152604080518082019091526060808252602082015260006040518060c0016040528061162260008860006006811061160f5761160f61334a565b60200201518860005b6020020151611e02565b815260200161163b600188816020020151886001611618565b8152602001611654600288816020020151886002611618565b815260200161166d600388816020020151886003611618565b8152602001611686600488816020020151886004611618565b815260200161169f600588816020020151886005611618565b905290506116b78560005b602002015160ff16611941565b8151516116c58760016116aa565b6020840151516116d68960026116aa565b6040808701515190516116f196959493929190602001613788565b60408051601f1981840301815291905261170c8660036116aa565b60608301515161171d8860046116aa565b60808501515161172e8a60056116aa565b60a087015151604051611749969594939291906020016138bd565b60408051601f198184030181529082905261176792916020016139cc565b60408051808303601f19018152918152908352815160209081015181840151820151848401518301516060860151840151608087015185015160a088015186015196516117be979596949593949293919201613be4565b60408051808303601f190181529190526020830152509392505050565b8051606090806117fb575050604080516020810190915260008152919050565b6000600361180a836002613770565b6118149190613db7565b61181f906004613dcb565b9050600061182e826020613770565b67ffffffffffffffff81111561184657611846612f2e565b6040519080825280601f01601f191660200182016040528015611870576020820181803683370190505b5090506000604051806060016040528060408152602001614e1f604091399050600181016020830160005b868110156118fc576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b83526004909201910161189b565b506003860660018114611916576002811461192757611933565b613d3d60f01b600119830152611933565b603d60f81b6000198301525b505050918152949350505050565b6060816119655750506040805180820190915260018152600360fc1b602082015290565b8160005b811561198f5780611979816136b0565b91506119889050600a83613db7565b9150611969565b60008167ffffffffffffffff8111156119aa576119aa612f2e565b6040519080825280601f01601f1916602001820160405280156119d4576020820181803683370190505b5090505b841561140f576119e9600183613759565b91506119f6600a86613dea565b611a01906030613770565b60f81b818381518110611a1657611a1661334a565b60200101906001600160f81b031916908160001a905350611a38600a86613db7565b94506119d8565b61096482826040518060200160405280600081525061274a565b611a62826112a2565b611ac55760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610706565b6000828152600a60209081526040909120825161083c92840190612e62565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611b985760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610706565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c10848484611417565b611c1c8484848461277d565b610fea5760405162461bcd60e51b815260040161070690613dfe565b6060611c43826112a2565b611ca95760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610706565b6000828152600a602052604081208054611cc290613289565b80601f0160208091040260200160405190810160405280929190818152602001828054611cee90613289565b8015611d3b5780601f10611d1057610100808354040283529160200191611d3b565b820191906000526020600020905b815481529060010190602001808311611d1e57829003601f168201915b505050505090506000611d5960408051602081019091526000815290565b9050805160001415611d6c575092915050565b815115611d9e578082604051602001611d86929190613e50565b60405160208183030381529060405292505050919050565b61140f8461288a565b60006001600160e01b031982166380ac58cd60e01b1480611dd857506001600160e01b03198216635b5e139f60e01b145b806105db57506301ffc9a760e01b6001600160e01b03198316146105db565b61083c838383612962565b60408051808201909152606080825260208201526040805160c08101825260048152600360208201526001918101829052600260608201526080810191909152600b60a082015260009060ff861660068110611e6057611e6061334a565b602090810291909101516040805160c0810182526001815260059381019390935260089083015260096060830152600b6080830152600c60a0830152915060009060ff871660068110611eb557611eb561334a565b602090810291909101516040805160c08101825260008082526001948201859052918101849052606081018290526080810184905260a08101939093529092509060ff881660068110611f0a57611f0a61334a565b6020020151905060ff8616611f595780611f545760405162461bcd60e51b815260206004820152600b60248201526a4547475f42524f4b455f3160a81b6044820152606401610706565b611fb7565b8160ff168660ff1610158015611f7d5750611f748383613e7f565b60ff168660ff16105b611fb75760405162461bcd60e51b815260206004820152600b60248201526a22a3a3afa12927a5a2af9960a91b6044820152606401610706565b6000604051806102c001604052806040518060400160405280604051806020016040528060008152508152602001604051806040016040528060048152602001636e6f6e6560e01b8152508152508152602001604051806040016040528061201e8a612a1a565b60405160200161202e9190613ea4565b6040516020818303038152906040528152602001604051806040016040528060078152602001663932b3bab630b960c91b8152508152508152602001604051806040016040528060405180610120016040528060ff81526020016158d660ff913981526020016040518060400160405280600b81526020016a1d1c985b9cdc185c995b9d60aa1b81525081525081526020016040518060400160405280604051806103a0016040528061037c815260200161505661037c91398152602001604051806040016040528060078152602001667261696e626f7760c81b8152508152508152602001604051806040016040528060405180610340016040528061031e81526020016159d561031e91398152602001604051806040016040528060078152602001660cacecee8e4d2f60cb1b8152508152508152602001604051806040016040528060405180608001604052806043815260200161501360439139815260200160405180604001604052806005815260200164736d696c6560d81b815250815250815260200160405180604001604052806040518060600160405280603781526020016156a1603791398152602001604051806040016040528060038152602001626f6f6f60e81b815250815250815260200160405180604001604052806040518060600160405280602c8152602001614a53602c913981526020016040518060400160405280600381526020016265676760e81b815250815250815260200160405180604001604052806122658a612a1a565b60405160200161227591906140c8565b60405160208183030381529060405281526020016040518060400160405280600381526020016206361760ec1b8152508152508152602001604051806040016040528060405180610120016040528060f08152602001614d2f60f091398152602001604051806040016040528060078152602001663932b3bab630b960c91b815250815250815260200160405180604001604052806040518060c001604052806095815260200161560c609591398152602001604051806040016040528060078152602001663434b3b416b0b360c91b81525081525081526020016040518060400160405280604051806080016040528060498152602001614ce66049913981526020016040518060400160405280600a81526020016973756e676c617373657360b01b815250815250815260200160405180604001604052806123b88a612a1a565b6040516020016123c8919061421e565b60405160208183030381529060405281526020016040518060400160405280600c81526020016b62617468696e672d72696e6760a01b8152508152508152602001604051806040016040528060405180610100016040528060c9815260200161498a60c9913981526020016040518060400160405280600981526020016863696761726574746560b81b815250815250815260200160405180604001604052806124718a612a1a565b6040516020016124819190614433565b60405160208183030381529060405281526020016040518060400160405280600781526020016665617272696e6760c81b81525081525081526020016040518060400160405280604051806102a001604052806102678152602001614a7f610267913981526020016040518060400160405280600a8152602001696561737465722d65676760b01b815250815250815260200160405180604001604052806040518061022001604052806101fe81526020016156d86101fe91398152602001604051806040016040528060088152602001673534b7323ab53ab760c11b8152508152508152602001604051806040016040528060405180610140016040528061010a815260200161550261010a91398152602001604051806040016040528060058152602001646b6e69666560d81b815250815250815260200160405180604001604052806125cf8a612a1a565b6040516020016125df9190614512565b60405160208183030381529060405281526020016040518060400160405280600881526020016706c6f6c6c69706f760c41b815250815250815260200160405180604001604052806126308a612a1a565b6040516020016126409190614767565b60405160208183030381529060405281526020016040518060400160405280600681526020016531b434b5b4b760d11b8152508152508152602001604051806040016040528060405180610160016040528061013081526020016153d2610130913981526020016040518060400160405280600581526020016470696c6c7360d81b81525081525081526020016040518060400160405280604051806101e001604052806101b48152602001614e5f6101b4913981526020016040518060400160405280600d81526020016c393ab73296b9b1b4b6b4ba30b960991b8152508152508152508760ff16601681106127395761273961334a565b602002015198975050505050505050565b6127548383612b93565b612761600084848461277d565b61083c5760405162461bcd60e51b815260040161070690613dfe565b60006001600160a01b0384163b1561287f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127c1903390899088908890600401614919565b602060405180830381600087803b1580156127db57600080fd5b505af192505050801561280b575060408051601f3d908101601f1916820190925261280891810190614956565b60015b612865573d808015612839576040519150601f19603f3d011682016040523d82523d6000602084013e61283e565b606091505b50805161285d5760405162461bcd60e51b815260040161070690613dfe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061140f565b506001949350505050565b6060612895826112a2565b6128f95760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610706565b600061291060408051602081019091526000815290565b90506000815111612930576040518060200160405280600081525061295b565b8061293a84611941565b60405160200161294b929190613e50565b6040516020818303038152906040525b9392505050565b6001600160a01b0383166129bd576129b881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6129e0565b816001600160a01b0316836001600160a01b0316146129e0576129e08382612cd2565b6001600160a01b0382166129f75761083c81612d6f565b826001600160a01b0316826001600160a01b03161461083c5761083c8282612e1e565b604080516101a081018252600661016082018181526504646303030360d41b6101808401528252825180840184528181526504646383830360d41b60208281019190915280840191909152835180850185528281526504646464630360d41b8183015283850152835180850185528281526503030464630360d41b81830152606084810191909152845180860186528381526518182323232360d11b818401526080850152845180860186528381526523231818232360d11b8184015260a0850152845180860186528381526518181818232360d11b8184015260c08501528451808601865283815265231ca29c21a360d11b8184015260e0850152845180860186528381526543454142393760d01b81840152610100850152845180860186528381526544314431443160d01b8184015261012085015284518086019095529184526533393339333960d01b9084015261014082019290925260ff8316600b8110612b8857612b8861334a565b602002015192915050565b6001600160a01b038216612be95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610706565b612bf2816112a2565b15612c3f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610706565b612c4b60008383611df7565b6001600160a01b0382166000908152600360205260408120805460019290612c74908490613770565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612cdf84610eb2565b612ce99190613759565b600083815260076020526040902054909150808214612d3c576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612d8190600190613759565b60008381526009602052604081205460088054939450909284908110612da957612da961334a565b906000526020600020015490508060088381548110612dca57612dca61334a565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612e0257612e02614973565b6001900381819060005260206000200160009055905550505050565b6000612e2983610eb2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612e6e90613289565b90600052602060002090601f016020900481019282612e905760008555612ed6565b82601f10612ea957805160ff1916838001178555612ed6565b82800160010185558215612ed6579182015b82811115612ed6578251825591602001919060010190612ebb565b50612ee2929150612ee6565b5090565b5b80821115612ee25760008155600101612ee7565b6001600160e01b0319811681146110c257600080fd5b600060208284031215612f2357600080fd5b813561295b81612efb565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612f6d57612f6d612f2e565b604052919050565b600082601f830112612f8657600080fd5b60405160c0810181811067ffffffffffffffff82111715612fa957612fa9612f2e565b6040528060c0840185811115612fbe57600080fd5b845b81811015612fe857803560ff81168114612fda5760008081fd5b835260209283019201612fc0565b509195945050505050565b600080610180838503121561300757600080fd5b6130118484612f75565b91506130208460c08501612f75565b90509250929050565b60005b8381101561304457818101518382015260200161302c565b83811115610fea5750506000910152565b6000815180845261306d816020860160208601613029565b601f01601f19169290920160200192915050565b60208152600061295b6020830184613055565b6000602082840312156130a657600080fd5b5035919050565b80356001600160a01b03811681146130c457600080fd5b919050565b600080604083850312156130dc57600080fd5b6130e5836130ad565b946020939093013593505050565b803580151581146130c457600080fd5b60006020828403121561311557600080fd5b61295b826130f3565b60008060006060848603121561313357600080fd5b61313c846130ad565b925061314a602085016130ad565b9150604084013590509250925092565b60006020828403121561316c57600080fd5b61295b826130ad565b6000806040838503121561318857600080fd5b613191836130ad565b9150613020602084016130f3565b600080600080608085870312156131b557600080fd5b6131be856130ad565b935060206131cd8187016130ad565b935060408601359250606086013567ffffffffffffffff808211156131f157600080fd5b818801915088601f83011261320557600080fd5b81358181111561321757613217612f2e565b613229601f8201601f19168501612f44565b9150808252898482850101111561323f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561327257600080fd5b61327b836130ad565b9150613020602084016130ad565b600181811c9082168061329d57607f821691505b602082108114156132be57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008151613372818560208601613029565b9290920192915050565b7f3c7376672077696474683d223130302522206865696768743d2231303025222081527f76696577426f783d22302030203234203234222069643d22656767222066696c60208201527f6c3d226e6f6e652220786d6c6e733d22687474703a2f2f7777772e77332e6f7260408201526b33979918181817b9bb33911f60a11b60608201527f3c7374796c653e2e656f7b66696c6c2d72756c653a6576656e6f64643b636c69606c8201527f702d72756c653a6576656e6f64643b7d236567677b7472616e73666f726d2d6f608c8201527f726967696e3a63656e7465722063656e7465723b73686170652d72656e64657260ac8201527f696e673a637269737045646765733b7d236567673a6163746976657b7472616e60cc8201527f73666f726d3a7363616c6558282d31293b7d3c2f7374796c653e00000000000060ec820152600061010683516134d58183860160208801613029565b651e17b9bb339f60d11b9301908101929092525061010c01919050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000081526000825161352a81601a850160208701613029565b91909101601a0192915050565b607b60f81b81526d226e616d65223a2022454747202360901b6001820152835160009061356b81600f850160208901613029565b61088b60f21b600f9184019182018190526f113232b9b1b934b83a34b7b7111d101160811b60118301526c4d696e7420596f75722045474760981b6021830152602e820152671134b6b0b3b2911d60c11b6030820152601160f91b603882015284516135de816039840160208901613029565b61364a61363d61363061362a61361d61360460398789010161088b60f21b815260020190565b6c1130ba3a3934b13aba32b9911d60991b8152600d0190565b605b60f81b815260010190565b88613360565b605d60f81b815260010190565b607d60f81b815260010190565b979650505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161368d81601d850160208701613029565b91909101601d0192915050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156136c4576136c461369a565b5060010190565b600083516136dd818460208801613029565b60f89390931b6001600160f81b0319169190920190815260010192915050565b6000845161370f818460208901613029565b6001600160f81b031960f895861b8116919093019081529290931b16600182015260020192915050565b600060ff821660ff8114156137505761375061369a565b60010192915050565b60008282101561376b5761376b61369a565b500390565b600082198211156137835761378361369a565b500190565b743c6720636c6173733d22626f6479222069643d226160581b815286516000906137b9816015850160208c01613029565b61111f60f11b601591840191820181905288516137dd816017850160208d01613029565b631e17b39f60e11b60179390910192830152753c6720636c6173733d226d6f757468222069643d226160501b601b8301528751613821816031850160208c01613029565b6031920191820152855161383c816033840160208a01613029565b6138af61389f61389961388b613885613864603387890101631e17b39f60e11b815260040190565b743c6720636c6173733d2268616972222069643d226160581b815260150190565b8a613360565b61111f60f11b815260020190565b87613360565b631e17b39f60e11b815260040190565b9a9950505050505050505050565b743c6720636c6173733d2265796573222069643d226160581b815286516000906138ee816015850160208c01613029565b61111f60f11b60159184019182018190528851613912816017850160208d01613029565b631e17b39f60e11b601793909101928301527f3c6720636c6173733d22676c6173736573222069643d22610000000000000000601b830152875161395d816033850160208c01613029565b60339201918201528551613978816035840160208a01613029565b7f3c2f673e3c6720636c6173733d226163636573736f7279222069643d22610000603592909101918201526139bf61389f6139b961388b6053850189613360565b86613360565b9998505050505050505050565b7f3c6720636c6173733d22626f72646572223e3c7061746820636c6173733d226581527f6f2220643d224d3134203130483130563131483956313248385631344837563160208201527f394838563230483956323148313556323048313656313948313756313448313660408201527f5631324831355631314831345631305a4d31342031315631324831355631344860608201527f313656313948313556323048395631394838563134483956313248313056313160808201527f4831345a222066696c6c3d22626c61636b222f3e3c2f673e000000000000000060a08201527f3c6720636c6173733d22696e73696465223e3c7061746820636c6173733d226560b88201527f6f2220643d224d3134203134483133563135483131563136483133563135483160d88201527f345631345a222066696c6c3d2223463242433246222f3e3c7061746820636c6160f88201527f73733d22656f2220643d224d31312031334831324831335631344831324831316101188201527f5631335a4d31312031345631354831305631344831315a222066696c6c3d22236101388201527f464645373642222f3e3c7265637420783d2231312220793d22313422207769646101588201527f74683d223222206865696768743d2231222066696c6c3d22234646443630302261017882015265179f1e17b39f60d11b610198820152600061140f613bde61019e840186613360565b84613360565b7f7b202274726169745f74797065223a2022626f6479222c202276616c7565223a815261101160f11b602082015260008751613c27816022850160208c01613029565b7f22207d2c7b202274726169745f74797065223a20226d6f757468222c2022766160229184019182015266363ab2911d101160c91b60428201528751613c74816049840160208c01613029565b7f22207d2c7b202274726169745f74797065223a202268616972222c202276616c60499290910191820152653ab2911d101160d11b60698201528651613cc181606f840160208b01613029565b6138af613d92613899613d55613885613d1a613d14606f888a01017f22207d2c7b202274726169745f74797065223a202265796573222c202276616c8152653ab2911d101160d11b602082015260260190565b8d613360565b7f22207d2c7b202274726169745f74797065223a2022676c6173736573222c20228152683b30b63ab2911d101160b91b602082015260290190565b7f22207d2c7b202274726169745f74797065223a20226163636573736f7279222c81526a10113b30b63ab2911d101160a91b6020820152602b0190565b6222207d60e81b815260030190565b634e487b7160e01b600052601260045260246000fd5b600082613dc657613dc6613da1565b500490565b6000816000190483118215151615613de557613de561369a565b500290565b600082613df957613df9613da1565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351613e62818460208801613029565b835190830190613e76818360208801613029565b01949350505050565b600060ff821660ff84168060ff03821115613e9c57613e9c61369a565b019392505050565b7f3c7061746820636c6173733d22656f2220643d224d313020313148313456313281527f483135563134483136563139483135563230483134483130483956313948385660208201527f313448395631324831305631315a222066696c6c3d2223000000000000000000604082015260008251613f28816057850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313320313148313460579390910192830152507f5631324831335631315a4d31342031324831355631334831345631325a4d313660778201527f2031344831355631354831365631345a4d31352031384831365631394831355660978201527f31385a4d31352031395632304831345631394831355a4d39203139483130563260b78201527f3048395631395a4d39203139483856313848395631395a222066696c6c3d226260d78201527f6c61636b222066696c6c2d6f7061636974793d22302e35222f3e3c706174682060f78201527f636c6173733d22656f2220643d224d31332031314831315631324831325631336101178201527f48313356313548313456313748313356313848313256313948313056323048316101378201527f32483135563139483136563135563134483135563133483134563132483133566101578201527f31315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22610177820152661817191c91179f60c91b61019782015261019e01919050565b7f3c7061746820636c6173733d22656f2220643d224d313320313048313556313181527f483136563132483137563134483134483656313348385631325631314839563160208201526d304831335a222066696c6c3d222360901b60408201526000825161413d81604e850160208701613029565b7f222f3e3c7265637420783d22362220793d223133222077696474683d22382220604e9390910192830152507f6865696768743d2231222066696c6c3d227768697465222066696c6c2d6f7061606e8201527f636974793d22302e34222f3e3c7061746820636c6173733d22656f2220643d22608e8201527f4d3135203130483133563131483134563132563134483137563132483136563160ae8201527f314831355631305a222066696c6c3d22626c61636b222066696c6c2d6f70616360ce8201526b34ba3c9e911817189c91179f60a11b60ee82015260fa01919050565b7f3c7061746820636c6173733d22656f2220643d224d352031364836563137483781527f563138563139483856323048313656313948313756323056323148313656323260208201527f483134563233483130563232483856323148375632304836563139483556313860408201526f5631375631365a222066696c6c3d222360801b6060820152600082516142bb816070850160208701613029565b7f222f3e3c7265637420783d22342220793d223138222077696474683d2231222060709390910192830152507f6865696768743d2231222066696c6c3d22626c61636b222f3e3c70617468206360908201527f6c6173733d22656f2220643d224d36203137483556313848365631375a4d313560b08201527f20323048395632314831355632305a222066696c6c3d2277686974652220666960d08201527f6c6c2d6f7061636974793d22302e35222f3e3c7061746820636c6173733d226560f08201527f6f2220643d224d37203230483856323148375632305a4d3130203232563231486101108201527f385632324831305a4d31342032325632334831305632324831345a4d313620326101308201527f315632324831345632314831365a4d31362032314831375632304831365632316101508201527f5a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e61017082015264199b11179f60d91b61019082015261019501919050565b7f3c7265637420783d2231362220793d223136222077696474683d22312220686581526f696768743d2231222066696c6c3d222360801b602082015260008251614484816030850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313720313548313660309390910192830152507f563136483135563137483136563138483137563137483138563136483137563160508201527f355a4d31372031365631374831365631364831375a222066696c6c3d22626c6160708201526431b591179f60d91b6090820152609501919050565b7f3c7265637420783d22352220793d223135222077696474683d2231222068656981527f6768743d2236222066696c6c3d227768697465222f3e3c7061746820636c617360208201527f733d22656f2220643d224d34203130483756313148385631344837563135483460408201527f563134483356313148345631305a222066696c6c3d22230000000000000000006060820152600082516145bc816077850160208701613029565b7f222f3e3c7061746820643d224d34203131483756313248345631315a2220666960779390910192830152507f6c6c3d227768697465222066696c6c2d6f7061636974793d22302e3538222f3e60978201527f3c7061746820636c6173733d22656f2220643d224d372031324836563133483560b78201527f563134483648375631325a222066696c6c3d227768697465222066696c6c2d6f60d78201527f7061636974793d22302e3339222f3e3c7061746820636c6173733d22656f222060f78201527f643d224d3720313048365631314837563132483856313148375631305a4d37206101178201527f3133483856313448375631335a4d36203135483756313448365631355a4d35206101378201527f3135563136483656313548355a4d34203134483556313548345631345a4d34206101578201527f3134483356313348345631345a4d33203131483456313248335631315a4d34206101778201527f3131563130483556313148345a222066696c6c3d22626c61636b222066696c6c6101978201527016b7b830b1b4ba3c9e911817189a91179f60791b6101b78201526101c801919050565b7f3c7061746820636c6173733d22656f2220643d224d313420313748313556313881527f4831345631375a4d31362032304831375632314831365632305a222066696c6c60208201527f3d2223464643313037222f3e3c726563742077696474683d223122206865696760408201527f68743d223122207472616e73666f726d3d226d6174726978282d3120302030206060820152703120313620313629222066696c6c3d222360781b60808201526000825161482b816091850160208701613029565b7f222f3e3c7061746820636c6173733d22656f2220643d224d313920313748313860919390910192830152507f5631384831395631375a4d31362031384831374831385631395632304831355660b18201527f31395631385631374831365631385a222066696c6c3d227768697465222f3e3c60d18201527f7061746820636c6173733d22656f2220643d224d31382031374831395631384860f18201527f31385631394831365631384831385631375a222066696c6c3d22626c61636b2261011182015275103334b63616b7b830b1b4ba3c9e911817181b11179f60511b61013182015261014701919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061494c90830184613055565b9695505050505050565b60006020828403121561496857600080fd5b815161295b81612efb565b634e487b7160e01b600052603160045260246000fdfe3c7265637420783d22372220793d223138222077696474683d223422206865696768743d2231222066696c6c3d2223463046304630222f3e3c7265637420783d22372220793d223138222077696474683d223122206865696768743d2231222066696c6c3d2223464641383030222f3e3c7061746820636c6173733d22656f2220643d224d36203132483556313648365631325a4d37203137483656313848375631375a222066696c6c3d2223433443344334222066696c6c2d6f7061636974793d22302e35222f3e3c7061746820643d224d31302031384831335632304831305631385a222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d31352031364831365631374831355631365a4d31352032304831345631385631374831355631385632305a4d31382032305632314831355632304831385a4d31382031385632304831395631385631374831385631364831375631374831385631385a222066696c6c3d2223334536324645222f3e3c7061746820636c6173733d22656f2220643d224d31362031354831375631374831385632304831374831364831355631374831365631355a222066696c6c3d2223313133454646222f3e3c7265637420783d2231352220793d223137222077696474683d223322206865696768743d2231222066696c6c3d2223464235313241222f3e3c7061746820636c6173733d22656f2220643d224d31342031384831355631394831345631385a4d31382031395632304831355631394831385a4d31382031394831395631384831385631395a222066696c6c3d2223463146463045222f3e3c7061746820636c6173733d22656f2220643d224d31362031374831355631384831365631375a4d31382031374831375631384831385631375a4d31352031394831365632304831355631395a4d31382031394831375632304831385631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3138222f3e3c7061746820636c6173733d22656f2220643d224d31372031354831365631364831375631355a4d31352031374831345632304831355632314831385632304831395631374831385632304831355631375a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3335222f3e3c7061746820636c6173733d22656f2220643d224d3920313548313148313248313456313748313256313648313156313748395631355a222066696c6c3d2223303030303030222f3e3c7061746820636c6173733d22656f2220643d224d31312031354831305631374831315631355a4d31342031354831335631374831345631355a222066696c6c3d227768697465222f3e3c7061746820636c6173733d22656f2220643d224d313020313548395631374831305631355a4d31332031354831325631374831335631355a222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d313120313548395631364831315631355a4d31342031354831325631364831345631355a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3135222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c7061746820636c6173733d22656f2220643d224d38203138483956313948313056323056323148394838563230483756313948385631385a222066696c6c3d2223454443373135222f3e3c7061746820636c6173733d22656f2220643d224d3520313248365631335631345631354837563137483856313856313948374836563138483556313748345631364833563134483456313348355631325a222066696c6c3d2223334637444134222f3e3c7061746820636c6173733d22656f2220643d224d33203134483456313648335631345a4d35203137483456313648355631375a4d36203138483556313748365631385a4d36203138483756313948365631385a4d39203139483856323048395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3233222f3e3c7061746820636c6173733d22656f2220643d224d35203132483656313348355631325a4d35203133563134483456313348355a4d39203138483856313948375632304838563139483956323048313056313948395631385a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3338222f3e3c7061746820636c6173733d22656f2220643d224d31352031374831345631384831305631394831345631384831355631375a222066696c6c3d22626c61636b222f3e3c7265637420783d2231302220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223464646463030222f3e3c7265637420783d2231312220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223383846463030222f3e3c7265637420783d2231322220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223303046463838222f3e3c7265637420783d2231332220793d223131222077696474683d223122206865696768743d2239222066696c6c3d2223303046464646222f3e3c7265637420783d2231342220793d223132222077696474683d223122206865696768743d2238222066696c6c3d2223303038384646222f3e3c7265637420783d2231352220793d223134222077696474683d223122206865696768743d2235222066696c6c3d2223303030304646222f3e3c7265637420783d22382220793d223134222077696474683d223122206865696768743d2235222066696c6c3d2223464630303030222f3e3c7265637420783d22392220793d223132222077696474683d223122206865696768743d2238222066696c6c3d2223464638383030222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831345631324831335631315a4d31342031324831355631334831345631325a4d31362031344831355631354831365631345a4d31352031384831365631394831355631385a4d31352031395632304831345631394831355a4d3920313948313056323048395631395a4d39203139483856313848395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e35222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3239222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3738222f3e3c7061746820636c6173733d22656f2220643d224d31352031384831345632314831354831365631384831355a222066696c6c3d2223464630303030222f3e3c7061746820636c6173733d22656f2220643d224d31392031394831365632305632314831395632305631395a222066696c6c3d2223303046464646222f3e3c7061746820636c6173733d22656f2220643d224d31362031384831355632314831364831395632304831365631385a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3238222f3e3c7061746820636c6173733d22656f2220643d224d31352031384831345631394831355631385a4d31392031394831385632304831395631395a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3731222f3e3c7265637420783d22362220793d223139222077696474683d223322206865696768743d2231222066696c6c3d2223464645373934222f3e3c7061746820636c6173733d22656f2220643d224d362031394832563230483356323148365632305631395a222066696c6c3d2223454445444544222f3e3c7265637420783d22332220793d223230222077696474683d223322206865696768743d2231222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3133222f3e3c7265637420783d22332220793d223230222077696474683d223122206865696768743d2231222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3338222f3e3c7061746820636c6173733d22656f2220643d224d31312031364831305631374831315631365a4d31342031364831335631374831345631365a222066696c6c3d2223464630303030222f3e3c7061746820636c6173733d22656f2220643d224d313020313648395631374831305631365a4d31332031364831325631374831335631365a222066696c6c3d22626c61636b222f3e3c7265637420783d2231312220793d223138222077696474683d223122206865696768743d2231222066696c6c3d22626c61636b222f3e3c7061746820636c6173733d22656f2220643d224d31332031394831365632304831375632325632334831365632344831344831324831304839483756323348365632304837483848395631394831305632304831324831335631395a222066696c6c3d227768697465222f3e3c7061746820636c6173733d22656f2220643d224d3920313948313056323048395631395a4d372032314838563230483956323156323248375632315a4d37203231483656323048375632315a4d31342031394831335632304831345631395a4d31342032325632334831325632325632314831335632324831345a4d31322032314831315632304831325632315a4d31362032334831355632344831365632335a4d31362032314831375632324831365632315a4d313020323456323348385632344831305a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3131222f3e3c7061746820636c6173733d22656f2220643d224d3920323048313056323148395632305a4d31362032314831355632324831365632334831335632344831365632334831375632324831365632315a4d31302032334831325632344831305632335a4d37203231483656323248375632315a4d39203232483856323348395632325a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e33222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e3239222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d227768697465222066696c6c2d6f7061636974793d22302e3738222f3e3c7061746820636c6173733d22656f2220643d224d31302031314831345631324831355631344831365631394831355632304831344831304839563139483856313448395631324831305631315a222066696c6c3d2223314337313246222f3e3c7061746820636c6173733d22656f2220643d224d31322031314831315631324831325631315a4d31342031314831335631324831345631315a4d3920313348313056313448395631335a4d31322031334831315631344831325631335a4d31332031334831345631344831335631335a4d31362031354831355631364831365631355a4d31332031354831345631364831335631355a4d31322031354831315631364831325631355a4d3920313548313056313648395631355a4d313020313748395631384831305631375a4d31332031374831345631384831335631375a4d31342031394831335632304831345631395a222066696c6c3d2223303046463030222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831315631324831325631334831335631354831345631374831335631384831325631394831305632304831324831355631394831365631355631344831355631334831345631324831335631315a222066696c6c3d2223303341333630222066696c6c2d6f7061636974793d22302e3336222f3e3c7061746820636c6173733d22656f2220643d224d31312031314831305631324839563134483856313648395631354831305631344831315631334831325631324831345631314831324831315a222066696c6c3d2223303046463338222066696c6c2d6f7061636974793d22302e34222f3e3c7061746820636c6173733d22656f2220643d224d31332031314831345631324831335631315a4d31342031324831355631334831345631325a4d31362031344831355631354831365631345a4d31352031384831365631394831355631385a4d31352031395632304831345631394831355a4d3920313948313056323048395631395a4d39203139483856313848395631395a222066696c6c3d22626c61636b222066696c6c2d6f7061636974793d22302e35222f3ea26469706673582212204b5848bfa36185222eb4c0a8c4a91ba2cded81acd24b567debee0cd5c2ec5ebf64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000d4d696e7420596f7572204547470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Mint Your EGG
Arg [1] : ticker (string): EGG
Arg [2] : maxMints (uint256): 1024
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 4d696e7420596f75722045474700000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4547470000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
52451:15639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53505:188;;;;;;;;;;-1:-1:-1;53505:188:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;53505:188:0;;;;;;;;62731:174;;;;;;;;;;-1:-1:-1;62731:174:0;;;;;:::i;:::-;;:::i;30744:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32303:221::-;;;;;;;;;;-1:-1:-1;32303:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3281:32:1;;;3263:51;;3251:2;3236:18;32303:221:0;3117:203:1;31826:411:0;;;;;;;;;;-1:-1:-1;31826:411:0;;;;;:::i;:::-;;:::i;:::-;;52589:19;;;;;;;;;;;;;;;;;;;3908:25:1;;;3896:2;3881:18;52589:19:0;3762:177:1;65970:74:0;;;;;;;;;;-1:-1:-1;65970:74:0;;;;;:::i;:::-;;:::i;43890:113::-;;;;;;;;;;-1:-1:-1;43978:10:0;:17;43890:113;;33053:339;;;;;;;;;;-1:-1:-1;33053:339:0;;;;;:::i;:::-;;:::i;66134:163::-;;;;;;;;;;-1:-1:-1;66134:163:0;;;;;:::i;:::-;;:::i;52779:24::-;;;;;;;;;;;;;;;;43558:256;;;;;;;;;;-1:-1:-1;43558:256:0;;;;;:::i;:::-;;:::i;33463:185::-;;;;;;;;;;-1:-1:-1;33463:185:0;;;;;:::i;:::-;;:::i;44080:233::-;;;;;;;;;;-1:-1:-1;44080:233:0;;;;;:::i;:::-;;:::i;66303:1782::-;;;;;;:::i;:::-;;:::i;52639:25::-;;;;;;;;;;-1:-1:-1;52639:25:0;;;;;;;;66048:82;;;;;;;;;;-1:-1:-1;66048:82:0;;;;;:::i;:::-;;:::i;30438:239::-;;;;;;;;;;-1:-1:-1;30438:239:0;;;;;:::i;:::-;;:::i;30168:208::-;;;;;;;;;;-1:-1:-1;30168:208:0;;;;;:::i;:::-;;:::i;9714:103::-;;;;;;;;;;;;;:::i;52669:29::-;;;;;;;;;;-1:-1:-1;52669:29:0;;;;;;;;;;;9063:87;;;;;;;;;;-1:-1:-1;9136:6:0;;-1:-1:-1;;;;;9136:6:0;9063:87;;65894:72;;;;;;;;;;-1:-1:-1;65894:72:0;;;;;:::i;:::-;;:::i;30913:104::-;;;;;;;;;;;;;:::i;52613:21::-;;;;;;;;;;;;;;;;32596:155;;;;;;;;;;-1:-1:-1;32596:155:0;;;;;:::i;:::-;;:::i;33719:328::-;;;;;;;;;;-1:-1:-1;33719:328:0;;;;;:::i;:::-;;:::i;53327:172::-;;;;;;;;;;-1:-1:-1;53327:172:0;;;;;:::i;:::-;;:::i;65809:81::-;;;;;;;;;;-1:-1:-1;65809:81:0;;;;;:::i;:::-;;:::i;32822:164::-;;;;;;;;;;-1:-1:-1;32822:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32943:25:0;;;32919:4;32943:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32822:164;9972:201;;;;;;;;;;-1:-1:-1;9972:201:0;;;;;:::i;:::-;;:::i;53505:188::-;53628:4;53651:36;53675:11;53651:23;:36::i;:::-;53644:43;53505:188;-1:-1:-1;;53505:188:0:o;62731:174::-;62843:4;62863;:36;62868:30;62874:10;62886:11;62868:5;:30::i;:::-;62863:36;;;;;;;;;;;-1:-1:-1;62863:36:0;;;;;62731:174;-1:-1:-1;;;62731:174:0:o;30744:100::-;30798:13;30831:5;30824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30744:100;:::o;32303:221::-;32379:7;32407:16;32415:7;32407;:16::i;:::-;32399:73;;;;-1:-1:-1;;;32399:73:0;;6914:2:1;32399:73:0;;;6896:21:1;6953:2;6933:18;;;6926:30;6992:34;6972:18;;;6965:62;-1:-1:-1;;;7043:18:1;;;7036:42;7095:19;;32399:73:0;;;;;;;;;-1:-1:-1;32492:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;32492:24:0;;32303:221::o;31826:411::-;31907:13;31923:23;31938:7;31923:14;:23::i;:::-;31907:39;;31971:5;-1:-1:-1;;;;;31965:11:0;:2;-1:-1:-1;;;;;31965:11:0;;;31957:57;;;;-1:-1:-1;;;31957:57:0;;7327:2:1;31957:57:0;;;7309:21:1;7366:2;7346:18;;;7339:30;7405:34;7385:18;;;7378:62;-1:-1:-1;;;7456:18:1;;;7449:31;7497:19;;31957:57:0;7125:397:1;31957:57:0;7867:10;-1:-1:-1;;;;;32049:21:0;;;;:62;;-1:-1:-1;32074:37:0;32091:5;7867:10;32822:164;:::i;32074:37::-;32027:168;;;;-1:-1:-1;;;32027:168:0;;7729:2:1;32027:168:0;;;7711:21:1;7768:2;7748:18;;;7741:30;7807:34;7787:18;;;7780:62;7878:26;7858:18;;;7851:54;7922:19;;32027:168:0;7527:420:1;32027:168:0;32208:21;32217:2;32221:7;32208:8;:21::i;:::-;31896:341;31826:411;;:::o;65970:74::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;66024:6:::1;:17:::0;;-1:-1:-1;;66024:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;65970:74::o;33053:339::-;33248:41;7867:10;33281:7;33248:18;:41::i;:::-;33240:103;;;;-1:-1:-1;;;33240:103:0;;;;;;;:::i;:::-;33356:28;33366:4;33372:2;33376:7;33356:9;:28::i;66134:163::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;66211:37:::1;::::0;66193:12:::1;::::0;66211:10:::1;::::0;66236:6;;66193:12;66211:37;66193:12;66211:37;66236:6;66211:10;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66192:56;;;66263:7;66255:36;;;::::0;-1:-1:-1;;;66255:36:0;;9143:2:1;66255:36:0::1;::::0;::::1;9125:21:1::0;9182:2;9162:18;;;9155:30;-1:-1:-1;;;9201:18:1;;;9194:46;9257:18;;66255:36:0::1;8941:340:1::0;66255:36:0::1;66185:112;66134:163:::0;:::o;43558:256::-;43655:7;43691:23;43708:5;43691:16;:23::i;:::-;43683:5;:31;43675:87;;;;-1:-1:-1;;;43675:87:0;;9488:2:1;43675:87:0;;;9470:21:1;9527:2;9507:18;;;9500:30;9566:34;9546:18;;;9539:62;-1:-1:-1;;;9617:18:1;;;9610:41;9668:19;;43675:87:0;9286:407:1;43675:87:0;-1:-1:-1;;;;;;43780:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;43558:256::o;33463:185::-;33601:39;33618:4;33624:2;33628:7;33601:39;;;;;;;;;;;;:16;:39::i;44080:233::-;44155:7;44191:30;43978:10;:17;;43890:113;44191:30;44183:5;:38;44175:95;;;;-1:-1:-1;;;44175:95:0;;9900:2:1;44175:95:0;;;9882:21:1;9939:2;9919:18;;;9912:30;9978:34;9958:18;;;9951:62;-1:-1:-1;;;10029:18:1;;;10022:42;10081:19;;44175:95:0;9698:408:1;44175:95:0;44288:10;44299:5;44288:17;;;;;;;;:::i;:::-;;;;;;;;;44281:24;;44080:233;;;:::o;66303:1782::-;4037:1;4635:7;;:19;;4627:63;;;;-1:-1:-1;;;4627:63:0;;10445:2:1;4627:63:0;;;10427:21:1;10484:2;10464:18;;;10457:30;10523:33;10503:18;;;10496:61;10574:18;;4627:63:0;10243:355:1;4627:63:0;4037:1;4768:7;:18;66426:13:::1;66442:30;66448:10:::0;66460:11;66442:5:::1;:30::i;:::-;66488:11;::::0;;;:4:::1;:11;::::0;;;;;66426:46;;-1:-1:-1;66488:11:0::1;;66487:12;66479:39;;;::::0;-1:-1:-1;;;66479:39:0;;10805:2:1;66479:39:0::1;::::0;::::1;10787:21:1::0;10844:2;10824:18;;;10817:30;-1:-1:-1;;;10863:18:1;;;10856:44;10917:18;;66479:39:0::1;10603:338:1::0;66479:39:0::1;9136:6:::0;;-1:-1:-1;;;;;9136:6:0;66529:10:::1;:21;66525:286;;66580:7;;66569:8;;:18;66561:42;;;::::0;-1:-1:-1;;;66561:42:0;;11148:2:1;66561:42:0::1;::::0;::::1;11130:21:1::0;11187:2;11167:18;;;11160:30;-1:-1:-1;;;11206:18:1;;;11199:41;11257:18;;66561:42:0::1;10946:335:1::0;66561:42:0::1;66633:5;;66620:9;:18;;66612:47;;;::::0;-1:-1:-1;;;66612:47:0;;9143:2:1;66612:47:0::1;::::0;::::1;9125:21:1::0;9182:2;9162:18;;;9155:30;-1:-1:-1;;;9201:18:1;;;9194:46;9257:18;;66612:47:0::1;8941:340:1::0;66612:47:0::1;66677:6;::::0;::::1;;66676:7;66668:31;;;::::0;-1:-1:-1;;;66668:31:0;;11488:2:1;66668:31:0::1;::::0;::::1;11470:21:1::0;11527:2;11507:18;;;11500:30;-1:-1:-1;;;11546:18:1;;;11539:41;11597:18;;66668:31:0::1;11286:335:1::0;66668:31:0::1;66712:10;::::0;::::1;;::::0;;::::1;;:18;;:10;:18;66708:96;;;66759:10;66752:18;::::0;;;:6:::1;:18;::::0;;;;;::::1;;66751:19;66743:51;;;::::0;-1:-1:-1;;;66743:51:0;;11828:2:1;66743:51:0::1;::::0;::::1;11810:21:1::0;11867:2;11847:18;;;11840:30;-1:-1:-1;;;11886:18:1;;;11879:49;11945:18;;66743:51:0::1;11626:343:1::0;66743:51:0::1;66837:8;::::0;66819:15:::1;66872:34;66882:10:::0;66894:11;66872:9:::1;:34::i;:::-;66852:54;;66913:19;66997:399;67342:6;:14;;;67027:359;;;;;;;;:::i;:::-;;;;;;;;;;;;;66997:13;:399::i;:::-;66950:453;;;;;;;;:::i;:::-;;;;;;;;;;;;;66913:491;;67411:29;67443:303;67527:28;67544:10;67527:16;:28::i;:::-;67640:5;67695:6;:15;;;67470:273;;;;;;;;;;:::i;67443:303::-;67411:335;;67755:22;67852:15;67787:87;;;;;;;;:::i;:::-;;;;;;;;;;;;;67755:120;;67884:33;67894:10;67906;67884:9;:33::i;:::-;67924:34;67937:10;67949:8;67924:12;:34::i;:::-;67967:11;::::0;;;:4:::1;:11;::::0;;;;:18;;-1:-1:-1;;67967:18:0::1;67981:4;67967:18;::::0;;67992:8:::1;:10:::0;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;68016:10:0::1;68009:18;::::0;;;:6:::1;:18;::::0;;;;;;:25;;-1:-1:-1;;68009:25:0::1;68030:4;68009:25;::::0;;68048:31;::::1;::::0;::::1;::::0;68068:10;3908:25:1;;3896:2;3881:18;;3762:177;68048:31:0::1;;;;;;;;-1:-1:-1::0;;3993:1:0;4947:7;:22;-1:-1:-1;;;;;;66303:1782:0:o;66048:82::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;66106:10:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;66106:21:0;;::::1;::::0;;;::::1;::::0;;66048:82::o;30438:239::-;30510:7;30546:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30546:16:0;30581:19;30573:73;;;;-1:-1:-1;;;30573:73:0;;17975:2:1;30573:73:0;;;17957:21:1;18014:2;17994:18;;;17987:30;18053:34;18033:18;;;18026:62;-1:-1:-1;;;18104:18:1;;;18097:39;18153:19;;30573:73:0;17773:405:1;30168:208:0;30240:7;-1:-1:-1;;;;;30268:19:0;;30260:74;;;;-1:-1:-1;;;30260:74:0;;18385:2:1;30260:74:0;;;18367:21:1;18424:2;18404:18;;;18397:30;18463:34;18443:18;;;18436:62;-1:-1:-1;;;18514:18:1;;;18507:40;18564:19;;30260:74:0;18183:406:1;30260:74:0;-1:-1:-1;;;;;;30352:16:0;;;;;:9;:16;;;;;;;30168:208::o;9714:103::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;9779:30:::1;9806:1;9779:18;:30::i;:::-;9714:103::o:0;65894:72::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;65947:5:::1;:16:::0;65894:72::o;30913:104::-;30969:13;31002:7;30995:14;;;;;:::i;32596:155::-;32691:52;7867:10;32724:8;32734;32691:18;:52::i;33719:328::-;33894:41;7867:10;33927:7;33894:18;:41::i;:::-;33886:103;;;;-1:-1:-1;;;33886:103:0;;;;;;;:::i;:::-;34000:39;34014:4;34020:2;34024:7;34033:5;34000:13;:39::i;:::-;33719:328;;;;:::o;53327:172::-;53438:13;53470:23;53485:7;53470:14;:23::i;65809:81::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;65867:7:::1;:20:::0;65809:81::o;9972:201::-;9136:6;;-1:-1:-1;;;;;9136:6:0;7867:10;9283:23;9275:68;;;;-1:-1:-1;;;9275:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10061:22:0;::::1;10053:73;;;::::0;-1:-1:-1;;;10053:73:0;;18796:2:1;10053:73:0::1;::::0;::::1;18778:21:1::0;18835:2;18815:18;;;18808:30;18874:34;18854:18;;;18847:62;-1:-1:-1;;;18925:18:1;;;18918:36;18971:19;;10053:73:0::1;18594:402:1::0;10053:73:0::1;10137:28;10156:8;10137:18;:28::i;:::-;9972:201:::0;:::o;43250:224::-;43352:4;-1:-1:-1;;;;;;43376:50:0;;-1:-1:-1;;;43376:50:0;;:90;;;43430:36;43454:11;43430:23;:36::i;62911:510::-;63021:7;63037:17;63066:7;63061:326;63083:17;63079:1;:21;;;63061:326;;;63123:142;;;;;;;;-1:-1:-1;63123:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63251:10;:13;;;;;;;;;;:::i;:::-;;;;;63123:142;;;;;;;;;:::i;:::-;;;;;:256;;63359:4;63365:10;63376:1;63365:13;;;;;;;;;:::i;:::-;;;;;63342:37;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63123:256;;;63294:4;63300:10;63311:1;63300:13;;;;;;;;;:::i;:::-;;;;;63315:11;63327:1;63315:14;;;;;;;;;:::i;:::-;;;;;63277:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63123:256;63116:263;-1:-1:-1;63102:3:0;;;;:::i;:::-;;;;63061:326;;;-1:-1:-1;63400:15:0;;;;;;;;62911:510;-1:-1:-1;;;62911:510:0:o;35557:127::-;35622:4;35646:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35646:16:0;:30;;;35557:127::o;39539:174::-;39614:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;39614:29:0;-1:-1:-1;;;;;39614:29:0;;;;;;;;:24;;39668:23;39614:24;39668:14;:23::i;:::-;-1:-1:-1;;;;;39659:46:0;;;;;;;;;;;39539:174;;:::o;35851:348::-;35944:4;35969:16;35977:7;35969;:16::i;:::-;35961:73;;;;-1:-1:-1;;;35961:73:0;;20281:2:1;35961:73:0;;;20263:21:1;20320:2;20300:18;;;20293:30;20359:34;20339:18;;;20332:62;-1:-1:-1;;;20410:18:1;;;20403:42;20462:19;;35961:73:0;20079:408:1;35961:73:0;36045:13;36061:23;36076:7;36061:14;:23::i;:::-;36045:39;;36114:5;-1:-1:-1;;;;;36103:16:0;:7;-1:-1:-1;;;;;36103:16:0;;:51;;;;36147:7;-1:-1:-1;;;;;36123:31:0;:20;36135:7;36123:11;:20::i;:::-;-1:-1:-1;;;;;36123:31:0;;36103:51;:87;;;-1:-1:-1;;;;;;32943:25:0;;;32919:4;32943:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;36158:32;36095:96;35851:348;-1:-1:-1;;;;35851:348:0:o;38843:578::-;39002:4;-1:-1:-1;;;;;38975:31:0;:23;38990:7;38975:14;:23::i;:::-;-1:-1:-1;;;;;38975:31:0;;38967:85;;;;-1:-1:-1;;;38967:85:0;;20694:2:1;38967:85:0;;;20676:21:1;20733:2;20713:18;;;20706:30;20772:34;20752:18;;;20745:62;-1:-1:-1;;;20823:18:1;;;20816:39;20872:19;;38967:85:0;20492:405:1;38967:85:0;-1:-1:-1;;;;;39071:16:0;;39063:65;;;;-1:-1:-1;;;39063:65:0;;21104:2:1;39063:65:0;;;21086:21:1;21143:2;21123:18;;;21116:30;21182:34;21162:18;;;21155:62;-1:-1:-1;;;21233:18:1;;;21226:34;21277:19;;39063:65:0;20902:400:1;39063:65:0;39141:39;39162:4;39168:2;39172:7;39141:20;:39::i;:::-;39245:29;39262:1;39266:7;39245:8;:29::i;:::-;-1:-1:-1;;;;;39287:15:0;;;;;;:9;:15;;;;;:20;;39306:1;;39287:15;:20;;39306:1;;39287:20;:::i;:::-;;;;-1:-1:-1;;;;;;;39318:13:0;;;;;;:9;:13;;;;;:18;;39335:1;;39318:13;:18;;39335:1;;39318:18;:::i;:::-;;;;-1:-1:-1;;39347:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39347:21:0;-1:-1:-1;;;;;39347:21:0;;;;;;;;;39386:27;;39347:16;;39386:27;;;;;;;38843:578;;;:::o;63427:2376::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63583:23:0;:384;;;;;;;;63618:48;52286:1;63636:10;63647:1;63636:13;;;;;;;:::i;:::-;;;;;63651:11;63663:1;63651:14;;;;;63618:7;:48::i;:::-;63583:384;;;;63675:49;52317:1;63694:10;52317:1;63694:13;;;;63709:11;63721:1;63709:14;;63675:49;63583:384;;;;63733:48;52347:1;63751:10;52347:1;63751:13;;;;63766:11;63778:1;63766:14;;63733:48;63583:384;;;;63790:48;52377:1;63808:10;52377:1;63808:13;;;;63823:11;63835:1;63823:14;;63790:48;63583:384;;;;63847:51;52410:1;63868:10;52410:1;63868:13;;;;63883:11;63895:1;63883:14;;63847:51;63583:384;;;;63907:53;52445:1;63930:10;52445:1;63930:13;;;;63945:11;63957:1;63945:14;;63907:53;63583:384;;;-1:-1:-1;64552:38:0;64569:10;52286:1;64569:20;;;;;64552:38;;:16;:38::i;:::-;64598:15;;:19;64664:39;64681:10;52317:1;64681:21;;64664:39;64711:16;;;;:20;64777:38;64794:10;52347:1;64794:20;;64777:38;64823:15;;;;;:19;64498:363;;;;;;;;;64823:19;:15;64498:363;;:::i;:::-;;;;-1:-1:-1;;64498:363:0;;;;;;;;;64926:38;64943:10;52377:1;64943:20;;64926:38;64972:15;;;;:19;65040:41;65057:10;52410:1;65057:23;;65040:41;65089:18;;;;:22;65161:43;65178:10;52445:1;65178:25;;65161:43;65212:20;;;;:24;64872:383;;;;;;;;;65212:24;:20;64872:383;;:::i;:::-;;;;-1:-1:-1;;64872:383:0;;;;;;;;;;64003:1261;;;64872:383;64003:1261;;:::i;:::-;;;;;;;-1:-1:-1;;64003:1261:0;;;;;;63974:1297;;;65363:15;;;:20;;;;65437:16;;;;:21;;;65511:15;;;;:20;;;65584:15;;;;:20;;;65660:18;;;;:23;;;65741:20;;;;:25;;;65300:479;;;;65363:20;;65437:21;;65511:20;;65584;;65660:23;;65300:479;;:::i;:::-;;;;;;;-1:-1:-1;;65300:479:0;;;;;;;65278:12;;:502;-1:-1:-1;65278:12:0;63427:2376;-1:-1:-1;;;63427:2376:0:o;430:1790::-;528:11;;488:13;;554:8;550:23;;-1:-1:-1;;564:9:0;;;;;;;;;-1:-1:-1;564:9:0;;;430:1790;-1:-1:-1;430:1790:0:o;550:23::-;625:18;663:1;652:7;:3;658:1;652:7;:::i;:::-;651:13;;;;:::i;:::-;646:19;;:1;:19;:::i;:::-;625:40;-1:-1:-1;723:19:0;755:15;625:40;768:2;755:15;:::i;:::-;745:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;745:26:0;;723:48;;784:18;805:5;;;;;;;;;;;;;;;;;784:26;;874:1;867:5;863:13;919:2;911:6;907:15;970:1;938:960;993:3;990:1;987:10;938:960;;;1048:1;1091:12;;;;;1085:19;1186:4;1174:2;1170:14;;;;;1152:40;;1146:47;1338:2;1334:14;;;1330:25;;1316:40;;1310:47;1528:1;1524:13;;;1520:24;;1506:39;;1500:46;1709:16;;;;1695:31;;1689:38;1222:1;1218:11;;;1359:4;1306:58;;;1254:129;1408:11;;1496:57;;;1444:128;;;;1597:11;;1685:49;;1633:120;1782:3;1778:13;1811:22;;1881:1;1866:17;;;;1041:9;938:960;;;942:44;1930:1;1925:3;1921:11;1951:1;1946:84;;;;2049:1;2044:82;;;;1914:212;;1946:84;-1:-1:-1;;;;;1979:17:0;;1972:43;1946:84;;2044:82;-1:-1:-1;;;;;2077:17:0;;2070:41;1914:212;-1:-1:-1;;;2142:26:0;;;2149:6;430:1790;-1:-1:-1;;;;430:1790:0:o;5349:723::-;5405:13;5626:10;5622:53;;-1:-1:-1;;5653:10:0;;;;;;;;;;;;-1:-1:-1;;;5653:10:0;;;;;5349:723::o;5622:53::-;5700:5;5685:12;5741:78;5748:9;;5741:78;;5774:8;;;;:::i;:::-;;-1:-1:-1;5797:10:0;;-1:-1:-1;5805:2:0;5797:10;;:::i;:::-;;;5741:78;;;5829:19;5861:6;5851:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5851:17:0;;5829:39;;5879:154;5886:10;;5879:154;;5913:11;5923:1;5913:11;;:::i;:::-;;-1:-1:-1;5982:10:0;5990:2;5982:5;:10;:::i;:::-;5969:24;;:2;:24;:::i;:::-;5956:39;;5939:6;5946;5939:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5939:56:0;;;;;;;;-1:-1:-1;6010:11:0;6019:2;6010:11;;:::i;:::-;;;5879:154;;36541:110;36617:26;36627:2;36631:7;36617:26;;;;;;;;;;;;:9;:26::i;50744:217::-;50844:16;50852:7;50844;:16::i;:::-;50836:75;;;;-1:-1:-1;;;50836:75:0;;32143:2:1;50836:75:0;;;32125:21:1;32182:2;32162:18;;;32155:30;32221:34;32201:18;;;32194:62;-1:-1:-1;;;32272:18:1;;;32265:44;32326:19;;50836:75:0;31941:410:1;50836:75:0;50922:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;10333:191::-;10426:6;;;-1:-1:-1;;;;;10443:17:0;;;-1:-1:-1;;;;;;10443:17:0;;;;;;;10476:40;;10426:6;;;10443:17;10426:6;;10476:40;;10407:16;;10476:40;10396:128;10333:191;:::o;39855:315::-;40010:8;-1:-1:-1;;;;;40001:17:0;:5;-1:-1:-1;;;;;40001:17:0;;;39993:55;;;;-1:-1:-1;;;39993:55:0;;32558:2:1;39993:55:0;;;32540:21:1;32597:2;32577:18;;;32570:30;32636:27;32616:18;;;32609:55;32681:18;;39993:55:0;32356:349:1;39993:55:0;-1:-1:-1;;;;;40059:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;40059:46:0;;;;;;;;;;40121:41;;540::1;;;40121::0;;513:18:1;40121:41:0;;;;;;;39855:315;;;:::o;34929:::-;35086:28;35096:4;35102:2;35106:7;35086:9;:28::i;:::-;35133:48;35156:4;35162:2;35166:7;35175:5;35133:22;:48::i;:::-;35125:111;;;;-1:-1:-1;;;35125:111:0;;;;;;;:::i;49909:679::-;49982:13;50016:16;50024:7;50016;:16::i;:::-;50008:78;;;;-1:-1:-1;;;50008:78:0;;33331:2:1;50008:78:0;;;33313:21:1;33370:2;33350:18;;;33343:30;33409:34;33389:18;;;33382:62;-1:-1:-1;;;33460:18:1;;;33453:47;33517:19;;50008:78:0;33129:413:1;50008:78:0;50099:23;50125:19;;;:10;:19;;;;;50099:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50155:18;50176:10;31747:9;;;;;;;;;-1:-1:-1;31747:9:0;;;31670:94;50176:10;50155:31;;50268:4;50262:18;50284:1;50262:23;50258:72;;;-1:-1:-1;50309:9:0;49909:679;-1:-1:-1;;49909:679:0:o;50258:72::-;50434:23;;:27;50430:108;;50509:4;50515:9;50492:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50478:48;;;;49909:679;;;:::o;50430:108::-;50557:23;50572:7;50557:14;:23::i;29799:305::-;29901:4;-1:-1:-1;;;;;;29938:40:0;;-1:-1:-1;;;29938:40:0;;:105;;-1:-1:-1;;;;;;;29995:48:0;;-1:-1:-1;;;29995:48:0;29938:105;:158;;;-1:-1:-1;;;;;;;;;;21604:40:0;;;30060:36;21495:157;53018:188;53155:45;53182:4;53188:2;53192:7;53155:26;:45::i;53926:8799::-;-1:-1:-1;;;;;;;;;;;;;;;;;54060:29:0;;;;;;;;54061:1;54060:29;;54064:1;54060:29;;;;54067:1;54060:29;;;;;;54070:1;54060:29;;;;;;;;;;;54076:2;54060:29;;;;54042:15;;54060:29;;;;;;;;;;:::i;:::-;;;;;;;;;;54113:30;;;;;;;;54114:1;54113:30;;54117:1;54113:30;;;;;;;54120:1;54113:30;;;;54123:1;54113:30;;;;54126:2;54113:30;;;;54130:2;54113:30;;;;54060:29;-1:-1:-1;54096:14:0;;54113:30;;;;;;;;;;:::i;:::-;;;;;;;;;;54169:48;;;;;;;;54150:16;54169:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54113:30;;-1:-1:-1;54150:16:0;54169:48;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;54228:14:0;;;54224:211;;54261:11;54253:35;;;;-1:-1:-1;;;54253:35:0;;34224:2:1;54253:35:0;;;34206:21:1;34263:2;34243:18;;;34236:30;-1:-1:-1;;;34282:18:1;;;34275:41;34333:18;;54253:35:0;34022:335:1;54253:35:0;54224:211;;;54349:8;54336:21;;:9;:21;;;;:57;;;;-1:-1:-1;54373:20:0;54384:9;54373:8;:20;:::i;:::-;54361:32;;:9;:32;;;54336:57;54328:81;;;;-1:-1:-1;;;54328:81:0;;34773:2:1;54328:81:0;;;34755:21:1;34812:2;34792:18;;;34785:30;-1:-1:-1;;;34831:18:1;;;34824:41;34882:18;;54328:81:0;34571:335:1;54328:81:0;54441:19;54463:8238;;;;;;;;54472:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;54472:34:0;;;;;;54463:8238;;;;54515:501;;;;;;;;54662:18;54670:9;54662:7;:18::i;:::-;54554:458;;;;;;;;:::i;:::-;;;;;;;;;;;;;54515:501;;;;;;;;;;;;;;;;;-1:-1:-1;;;54515:501:0;;;;;;54463:8238;;;;55025:296;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;55025:296:0;;;;;;54463:8238;;;;55330:929;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;55330:929:0;;;;;;54463:8238;;;;56268:835;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;56268:835:0;;;;;;54463:8238;;;;57112:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57112:102:0;;;;;;54463:8238;;;;57223:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57223:88:0;;;;;;54463:8238;;;;57320:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57320:77:0;;;;;;54463:8238;;;;57406:332;;;;;;;;57540:18;57548:9;57540:7;:18::i;:::-;57441:293;;;;;;;;:::i;:::-;;;;;;;;;;;;;57406:332;;;;;;;;;;;;;;;;;-1:-1:-1;;;57406:332:0;;;;;;54463:8238;;;;57747:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;57747:277:0;;;;;;54463:8238;;;;58033:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;58033:186:0;;;;;;54463:8238;;;;58228:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;58228:113:0;;;;;;54463:8238;;;;58350:497;;;;;;;;58527:18;58535:9;58527:7;:18::i;:::-;58394:449;;;;;;;;:::i;:::-;;;;;;;;;;;;;58350:497;;;;;;;;;;;;;;;;;-1:-1:-1;;;58350:497:0;;;;;;54463:8238;;;;58856:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;58856:240:0;;;;;;54463:8238;;;;59105:236;;;;;;;;59213:18;59221:9;59213:7;:18::i;:::-;59144:193;;;;;;;;:::i;:::-;;;;;;;;;;;;;59105:236;;;;;;;;;;;;;;;;;-1:-1:-1;;;59105:236:0;;;;;;54463:8238;;;;59350:655;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;59350:655:0;;;;;;54463:8238;;;;60014:548;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;60014:548:0;;;;;;54463:8238;;;;60571:301;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;60571:301:0;;;;;;54463:8238;;;;60881:544;;;;;;;;61061:18;61069:9;61061:7;:18::i;:::-;60921:500;;;;;;;;:::i;:::-;;;;;;;;;;;;;60881:544;;;;;;;;;;;;;;;;;-1:-1:-1;;;60881:544:0;;;;;;54463:8238;;;;61434:413;;;;;;;;61638:18;61646:9;61638:7;:18::i;:::-;61472:371;;;;;;;;:::i;:::-;;;;;;;;;;;;;61434:413;;;;;;;;;;;;;;;;;-1:-1:-1;;;61434:413:0;;;;;;54463:8238;;;;61856:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;61856:339:0;;;;;;54463:8238;;;;62204:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;62204:479:0;;;;;;54463:8238;;;62691:9;54463:8238;;;;;;;;;:::i;:::-;;;;;;53926:8799;-1:-1:-1;;;;;;;;53926:8799:0:o;36878:321::-;37008:18;37014:2;37018:7;37008:5;:18::i;:::-;37059:54;37090:1;37094:2;37098:7;37107:5;37059:22;:54::i;:::-;37037:154;;;;-1:-1:-1;;;37037:154:0;;;;;;;:::i;40735:799::-;40890:4;-1:-1:-1;;;;;40911:13:0;;11674:20;11722:8;40907:620;;40947:72;;-1:-1:-1;;;40947:72:0;;-1:-1:-1;;;;;40947:36:0;;;;;:72;;7867:10;;40998:4;;41004:7;;41013:5;;40947:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40947:72:0;;;;;;;;-1:-1:-1;;40947:72:0;;;;;;;;;;;;:::i;:::-;;;40943:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41189:13:0;;41185:272;;41232:60;;-1:-1:-1;;;41232:60:0;;;;;;;:::i;41185:272::-;41407:6;41401:13;41392:6;41388:2;41384:15;41377:38;40943:529;-1:-1:-1;;;;;;41070:51:0;-1:-1:-1;;;41070:51:0;;-1:-1:-1;41063:58:0;;40907:620;-1:-1:-1;41511:4:0;40735:799;;;;;;:::o;31088:334::-;31161:13;31195:16;31203:7;31195;:16::i;:::-;31187:76;;;;-1:-1:-1;;;31187:76:0;;44814:2:1;31187:76:0;;;44796:21:1;44853:2;44833:18;;;44826:30;44892:34;44872:18;;;44865:62;-1:-1:-1;;;44943:18:1;;;44936:45;44998:19;;31187:76:0;44612:411:1;31187:76:0;31276:21;31300:10;31747:9;;;;;;;;;-1:-1:-1;31747:9:0;;;31670:94;31300:10;31276:34;;31352:1;31334:7;31328:21;:25;:86;;;;;;;;;;;;;;;;;31380:7;31389:18;:7;:16;:18::i;:::-;31363:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31328:86;31321:93;31088:334;-1:-1:-1;;;31088:334:0:o;44926:589::-;-1:-1:-1;;;;;45132:18:0;;45128:187;;45167:40;45199:7;46342:10;:17;;46315:24;;;;:15;:24;;;;;:44;;;46370:24;;;;;;;;;;;;46238:164;45167:40;45128:187;;;45237:2;-1:-1:-1;;;;;45229:10:0;:4;-1:-1:-1;;;;;45229:10:0;;45225:90;;45256:47;45289:4;45295:7;45256:32;:47::i;:::-;-1:-1:-1;;;;;45329:16:0;;45325:183;;45362:45;45399:7;45362:36;:45::i;45325:183::-;45435:4;-1:-1:-1;;;;;45429:10:0;:2;-1:-1:-1;;;;;45429:10:0;;45425:83;;45456:40;45484:2;45488:7;45456:27;:40::i;53699:221::-;53793:121;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;53760:13;53793:121;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;-1:-1:-1;;;53793:121:0;;;;-1:-1:-1;;;53793:121:0;;;;;;;;;;;;;;:::i;:::-;;;;;;53699:221;-1:-1:-1;;53699:221:0:o;37535:382::-;-1:-1:-1;;;;;37615:16:0;;37607:61;;;;-1:-1:-1;;;37607:61:0;;45230:2:1;37607:61:0;;;45212:21:1;;;45249:18;;;45242:30;45308:34;45288:18;;;45281:62;45360:18;;37607:61:0;45028:356:1;37607:61:0;37688:16;37696:7;37688;:16::i;:::-;37687:17;37679:58;;;;-1:-1:-1;;;37679:58:0;;45591:2:1;37679:58:0;;;45573:21:1;45630:2;45610:18;;;45603:30;45669;45649:18;;;45642:58;45717:18;;37679:58:0;45389:352:1;37679:58:0;37750:45;37779:1;37783:2;37787:7;37750:20;:45::i;:::-;-1:-1:-1;;;;;37808:13:0;;;;;;:9;:13;;;;;:18;;37825:1;;37808:13;:18;;37825:1;;37808:18;:::i;:::-;;;;-1:-1:-1;;37837:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37837:21:0;-1:-1:-1;;;;;37837:21:0;;;;;;;;37876:33;;37837:16;;;37876:33;;37837:16;;37876:33;37535:382;;:::o;47029:988::-;47295:22;47345:1;47320:22;47337:4;47320:16;:22::i;:::-;:26;;;;:::i;:::-;47357:18;47378:26;;;:17;:26;;;;;;47295:51;;-1:-1:-1;47511:28:0;;;47507:328;;-1:-1:-1;;;;;47578:18:0;;47556:19;47578:18;;;:12;:18;;;;;;;;:34;;;;;;;;;47629:30;;;;;;:44;;;47746:30;;:17;:30;;;;;:43;;;47507:328;-1:-1:-1;47931:26:0;;;;:17;:26;;;;;;;;47924:33;;;-1:-1:-1;;;;;47975:18:0;;;;;:12;:18;;;;;:34;;;;;;;47968:41;47029:988::o;48312:1079::-;48590:10;:17;48565:22;;48590:21;;48610:1;;48590:21;:::i;:::-;48622:18;48643:24;;;:15;:24;;;;;;49016:10;:26;;48565:46;;-1:-1:-1;48643:24:0;;48565:46;;49016:26;;;;;;:::i;:::-;;;;;;;;;48994:48;;49080:11;49055:10;49066;49055:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;49160:28;;;:15;:28;;;;;;;:41;;;49332:24;;;;;49325:31;49367:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;48383:1008;;;48312:1079;:::o;45816:221::-;45901:14;45918:20;45935:2;45918:16;:20::i;:::-;-1:-1:-1;;;;;45949:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;45994:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;45816:221:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:127::-;653:10;648:3;644:20;641:1;634:31;684:4;681:1;674:15;708:4;705:1;698:15;724:275;795:2;789:9;860:2;841:13;;-1:-1:-1;;837:27:1;825:40;;895:18;880:34;;916:22;;;877:62;874:88;;;942:18;;:::i;:::-;978:2;971:22;724:275;;-1:-1:-1;724:275:1:o;1004:815::-;1052:5;1105:3;1098:4;1090:6;1086:17;1082:27;1072:55;;1123:1;1120;1113:12;1072:55;1156:2;1150:9;1198:3;1190:6;1186:16;1268:6;1256:10;1253:22;1232:18;1220:10;1217:34;1214:62;1211:88;;;1279:18;;:::i;:::-;1315:2;1308:22;1350:6;1391:3;1379:16;;1407:15;;;1404:35;;;1435:1;1432;1425:12;1404:35;1459:6;1474:315;1490:6;1485:3;1482:15;1474:315;;;1572:3;1559:17;1620:4;1613:5;1609:16;1602:5;1599:27;1589:125;;1668:1;1697:2;1693;1686:14;1589:125;1727:18;;1774:4;1765:14;;;;1507;1474:315;;;-1:-1:-1;1807:6:1;;1004:815;-1:-1:-1;;;;;1004:815:1:o;1824:330::-;1934:6;1942;1995:3;1983:9;1974:7;1970:23;1966:33;1963:53;;;2012:1;2009;2002:12;1963:53;2035:42;2069:7;2058:9;2035:42;:::i;:::-;2025:52;;2096;2140:7;2134:3;2123:9;2119:19;2096:52;:::i;:::-;2086:62;;1824:330;;;;;:::o;2159:258::-;2231:1;2241:113;2255:6;2252:1;2249:13;2241:113;;;2331:11;;;2325:18;2312:11;;;2305:39;2277:2;2270:10;2241:113;;;2372:6;2369:1;2366:13;2363:48;;;-1:-1:-1;;2407:1:1;2389:16;;2382:27;2159:258::o;2422:269::-;2475:3;2513:5;2507:12;2540:6;2535:3;2528:19;2556:63;2612:6;2605:4;2600:3;2596:14;2589:4;2582:5;2578:16;2556:63;:::i;:::-;2673:2;2652:15;-1:-1:-1;;2648:29:1;2639:39;;;;2680:4;2635:50;;2422:269;-1:-1:-1;;2422:269:1:o;2696:231::-;2845:2;2834:9;2827:21;2808:4;2865:56;2917:2;2906:9;2902:18;2894:6;2865:56;:::i;2932:180::-;2991:6;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;-1:-1:-1;3083:23:1;;2932:180;-1:-1:-1;2932:180:1:o;3325:173::-;3393:20;;-1:-1:-1;;;;;3442:31:1;;3432:42;;3422:70;;3488:1;3485;3478:12;3422:70;3325:173;;;:::o;3503:254::-;3571:6;3579;3632:2;3620:9;3611:7;3607:23;3603:32;3600:52;;;3648:1;3645;3638:12;3600:52;3671:29;3690:9;3671:29;:::i;:::-;3661:39;3747:2;3732:18;;;;3719:32;;-1:-1:-1;;;3503:254:1:o;3944:160::-;4009:20;;4065:13;;4058:21;4048:32;;4038:60;;4094:1;4091;4084:12;4109:180;4165:6;4218:2;4206:9;4197:7;4193:23;4189:32;4186:52;;;4234:1;4231;4224:12;4186:52;4257:26;4273:9;4257:26;:::i;4294:328::-;4371:6;4379;4387;4440:2;4428:9;4419:7;4415:23;4411:32;4408:52;;;4456:1;4453;4446:12;4408:52;4479:29;4498:9;4479:29;:::i;:::-;4469:39;;4527:38;4561:2;4550:9;4546:18;4527:38;:::i;:::-;4517:48;;4612:2;4601:9;4597:18;4584:32;4574:42;;4294:328;;;;;:::o;4627:186::-;4686:6;4739:2;4727:9;4718:7;4714:23;4710:32;4707:52;;;4755:1;4752;4745:12;4707:52;4778:29;4797:9;4778:29;:::i;4818:254::-;4883:6;4891;4944:2;4932:9;4923:7;4919:23;4915:32;4912:52;;;4960:1;4957;4950:12;4912:52;4983:29;5002:9;4983:29;:::i;:::-;4973:39;;5031:35;5062:2;5051:9;5047:18;5031:35;:::i;5077:980::-;5172:6;5180;5188;5196;5249:3;5237:9;5228:7;5224:23;5220:33;5217:53;;;5266:1;5263;5256:12;5217:53;5289:29;5308:9;5289:29;:::i;:::-;5279:39;;5337:2;5358:38;5392:2;5381:9;5377:18;5358:38;:::i;:::-;5348:48;;5443:2;5432:9;5428:18;5415:32;5405:42;;5498:2;5487:9;5483:18;5470:32;5521:18;5562:2;5554:6;5551:14;5548:34;;;5578:1;5575;5568:12;5548:34;5616:6;5605:9;5601:22;5591:32;;5661:7;5654:4;5650:2;5646:13;5642:27;5632:55;;5683:1;5680;5673:12;5632:55;5719:2;5706:16;5741:2;5737;5734:10;5731:36;;;5747:18;;:::i;:::-;5789:53;5832:2;5813:13;;-1:-1:-1;;5809:27:1;5805:36;;5789:53;:::i;:::-;5776:66;;5865:2;5858:5;5851:17;5905:7;5900:2;5895;5891;5887:11;5883:20;5880:33;5877:53;;;5926:1;5923;5916:12;5877:53;5981:2;5976;5972;5968:11;5963:2;5956:5;5952:14;5939:45;6025:1;6020:2;6015;6008:5;6004:14;6000:23;5993:34;;6046:5;6036:15;;;;;5077:980;;;;;;;:::o;6062:260::-;6130:6;6138;6191:2;6179:9;6170:7;6166:23;6162:32;6159:52;;;6207:1;6204;6197:12;6159:52;6230:29;6249:9;6230:29;:::i;:::-;6220:39;;6278:38;6312:2;6301:9;6297:18;6278:38;:::i;6327:380::-;6406:1;6402:12;;;;6449;;;6470:61;;6524:4;6516:6;6512:17;6502:27;;6470:61;6577:2;6569:6;6566:14;6546:18;6543:38;6540:161;;;6623:10;6618:3;6614:20;6611:1;6604:31;6658:4;6655:1;6648:15;6686:4;6683:1;6676:15;6540:161;;6327:380;;;:::o;7952:356::-;8154:2;8136:21;;;8173:18;;;8166:30;8232:34;8227:2;8212:18;;8205:62;8299:2;8284:18;;7952:356::o;8313:413::-;8515:2;8497:21;;;8554:2;8534:18;;;8527:30;8593:34;8588:2;8573:18;;8566:62;-1:-1:-1;;;8659:2:1;8644:18;;8637:47;8716:3;8701:19;;8313:413::o;10111:127::-;10172:10;10167:3;10163:20;10160:1;10153:31;10203:4;10200:1;10193:15;10227:4;10224:1;10217:15;11974:185;12016:3;12054:5;12048:12;12069:52;12114:6;12109:3;12102:4;12095:5;12091:16;12069:52;:::i;:::-;12137:16;;;;;11974:185;-1:-1:-1;;11974:185:1:o;12164:1350::-;12628:66;12623:3;12616:79;12725:66;12720:2;12715:3;12711:12;12704:88;12822:66;12817:2;12812:3;12808:12;12801:88;12928:26;12923:3;12919:36;12914:2;12909:3;12905:12;12898:58;12987:34;12981:3;12976;12972:13;12965:57;13053:34;13047:3;13042;13038:13;13031:57;13119:34;13113:3;13108;13104:13;13097:57;13185:34;13179:3;13174;13170:13;13163:57;13251:28;13245:3;13240;13236:13;13229:51;12598:3;13299;13331:6;13325:13;13347:60;13400:6;13395:2;13390:3;13386:12;13381:2;13373:6;13369:15;13347:60;:::i;:::-;-1:-1:-1;;;13426:16:1;;13458:11;;;13451:29;;;;-1:-1:-1;13504:3:1;13496:12;;12164:1350;-1:-1:-1;12164:1350:1:o;13519:445::-;13781:28;13776:3;13769:41;13751:3;13839:6;13833:13;13855:62;13910:6;13905:2;13900:3;13896:12;13889:4;13881:6;13877:17;13855:62;:::i;:::-;13937:16;;;;13955:2;13933:25;;13519:445;-1:-1:-1;;13519:445:1:o;14606:2437::-;-1:-1:-1;;;16164:16:1;;-1:-1:-1;;;16205:1:1;16196:11;;16189:61;16273:13;;-1:-1:-1;;16295:62:1;16273:13;16345:2;16336:12;;16329:4;16317:17;;16295:62;:::i;:::-;-1:-1:-1;;;16449:2:1;16376:16;;;16441:11;;;16434:23;;;-1:-1:-1;;;16481:2:1;16473:11;;16466:65;-1:-1:-1;;;16555:2:1;16547:11;;16540:36;16600:2;16592:11;;16585:23;-1:-1:-1;;;16632:2:1;16624:11;;16617:49;-1:-1:-1;;;16690:2:1;16682:11;;16675:33;16733:13;;16755:63;16733:13;16804:2;16796:11;;16789:4;16777:17;;16755:63;:::i;:::-;16834:203;16864:172;16894:141;16920:114;16950:83;16980:52;17028:2;17017:8;17013:2;17009:17;17005:26;-1:-1:-1;;;14029:27:1;;14081:1;14072:11;;13969:120;16980:52;-1:-1:-1;;;14159:51:1;;14235:2;14226:12;;14094:150;16950:83;-1:-1:-1;;;14314:16:1;;14355:1;14346:11;;14249:114;16920;16912:6;16894:141;:::i;:::-;-1:-1:-1;;;14433:16:1;;14474:1;14465:11;;14368:114;16864:172;-1:-1:-1;;;14552:16:1;;14593:1;14584:11;;14487:114;16834:203;16827:210;14606:2437;-1:-1:-1;;;;;;;14606:2437:1:o;17048:448::-;17310:31;17305:3;17298:44;17280:3;17371:6;17365:13;17387:62;17442:6;17437:2;17432:3;17428:12;17421:4;17413:6;17409:17;17387:62;:::i;:::-;17469:16;;;;17487:2;17465:25;;17048:448;-1:-1:-1;;17048:448:1:o;17501:127::-;17562:10;17557:3;17553:20;17550:1;17543:31;17593:4;17590:1;17583:15;17617:4;17614:1;17607:15;17633:135;17672:3;-1:-1:-1;;17693:17:1;;17690:43;;;17713:18;;:::i;:::-;-1:-1:-1;17760:1:1;17749:13;;17633:135::o;19001:393::-;19154:3;19192:6;19186:13;19208:53;19254:6;19249:3;19242:4;19234:6;19230:17;19208:53;:::i;:::-;19348:3;19326:16;;;;-1:-1:-1;;;;;;19322:36:1;19283:16;;;;19308:51;;;19386:1;19375:13;;19001:393;-1:-1:-1;;19001:393:1:o;19399:495::-;19576:3;19614:6;19608:13;19630:53;19676:6;19671:3;19664:4;19656:6;19652:17;19630:53;:::i;:::-;-1:-1:-1;;;;;;19744:3:1;19780:16;;;19776:25;;19705:16;;;;19762:40;;;19837:16;;;;19833:25;19829:1;19818:13;;19811:48;19886:1;19875:13;;;-1:-1:-1;;19399:495:1:o;19899:175::-;19936:3;19980:4;19973:5;19969:16;20009:4;20000:7;19997:17;19994:43;;;20017:18;;:::i;:::-;20066:1;20053:15;;19899:175;-1:-1:-1;;19899:175:1:o;21307:125::-;21347:4;21375:1;21372;21369:8;21366:34;;;21380:18;;:::i;:::-;-1:-1:-1;21417:9:1;;21307:125::o;21437:128::-;21477:3;21508:1;21504:6;21501:1;21498:13;21495:39;;;21514:18;;:::i;:::-;-1:-1:-1;21550:9:1;;21437:128::o;21992:2352::-;-1:-1:-1;;;23290:66:1;;23379:13;;23272:3;;23401:62;23379:13;23451:2;23442:12;;23435:4;23423:17;;23401:62;:::i;:::-;-1:-1:-1;;;23555:2:1;23482:16;;;23547:11;;;23540:23;;;23588:13;;23610:63;23588:13;23659:2;23651:11;;23644:4;23632:17;;23610:63;:::i;:::-;-1:-1:-1;;;23733:2:1;23692:17;;;;23725:11;;;23718:27;-1:-1:-1;;;23769:2:1;23761:11;;23754:76;23855:13;;23877:63;23855:13;23926:2;23918:11;;23911:4;23899:17;;23877:63;:::i;:::-;24000:2;23959:17;;23992:11;;;23985:23;24033:13;;24055:63;24033:13;24104:2;24096:11;;24089:4;24077:17;;24055:63;:::i;:::-;24134:204;24164:173;24190:146;24220:115;24246:88;24276:57;24329:2;24318:8;24314:2;24310:17;24306:26;-1:-1:-1;;;21765:19:1;;21809:1;21800:11;;21700:117;24276:57;-1:-1:-1;;;21887:66:1;;21978:2;21969:12;;21822:165;24246:88;24238:6;24220:115;:::i;:::-;-1:-1:-1;;;21635:27:1;;21687:1;21678:11;;21570:125;24190:146;24182:6;24164:173;:::i;:::-;-1:-1:-1;;;21765:19:1;;21809:1;21800:11;;21700:117;24134:204;24127:211;21992:2352;-1:-1:-1;;;;;;;;;;21992:2352:1:o;24349:2317::-;-1:-1:-1;;;25546:66:1;;25635:13;;25528:3;;25657:62;25635:13;25707:2;25698:12;;25691:4;25679:17;;25657:62;:::i;:::-;-1:-1:-1;;;25811:2:1;25738:16;;;25803:11;;;25796:23;;;25844:13;;25866:63;25844:13;25915:2;25907:11;;25900:4;25888:17;;25866:63;:::i;:::-;-1:-1:-1;;;25989:2:1;25948:17;;;;25981:11;;;25974:27;26030:66;26025:2;26017:11;;26010:87;26122:13;;26144:63;26122:13;26193:2;26185:11;;26178:4;26166:17;;26144:63;:::i;:::-;26267:2;26226:17;;26259:11;;;26252:23;26300:13;;26322:63;26300:13;26371:2;26363:11;;26356:4;26344:17;;26322:63;:::i;:::-;26450:66;26445:2;26404:17;;;;26437:11;;;26430:87;26533:127;26563:96;26589:69;26619:38;26653:2;26645:11;;26637:6;26619:38;:::i;26589:69::-;26581:6;26563:96;:::i;26533:127::-;26526:134;24349:2317;-1:-1:-1;;;;;;;;;24349:2317:1:o;26671:1680::-;27078:66;27073:3;27066:79;27175:66;27170:2;27165:3;27161:12;27154:88;27272:34;27267:2;27262:3;27258:12;27251:56;27337:34;27332:2;27327:3;27323:12;27316:56;27403:34;27397:3;27392;27388:13;27381:57;27469:66;27463:3;27458;27454:13;27447:89;27567:66;27561:3;27556;27552:13;27545:89;27665:66;27659:3;27654;27650:13;27643:89;27763:66;27757:3;27752;27748:13;27741:89;27861:66;27855:3;27850;27846:13;27839:89;27959:66;27953:3;27948;27944:13;27937:89;28057:66;28051:3;28046;28042:13;28035:89;28155:66;28149:3;28144;28140:13;28133:89;-1:-1:-1;;;28247:3:1;28242;28238:13;28231:31;27048:3;28278:67;28304:40;28339:3;28334;28330:13;28322:6;28304:40;:::i;:::-;28296:6;28278:67;:::i;29219:2170::-;30327:66;30322:3;30315:79;30433:4;30428:3;30424:14;30419:2;30414:3;30410:12;30403:36;30297:3;30468:6;30462:13;30484:60;30537:6;30532:2;30527:3;30523:12;30518:2;30510:6;30506:15;30484:60;:::i;:::-;30608:66;30603:2;30563:16;;;30595:11;;;30588:87;-1:-1:-1;;;30699:2:1;30691:11;;30684:47;30756:13;;30778:61;30756:13;30825:2;30817:11;;30812:2;30800:15;;30778:61;:::i;:::-;30904:66;30899:2;30858:17;;;;30891:11;;;30884:87;-1:-1:-1;;;30995:3:1;30987:12;;30980:46;31051:13;;31073:62;31051:13;31120:3;31112:12;;31107:2;31095:15;;31073:62;:::i;:::-;31151:232;31181:201;31207:174;31237:143;31263:116;31293:85;31319:58;31372:3;31361:8;31357:2;31353:17;31349:27;28433:66;28421:79;;-1:-1:-1;;;28525:2:1;28516:12;;28509:46;28580:2;28571:12;;28356:233;31319:58;31311:6;31293:85;:::i;:::-;28671:66;28659:79;;-1:-1:-1;;;28763:2:1;28754:12;;28747:52;28824:2;28815:12;;28594:239;31237:143;28915:66;28903:79;;-1:-1:-1;;;29007:2:1;28998:12;;28991:56;29072:2;29063:12;;28838:243;31181:201;-1:-1:-1;;;29151:30:1;;29206:1;29197:11;;29086:128;31394:127;31455:10;31450:3;31446:20;31443:1;31436:31;31486:4;31483:1;31476:15;31510:4;31507:1;31500:15;31526:120;31566:1;31592;31582:35;;31597:18;;:::i;:::-;-1:-1:-1;31631:9:1;;31526:120::o;31651:168::-;31691:7;31757:1;31753;31749:6;31745:14;31742:1;31739:21;31734:1;31727:9;31720:17;31716:45;31713:71;;;31764:18;;:::i;:::-;-1:-1:-1;31804:9:1;;31651:168::o;31824:112::-;31856:1;31882;31872:35;;31887:18;;:::i;:::-;-1:-1:-1;31921:9:1;;31824:112::o;32710:414::-;32912:2;32894:21;;;32951:2;32931:18;;;32924:30;32990:34;32985:2;32970:18;;32963:62;-1:-1:-1;;;33056:2:1;33041:18;;33034:48;33114:3;33099:19;;32710:414::o;33547:470::-;33726:3;33764:6;33758:13;33780:53;33826:6;33821:3;33814:4;33806:6;33802:17;33780:53;:::i;:::-;33896:13;;33855:16;;;;33918:57;33896:13;33855:16;33952:4;33940:17;;33918:57;:::i;:::-;33991:20;;33547:470;-1:-1:-1;;;;33547:470:1:o;34362:204::-;34400:3;34436:4;34433:1;34429:12;34468:4;34465:1;34461:12;34503:3;34497:4;34493:14;34488:3;34485:23;34482:49;;;34511:18;;:::i;:::-;34547:13;;34362:204;-1:-1:-1;;;34362:204:1:o;34911:1632::-;35274:66;35269:3;35262:79;35371:34;35366:2;35361:3;35357:12;35350:56;35436:66;35431:2;35426:3;35422:12;35415:88;35244:3;35532:6;35526:13;35548:60;35601:6;35596:2;35591:3;35587:12;35582:2;35574:6;35570:15;35548:60;:::i;:::-;35672:66;35667:2;35627:16;;;;35659:11;;;35652:87;-1:-1:-1;35769:34:1;35763:3;35755:12;;35748:56;35834:34;35828:3;35820:12;;35813:56;35899:34;35893:3;35885:12;;35878:56;35964:66;35958:3;35950:12;;35943:88;36061:66;36055:3;36047:12;;36040:88;36158:66;36152:3;36144:12;;36137:88;36255:34;36249:3;36241:12;;36234:56;36320:34;36314:3;36306:12;;36299:56;36385:66;36379:3;36371:12;;36364:88;-1:-1:-1;;;36476:3:1;36468:12;;36461:48;36533:3;36525:12;;34911:1632;-1:-1:-1;34911:1632:1:o;36548:1259::-;36911:66;36906:3;36899:79;37008:34;37003:2;36998:3;36994:12;36987:56;37082:30;37077:3;37073:40;37068:2;37063:3;37059:12;37052:62;36881:3;37143:6;37137:13;37159:60;37212:6;37207:2;37202:3;37198:12;37193:2;37185:6;37181:15;37159:60;:::i;:::-;37283:66;37278:2;37238:16;;;;37270:11;;;37263:87;-1:-1:-1;37380:66:1;37374:3;37366:12;;37359:88;37477:66;37471:3;37463:12;;37456:88;37574:34;37568:3;37560:12;;37553:56;37639:66;37633:3;37625:12;;37618:88;-1:-1:-1;;;37730:3:1;37722:12;;37715:58;37797:3;37789:12;;36548:1259;-1:-1:-1;36548:1259:1:o;37812:1672::-;38175:66;38170:3;38163:79;38272:34;38267:2;38262:3;38258:12;38251:56;38337:34;38332:2;38327:3;38323:12;38316:56;38411:34;38406:3;38402:44;38397:2;38392:3;38388:12;38381:66;38145:3;38476:6;38470:13;38492:61;38546:6;38540:3;38535;38531:13;38526:2;38518:6;38514:15;38492:61;:::i;:::-;38618:66;38612:3;38572:16;;;;38604:12;;;38597:88;-1:-1:-1;38715:66:1;38709:3;38701:12;;38694:88;38812:66;38806:3;38798:12;;38791:88;38909:66;38903:3;38895:12;;38888:88;39006:66;39000:3;38992:12;;38985:88;39103:66;39097:3;39089:12;;39082:88;39200:34;39194:3;39186:12;;39179:56;39265:34;39259:3;39251:12;;39244:56;39330:66;39324:3;39316:12;;39309:88;-1:-1:-1;;;39421:3:1;39413:12;;39406:44;39474:3;39466:12;;37812:1672;-1:-1:-1;37812:1672:1:o;39489:989::-;39852:66;39847:3;39840:79;39958:34;39953:3;39949:44;39944:2;39939:3;39935:12;39928:66;39822:3;40023:6;40017:13;40039:60;40092:6;40087:2;40082:3;40078:12;40073:2;40065:6;40061:15;40039:60;:::i;:::-;40163:66;40158:2;40118:16;;;;40150:11;;;40143:87;-1:-1:-1;40259:34:1;40254:2;40246:11;;40239:55;40324:66;40318:3;40310:12;;40303:88;-1:-1:-1;;;40415:3:1;40407:12;;40400:44;40468:3;40460:12;;39489:989;-1:-1:-1;39489:989:1:o;40483:1847::-;40846:66;40841:3;40834:79;40943:66;40938:2;40933:3;40929:12;40922:88;41040:66;41035:2;41030:3;41026:12;41019:88;41137:66;41132:2;41127:3;41123:12;41116:88;40816:3;41233:6;41227:13;41249:61;41303:6;41297:3;41292;41288:13;41283:2;41275:6;41271:15;41249:61;:::i;:::-;41375:66;41369:3;41329:16;;;;41361:12;;;41354:88;-1:-1:-1;41472:66:1;41466:3;41458:12;;41451:88;41569:66;41563:3;41555:12;;41548:88;41666:66;41660:3;41652:12;;41645:88;41763:66;41757:3;41749:12;;41742:88;41860:66;41854:3;41846:12;;41839:88;41957:34;41951:3;41943:12;;41936:56;42022:34;42016:3;42008:12;;42001:56;42087:34;42081:3;42073:12;;42066:56;42152:66;42146:3;42138:12;;42131:88;-1:-1:-1;;;42243:3:1;42235:12;;42228:68;42320:3;42312:12;;40483:1847;-1:-1:-1;40483:1847:1:o;42335:1513::-;42698:66;42693:3;42686:79;42795:66;42790:2;42785:3;42781:12;42774:88;42892:66;42887:2;42882:3;42878:12;42871:88;42989:66;42984:2;42979:3;42975:12;42968:88;43096:36;43091:3;43087:46;43081:3;43076;43072:13;43065:69;42668:3;43163:6;43157:13;43179:61;43233:6;43227:3;43222;43218:13;43213:2;43205:6;43201:15;43179:61;:::i;:::-;43305:66;43299:3;43259:16;;;;43291:12;;;43284:88;-1:-1:-1;43402:34:1;43396:3;43388:12;;43381:56;43467:66;43461:3;43453:12;;43446:88;43564:66;43558:3;43550:12;;43543:88;43661:66;43655:3;43647:12;;43640:88;-1:-1:-1;;;43752:3:1;43744:12;;43737:77;43838:3;43830:12;;42335:1513;-1:-1:-1;42335:1513:1:o;43853:500::-;-1:-1:-1;;;;;44122:15:1;;;44104:34;;44174:15;;44169:2;44154:18;;44147:43;44221:2;44206:18;;44199:34;;;44269:3;44264:2;44249:18;;44242:31;;;44047:4;;44290:57;;44327:19;;44319:6;44290:57;:::i;:::-;44282:65;43853:500;-1:-1:-1;;;;;;43853:500:1:o;44358:249::-;44427:6;44480:2;44468:9;44459:7;44455:23;44451:32;44448:52;;;44496:1;44493;44486:12;44448:52;44528:9;44522:16;44547:30;44571:5;44547:30;:::i;45746:127::-;45807:10;45802:3;45798:20;45795:1;45788:31;45838:4;45835:1;45828:15;45862:4;45859:1;45852:15
Metadata Hash
ipfs://4b5848bfa36185222eb4c0a8c4a91ba2cded81acd24b567debee0cd5c2ec5ebf