ERC-721
Overview
Max Total Supply
35 2411
Holders
11
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 2411Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-04 */ // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.8.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); 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) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); 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: caller is not token owner or 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: caller is not token owner or 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 the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @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 _ownerOf(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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256, /* firstTokenId */ uint256 batchSize ) internal virtual { if (batchSize > 1) { if (from != address(0)) { _balances[from] -= batchSize; } if (to != address(0)) { _balances[to] += batchSize; } } } /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.8.0) (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 See {ERC721-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual override { super._beforeTokenTransfer(from, to, firstTokenId, batchSize); if (batchSize > 1) { // Will only trigger during construction. Batch transferring (minting) is not available afterwards. revert("ERC721Enumerable: consecutive transfers not supported"); } uint256 tokenId = firstTokenId; 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: github/2411/redacted.sol pragma solidity >=0.7.0 <0.9.0; contract NFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.00 ether; uint256 public maxSupply = 1000; uint256 public maxMintAmount = 1; uint256 public nftPerAddressLimit = 3; bool public paused = false; bool public revealed = true; bool public onlyWhitelisted = false; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 2411"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max 2411 limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max 2411 per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public payable onlyOwner { // This will payout the owner 95% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a9190620005a5565b506000600e556103e8600f55600160105560036011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff021916908315150217905550348015620000be57600080fd5b5060405162005791380380620057918339818101604052810190620000e49190620007f0565b83838160009081620000f79190620005a5565b508060019081620001099190620005a5565b5050506200012c620001206200015860201b60201c565b6200016060201b60201c565b6200013d826200022660201b60201c565b6200014e816200024b60201b60201c565b5050505062000961565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002366200027060201b60201c565b80600b9081620002479190620005a5565b5050565b6200025b6200027060201b60201c565b80600d90816200026c9190620005a5565b5050565b620002806200015860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002a66200030160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f6906200093f565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ad57607f821691505b602082108103620003c357620003c262000365565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200042d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003ee565b620004398683620003ee565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000486620004806200047a8462000451565b6200045b565b62000451565b9050919050565b6000819050919050565b620004a28362000465565b620004ba620004b1826200048d565b848454620003fb565b825550505050565b600090565b620004d1620004c2565b620004de81848462000497565b505050565b5b818110156200050657620004fa600082620004c7565b600181019050620004e4565b5050565b601f82111562000555576200051f81620003c9565b6200052a84620003de565b810160208510156200053a578190505b620005526200054985620003de565b830182620004e3565b50505b505050565b600082821c905092915050565b60006200057a600019846008026200055a565b1980831691505092915050565b600062000595838362000567565b9150826002028217905092915050565b620005b0826200032b565b67ffffffffffffffff811115620005cc57620005cb62000336565b5b620005d8825462000394565b620005e58282856200050a565b600060209050601f8311600181146200061d576000841562000608578287015190505b62000614858262000587565b86555062000684565b601f1984166200062d86620003c9565b60005b82811015620006575784890151825560018201915060208501945060208101905062000630565b8683101562000677578489015162000673601f89168262000567565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006c682620006aa565b810181811067ffffffffffffffff82111715620006e857620006e762000336565b5b80604052505050565b6000620006fd6200068c565b90506200070b8282620006bb565b919050565b600067ffffffffffffffff8211156200072e576200072d62000336565b5b6200073982620006aa565b9050602081019050919050565b60005b838110156200076657808201518184015260208101905062000749565b60008484015250505050565b600062000789620007838462000710565b620006f1565b905082815260208101848484011115620007a857620007a7620006a5565b5b620007b584828562000746565b509392505050565b600082601f830112620007d557620007d4620006a0565b5b8151620007e784826020860162000772565b91505092915050565b600080600080608085870312156200080d576200080c62000696565b5b600085015167ffffffffffffffff8111156200082e576200082d6200069b565b5b6200083c87828801620007bd565b945050602085015167ffffffffffffffff81111562000860576200085f6200069b565b5b6200086e87828801620007bd565b935050604085015167ffffffffffffffff8111156200089257620008916200069b565b5b620008a087828801620007bd565b925050606085015167ffffffffffffffff811115620008c457620008c36200069b565b5b620008d287828801620007bd565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000927602083620008de565b91506200093482620008ef565b602082019050919050565b600060208201905081810360008301526200095a8162000918565b9050919050565b614e2080620009716000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613345565b610a68565b6040516102ab919061338d565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906133d4565b610ae2565b005b3480156102e957600080fd5b506102f2610b07565b6040516102ff9190613491565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906134e9565b610b99565b60405161033c9190613557565b60405180910390f35b34801561035157600080fd5b5061035a610bdf565b6040516103679190613491565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061359e565b610c6d565b005b3480156103a557600080fd5b506103ae610d84565b6040516103bb91906135ed565b60405180910390f35b3480156103d057600080fd5b506103d9610d8a565b6040516103e691906135ed565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613608565b610d97565b60405161042391906135ed565b60405180910390f35b34801561043857600080fd5b50610441610daf565b60405161044e91906135ed565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613635565b610db5565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061359e565b610e15565b6040516104b491906135ed565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613608565b610eba565b6040516104f1919061338d565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906133d4565b610f68565b005b61052b610f8d565b005b34801561053957600080fd5b50610554600480360381019061054f9190613635565b611015565b005b34801561056257600080fd5b5061057d60048036038101906105789190613608565b611035565b60405161058a9190613746565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906134e9565b6110e3565b005b3480156105c857600080fd5b506105e360048036038101906105de91906134e9565b6110f5565b6040516105f091906135ed565b60405180910390f35b34801561060557600080fd5b5061060e611166565b60405161061b919061338d565b60405180910390f35b34801561063057600080fd5b5061064b6004803603810190610646919061389d565b611179565b005b34801561065957600080fd5b50610662611194565b60405161066f919061338d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a91906134e9565b6111a7565b6040516106ac9190613557565b60405180910390f35b3480156106c157600080fd5b506106ca61122d565b6040516106d79190613491565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613608565b6112bb565b60405161071491906135ed565b60405180910390f35b34801561072957600080fd5b50610732611372565b005b34801561074057600080fd5b5061075b600480360381019061075691906134e9565b611386565b005b34801561076957600080fd5b50610772611398565b60405161077f9190613557565b60405180910390f35b34801561079457600080fd5b5061079d6113c2565b6040516107aa9190613491565b60405180910390f35b3480156107bf57600080fd5b506107c8611454565b6040516107d5919061338d565b60405180910390f35b6107f860048036038101906107f391906134e9565b611467565b005b34801561080657600080fd5b50610821600480360381019061081c91906138e6565b6117af565b005b34801561082f57600080fd5b506108386117c5565b005b34801561084657600080fd5b50610861600480360381019061085c91906139c7565b6117ea565b005b34801561086f57600080fd5b5061088a600480360381019061088591906134e9565b61184c565b6040516108979190613557565b60405180910390f35b3480156108ac57600080fd5b506108b561188b565b6040516108c291906135ed565b60405180910390f35b3480156108d757600080fd5b506108e0611891565b6040516108ed9190613491565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906134e9565b61191f565b60405161092a9190613491565b60405180910390f35b34801561093f57600080fd5b5061095a600480360381019061095591906134e9565b611a77565b005b34801561096857600080fd5b50610971611a89565b60405161097e91906135ed565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a9919061389d565b611a8f565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613a4a565b611aaa565b6040516109e4919061338d565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613aea565b611b3e565b005b348015610a2257600080fd5b50610a3d6004803603810190610a38919061389d565b611b6a565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613608565b611b85565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada82611c08565b5b9050919050565b610aea611cea565b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b1690613b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290613b66565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b5050505050905090565b6000610ba482611d68565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bec90613b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1890613b66565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505081565b6000610c78826111a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613c09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d07611db3565b73ffffffffffffffffffffffffffffffffffffffff161480610d365750610d3581610d30611db3565b611aaa565b5b610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90613c9b565b60405180910390fd5b610d7f8383611dbb565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610dc6610dc0611db3565b82611e74565b610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613d2d565b60405180910390fd5b610e10838383611f09565b505050565b6000610e20836112bb565b8210610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613dbf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f5d578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610efa57610ef9613ddf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f4a576001915050610f63565b8080610f5590613e3d565b915050610ec2565b50600090505b919050565b610f70611cea565b80601260026101000a81548160ff02191690831515021790555050565b610f95611cea565b6000610f9f611398565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fc290613eb6565b60006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b505090508061101257600080fd5b50565b611030838383604051806020016040528060008152506117ea565b505050565b60606000611042836112bb565b905060008167ffffffffffffffff8111156110605761105f613772565b5b60405190808252806020026020018201604052801561108e5781602001602082028036833780820191505090505b50905060005b828110156110d8576110a68582610e15565b8282815181106110b9576110b8613ddf565b5b60200260200101818152505080806110d090613e3d565b915050611094565b508092505050919050565b6110eb611cea565b80600e8190555050565b60006110ff610d8a565b8210611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613f3d565b60405180910390fd5b6008828154811061115457611153613ddf565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b611181611cea565b80600b90816111909190614109565b5050565b601260009054906101000a900460ff1681565b6000806111b383612202565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614227565b60405180910390fd5b80915050919050565b600b805461123a90613b66565b80601f016020809104026020016040519081016040528092919081815260200182805461126690613b66565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906142b9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61137a611cea565b611384600061223f565b565b61138e611cea565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113d190613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90613b66565b801561144a5780601f1061141f5761010080835404028352916020019161144a565b820191906000526020600020905b81548152906001019060200180831161142d57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614325565b60405180910390fd5b60006114c1610d8a565b905060008211611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614391565b60405180910390fd5b60105482111561154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614423565b60405180910390fd5b600f54828261155a9190614443565b111561159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906144c3565b60405180910390fd5b6115a3611398565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171f5760011515601260029054906101000a900460ff161515036116ce576115f933610eba565b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f9061452f565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838261168b9190614443565b11156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c39061459b565b60405180910390fd5b505b81600e546116dc91906145bb565b34101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614649565b60405180910390fd5b5b6000600190505b8281116117aa57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061177d90613e3d565b91905055506117973382846117929190614443565b612305565b80806117a290613e3d565b915050611726565b505050565b6117c16117ba611db3565b8383612323565b5050565b6117cd611cea565b6001601260016101000a81548160ff021916908315150217905550565b6117fb6117f5611db3565b83611e74565b61183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613d2d565b60405180910390fd5b6118468484848461248f565b50505050565b6013818154811061185c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461189e90613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546118ca90613b66565b80156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b606061192a826124eb565b611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906146db565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611a1657600d805461199190613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546119bd90613b66565b8015611a0a5780601f106119df57610100808354040283529160200191611a0a565b820191906000526020600020905b8154815290600101906020018083116119ed57829003601f168201915b50505050509050611a72565b6000611a2061252c565b90506000815111611a405760405180602001604052806000815250611a6e565b80611a4a846125be565b600c604051602001611a5e939291906147ba565b6040516020818303038152906040525b9150505b919050565b611a7f611cea565b8060118190555050565b600f5481565b611a97611cea565b80600c9081611aa69190614109565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b46611cea565b60136000611b5491906131fb565b818160139190611b6592919061321c565b505050565b611b72611cea565b80600d9081611b819190614109565b5050565b611b8d611cea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf39061485d565b60405180910390fd5b611c058161223f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ce35750611ce28261268c565b5b9050919050565b611cf2611db3565b73ffffffffffffffffffffffffffffffffffffffff16611d10611398565b73ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d906148c9565b60405180910390fd5b565b611d71816124eb565b611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790614227565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e2e836111a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e80836111a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ec25750611ec18185611aaa565b5b80611f0057508373ffffffffffffffffffffffffffffffffffffffff16611ee884610b99565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826111a7565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f769061495b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906149ed565b60405180910390fd5b611ffb83838360016126f6565b8273ffffffffffffffffffffffffffffffffffffffff1661201b826111a7565b73ffffffffffffffffffffffffffffffffffffffff1614612071576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120689061495b565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fd8383836001612854565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61231f82826040518060200160405280600081525061285a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612482919061338d565b60405180910390a3505050565b61249a848484611f09565b6124a6848484846128b5565b6124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614aeb565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661250d83612202565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461253b90613b66565b80601f016020809104026020016040519081016040528092919081815260200182805461256790613b66565b80156125b45780601f10612589576101008083540402835291602001916125b4565b820191906000526020600020905b81548152906001019060200180831161259757829003601f168201915b5050505050905090565b6060600060016125cd84612a3c565b01905060008167ffffffffffffffff8111156125ec576125eb613772565b5b6040519080825280601f01601f19166020018201604052801561261e5781602001600182028036833780820191505090505b509050600082602001820190505b600115612681578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161267557612674614b0b565b5b0494506000850361262c575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61270284848484612b8f565b6001811115612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d90614bac565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361278d5761278881612cb5565b6127cc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146127cb576127ca8582612cfe565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361280e5761280981612e6b565b61284d565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461284c5761284b8482612f3c565b5b5b5050505050565b50505050565b6128648383612fbb565b61287160008484846128b5565b6128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a790614aeb565b60405180910390fd5b505050565b60006128d68473ffffffffffffffffffffffffffffffffffffffff166131d8565b15612a2f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611db3565b8786866040518563ffffffff1660e01b81526004016129219493929190614c21565b6020604051808303816000875af192505050801561295d57506040513d601f19601f8201168201806040525081019061295a9190614c82565b60015b6129df573d806000811461298d576040519150601f19603f3d011682016040523d82523d6000602084013e612992565b606091505b5060008151036129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90614aeb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a34565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a9a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612a9057612a8f614b0b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612ad7576d04ee2d6d415b85acef81000000008381612acd57612acc614b0b565b5b0492506020810190505b662386f26fc100008310612b0657662386f26fc100008381612afc57612afb614b0b565b5b0492506010810190505b6305f5e1008310612b2f576305f5e1008381612b2557612b24614b0b565b5b0492506008810190505b6127108310612b54576127108381612b4a57612b49614b0b565b5b0492506004810190505b60648310612b775760648381612b6d57612b6c614b0b565b5b0492506002810190505b600a8310612b86576001810190505b80915050919050565b6001811115612caf57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c235780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1b9190614caf565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cae5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ca69190614443565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d0b846112bb565b612d159190614caf565b9050600060076000848152602001908152602001600020549050818114612dfa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e7f9190614caf565b9050600060096000848152602001908152602001600020549050600060088381548110612eaf57612eae613ddf565b5b906000526020600020015490508060088381548110612ed157612ed0613ddf565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f2057612f1f614ce3565b5b6001900381819060005260206000200160009055905550505050565b6000612f47836112bb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361302a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302190614d5e565b60405180910390fd5b613033816124eb565b15613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a90614dca565b60405180910390fd5b6130816000838360016126f6565b61308a816124eb565b156130ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c190614dca565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131d4600083836001612854565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b508054600082559060005260206000209081019061321991906132bc565b50565b8280548282559060005260206000209081019282156132ab579160200282015b828111156132aa57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061323c565b5b5090506132b891906132bc565b5090565b5b808211156132d55760008160009055506001016132bd565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613322816132ed565b811461332d57600080fd5b50565b60008135905061333f81613319565b92915050565b60006020828403121561335b5761335a6132e3565b5b600061336984828501613330565b91505092915050565b60008115159050919050565b61338781613372565b82525050565b60006020820190506133a2600083018461337e565b92915050565b6133b181613372565b81146133bc57600080fd5b50565b6000813590506133ce816133a8565b92915050565b6000602082840312156133ea576133e96132e3565b5b60006133f8848285016133bf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561343b578082015181840152602081019050613420565b60008484015250505050565b6000601f19601f8301169050919050565b600061346382613401565b61346d818561340c565b935061347d81856020860161341d565b61348681613447565b840191505092915050565b600060208201905081810360008301526134ab8184613458565b905092915050565b6000819050919050565b6134c6816134b3565b81146134d157600080fd5b50565b6000813590506134e3816134bd565b92915050565b6000602082840312156134ff576134fe6132e3565b5b600061350d848285016134d4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354182613516565b9050919050565b61355181613536565b82525050565b600060208201905061356c6000830184613548565b92915050565b61357b81613536565b811461358657600080fd5b50565b60008135905061359881613572565b92915050565b600080604083850312156135b5576135b46132e3565b5b60006135c385828601613589565b92505060206135d4858286016134d4565b9150509250929050565b6135e7816134b3565b82525050565b600060208201905061360260008301846135de565b92915050565b60006020828403121561361e5761361d6132e3565b5b600061362c84828501613589565b91505092915050565b60008060006060848603121561364e5761364d6132e3565b5b600061365c86828701613589565b935050602061366d86828701613589565b925050604061367e868287016134d4565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136bd816134b3565b82525050565b60006136cf83836136b4565b60208301905092915050565b6000602082019050919050565b60006136f382613688565b6136fd8185613693565b9350613708836136a4565b8060005b8381101561373957815161372088826136c3565b975061372b836136db565b92505060018101905061370c565b5085935050505092915050565b6000602082019050818103600083015261376081846136e8565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137aa82613447565b810181811067ffffffffffffffff821117156137c9576137c8613772565b5b80604052505050565b60006137dc6132d9565b90506137e882826137a1565b919050565b600067ffffffffffffffff82111561380857613807613772565b5b61381182613447565b9050602081019050919050565b82818337600083830152505050565b600061384061383b846137ed565b6137d2565b90508281526020810184848401111561385c5761385b61376d565b5b61386784828561381e565b509392505050565b600082601f83011261388457613883613768565b5b813561389484826020860161382d565b91505092915050565b6000602082840312156138b3576138b26132e3565b5b600082013567ffffffffffffffff8111156138d1576138d06132e8565b5b6138dd8482850161386f565b91505092915050565b600080604083850312156138fd576138fc6132e3565b5b600061390b85828601613589565b925050602061391c858286016133bf565b9150509250929050565b600067ffffffffffffffff82111561394157613940613772565b5b61394a82613447565b9050602081019050919050565b600061396a61396584613926565b6137d2565b9050828152602081018484840111156139865761398561376d565b5b61399184828561381e565b509392505050565b600082601f8301126139ae576139ad613768565b5b81356139be848260208601613957565b91505092915050565b600080600080608085870312156139e1576139e06132e3565b5b60006139ef87828801613589565b9450506020613a0087828801613589565b9350506040613a11878288016134d4565b925050606085013567ffffffffffffffff811115613a3257613a316132e8565b5b613a3e87828801613999565b91505092959194509250565b60008060408385031215613a6157613a606132e3565b5b6000613a6f85828601613589565b9250506020613a8085828601613589565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613aaa57613aa9613768565b5b8235905067ffffffffffffffff811115613ac757613ac6613a8a565b5b602083019150836020820283011115613ae357613ae2613a8f565b5b9250929050565b60008060208385031215613b0157613b006132e3565b5b600083013567ffffffffffffffff811115613b1f57613b1e6132e8565b5b613b2b85828601613a94565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7e57607f821691505b602082108103613b9157613b90613b37565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf360218361340c565b9150613bfe82613b97565b604082019050919050565b60006020820190508181036000830152613c2281613be6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613c85603d8361340c565b9150613c9082613c29565b604082019050919050565b60006020820190508181036000830152613cb481613c78565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613d17602d8361340c565b9150613d2282613cbb565b604082019050919050565b60006020820190508181036000830152613d4681613d0a565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613da9602b8361340c565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e48826134b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7a57613e79613e0e565b5b600182019050919050565b600081905092915050565b50565b6000613ea0600083613e85565b9150613eab82613e90565b600082019050919050565b6000613ec182613e93565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613f27602c8361340c565b9150613f3282613ecb565b604082019050919050565b60006020820190508181036000830152613f5681613f1a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fbf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f82565b613fc98683613f82565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614006614001613ffc846134b3565b613fe1565b6134b3565b9050919050565b6000819050919050565b61402083613feb565b61403461402c8261400d565b848454613f8f565b825550505050565b600090565b61404961403c565b614054818484614017565b505050565b5b818110156140785761406d600082614041565b60018101905061405a565b5050565b601f8211156140bd5761408e81613f5d565b61409784613f72565b810160208510156140a6578190505b6140ba6140b285613f72565b830182614059565b50505b505050565b600082821c905092915050565b60006140e0600019846008026140c2565b1980831691505092915050565b60006140f983836140cf565b9150826002028217905092915050565b61411282613401565b67ffffffffffffffff81111561412b5761412a613772565b5b6141358254613b66565b61414082828561407c565b600060209050601f8311600181146141735760008415614161578287015190505b61416b85826140ed565b8655506141d3565b601f19841661418186613f5d565b60005b828110156141a957848901518255600182019150602085019450602081019050614184565b868310156141c657848901516141c2601f8916826140cf565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061421160188361340c565b915061421c826141db565b602082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006142a360298361340c565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b600061430f60168361340c565b915061431a826142d9565b602082019050919050565b6000602082019050818103600083015261433e81614302565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031203234313100000000600082015250565b600061437b601c8361340c565b915061438682614345565b602082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b600061440d60248361340c565b9150614418826143b1565b604082019050919050565b6000602082019050818103600083015261443c81614400565b9050919050565b600061444e826134b3565b9150614459836134b3565b925082820190508082111561447157614470613e0e565b5b92915050565b7f6d61782032343131206c696d6974206578636565646564000000000000000000600082015250565b60006144ad60178361340c565b91506144b882614477565b602082019050919050565b600060208201905081810360008301526144dc816144a0565b9050919050565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b600061451960178361340c565b9150614524826144e3565b602082019050919050565b600060208201905081810360008301526145488161450c565b9050919050565b7f6d61782032343131207065722061646472657373206578636565646564000000600082015250565b6000614585601d8361340c565b91506145908261454f565b602082019050919050565b600060208201905081810360008301526145b481614578565b9050919050565b60006145c6826134b3565b91506145d1836134b3565b92508282026145df816134b3565b915082820484148315176145f6576145f5613e0e565b5b5092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061463360128361340c565b915061463e826145fd565b602082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006146c5602f8361340c565b91506146d082614669565b604082019050919050565b600060208201905081810360008301526146f4816146b8565b9050919050565b600081905092915050565b600061471182613401565b61471b81856146fb565b935061472b81856020860161341d565b80840191505092915050565b6000815461474481613b66565b61474e81866146fb565b94506001821660008114614769576001811461477e576147b1565b60ff19831686528115158202860193506147b1565b61478785613f5d565b60005b838110156147a95781548189015260018201915060208101905061478a565b838801955050505b50505092915050565b60006147c68286614706565b91506147d28285614706565b91506147de8284614737565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061484760268361340c565b9150614852826147eb565b604082019050919050565b600060208201905081810360008301526148768161483a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148b360208361340c565b91506148be8261487d565b602082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061494560258361340c565b9150614950826148e9565b604082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149d760248361340c565b91506149e28261497b565b604082019050919050565b60006020820190508181036000830152614a06816149ca565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a4360198361340c565b9150614a4e82614a0d565b602082019050919050565b60006020820190508181036000830152614a7281614a36565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614ad560328361340c565b9150614ae082614a79565b604082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614b9660358361340c565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614bf382614bcc565b614bfd8185614bd7565b9350614c0d81856020860161341d565b614c1681613447565b840191505092915050565b6000608082019050614c366000830187613548565b614c436020830186613548565b614c5060408301856135de565b8181036060830152614c628184614be8565b905095945050505050565b600081519050614c7c81613319565b92915050565b600060208284031215614c9857614c976132e3565b5b6000614ca684828501614c6d565b91505092915050565b6000614cba826134b3565b9150614cc5836134b3565b9250828203905081811115614cdd57614cdc613e0e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d4860208361340c565b9150614d5382614d12565b602082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614db4601c8361340c565b9150614dbf82614d7e565b602082019050919050565b60006020820190508181036000830152614de381614da7565b905091905056fea26469706673582212204100527d1f54549761f1e3a6f38b8a88cc1db94660cb8f90b86aeec660240a2264736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000f5b52454441435445445d20323431310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000432343131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696334747479647174617a3465333665657265786a616964347a356f67376764336664716e35336f7372626c36653636726a796e652f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c80636352211e1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb011461095c578063da3ef23f14610987578063e985e9c5146109b0578063edec5f27146109ed578063f2c4ce1e14610a16578063f2fde38b14610a3f57610272565b8063b88d4fde1461083a578063ba4e5c4914610863578063ba7d2c76146108a0578063c6682862146108cb578063c87b56dd146108f6578063d0eb26b01461093357610272565b80638da5cb5b116101135780638da5cb5b1461075d57806395d89b41146107885780639c70b512146107b3578063a0712d68146107de578063a22cb465146107fa578063a475b5dd1461082357610272565b80636352211e146106785780636c0360eb146106b557806370a08231146106e0578063715018a61461071d5780637f00c7a61461073457610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613345565b610a68565b6040516102ab919061338d565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906133d4565b610ae2565b005b3480156102e957600080fd5b506102f2610b07565b6040516102ff9190613491565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906134e9565b610b99565b60405161033c9190613557565b60405180910390f35b34801561035157600080fd5b5061035a610bdf565b6040516103679190613491565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061359e565b610c6d565b005b3480156103a557600080fd5b506103ae610d84565b6040516103bb91906135ed565b60405180910390f35b3480156103d057600080fd5b506103d9610d8a565b6040516103e691906135ed565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613608565b610d97565b60405161042391906135ed565b60405180910390f35b34801561043857600080fd5b50610441610daf565b60405161044e91906135ed565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190613635565b610db5565b005b34801561048c57600080fd5b506104a760048036038101906104a2919061359e565b610e15565b6040516104b491906135ed565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190613608565b610eba565b6040516104f1919061338d565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906133d4565b610f68565b005b61052b610f8d565b005b34801561053957600080fd5b50610554600480360381019061054f9190613635565b611015565b005b34801561056257600080fd5b5061057d60048036038101906105789190613608565b611035565b60405161058a9190613746565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b591906134e9565b6110e3565b005b3480156105c857600080fd5b506105e360048036038101906105de91906134e9565b6110f5565b6040516105f091906135ed565b60405180910390f35b34801561060557600080fd5b5061060e611166565b60405161061b919061338d565b60405180910390f35b34801561063057600080fd5b5061064b6004803603810190610646919061389d565b611179565b005b34801561065957600080fd5b50610662611194565b60405161066f919061338d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a91906134e9565b6111a7565b6040516106ac9190613557565b60405180910390f35b3480156106c157600080fd5b506106ca61122d565b6040516106d79190613491565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613608565b6112bb565b60405161071491906135ed565b60405180910390f35b34801561072957600080fd5b50610732611372565b005b34801561074057600080fd5b5061075b600480360381019061075691906134e9565b611386565b005b34801561076957600080fd5b50610772611398565b60405161077f9190613557565b60405180910390f35b34801561079457600080fd5b5061079d6113c2565b6040516107aa9190613491565b60405180910390f35b3480156107bf57600080fd5b506107c8611454565b6040516107d5919061338d565b60405180910390f35b6107f860048036038101906107f391906134e9565b611467565b005b34801561080657600080fd5b50610821600480360381019061081c91906138e6565b6117af565b005b34801561082f57600080fd5b506108386117c5565b005b34801561084657600080fd5b50610861600480360381019061085c91906139c7565b6117ea565b005b34801561086f57600080fd5b5061088a600480360381019061088591906134e9565b61184c565b6040516108979190613557565b60405180910390f35b3480156108ac57600080fd5b506108b561188b565b6040516108c291906135ed565b60405180910390f35b3480156108d757600080fd5b506108e0611891565b6040516108ed9190613491565b60405180910390f35b34801561090257600080fd5b5061091d600480360381019061091891906134e9565b61191f565b60405161092a9190613491565b60405180910390f35b34801561093f57600080fd5b5061095a600480360381019061095591906134e9565b611a77565b005b34801561096857600080fd5b50610971611a89565b60405161097e91906135ed565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a9919061389d565b611a8f565b005b3480156109bc57600080fd5b506109d760048036038101906109d29190613a4a565b611aaa565b6040516109e4919061338d565b60405180910390f35b3480156109f957600080fd5b50610a146004803603810190610a0f9190613aea565b611b3e565b005b348015610a2257600080fd5b50610a3d6004803603810190610a38919061389d565b611b6a565b005b348015610a4b57600080fd5b50610a666004803603810190610a619190613608565b611b85565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610adb5750610ada82611c08565b5b9050919050565b610aea611cea565b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b1690613b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290613b66565b8015610b8f5780601f10610b6457610100808354040283529160200191610b8f565b820191906000526020600020905b815481529060010190602001808311610b7257829003601f168201915b5050505050905090565b6000610ba482611d68565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bec90613b66565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1890613b66565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505081565b6000610c78826111a7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613c09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d07611db3565b73ffffffffffffffffffffffffffffffffffffffff161480610d365750610d3581610d30611db3565b611aaa565b5b610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90613c9b565b60405180910390fd5b610d7f8383611dbb565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610dc6610dc0611db3565b82611e74565b610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613d2d565b60405180910390fd5b610e10838383611f09565b505050565b6000610e20836112bb565b8210610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613dbf565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f5d578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610efa57610ef9613ddf565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f4a576001915050610f63565b8080610f5590613e3d565b915050610ec2565b50600090505b919050565b610f70611cea565b80601260026101000a81548160ff02191690831515021790555050565b610f95611cea565b6000610f9f611398565b73ffffffffffffffffffffffffffffffffffffffff1647604051610fc290613eb6565b60006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b505090508061101257600080fd5b50565b611030838383604051806020016040528060008152506117ea565b505050565b60606000611042836112bb565b905060008167ffffffffffffffff8111156110605761105f613772565b5b60405190808252806020026020018201604052801561108e5781602001602082028036833780820191505090505b50905060005b828110156110d8576110a68582610e15565b8282815181106110b9576110b8613ddf565b5b60200260200101818152505080806110d090613e3d565b915050611094565b508092505050919050565b6110eb611cea565b80600e8190555050565b60006110ff610d8a565b8210611140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113790613f3d565b60405180910390fd5b6008828154811061115457611153613ddf565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b611181611cea565b80600b90816111909190614109565b5050565b601260009054906101000a900460ff1681565b6000806111b383612202565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614227565b60405180910390fd5b80915050919050565b600b805461123a90613b66565b80601f016020809104026020016040519081016040528092919081815260200182805461126690613b66565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906142b9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61137a611cea565b611384600061223f565b565b61138e611cea565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113d190613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546113fd90613b66565b801561144a5780601f1061141f5761010080835404028352916020019161144a565b820191906000526020600020905b81548152906001019060200180831161142d57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614325565b60405180910390fd5b60006114c1610d8a565b905060008211611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90614391565b60405180910390fd5b60105482111561154b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154290614423565b60405180910390fd5b600f54828261155a9190614443565b111561159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906144c3565b60405180910390fd5b6115a3611398565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461171f5760011515601260029054906101000a900460ff161515036116ce576115f933610eba565b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f9061452f565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154838261168b9190614443565b11156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c39061459b565b60405180910390fd5b505b81600e546116dc91906145bb565b34101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614649565b60405180910390fd5b5b6000600190505b8281116117aa57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061177d90613e3d565b91905055506117973382846117929190614443565b612305565b80806117a290613e3d565b915050611726565b505050565b6117c16117ba611db3565b8383612323565b5050565b6117cd611cea565b6001601260016101000a81548160ff021916908315150217905550565b6117fb6117f5611db3565b83611e74565b61183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613d2d565b60405180910390fd5b6118468484848461248f565b50505050565b6013818154811061185c57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c805461189e90613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546118ca90613b66565b80156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b606061192a826124eb565b611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906146db565b60405180910390fd5b60001515601260019054906101000a900460ff16151503611a1657600d805461199190613b66565b80601f01602080910402602001604051908101604052809291908181526020018280546119bd90613b66565b8015611a0a5780601f106119df57610100808354040283529160200191611a0a565b820191906000526020600020905b8154815290600101906020018083116119ed57829003601f168201915b50505050509050611a72565b6000611a2061252c565b90506000815111611a405760405180602001604052806000815250611a6e565b80611a4a846125be565b600c604051602001611a5e939291906147ba565b6040516020818303038152906040525b9150505b919050565b611a7f611cea565b8060118190555050565b600f5481565b611a97611cea565b80600c9081611aa69190614109565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b46611cea565b60136000611b5491906131fb565b818160139190611b6592919061321c565b505050565b611b72611cea565b80600d9081611b819190614109565b5050565b611b8d611cea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf39061485d565b60405180910390fd5b611c058161223f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ce35750611ce28261268c565b5b9050919050565b611cf2611db3565b73ffffffffffffffffffffffffffffffffffffffff16611d10611398565b73ffffffffffffffffffffffffffffffffffffffff1614611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d906148c9565b60405180910390fd5b565b611d71816124eb565b611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790614227565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e2e836111a7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e80836111a7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ec25750611ec18185611aaa565b5b80611f0057508373ffffffffffffffffffffffffffffffffffffffff16611ee884610b99565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f29826111a7565b73ffffffffffffffffffffffffffffffffffffffff1614611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f769061495b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906149ed565b60405180910390fd5b611ffb83838360016126f6565b8273ffffffffffffffffffffffffffffffffffffffff1661201b826111a7565b73ffffffffffffffffffffffffffffffffffffffff1614612071576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120689061495b565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121fd8383836001612854565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61231f82826040518060200160405280600081525061285a565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614a59565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612482919061338d565b60405180910390a3505050565b61249a848484611f09565b6124a6848484846128b5565b6124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc90614aeb565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661250d83612202565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461253b90613b66565b80601f016020809104026020016040519081016040528092919081815260200182805461256790613b66565b80156125b45780601f10612589576101008083540402835291602001916125b4565b820191906000526020600020905b81548152906001019060200180831161259757829003601f168201915b5050505050905090565b6060600060016125cd84612a3c565b01905060008167ffffffffffffffff8111156125ec576125eb613772565b5b6040519080825280601f01601f19166020018201604052801561261e5781602001600182028036833780820191505090505b509050600082602001820190505b600115612681578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161267557612674614b0b565b5b0494506000850361262c575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61270284848484612b8f565b6001811115612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d90614bac565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361278d5761278881612cb5565b6127cc565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146127cb576127ca8582612cfe565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361280e5761280981612e6b565b61284d565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461284c5761284b8482612f3c565b5b5b5050505050565b50505050565b6128648383612fbb565b61287160008484846128b5565b6128b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a790614aeb565b60405180910390fd5b505050565b60006128d68473ffffffffffffffffffffffffffffffffffffffff166131d8565b15612a2f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ff611db3565b8786866040518563ffffffff1660e01b81526004016129219493929190614c21565b6020604051808303816000875af192505050801561295d57506040513d601f19601f8201168201806040525081019061295a9190614c82565b60015b6129df573d806000811461298d576040519150601f19603f3d011682016040523d82523d6000602084013e612992565b606091505b5060008151036129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce90614aeb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a34565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a9a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612a9057612a8f614b0b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612ad7576d04ee2d6d415b85acef81000000008381612acd57612acc614b0b565b5b0492506020810190505b662386f26fc100008310612b0657662386f26fc100008381612afc57612afb614b0b565b5b0492506010810190505b6305f5e1008310612b2f576305f5e1008381612b2557612b24614b0b565b5b0492506008810190505b6127108310612b54576127108381612b4a57612b49614b0b565b5b0492506004810190505b60648310612b775760648381612b6d57612b6c614b0b565b5b0492506002810190505b600a8310612b86576001810190505b80915050919050565b6001811115612caf57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c235780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1b9190614caf565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cae5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ca69190614443565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d0b846112bb565b612d159190614caf565b9050600060076000848152602001908152602001600020549050818114612dfa576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e7f9190614caf565b9050600060096000848152602001908152602001600020549050600060088381548110612eaf57612eae613ddf565b5b906000526020600020015490508060088381548110612ed157612ed0613ddf565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f2057612f1f614ce3565b5b6001900381819060005260206000200160009055905550505050565b6000612f47836112bb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361302a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302190614d5e565b60405180910390fd5b613033816124eb565b15613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a90614dca565b60405180910390fd5b6130816000838360016126f6565b61308a816124eb565b156130ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c190614dca565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131d4600083836001612854565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b508054600082559060005260206000209081019061321991906132bc565b50565b8280548282559060005260206000209081019282156132ab579160200282015b828111156132aa57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061323c565b5b5090506132b891906132bc565b5090565b5b808211156132d55760008160009055506001016132bd565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613322816132ed565b811461332d57600080fd5b50565b60008135905061333f81613319565b92915050565b60006020828403121561335b5761335a6132e3565b5b600061336984828501613330565b91505092915050565b60008115159050919050565b61338781613372565b82525050565b60006020820190506133a2600083018461337e565b92915050565b6133b181613372565b81146133bc57600080fd5b50565b6000813590506133ce816133a8565b92915050565b6000602082840312156133ea576133e96132e3565b5b60006133f8848285016133bf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561343b578082015181840152602081019050613420565b60008484015250505050565b6000601f19601f8301169050919050565b600061346382613401565b61346d818561340c565b935061347d81856020860161341d565b61348681613447565b840191505092915050565b600060208201905081810360008301526134ab8184613458565b905092915050565b6000819050919050565b6134c6816134b3565b81146134d157600080fd5b50565b6000813590506134e3816134bd565b92915050565b6000602082840312156134ff576134fe6132e3565b5b600061350d848285016134d4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061354182613516565b9050919050565b61355181613536565b82525050565b600060208201905061356c6000830184613548565b92915050565b61357b81613536565b811461358657600080fd5b50565b60008135905061359881613572565b92915050565b600080604083850312156135b5576135b46132e3565b5b60006135c385828601613589565b92505060206135d4858286016134d4565b9150509250929050565b6135e7816134b3565b82525050565b600060208201905061360260008301846135de565b92915050565b60006020828403121561361e5761361d6132e3565b5b600061362c84828501613589565b91505092915050565b60008060006060848603121561364e5761364d6132e3565b5b600061365c86828701613589565b935050602061366d86828701613589565b925050604061367e868287016134d4565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136bd816134b3565b82525050565b60006136cf83836136b4565b60208301905092915050565b6000602082019050919050565b60006136f382613688565b6136fd8185613693565b9350613708836136a4565b8060005b8381101561373957815161372088826136c3565b975061372b836136db565b92505060018101905061370c565b5085935050505092915050565b6000602082019050818103600083015261376081846136e8565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137aa82613447565b810181811067ffffffffffffffff821117156137c9576137c8613772565b5b80604052505050565b60006137dc6132d9565b90506137e882826137a1565b919050565b600067ffffffffffffffff82111561380857613807613772565b5b61381182613447565b9050602081019050919050565b82818337600083830152505050565b600061384061383b846137ed565b6137d2565b90508281526020810184848401111561385c5761385b61376d565b5b61386784828561381e565b509392505050565b600082601f83011261388457613883613768565b5b813561389484826020860161382d565b91505092915050565b6000602082840312156138b3576138b26132e3565b5b600082013567ffffffffffffffff8111156138d1576138d06132e8565b5b6138dd8482850161386f565b91505092915050565b600080604083850312156138fd576138fc6132e3565b5b600061390b85828601613589565b925050602061391c858286016133bf565b9150509250929050565b600067ffffffffffffffff82111561394157613940613772565b5b61394a82613447565b9050602081019050919050565b600061396a61396584613926565b6137d2565b9050828152602081018484840111156139865761398561376d565b5b61399184828561381e565b509392505050565b600082601f8301126139ae576139ad613768565b5b81356139be848260208601613957565b91505092915050565b600080600080608085870312156139e1576139e06132e3565b5b60006139ef87828801613589565b9450506020613a0087828801613589565b9350506040613a11878288016134d4565b925050606085013567ffffffffffffffff811115613a3257613a316132e8565b5b613a3e87828801613999565b91505092959194509250565b60008060408385031215613a6157613a606132e3565b5b6000613a6f85828601613589565b9250506020613a8085828601613589565b9150509250929050565b600080fd5b600080fd5b60008083601f840112613aaa57613aa9613768565b5b8235905067ffffffffffffffff811115613ac757613ac6613a8a565b5b602083019150836020820283011115613ae357613ae2613a8f565b5b9250929050565b60008060208385031215613b0157613b006132e3565b5b600083013567ffffffffffffffff811115613b1f57613b1e6132e8565b5b613b2b85828601613a94565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b7e57607f821691505b602082108103613b9157613b90613b37565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf360218361340c565b9150613bfe82613b97565b604082019050919050565b60006020820190508181036000830152613c2281613be6565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613c85603d8361340c565b9150613c9082613c29565b604082019050919050565b60006020820190508181036000830152613cb481613c78565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613d17602d8361340c565b9150613d2282613cbb565b604082019050919050565b60006020820190508181036000830152613d4681613d0a565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613da9602b8361340c565b9150613db482613d4d565b604082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e48826134b3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e7a57613e79613e0e565b5b600182019050919050565b600081905092915050565b50565b6000613ea0600083613e85565b9150613eab82613e90565b600082019050919050565b6000613ec182613e93565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613f27602c8361340c565b9150613f3282613ecb565b604082019050919050565b60006020820190508181036000830152613f5681613f1a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fbf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f82565b613fc98683613f82565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614006614001613ffc846134b3565b613fe1565b6134b3565b9050919050565b6000819050919050565b61402083613feb565b61403461402c8261400d565b848454613f8f565b825550505050565b600090565b61404961403c565b614054818484614017565b505050565b5b818110156140785761406d600082614041565b60018101905061405a565b5050565b601f8211156140bd5761408e81613f5d565b61409784613f72565b810160208510156140a6578190505b6140ba6140b285613f72565b830182614059565b50505b505050565b600082821c905092915050565b60006140e0600019846008026140c2565b1980831691505092915050565b60006140f983836140cf565b9150826002028217905092915050565b61411282613401565b67ffffffffffffffff81111561412b5761412a613772565b5b6141358254613b66565b61414082828561407c565b600060209050601f8311600181146141735760008415614161578287015190505b61416b85826140ed565b8655506141d3565b601f19841661418186613f5d565b60005b828110156141a957848901518255600182019150602085019450602081019050614184565b868310156141c657848901516141c2601f8916826140cf565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061421160188361340c565b915061421c826141db565b602082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006142a360298361340c565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b600061430f60168361340c565b915061431a826142d9565b602082019050919050565b6000602082019050818103600083015261433e81614302565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031203234313100000000600082015250565b600061437b601c8361340c565b915061438682614345565b602082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b600061440d60248361340c565b9150614418826143b1565b604082019050919050565b6000602082019050818103600083015261443c81614400565b9050919050565b600061444e826134b3565b9150614459836134b3565b925082820190508082111561447157614470613e0e565b5b92915050565b7f6d61782032343131206c696d6974206578636565646564000000000000000000600082015250565b60006144ad60178361340c565b91506144b882614477565b602082019050919050565b600060208201905081810360008301526144dc816144a0565b9050919050565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b600061451960178361340c565b9150614524826144e3565b602082019050919050565b600060208201905081810360008301526145488161450c565b9050919050565b7f6d61782032343131207065722061646472657373206578636565646564000000600082015250565b6000614585601d8361340c565b91506145908261454f565b602082019050919050565b600060208201905081810360008301526145b481614578565b9050919050565b60006145c6826134b3565b91506145d1836134b3565b92508282026145df816134b3565b915082820484148315176145f6576145f5613e0e565b5b5092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061463360128361340c565b915061463e826145fd565b602082019050919050565b6000602082019050818103600083015261466281614626565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006146c5602f8361340c565b91506146d082614669565b604082019050919050565b600060208201905081810360008301526146f4816146b8565b9050919050565b600081905092915050565b600061471182613401565b61471b81856146fb565b935061472b81856020860161341d565b80840191505092915050565b6000815461474481613b66565b61474e81866146fb565b94506001821660008114614769576001811461477e576147b1565b60ff19831686528115158202860193506147b1565b61478785613f5d565b60005b838110156147a95781548189015260018201915060208101905061478a565b838801955050505b50505092915050565b60006147c68286614706565b91506147d28285614706565b91506147de8284614737565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061484760268361340c565b9150614852826147eb565b604082019050919050565b600060208201905081810360008301526148768161483a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148b360208361340c565b91506148be8261487d565b602082019050919050565b600060208201905081810360008301526148e2816148a6565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061494560258361340c565b9150614950826148e9565b604082019050919050565b6000602082019050818103600083015261497481614938565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149d760248361340c565b91506149e28261497b565b604082019050919050565b60006020820190508181036000830152614a06816149ca565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a4360198361340c565b9150614a4e82614a0d565b602082019050919050565b60006020820190508181036000830152614a7281614a36565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614ad560328361340c565b9150614ae082614a79565b604082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614b9660358361340c565b9150614ba182614b3a565b604082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614bf382614bcc565b614bfd8185614bd7565b9350614c0d81856020860161341d565b614c1681613447565b840191505092915050565b6000608082019050614c366000830187613548565b614c436020830186613548565b614c5060408301856135de565b8181036060830152614c628184614be8565b905095945050505050565b600081519050614c7c81613319565b92915050565b600060208284031215614c9857614c976132e3565b5b6000614ca684828501614c6d565b91505092915050565b6000614cba826134b3565b9150614cc5836134b3565b9250828203905081811115614cdd57614cdc613e0e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614d4860208361340c565b9150614d5382614d12565b602082019050919050565b60006020820190508181036000830152614d7781614d3b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614db4601c8361340c565b9150614dbf82614d7e565b602082019050919050565b60006020820190508181036000830152614de381614da7565b905091905056fea26469706673582212204100527d1f54549761f1e3a6f38b8a88cc1db94660cb8f90b86aeec660240a2264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000f5b52454441435445445d20323431310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000432343131000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696334747479647174617a3465333665657265786a616964347a356f67376764336664716e35336f7372626c36653636726a796e652f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): [REDACTED] 2411
Arg [1] : _symbol (string): 2411
Arg [2] : _initBaseURI (string): ipfs://bafybeic4ttydqtaz4e36eerexjaid4z5og7gd3fdqn53osrbl6e66rjyne/
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 5b52454441435445445d20323431310000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 3234313100000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [9] : 697066733a2f2f626166796265696334747479647174617a3465333665657265
Arg [10] : 786a616964347a356f67376764336664716e35336f7372626c36653636726a79
Arg [11] : 6e652f0000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
62507:4555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56490:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66250:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40552:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42064:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62654:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41582:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62687:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57130:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62984:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62760:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42764:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56798:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64379:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66331:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66585:474;;;:::i;:::-;;43170:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;64624:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65682:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57320:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62870:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65890:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62839:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40262:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62586:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39993:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17975:103;;;;;;;;;;;;;:::i;:::-;;65768:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17327:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40721:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62902:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63437:934;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42307:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65497:65;;;;;;;;;;;;;:::i;:::-;;43426:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62942:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62797;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62612;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64978:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65570:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62724:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65994:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42533:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66434:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66124:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18233:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56490:224;56592:4;56631:35;56616:50;;;:11;:50;;;;:90;;;;56670:36;56694:11;56670:23;:36::i;:::-;56616:90;56609:97;;56490:224;;;:::o;66250:73::-;17213:13;:11;:13::i;:::-;66311:6:::1;66302;;:15;;;;;;;;;;;;;;;;;;66250:73:::0;:::o;40552:100::-;40606:13;40639:5;40632:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40552:100;:::o;42064:171::-;42140:7;42160:23;42175:7;42160:14;:23::i;:::-;42203:15;:24;42219:7;42203:24;;;;;;;;;;;;;;;;;;;;;42196:31;;42064:171;;;:::o;62654:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41582:416::-;41663:13;41679:23;41694:7;41679:14;:23::i;:::-;41663:39;;41727:5;41721:11;;:2;:11;;;41713:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;41821:5;41805:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;41830:37;41847:5;41854:12;:10;:12::i;:::-;41830:16;:37::i;:::-;41805:62;41783:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;41969:21;41978:2;41982:7;41969:8;:21::i;:::-;41652:346;41582:416;;:::o;62687:32::-;;;;:::o;57130:113::-;57191:7;57218:10;:17;;;;57211:24;;57130:113;:::o;62984:55::-;;;;;;;;;;;;;;;;;:::o;62760:32::-;;;;:::o;42764:335::-;42959:41;42978:12;:10;:12::i;:::-;42992:7;42959:18;:41::i;:::-;42951:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43063:28;43073:4;43079:2;43083:7;43063:9;:28::i;:::-;42764:335;;;:::o;56798:256::-;56895:7;56931:23;56948:5;56931:16;:23::i;:::-;56923:5;:31;56915:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;57020:12;:19;57033:5;57020:19;;;;;;;;;;;;;;;:26;57040:5;57020:26;;;;;;;;;;;;57013:33;;56798:256;;;;:::o;64379:239::-;64438:4;64456:6;64465:1;64456:10;;64451:143;64472:20;:27;;;;64468:1;:31;64451:143;;;64546:5;64519:32;;:20;64540:1;64519:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;64515:72;;64573:4;64566:11;;;;;64515:72;64501:3;;;;;:::i;:::-;;;;64451:143;;;;64607:5;64600:12;;64379:239;;;;:::o;66331:95::-;17213:13;:11;:13::i;:::-;66414:6:::1;66396:15;;:24;;;;;;;;;;;;;;;;;;66331:95:::0;:::o;66585:474::-;17213:13;:11;:13::i;:::-;66881:7:::1;66902;:5;:7::i;:::-;66894:21;;66923;66894:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66880:69;;;66964:2;66956:11;;;::::0;::::1;;66630:429;66585:474::o:0;43170:185::-;43308:39;43325:4;43331:2;43335:7;43308:39;;;;;;;;;;;;:16;:39::i;:::-;43170:185;;;:::o;64624:348::-;64699:16;64727:23;64753:17;64763:6;64753:9;:17::i;:::-;64727:43;;64777:25;64819:15;64805:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64777:58;;64847:9;64842:103;64862:15;64858:1;:19;64842:103;;;64907:30;64927:6;64935:1;64907:19;:30::i;:::-;64893:8;64902:1;64893:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;64879:3;;;;;:::i;:::-;;;;64842:103;;;;64958:8;64951:15;;;;64624:348;;;:::o;65682:80::-;17213:13;:11;:13::i;:::-;65748:8:::1;65741:4;:15;;;;65682:80:::0;:::o;57320:233::-;57395:7;57431:30;:28;:30::i;:::-;57423:5;:38;57415:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;57528:10;57539:5;57528:17;;;;;;;;:::i;:::-;;;;;;;;;;57521:24;;57320:233;;;:::o;62870:27::-;;;;;;;;;;;;;:::o;65890:98::-;17213:13;:11;:13::i;:::-;65971:11:::1;65961:7;:21;;;;;;:::i;:::-;;65890:98:::0;:::o;62839:26::-;;;;;;;;;;;;;:::o;40262:223::-;40334:7;40354:13;40370:17;40379:7;40370:8;:17::i;:::-;40354:33;;40423:1;40406:19;;:5;:19;;;40398:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;40472:5;40465:12;;;40262:223;;;:::o;62586:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39993:207::-;40065:7;40110:1;40093:19;;:5;:19;;;40085:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40176:9;:16;40186:5;40176:16;;;;;;;;;;;;;;;;40169:23;;39993:207;;;:::o;17975:103::-;17213:13;:11;:13::i;:::-;18040:30:::1;18067:1;18040:18;:30::i;:::-;17975:103::o:0;65768:116::-;17213:13;:11;:13::i;:::-;65861:17:::1;65845:13;:33;;;;65768:116:::0;:::o;17327:87::-;17373:7;17400:6;;;;;;;;;;;17393:13;;17327:87;:::o;40721:104::-;40777:13;40810:7;40803:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40721:104;:::o;62902:35::-;;;;;;;;;;;;;:::o;63437:934::-;63503:6;;;;;;;;;;;63502:7;63494:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;63543:14;63560:13;:11;:13::i;:::-;63543:30;;63602:1;63588:11;:15;63580:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;63666:13;;63651:11;:28;;63643:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;63759:9;;63744:11;63735:6;:20;;;;:::i;:::-;:33;;63727:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;63823:7;:5;:7::i;:::-;63809:21;;:10;:21;;;63805:417;;63865:4;63846:23;;:15;;;;;;;;;;;:23;;;63843:299;;63894:25;63908:10;63894:13;:25::i;:::-;63886:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;63962:24;63989:20;:32;64010:10;63989:32;;;;;;;;;;;;;;;;63962:59;;64078:18;;64063:11;64044:16;:30;;;;:::i;:::-;:52;;64036:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;63871:271;63843:299;64180:11;64173:4;;:18;;;;:::i;:::-;64160:9;:31;;64152:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;63805:417;64235:9;64247:1;64235:13;;64230:136;64255:11;64250:1;:16;64230:136;;64282:20;:32;64303:10;64282:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;64325:33;64335:10;64356:1;64347:6;:10;;;;:::i;:::-;64325:9;:33::i;:::-;64268:3;;;;;:::i;:::-;;;;64230:136;;;;63487:884;63437:934;:::o;42307:155::-;42402:52;42421:12;:10;:12::i;:::-;42435:8;42445;42402:18;:52::i;:::-;42307:155;;:::o;65497:65::-;17213:13;:11;:13::i;:::-;65552:4:::1;65541:8;;:15;;;;;;;;;;;;;;;;;;65497:65::o:0;43426:322::-;43600:41;43619:12;:10;:12::i;:::-;43633:7;43600:18;:41::i;:::-;43592:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43702:38;43716:4;43722:2;43726:7;43735:4;43702:13;:38::i;:::-;43426:322;;;;:::o;62942:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;62797:::-;;;;:::o;62612:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;64978:497::-;65076:13;65117:16;65125:7;65117;:16::i;:::-;65101:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;65226:5;65214:17;;:8;;;;;;;;;;;:17;;;65211:62;;65251:14;65244:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65211:62;65281:28;65312:10;:8;:10::i;:::-;65281:41;;65367:1;65342:14;65336:28;:32;:133;;;;;;;;;;;;;;;;;65404:14;65420:18;:7;:16;:18::i;:::-;65440:13;65387:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65336:133;65329:140;;;64978:497;;;;:::o;65570:104::-;17213:13;:11;:13::i;:::-;65662:6:::1;65641:18;:27;;;;65570:104:::0;:::o;62724:31::-;;;;:::o;65994:122::-;17213:13;:11;:13::i;:::-;66093:17:::1;66077:13;:33;;;;;;:::i;:::-;;65994:122:::0;:::o;42533:164::-;42630:4;42654:18;:25;42673:5;42654:25;;;;;;;;;;;;;;;:35;42680:8;42654:35;;;;;;;;;;;;;;;;;;;;;;;;;42647:42;;42533:164;;;;:::o;66434:144::-;17213:13;:11;:13::i;:::-;66516:20:::1;;66509:27;;;;:::i;:::-;66566:6;;66543:20;:29;;;;;;;:::i;:::-;;66434:144:::0;;:::o;66124:120::-;17213:13;:11;:13::i;:::-;66223:15:::1;66206:14;:32;;;;;;:::i;:::-;;66124:120:::0;:::o;18233:201::-;17213:13;:11;:13::i;:::-;18342:1:::1;18322:22;;:8;:22;;::::0;18314:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18398:28;18417:8;18398:18;:28::i;:::-;18233:201:::0;:::o;39624:305::-;39726:4;39778:25;39763:40;;;:11;:40;;;;:105;;;;39835:33;39820:48;;;:11;:48;;;;39763:105;:158;;;;39885:36;39909:11;39885:23;:36::i;:::-;39763:158;39743:178;;39624:305;;;:::o;17492:132::-;17567:12;:10;:12::i;:::-;17556:23;;:7;:5;:7::i;:::-;:23;;;17548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17492:132::o;51883:135::-;51965:16;51973:7;51965;:16::i;:::-;51957:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;51883:135;:::o;15878:98::-;15931:7;15958:10;15951:17;;15878:98;:::o;51162:174::-;51264:2;51237:15;:24;51253:7;51237:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51320:7;51316:2;51282:46;;51291:23;51306:7;51291:14;:23::i;:::-;51282:46;;;;;;;;;;;;51162:174;;:::o;45781:264::-;45874:4;45891:13;45907:23;45922:7;45907:14;:23::i;:::-;45891:39;;45960:5;45949:16;;:7;:16;;;:52;;;;45969:32;45986:5;45993:7;45969:16;:32::i;:::-;45949:52;:87;;;;46029:7;46005:31;;:20;46017:7;46005:11;:20::i;:::-;:31;;;45949:87;45941:96;;;45781:264;;;;:::o;49780:1263::-;49939:4;49912:31;;:23;49927:7;49912:14;:23::i;:::-;:31;;;49904:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50018:1;50004:16;;:2;:16;;;49996:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50074:42;50095:4;50101:2;50105:7;50114:1;50074:20;:42::i;:::-;50246:4;50219:31;;:23;50234:7;50219:14;:23::i;:::-;:31;;;50211:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50364:15;:24;50380:7;50364:24;;;;;;;;;;;;50357:31;;;;;;;;;;;50859:1;50840:9;:15;50850:4;50840:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;50892:1;50875:9;:13;50885:2;50875:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;50934:2;50915:7;:16;50923:7;50915:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;50973:7;50969:2;50954:27;;50963:4;50954:27;;;;;;;;;;;;50994:41;51014:4;51020:2;51024:7;51033:1;50994:19;:41::i;:::-;49780:1263;;;:::o;45056:117::-;45122:7;45149;:16;45157:7;45149:16;;;;;;;;;;;;;;;;;;;;;45142:23;;45056:117;;;:::o;18594:191::-;18668:16;18687:6;;;;;;;;;;;18668:25;;18713:8;18704:6;;:17;;;;;;;;;;;;;;;;;;18768:8;18737:40;;18758:8;18737:40;;;;;;;;;;;;18657:128;18594:191;:::o;46387:110::-;46463:26;46473:2;46477:7;46463:26;;;;;;;;;;;;:9;:26::i;:::-;46387:110;;:::o;51479:315::-;51634:8;51625:17;;:5;:17;;;51617:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51721:8;51683:18;:25;51702:5;51683:25;;;;;;;;;;;;;;;:35;51709:8;51683:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;51767:8;51745:41;;51760:5;51745:41;;;51777:8;51745:41;;;;;;:::i;:::-;;;;;;;;51479:315;;;:::o;44629:313::-;44785:28;44795:4;44801:2;44805:7;44785:9;:28::i;:::-;44832:47;44855:4;44861:2;44865:7;44874:4;44832:22;:47::i;:::-;44824:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;44629:313;;;;:::o;45486:128::-;45551:4;45604:1;45575:31;;:17;45584:7;45575:8;:17::i;:::-;:31;;;;45568:38;;45486:128;;;:::o;63316:102::-;63376:13;63405:7;63398:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63316:102;:::o;13305:716::-;13361:13;13412:14;13449:1;13429:17;13440:5;13429:10;:17::i;:::-;:21;13412:38;;13465:20;13499:6;13488:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13465:41;;13521:11;13650:6;13646:2;13642:15;13634:6;13630:28;13623:35;;13687:288;13694:4;13687:288;;;13719:5;;;;;;;;13861:8;13856:2;13849:5;13845:14;13840:30;13835:3;13827:44;13917:2;13908:11;;;;;;:::i;:::-;;;;;13951:1;13942:5;:10;13687:288;13938:21;13687:288;13996:6;13989:13;;;;;13305:716;;;:::o;31056:157::-;31141:4;31180:25;31165:40;;;:11;:40;;;;31158:47;;31056:157;;;:::o;57627:915::-;57804:61;57831:4;57837:2;57841:12;57855:9;57804:26;:61::i;:::-;57894:1;57882:9;:13;57878:222;;;58025:63;;;;;;;;;;:::i;:::-;;;;;;;;57878:222;58112:15;58130:12;58112:30;;58175:1;58159:18;;:4;:18;;;58155:187;;58194:40;58226:7;58194:31;:40::i;:::-;58155:187;;;58264:2;58256:10;;:4;:10;;;58252:90;;58283:47;58316:4;58322:7;58283:32;:47::i;:::-;58252:90;58155:187;58370:1;58356:16;;:2;:16;;;58352:183;;58389:45;58426:7;58389:36;:45::i;:::-;58352:183;;;58462:4;58456:10;;:2;:10;;;58452:83;;58483:40;58511:2;58515:7;58483:27;:40::i;:::-;58452:83;58352:183;57793:749;57627:915;;;;:::o;55299:158::-;;;;;:::o;46724:319::-;46853:18;46859:2;46863:7;46853:5;:18::i;:::-;46904:53;46935:1;46939:2;46943:7;46952:4;46904:22;:53::i;:::-;46882:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;46724:319;;;:::o;52582:853::-;52736:4;52757:15;:2;:13;;;:15::i;:::-;52753:675;;;52809:2;52793:36;;;52830:12;:10;:12::i;:::-;52844:4;52850:7;52859:4;52793:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;52789:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53051:1;53034:6;:13;:18;53030:328;;53077:60;;;;;;;;;;:::i;:::-;;;;;;;;53030:328;53308:6;53302:13;53293:6;53289:2;53285:15;53278:38;52789:584;52925:41;;;52915:51;;;:6;:51;;;;52908:58;;;;;52753:675;53412:4;53405:11;;52582:853;;;;;;;:::o;10171:922::-;10224:7;10244:14;10261:1;10244:18;;10311:6;10302:5;:15;10298:102;;10347:6;10338:15;;;;;;:::i;:::-;;;;;10382:2;10372:12;;;;10298:102;10427:6;10418:5;:15;10414:102;;10463:6;10454:15;;;;;;:::i;:::-;;;;;10498:2;10488:12;;;;10414:102;10543:6;10534:5;:15;10530:102;;10579:6;10570:15;;;;;;:::i;:::-;;;;;10614:2;10604:12;;;;10530:102;10659:5;10650;:14;10646:99;;10694:5;10685:14;;;;;;:::i;:::-;;;;;10728:1;10718:11;;;;10646:99;10772:5;10763;:14;10759:99;;10807:5;10798:14;;;;;;:::i;:::-;;;;;10841:1;10831:11;;;;10759:99;10885:5;10876;:14;10872:99;;10920:5;10911:14;;;;;;:::i;:::-;;;;;10954:1;10944:11;;;;10872:99;10998:5;10989;:14;10985:66;;11034:1;11024:11;;;;10985:66;11079:6;11072:13;;;10171:922;;;:::o;54167:410::-;54357:1;54345:9;:13;54341:229;;;54395:1;54379:18;;:4;:18;;;54375:87;;54437:9;54418;:15;54428:4;54418:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;54375:87;54494:1;54480:16;;:2;:16;;;54476:83;;54534:9;54517;:13;54527:2;54517:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;54476:83;54341:229;54167:410;;;;:::o;59265:164::-;59369:10;:17;;;;59342:15;:24;59358:7;59342:24;;;;;;;;;;;:44;;;;59397:10;59413:7;59397:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59265:164;:::o;60056:988::-;60322:22;60372:1;60347:22;60364:4;60347:16;:22::i;:::-;:26;;;;:::i;:::-;60322:51;;60384:18;60405:17;:26;60423:7;60405:26;;;;;;;;;;;;60384:47;;60552:14;60538:10;:28;60534:328;;60583:19;60605:12;:18;60618:4;60605:18;;;;;;;;;;;;;;;:34;60624:14;60605:34;;;;;;;;;;;;60583:56;;60689:11;60656:12;:18;60669:4;60656:18;;;;;;;;;;;;;;;:30;60675:10;60656:30;;;;;;;;;;;:44;;;;60806:10;60773:17;:30;60791:11;60773:30;;;;;;;;;;;:43;;;;60568:294;60534:328;60958:17;:26;60976:7;60958:26;;;;;;;;;;;60951:33;;;61002:12;:18;61015:4;61002:18;;;;;;;;;;;;;;;:34;61021:14;61002:34;;;;;;;;;;;60995:41;;;60137:907;;60056:988;;:::o;61339:1079::-;61592:22;61637:1;61617:10;:17;;;;:21;;;;:::i;:::-;61592:46;;61649:18;61670:15;:24;61686:7;61670:24;;;;;;;;;;;;61649:45;;62021:19;62043:10;62054:14;62043:26;;;;;;;;:::i;:::-;;;;;;;;;;62021:48;;62107:11;62082:10;62093;62082:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;62218:10;62187:15;:28;62203:11;62187:28;;;;;;;;;;;:41;;;;62359:15;:24;62375:7;62359:24;;;;;;;;;;;62352:31;;;62394:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;61410:1008;;;61339:1079;:::o;58843:221::-;58928:14;58945:20;58962:2;58945:16;:20::i;:::-;58928:37;;59003:7;58976:12;:16;58989:2;58976:16;;;;;;;;;;;;;;;:24;58993:6;58976:24;;;;;;;;;;;:34;;;;59050:6;59021:17;:26;59039:7;59021:26;;;;;;;;;;;:35;;;;58917:147;58843:221;;:::o;47379:942::-;47473:1;47459:16;;:2;:16;;;47451:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;47532:16;47540:7;47532;:16::i;:::-;47531:17;47523:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47594:48;47623:1;47627:2;47631:7;47640:1;47594:20;:48::i;:::-;47741:16;47749:7;47741;:16::i;:::-;47740:17;47732:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48156:1;48139:9;:13;48149:2;48139:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;48200:2;48181:7;:16;48189:7;48181:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;48245:7;48241:2;48220:33;;48237:1;48220:33;;;;;;;;;;;;48266:47;48294:1;48298:2;48302:7;48311:1;48266:19;:47::i;:::-;47379:942;;:::o;20025:326::-;20085:4;20342:1;20320:7;:19;;;:23;20313:30;;20025:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:329::-;5891:6;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;5832:329;;;;:::o;6167:619::-;6244:6;6252;6260;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6435:1;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6406:117;6562:2;6588:53;6633:7;6624:6;6613:9;6609:22;6588:53;:::i;:::-;6578:63;;6533:118;6690:2;6716:53;6761:7;6752:6;6741:9;6737:22;6716:53;:::i;:::-;6706:63;;6661:118;6167:619;;;;;:::o;6792:114::-;6859:6;6893:5;6887:12;6877:22;;6792:114;;;:::o;6912:184::-;7011:11;7045:6;7040:3;7033:19;7085:4;7080:3;7076:14;7061:29;;6912:184;;;;:::o;7102:132::-;7169:4;7192:3;7184:11;;7222:4;7217:3;7213:14;7205:22;;7102:132;;;:::o;7240:108::-;7317:24;7335:5;7317:24;:::i;:::-;7312:3;7305:37;7240:108;;:::o;7354:179::-;7423:10;7444:46;7486:3;7478:6;7444:46;:::i;:::-;7522:4;7517:3;7513:14;7499:28;;7354:179;;;;:::o;7539:113::-;7609:4;7641;7636:3;7632:14;7624:22;;7539:113;;;:::o;7688:732::-;7807:3;7836:54;7884:5;7836:54;:::i;:::-;7906:86;7985:6;7980:3;7906:86;:::i;:::-;7899:93;;8016:56;8066:5;8016:56;:::i;:::-;8095:7;8126:1;8111:284;8136:6;8133:1;8130:13;8111:284;;;8212:6;8206:13;8239:63;8298:3;8283:13;8239:63;:::i;:::-;8232:70;;8325:60;8378:6;8325:60;:::i;:::-;8315:70;;8171:224;8158:1;8155;8151:9;8146:14;;8111:284;;;8115:14;8411:3;8404:10;;7812:608;;;7688:732;;;;:::o;8426:373::-;8569:4;8607:2;8596:9;8592:18;8584:26;;8656:9;8650:4;8646:20;8642:1;8631:9;8627:17;8620:47;8684:108;8787:4;8778:6;8684:108;:::i;:::-;8676:116;;8426:373;;;;:::o;8805:117::-;8914:1;8911;8904:12;8928:117;9037:1;9034;9027:12;9051:180;9099:77;9096:1;9089:88;9196:4;9193:1;9186:15;9220:4;9217:1;9210:15;9237:281;9320:27;9342:4;9320:27;:::i;:::-;9312:6;9308:40;9450:6;9438:10;9435:22;9414:18;9402:10;9399:34;9396:62;9393:88;;;9461:18;;:::i;:::-;9393:88;9501:10;9497:2;9490:22;9280:238;9237:281;;:::o;9524:129::-;9558:6;9585:20;;:::i;:::-;9575:30;;9614:33;9642:4;9634:6;9614:33;:::i;:::-;9524:129;;;:::o;9659:308::-;9721:4;9811:18;9803:6;9800:30;9797:56;;;9833:18;;:::i;:::-;9797:56;9871:29;9893:6;9871:29;:::i;:::-;9863:37;;9955:4;9949;9945:15;9937:23;;9659:308;;;:::o;9973:146::-;10070:6;10065:3;10060;10047:30;10111:1;10102:6;10097:3;10093:16;10086:27;9973:146;;;:::o;10125:425::-;10203:5;10228:66;10244:49;10286:6;10244:49;:::i;:::-;10228:66;:::i;:::-;10219:75;;10317:6;10310:5;10303:21;10355:4;10348:5;10344:16;10393:3;10384:6;10379:3;10375:16;10372:25;10369:112;;;10400:79;;:::i;:::-;10369:112;10490:54;10537:6;10532:3;10527;10490:54;:::i;:::-;10209:341;10125:425;;;;;:::o;10570:340::-;10626:5;10675:3;10668:4;10660:6;10656:17;10652:27;10642:122;;10683:79;;:::i;:::-;10642:122;10800:6;10787:20;10825:79;10900:3;10892:6;10885:4;10877:6;10873:17;10825:79;:::i;:::-;10816:88;;10632:278;10570:340;;;;:::o;10916:509::-;10985:6;11034:2;11022:9;11013:7;11009:23;11005:32;11002:119;;;11040:79;;:::i;:::-;11002:119;11188:1;11177:9;11173:17;11160:31;11218:18;11210:6;11207:30;11204:117;;;11240:79;;:::i;:::-;11204:117;11345:63;11400:7;11391:6;11380:9;11376:22;11345:63;:::i;:::-;11335:73;;11131:287;10916:509;;;;:::o;11431:468::-;11496:6;11504;11553:2;11541:9;11532:7;11528:23;11524:32;11521:119;;;11559:79;;:::i;:::-;11521:119;11679:1;11704:53;11749:7;11740:6;11729:9;11725:22;11704:53;:::i;:::-;11694:63;;11650:117;11806:2;11832:50;11874:7;11865:6;11854:9;11850:22;11832:50;:::i;:::-;11822:60;;11777:115;11431:468;;;;;:::o;11905:307::-;11966:4;12056:18;12048:6;12045:30;12042:56;;;12078:18;;:::i;:::-;12042:56;12116:29;12138:6;12116:29;:::i;:::-;12108:37;;12200:4;12194;12190:15;12182:23;;11905:307;;;:::o;12218:423::-;12295:5;12320:65;12336:48;12377:6;12336:48;:::i;:::-;12320:65;:::i;:::-;12311:74;;12408:6;12401:5;12394:21;12446:4;12439:5;12435:16;12484:3;12475:6;12470:3;12466:16;12463:25;12460:112;;;12491:79;;:::i;:::-;12460:112;12581:54;12628:6;12623:3;12618;12581:54;:::i;:::-;12301:340;12218:423;;;;;:::o;12660:338::-;12715:5;12764:3;12757:4;12749:6;12745:17;12741:27;12731:122;;12772:79;;:::i;:::-;12731:122;12889:6;12876:20;12914:78;12988:3;12980:6;12973:4;12965:6;12961:17;12914:78;:::i;:::-;12905:87;;12721:277;12660:338;;;;:::o;13004:943::-;13099:6;13107;13115;13123;13172:3;13160:9;13151:7;13147:23;13143:33;13140:120;;;13179:79;;:::i;:::-;13140:120;13299:1;13324:53;13369:7;13360:6;13349:9;13345:22;13324:53;:::i;:::-;13314:63;;13270:117;13426:2;13452:53;13497:7;13488:6;13477:9;13473:22;13452:53;:::i;:::-;13442:63;;13397:118;13554:2;13580:53;13625:7;13616:6;13605:9;13601:22;13580:53;:::i;:::-;13570:63;;13525:118;13710:2;13699:9;13695:18;13682:32;13741:18;13733:6;13730:30;13727:117;;;13763:79;;:::i;:::-;13727:117;13868:62;13922:7;13913:6;13902:9;13898:22;13868:62;:::i;:::-;13858:72;;13653:287;13004:943;;;;;;;:::o;13953:474::-;14021:6;14029;14078:2;14066:9;14057:7;14053:23;14049:32;14046:119;;;14084:79;;:::i;:::-;14046:119;14204:1;14229:53;14274:7;14265:6;14254:9;14250:22;14229:53;:::i;:::-;14219:63;;14175:117;14331:2;14357:53;14402:7;14393:6;14382:9;14378:22;14357:53;:::i;:::-;14347:63;;14302:118;13953:474;;;;;:::o;14433:117::-;14542:1;14539;14532:12;14556:117;14665:1;14662;14655:12;14696:568;14769:8;14779:6;14829:3;14822:4;14814:6;14810:17;14806:27;14796:122;;14837:79;;:::i;:::-;14796:122;14950:6;14937:20;14927:30;;14980:18;14972:6;14969:30;14966:117;;;15002:79;;:::i;:::-;14966:117;15116:4;15108:6;15104:17;15092:29;;15170:3;15162:4;15154:6;15150:17;15140:8;15136:32;15133:41;15130:128;;;15177:79;;:::i;:::-;15130:128;14696:568;;;;;:::o;15270:559::-;15356:6;15364;15413:2;15401:9;15392:7;15388:23;15384:32;15381:119;;;15419:79;;:::i;:::-;15381:119;15567:1;15556:9;15552:17;15539:31;15597:18;15589:6;15586:30;15583:117;;;15619:79;;:::i;:::-;15583:117;15732:80;15804:7;15795:6;15784:9;15780:22;15732:80;:::i;:::-;15714:98;;;;15510:312;15270:559;;;;;:::o;15835:180::-;15883:77;15880:1;15873:88;15980:4;15977:1;15970:15;16004:4;16001:1;15994:15;16021:320;16065:6;16102:1;16096:4;16092:12;16082:22;;16149:1;16143:4;16139:12;16170:18;16160:81;;16226:4;16218:6;16214:17;16204:27;;16160:81;16288:2;16280:6;16277:14;16257:18;16254:38;16251:84;;16307:18;;:::i;:::-;16251:84;16072:269;16021:320;;;:::o;16347:220::-;16487:34;16483:1;16475:6;16471:14;16464:58;16556:3;16551:2;16543:6;16539:15;16532:28;16347:220;:::o;16573:366::-;16715:3;16736:67;16800:2;16795:3;16736:67;:::i;:::-;16729:74;;16812:93;16901:3;16812:93;:::i;:::-;16930:2;16925:3;16921:12;16914:19;;16573:366;;;:::o;16945:419::-;17111:4;17149:2;17138:9;17134:18;17126:26;;17198:9;17192:4;17188:20;17184:1;17173:9;17169:17;17162:47;17226:131;17352:4;17226:131;:::i;:::-;17218:139;;16945:419;;;:::o;17370:248::-;17510:34;17506:1;17498:6;17494:14;17487:58;17579:31;17574:2;17566:6;17562:15;17555:56;17370:248;:::o;17624:366::-;17766:3;17787:67;17851:2;17846:3;17787:67;:::i;:::-;17780:74;;17863:93;17952:3;17863:93;:::i;:::-;17981:2;17976:3;17972:12;17965:19;;17624:366;;;:::o;17996:419::-;18162:4;18200:2;18189:9;18185:18;18177:26;;18249:9;18243:4;18239:20;18235:1;18224:9;18220:17;18213:47;18277:131;18403:4;18277:131;:::i;:::-;18269:139;;17996:419;;;:::o;18421:232::-;18561:34;18557:1;18549:6;18545:14;18538:58;18630:15;18625:2;18617:6;18613:15;18606:40;18421:232;:::o;18659:366::-;18801:3;18822:67;18886:2;18881:3;18822:67;:::i;:::-;18815:74;;18898:93;18987:3;18898:93;:::i;:::-;19016:2;19011:3;19007:12;19000:19;;18659:366;;;:::o;19031:419::-;19197:4;19235:2;19224:9;19220:18;19212:26;;19284:9;19278:4;19274:20;19270:1;19259:9;19255:17;19248:47;19312:131;19438:4;19312:131;:::i;:::-;19304:139;;19031:419;;;:::o;19456:230::-;19596:34;19592:1;19584:6;19580:14;19573:58;19665:13;19660:2;19652:6;19648:15;19641:38;19456:230;:::o;19692:366::-;19834:3;19855:67;19919:2;19914:3;19855:67;:::i;:::-;19848:74;;19931:93;20020:3;19931:93;:::i;:::-;20049:2;20044:3;20040:12;20033:19;;19692:366;;;:::o;20064:419::-;20230:4;20268:2;20257:9;20253:18;20245:26;;20317:9;20311:4;20307:20;20303:1;20292:9;20288:17;20281:47;20345:131;20471:4;20345:131;:::i;:::-;20337:139;;20064:419;;;:::o;20489:180::-;20537:77;20534:1;20527:88;20634:4;20631:1;20624:15;20658:4;20655:1;20648:15;20675:180;20723:77;20720:1;20713:88;20820:4;20817:1;20810:15;20844:4;20841:1;20834:15;20861:233;20900:3;20923:24;20941:5;20923:24;:::i;:::-;20914:33;;20969:66;20962:5;20959:77;20956:103;;21039:18;;:::i;:::-;20956:103;21086:1;21079:5;21075:13;21068:20;;20861:233;;;:::o;21100:147::-;21201:11;21238:3;21223:18;;21100:147;;;;:::o;21253:114::-;;:::o;21373:398::-;21532:3;21553:83;21634:1;21629:3;21553:83;:::i;:::-;21546:90;;21645:93;21734:3;21645:93;:::i;:::-;21763:1;21758:3;21754:11;21747:18;;21373:398;;;:::o;21777:379::-;21961:3;21983:147;22126:3;21983:147;:::i;:::-;21976:154;;22147:3;22140:10;;21777:379;;;:::o;22162:231::-;22302:34;22298:1;22290:6;22286:14;22279:58;22371:14;22366:2;22358:6;22354:15;22347:39;22162:231;:::o;22399:366::-;22541:3;22562:67;22626:2;22621:3;22562:67;:::i;:::-;22555:74;;22638:93;22727:3;22638:93;:::i;:::-;22756:2;22751:3;22747:12;22740:19;;22399:366;;;:::o;22771:419::-;22937:4;22975:2;22964:9;22960:18;22952:26;;23024:9;23018:4;23014:20;23010:1;22999:9;22995:17;22988:47;23052:131;23178:4;23052:131;:::i;:::-;23044:139;;22771:419;;;:::o;23196:141::-;23245:4;23268:3;23260:11;;23291:3;23288:1;23281:14;23325:4;23322:1;23312:18;23304:26;;23196:141;;;:::o;23343:93::-;23380:6;23427:2;23422;23415:5;23411:14;23407:23;23397:33;;23343:93;;;:::o;23442:107::-;23486:8;23536:5;23530:4;23526:16;23505:37;;23442:107;;;;:::o;23555:393::-;23624:6;23674:1;23662:10;23658:18;23697:97;23727:66;23716:9;23697:97;:::i;:::-;23815:39;23845:8;23834:9;23815:39;:::i;:::-;23803:51;;23887:4;23883:9;23876:5;23872:21;23863:30;;23936:4;23926:8;23922:19;23915:5;23912:30;23902:40;;23631:317;;23555:393;;;;;:::o;23954:60::-;23982:3;24003:5;23996:12;;23954:60;;;:::o;24020:142::-;24070:9;24103:53;24121:34;24130:24;24148:5;24130:24;:::i;:::-;24121:34;:::i;:::-;24103:53;:::i;:::-;24090:66;;24020:142;;;:::o;24168:75::-;24211:3;24232:5;24225:12;;24168:75;;;:::o;24249:269::-;24359:39;24390:7;24359:39;:::i;:::-;24420:91;24469:41;24493:16;24469:41;:::i;:::-;24461:6;24454:4;24448:11;24420:91;:::i;:::-;24414:4;24407:105;24325:193;24249:269;;;:::o;24524:73::-;24569:3;24524:73;:::o;24603:189::-;24680:32;;:::i;:::-;24721:65;24779:6;24771;24765:4;24721:65;:::i;:::-;24656:136;24603:189;;:::o;24798:186::-;24858:120;24875:3;24868:5;24865:14;24858:120;;;24929:39;24966:1;24959:5;24929:39;:::i;:::-;24902:1;24895:5;24891:13;24882:22;;24858:120;;;24798:186;;:::o;24990:543::-;25091:2;25086:3;25083:11;25080:446;;;25125:38;25157:5;25125:38;:::i;:::-;25209:29;25227:10;25209:29;:::i;:::-;25199:8;25195:44;25392:2;25380:10;25377:18;25374:49;;;25413:8;25398:23;;25374:49;25436:80;25492:22;25510:3;25492:22;:::i;:::-;25482:8;25478:37;25465:11;25436:80;:::i;:::-;25095:431;;25080:446;24990:543;;;:::o;25539:117::-;25593:8;25643:5;25637:4;25633:16;25612:37;;25539:117;;;;:::o;25662:169::-;25706:6;25739:51;25787:1;25783:6;25775:5;25772:1;25768:13;25739:51;:::i;:::-;25735:56;25820:4;25814;25810:15;25800:25;;25713:118;25662:169;;;;:::o;25836:295::-;25912:4;26058:29;26083:3;26077:4;26058:29;:::i;:::-;26050:37;;26120:3;26117:1;26113:11;26107:4;26104:21;26096:29;;25836:295;;;;:::o;26136:1395::-;26253:37;26286:3;26253:37;:::i;:::-;26355:18;26347:6;26344:30;26341:56;;;26377:18;;:::i;:::-;26341:56;26421:38;26453:4;26447:11;26421:38;:::i;:::-;26506:67;26566:6;26558;26552:4;26506:67;:::i;:::-;26600:1;26624:4;26611:17;;26656:2;26648:6;26645:14;26673:1;26668:618;;;;27330:1;27347:6;27344:77;;;27396:9;27391:3;27387:19;27381:26;27372:35;;27344:77;27447:67;27507:6;27500:5;27447:67;:::i;:::-;27441:4;27434:81;27303:222;26638:887;;26668:618;26720:4;26716:9;26708:6;26704:22;26754:37;26786:4;26754:37;:::i;:::-;26813:1;26827:208;26841:7;26838:1;26835:14;26827:208;;;26920:9;26915:3;26911:19;26905:26;26897:6;26890:42;26971:1;26963:6;26959:14;26949:24;;27018:2;27007:9;27003:18;26990:31;;26864:4;26861:1;26857:12;26852:17;;26827:208;;;27063:6;27054:7;27051:19;27048:179;;;27121:9;27116:3;27112:19;27106:26;27164:48;27206:4;27198:6;27194:17;27183:9;27164:48;:::i;:::-;27156:6;27149:64;27071:156;27048:179;27273:1;27269;27261:6;27257:14;27253:22;27247:4;27240:36;26675:611;;;26638:887;;26228:1303;;;26136:1395;;:::o;27537:174::-;27677:26;27673:1;27665:6;27661:14;27654:50;27537:174;:::o;27717:366::-;27859:3;27880:67;27944:2;27939:3;27880:67;:::i;:::-;27873:74;;27956:93;28045:3;27956:93;:::i;:::-;28074:2;28069:3;28065:12;28058:19;;27717:366;;;:::o;28089:419::-;28255:4;28293:2;28282:9;28278:18;28270:26;;28342:9;28336:4;28332:20;28328:1;28317:9;28313:17;28306:47;28370:131;28496:4;28370:131;:::i;:::-;28362:139;;28089:419;;;:::o;28514:228::-;28654:34;28650:1;28642:6;28638:14;28631:58;28723:11;28718:2;28710:6;28706:15;28699:36;28514:228;:::o;28748:366::-;28890:3;28911:67;28975:2;28970:3;28911:67;:::i;:::-;28904:74;;28987:93;29076:3;28987:93;:::i;:::-;29105:2;29100:3;29096:12;29089:19;;28748:366;;;:::o;29120:419::-;29286:4;29324:2;29313:9;29309:18;29301:26;;29373:9;29367:4;29363:20;29359:1;29348:9;29344:17;29337:47;29401:131;29527:4;29401:131;:::i;:::-;29393:139;;29120:419;;;:::o;29545:172::-;29685:24;29681:1;29673:6;29669:14;29662:48;29545:172;:::o;29723:366::-;29865:3;29886:67;29950:2;29945:3;29886:67;:::i;:::-;29879:74;;29962:93;30051:3;29962:93;:::i;:::-;30080:2;30075:3;30071:12;30064:19;;29723:366;;;:::o;30095:419::-;30261:4;30299:2;30288:9;30284:18;30276:26;;30348:9;30342:4;30338:20;30334:1;30323:9;30319:17;30312:47;30376:131;30502:4;30376:131;:::i;:::-;30368:139;;30095:419;;;:::o;30520:178::-;30660:30;30656:1;30648:6;30644:14;30637:54;30520:178;:::o;30704:366::-;30846:3;30867:67;30931:2;30926:3;30867:67;:::i;:::-;30860:74;;30943:93;31032:3;30943:93;:::i;:::-;31061:2;31056:3;31052:12;31045:19;;30704:366;;;:::o;31076:419::-;31242:4;31280:2;31269:9;31265:18;31257:26;;31329:9;31323:4;31319:20;31315:1;31304:9;31300:17;31293:47;31357:131;31483:4;31357:131;:::i;:::-;31349:139;;31076:419;;;:::o;31501:223::-;31641:34;31637:1;31629:6;31625:14;31618:58;31710:6;31705:2;31697:6;31693:15;31686:31;31501:223;:::o;31730:366::-;31872:3;31893:67;31957:2;31952:3;31893:67;:::i;:::-;31886:74;;31969:93;32058:3;31969:93;:::i;:::-;32087:2;32082:3;32078:12;32071:19;;31730:366;;;:::o;32102:419::-;32268:4;32306:2;32295:9;32291:18;32283:26;;32355:9;32349:4;32345:20;32341:1;32330:9;32326:17;32319:47;32383:131;32509:4;32383:131;:::i;:::-;32375:139;;32102:419;;;:::o;32527:191::-;32567:3;32586:20;32604:1;32586:20;:::i;:::-;32581:25;;32620:20;32638:1;32620:20;:::i;:::-;32615:25;;32663:1;32660;32656:9;32649:16;;32684:3;32681:1;32678:10;32675:36;;;32691:18;;:::i;:::-;32675:36;32527:191;;;;:::o;32724:173::-;32864:25;32860:1;32852:6;32848:14;32841:49;32724:173;:::o;32903:366::-;33045:3;33066:67;33130:2;33125:3;33066:67;:::i;:::-;33059:74;;33142:93;33231:3;33142:93;:::i;:::-;33260:2;33255:3;33251:12;33244:19;;32903:366;;;:::o;33275:419::-;33441:4;33479:2;33468:9;33464:18;33456:26;;33528:9;33522:4;33518:20;33514:1;33503:9;33499:17;33492:47;33556:131;33682:4;33556:131;:::i;:::-;33548:139;;33275:419;;;:::o;33700:173::-;33840:25;33836:1;33828:6;33824:14;33817:49;33700:173;:::o;33879:366::-;34021:3;34042:67;34106:2;34101:3;34042:67;:::i;:::-;34035:74;;34118:93;34207:3;34118:93;:::i;:::-;34236:2;34231:3;34227:12;34220:19;;33879:366;;;:::o;34251:419::-;34417:4;34455:2;34444:9;34440:18;34432:26;;34504:9;34498:4;34494:20;34490:1;34479:9;34475:17;34468:47;34532:131;34658:4;34532:131;:::i;:::-;34524:139;;34251:419;;;:::o;34676:179::-;34816:31;34812:1;34804:6;34800:14;34793:55;34676:179;:::o;34861:366::-;35003:3;35024:67;35088:2;35083:3;35024:67;:::i;:::-;35017:74;;35100:93;35189:3;35100:93;:::i;:::-;35218:2;35213:3;35209:12;35202:19;;34861:366;;;:::o;35233:419::-;35399:4;35437:2;35426:9;35422:18;35414:26;;35486:9;35480:4;35476:20;35472:1;35461:9;35457:17;35450:47;35514:131;35640:4;35514:131;:::i;:::-;35506:139;;35233:419;;;:::o;35658:410::-;35698:7;35721:20;35739:1;35721:20;:::i;:::-;35716:25;;35755:20;35773:1;35755:20;:::i;:::-;35750:25;;35810:1;35807;35803:9;35832:30;35850:11;35832:30;:::i;:::-;35821:41;;36011:1;36002:7;35998:15;35995:1;35992:22;35972:1;35965:9;35945:83;35922:139;;36041:18;;:::i;:::-;35922:139;35706:362;35658:410;;;;:::o;36074:168::-;36214:20;36210:1;36202:6;36198:14;36191:44;36074:168;:::o;36248:366::-;36390:3;36411:67;36475:2;36470:3;36411:67;:::i;:::-;36404:74;;36487:93;36576:3;36487:93;:::i;:::-;36605:2;36600:3;36596:12;36589:19;;36248:366;;;:::o;36620:419::-;36786:4;36824:2;36813:9;36809:18;36801:26;;36873:9;36867:4;36863:20;36859:1;36848:9;36844:17;36837:47;36901:131;37027:4;36901:131;:::i;:::-;36893:139;;36620:419;;;:::o;37045:234::-;37185:34;37181:1;37173:6;37169:14;37162:58;37254:17;37249:2;37241:6;37237:15;37230:42;37045:234;:::o;37285:366::-;37427:3;37448:67;37512:2;37507:3;37448:67;:::i;:::-;37441:74;;37524:93;37613:3;37524:93;:::i;:::-;37642:2;37637:3;37633:12;37626:19;;37285:366;;;:::o;37657:419::-;37823:4;37861:2;37850:9;37846:18;37838:26;;37910:9;37904:4;37900:20;37896:1;37885:9;37881:17;37874:47;37938:131;38064:4;37938:131;:::i;:::-;37930:139;;37657:419;;;:::o;38082:148::-;38184:11;38221:3;38206:18;;38082:148;;;;:::o;38236:390::-;38342:3;38370:39;38403:5;38370:39;:::i;:::-;38425:89;38507:6;38502:3;38425:89;:::i;:::-;38418:96;;38523:65;38581:6;38576:3;38569:4;38562:5;38558:16;38523:65;:::i;:::-;38613:6;38608:3;38604:16;38597:23;;38346:280;38236:390;;;;:::o;38656:874::-;38759:3;38796:5;38790:12;38825:36;38851:9;38825:36;:::i;:::-;38877:89;38959:6;38954:3;38877:89;:::i;:::-;38870:96;;38997:1;38986:9;38982:17;39013:1;39008:166;;;;39188:1;39183:341;;;;38975:549;;39008:166;39092:4;39088:9;39077;39073:25;39068:3;39061:38;39154:6;39147:14;39140:22;39132:6;39128:35;39123:3;39119:45;39112:52;;39008:166;;39183:341;39250:38;39282:5;39250:38;:::i;:::-;39310:1;39324:154;39338:6;39335:1;39332:13;39324:154;;;39412:7;39406:14;39402:1;39397:3;39393:11;39386:35;39462:1;39453:7;39449:15;39438:26;;39360:4;39357:1;39353:12;39348:17;;39324:154;;;39507:6;39502:3;39498:16;39491:23;;39190:334;;38975:549;;38763:767;;38656:874;;;;:::o;39536:589::-;39761:3;39783:95;39874:3;39865:6;39783:95;:::i;:::-;39776:102;;39895:95;39986:3;39977:6;39895:95;:::i;:::-;39888:102;;40007:92;40095:3;40086:6;40007:92;:::i;:::-;40000:99;;40116:3;40109:10;;39536:589;;;;;;:::o;40131:225::-;40271:34;40267:1;40259:6;40255:14;40248:58;40340:8;40335:2;40327:6;40323:15;40316:33;40131:225;:::o;40362:366::-;40504:3;40525:67;40589:2;40584:3;40525:67;:::i;:::-;40518:74;;40601:93;40690:3;40601:93;:::i;:::-;40719:2;40714:3;40710:12;40703:19;;40362:366;;;:::o;40734:419::-;40900:4;40938:2;40927:9;40923:18;40915:26;;40987:9;40981:4;40977:20;40973:1;40962:9;40958:17;40951:47;41015:131;41141:4;41015:131;:::i;:::-;41007:139;;40734:419;;;:::o;41159:182::-;41299:34;41295:1;41287:6;41283:14;41276:58;41159:182;:::o;41347:366::-;41489:3;41510:67;41574:2;41569:3;41510:67;:::i;:::-;41503:74;;41586:93;41675:3;41586:93;:::i;:::-;41704:2;41699:3;41695:12;41688:19;;41347:366;;;:::o;41719:419::-;41885:4;41923:2;41912:9;41908:18;41900:26;;41972:9;41966:4;41962:20;41958:1;41947:9;41943:17;41936:47;42000:131;42126:4;42000:131;:::i;:::-;41992:139;;41719:419;;;:::o;42144:224::-;42284:34;42280:1;42272:6;42268:14;42261:58;42353:7;42348:2;42340:6;42336:15;42329:32;42144:224;:::o;42374:366::-;42516:3;42537:67;42601:2;42596:3;42537:67;:::i;:::-;42530:74;;42613:93;42702:3;42613:93;:::i;:::-;42731:2;42726:3;42722:12;42715:19;;42374:366;;;:::o;42746:419::-;42912:4;42950:2;42939:9;42935:18;42927:26;;42999:9;42993:4;42989:20;42985:1;42974:9;42970:17;42963:47;43027:131;43153:4;43027:131;:::i;:::-;43019:139;;42746:419;;;:::o;43171:223::-;43311:34;43307:1;43299:6;43295:14;43288:58;43380:6;43375:2;43367:6;43363:15;43356:31;43171:223;:::o;43400:366::-;43542:3;43563:67;43627:2;43622:3;43563:67;:::i;:::-;43556:74;;43639:93;43728:3;43639:93;:::i;:::-;43757:2;43752:3;43748:12;43741:19;;43400:366;;;:::o;43772:419::-;43938:4;43976:2;43965:9;43961:18;43953:26;;44025:9;44019:4;44015:20;44011:1;44000:9;43996:17;43989:47;44053:131;44179:4;44053:131;:::i;:::-;44045:139;;43772:419;;;:::o;44197:175::-;44337:27;44333:1;44325:6;44321:14;44314:51;44197:175;:::o;44378:366::-;44520:3;44541:67;44605:2;44600:3;44541:67;:::i;:::-;44534:74;;44617:93;44706:3;44617:93;:::i;:::-;44735:2;44730:3;44726:12;44719:19;;44378:366;;;:::o;44750:419::-;44916:4;44954:2;44943:9;44939:18;44931:26;;45003:9;44997:4;44993:20;44989:1;44978:9;44974:17;44967:47;45031:131;45157:4;45031:131;:::i;:::-;45023:139;;44750:419;;;:::o;45175:237::-;45315:34;45311:1;45303:6;45299:14;45292:58;45384:20;45379:2;45371:6;45367:15;45360:45;45175:237;:::o;45418:366::-;45560:3;45581:67;45645:2;45640:3;45581:67;:::i;:::-;45574:74;;45657:93;45746:3;45657:93;:::i;:::-;45775:2;45770:3;45766:12;45759:19;;45418:366;;;:::o;45790:419::-;45956:4;45994:2;45983:9;45979:18;45971:26;;46043:9;46037:4;46033:20;46029:1;46018:9;46014:17;46007:47;46071:131;46197:4;46071:131;:::i;:::-;46063:139;;45790:419;;;:::o;46215:180::-;46263:77;46260:1;46253:88;46360:4;46357:1;46350:15;46384:4;46381:1;46374:15;46401:240;46541:34;46537:1;46529:6;46525:14;46518:58;46610:23;46605:2;46597:6;46593:15;46586:48;46401:240;:::o;46647:366::-;46789:3;46810:67;46874:2;46869:3;46810:67;:::i;:::-;46803:74;;46886:93;46975:3;46886:93;:::i;:::-;47004:2;46999:3;46995:12;46988:19;;46647:366;;;:::o;47019:419::-;47185:4;47223:2;47212:9;47208:18;47200:26;;47272:9;47266:4;47262:20;47258:1;47247:9;47243:17;47236:47;47300:131;47426:4;47300:131;:::i;:::-;47292:139;;47019:419;;;:::o;47444:98::-;47495:6;47529:5;47523:12;47513:22;;47444:98;;;:::o;47548:168::-;47631:11;47665:6;47660:3;47653:19;47705:4;47700:3;47696:14;47681:29;;47548:168;;;;:::o;47722:373::-;47808:3;47836:38;47868:5;47836:38;:::i;:::-;47890:70;47953:6;47948:3;47890:70;:::i;:::-;47883:77;;47969:65;48027:6;48022:3;48015:4;48008:5;48004:16;47969:65;:::i;:::-;48059:29;48081:6;48059:29;:::i;:::-;48054:3;48050:39;48043:46;;47812:283;47722:373;;;;:::o;48101:640::-;48296:4;48334:3;48323:9;48319:19;48311:27;;48348:71;48416:1;48405:9;48401:17;48392:6;48348:71;:::i;:::-;48429:72;48497:2;48486:9;48482:18;48473:6;48429:72;:::i;:::-;48511;48579:2;48568:9;48564:18;48555:6;48511:72;:::i;:::-;48630:9;48624:4;48620:20;48615:2;48604:9;48600:18;48593:48;48658:76;48729:4;48720:6;48658:76;:::i;:::-;48650:84;;48101:640;;;;;;;:::o;48747:141::-;48803:5;48834:6;48828:13;48819:22;;48850:32;48876:5;48850:32;:::i;:::-;48747:141;;;;:::o;48894:349::-;48963:6;49012:2;49000:9;48991:7;48987:23;48983:32;48980:119;;;49018:79;;:::i;:::-;48980:119;49138:1;49163:63;49218:7;49209:6;49198:9;49194:22;49163:63;:::i;:::-;49153:73;;49109:127;48894:349;;;;:::o;49249:194::-;49289:4;49309:20;49327:1;49309:20;:::i;:::-;49304:25;;49343:20;49361:1;49343:20;:::i;:::-;49338:25;;49387:1;49384;49380:9;49372:17;;49411:1;49405:4;49402:11;49399:37;;;49416:18;;:::i;:::-;49399:37;49249:194;;;;:::o;49449:180::-;49497:77;49494:1;49487:88;49594:4;49591:1;49584:15;49618:4;49615:1;49608:15;49635:182;49775:34;49771:1;49763:6;49759:14;49752:58;49635:182;:::o;49823:366::-;49965:3;49986:67;50050:2;50045:3;49986:67;:::i;:::-;49979:74;;50062:93;50151:3;50062:93;:::i;:::-;50180:2;50175:3;50171:12;50164:19;;49823:366;;;:::o;50195:419::-;50361:4;50399:2;50388:9;50384:18;50376:26;;50448:9;50442:4;50438:20;50434:1;50423:9;50419:17;50412:47;50476:131;50602:4;50476:131;:::i;:::-;50468:139;;50195:419;;;:::o;50620:178::-;50760:30;50756:1;50748:6;50744:14;50737:54;50620:178;:::o;50804:366::-;50946:3;50967:67;51031:2;51026:3;50967:67;:::i;:::-;50960:74;;51043:93;51132:3;51043:93;:::i;:::-;51161:2;51156:3;51152:12;51145:19;;50804:366;;;:::o;51176:419::-;51342:4;51380:2;51369:9;51365:18;51357:26;;51429:9;51423:4;51419:20;51415:1;51404:9;51400:17;51393:47;51457:131;51583:4;51457:131;:::i;:::-;51449:139;;51176:419;;;:::o
Swarm Source
ipfs://4100527d1f54549761f1e3a6f38b8a88cc1db94660cb8f90b86aeec660240a22
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.