Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
830 RR/GOBLIN
Holders
72
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 RR/GOBLINLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
RRGOBLIN
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-21 */ /** *Submitted for verification at Etherscan.io on 2022-06-21 */ /** *Submitted for verification at Etherscan.io on 2022-04-09 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/interfaces/IERC20.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC165.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts v4.4.1 (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ERC721A.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128. * * Does not support burning tokens to address(0). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 private currentIndex = 0; uint256 internal immutable collectionSize; uint256 internal immutable maxBatchSize; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) private _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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 * `maxBatchSize` refers to how much a minter can mint at a time. * `collectionSize_` refers to how many tokens are in the collection. */ constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_, uint256 collectionSize_ ) { require( collectionSize_ > 0, "ERC721A: collection must have a nonzero supply" ); require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero"); _name = name_; _symbol = symbol_; maxBatchSize = maxBatchSize_; collectionSize = collectionSize_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), "ERC721A: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), "ERC721A: owner index out of bounds"); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx = 0; address currOwnershipAddr = address(0); for (uint256 i = 0; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } revert("ERC721A: unable to get token of owner by index"); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721A: balance query for the zero address"); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require( owner != address(0), "ERC721A: number minted query for the zero address" ); return uint256(_addressData[owner].numberMinted); } function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), "ERC721A: owner query for nonexistent token"); uint256 lowestTokenToCheck; if (tokenId >= maxBatchSize) { lowestTokenToCheck = tokenId - maxBatchSize + 1; } for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } revert("ERC721A: unable to determine the owner of token"); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, "ERC721A: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721A: approve caller is not owner nor approved for all" ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721A: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), "ERC721A: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - there must be `quantity` tokens remaining unminted in the total collection. * - `to` cannot be the zero address. * - `quantity` cannot be larger than the max batch size. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = currentIndex; require(to != address(0), "ERC721A: mint to the zero address"); // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering. require(!_exists(startTokenId), "ERC721A: token already minted"); require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high"); _beforeTokenTransfers(address(0), to, startTokenId, quantity); AddressData memory addressData = _addressData[to]; _addressData[to] = AddressData( addressData.balance + uint128(quantity), addressData.numberMinted + uint128(quantity) ); _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp)); uint256 updatedIndex = startTokenId; for (uint256 i = 0; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); require( _checkOnERC721Received(address(0), to, updatedIndex, _data), "ERC721A: transfer to non ERC721Receiver implementer" ); updatedIndex++; } currentIndex = updatedIndex; _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require( isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved" ); require( prevOwnership.addr == from, "ERC721A: transfer from incorrect owner" ); require(to != address(0), "ERC721A: transfer to the zero address"); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId] = TokenOwnership( prevOwnership.addr, prevOwnership.startTimestamp ); } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } uint256 public nextOwnerToExplicitlySet = 0; /** * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf(). */ function _setOwnersExplicit(uint256 quantity) internal { uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet; require(quantity > 0, "quantity must be nonzero"); uint256 endIndex = oldNextOwnerToSet + quantity - 1; if (endIndex > collectionSize - 1) { endIndex = collectionSize - 1; } // We know if the last one in the group exists, all in the group exist, due to serial ordering. require(_exists(endIndex), "not enough minted yet for this cleanup"); for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) { if (_ownerships[i].addr == address(0)) { TokenOwnership memory ownership = ownershipOf(i); _ownerships[i] = TokenOwnership( ownership.addr, ownership.startTimestamp ); } } nextOwnerToExplicitlySet = endIndex + 1; } /** * @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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721A: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } //SPDX-License-Identifier: MIT //Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) pragma solidity ^0.8.0; contract RRGOBLIN is ERC721A, Ownable { using Counters for Counters.Counter; using Strings for uint256; Counters.Counter private tokenCounter; uint256 public constant MAX_MINTS_PER_TX = 5; uint256 public maxSupply = 5555; uint256 public constant PUBLIC_SALE_PRICE = 0.002 ether; uint256 public NUM_FREE_MINTS = 2000; bool public isPublicSaleActive = true; // ============ ACCESS CONTROL/SANITY MODIFIERS ============ modifier publicSaleActive() { require(isPublicSaleActive, "Public sale is not open"); _; } modifier maxMintsPerTX(uint256 numberOfTokens) { require( numberOfTokens <= MAX_MINTS_PER_TX, "Max mints per transaction exceeded" ); _; } modifier canMintNFTs(uint256 numberOfTokens) { require( totalSupply() + numberOfTokens <= maxSupply, "Not enough mints remaining to mint" ); _; } modifier freeMintsAvailable() { require( totalSupply() <= NUM_FREE_MINTS, "Not enough free mints remain" ); _; } modifier isCorrectPayment(uint256 price, uint256 numberOfTokens) { if(totalSupply()>NUM_FREE_MINTS){ require( (price * numberOfTokens) <= msg.value, "Incorrect ETH value sent" ); } _; } constructor( ) ERC721A("RR/GOBLIN", "RR/GOBLIN", 100, maxSupply) { } // ============ PUBLIC FUNCTIONS FOR MINTING ============ function mint(uint256 numberOfTokens) external payable isCorrectPayment(PUBLIC_SALE_PRICE, numberOfTokens) publicSaleActive canMintNFTs(numberOfTokens) maxMintsPerTX(numberOfTokens) { _safeMint(msg.sender, numberOfTokens); } function setIsPublicSaleActive(bool _isPublicSaleActive) external onlyOwner { isPublicSaleActive = _isPublicSaleActive; } function setNumFreeMints(uint256 _numfreemints) external onlyOwner { NUM_FREE_MINTS = _numfreemints; } function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } // ============ SUPPORTING FUNCTIONS ============ function nextTokenId() private returns (uint256) { tokenCounter.increment(); return tokenCounter.current(); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "Nonexistent token"); return string(abi.encodePacked("https://ipfs.io/ipfs/QmQZqKWmy2ZEh3cvsJQopy4dfVpLKSgyEX43DJD71LaNUP/", tokenId.toString(), ".json")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[],"name":"MAX_MINTS_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUM_FREE_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALE_PRICE","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPublicSaleActive","type":"bool"}],"name":"setIsPublicSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numfreemints","type":"uint256"}],"name":"setNumFreeMints","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000805560006007556115b3600a556107d0600b556001600c60006101000a81548160ff0219169083151502179055503480156200004157600080fd5b506040518060400160405280600981526020017f52522f474f424c494e00000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f52522f474f424c494e00000000000000000000000000000000000000000000008152506064600a5460008111620000f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f09062000399565b60405180910390fd5b600082116200013f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001369062000377565b60405180910390fd5b83600190805190602001906200015792919062000279565b5082600290805190602001906200017092919062000279565b508160a08181525050806080818152505050505050620001a562000199620001ab60201b60201c565b620001b360201b60201c565b620004cf565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028790620003cc565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b600062000338602783620003bb565b9150620003458262000431565b604082019050919050565b60006200035f602e83620003bb565b91506200036c8262000480565b604082019050919050565b60006020820190508181036000830152620003928162000329565b9050919050565b60006020820190508181036000830152620003b48162000350565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003e557607f821691505b60208210811415620003fc57620003fb62000402565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516140fd6200050060003960008181611ddb01528181611e0401526124330152600050506140fd6000f3fe6080604052600436106101c25760003560e01c80636352211e116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb0114610633578063d7224ba01461065e578063e985e9c514610689578063f2fde38b146106c6576101c2565b8063a22cb46514610579578063b88d4fde146105a2578063c6a91b42146105cb578063c87b56dd146105f6576101c2565b80638da5cb5b116100d15780638da5cb5b146104dc57806395d89b4114610507578063982d669e14610532578063a0712d681461055d576101c2565b80636352211e1461044b57806370a0823114610488578063715018a6146104c5576101c2565b80631e84c413116101645780632f745c591161013e5780632f745c59146103915780633ccfd60b146103ce57806342842e0e146103e55780634f6ccce71461040e576101c2565b80631e84c4131461031457806323b872dd1461033f57806328cad13d14610368576101c2565b8063081812fc116101a0578063081812fc1461025a578063095ea7b3146102975780630a00ae83146102c057806318160ddd146102e9576101c2565b806301ffc9a7146101c757806306fdde031461020457806307e89ec01461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612b67565b6106ef565b6040516101fb91906130e0565b60405180910390f35b34801561021057600080fd5b50610219610839565b60405161022691906130fb565b60405180910390f35b34801561023b57600080fd5b506102446108cb565b604051610251919061341d565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190612bc1565b6108d6565b60405161028e9190613079565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612afa565b61095b565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190612bc1565b610a74565b005b3480156102f557600080fd5b506102fe610afa565b60405161030b919061341d565b60405180910390f35b34801561032057600080fd5b50610329610b03565b60405161033691906130e0565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906129e4565b610b16565b005b34801561037457600080fd5b5061038f600480360381019061038a9190612b3a565b610b26565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612afa565b610bbf565b6040516103c5919061341d565b60405180910390f35b3480156103da57600080fd5b506103e3610dbd565b005b3480156103f157600080fd5b5061040c600480360381019061040791906129e4565b610e88565b005b34801561041a57600080fd5b5061043560048036038101906104309190612bc1565b610ea8565b604051610442919061341d565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612bc1565b610efb565b60405161047f9190613079565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612977565b610f11565b6040516104bc919061341d565b60405180910390f35b3480156104d157600080fd5b506104da610ffa565b005b3480156104e857600080fd5b506104f1611082565b6040516104fe9190613079565b60405180910390f35b34801561051357600080fd5b5061051c6110ac565b60405161052991906130fb565b60405180910390f35b34801561053e57600080fd5b5061054761113e565b604051610554919061341d565b60405180910390f35b61057760048036038101906105729190612bc1565b611144565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612aba565b6112aa565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612a37565b61142b565b005b3480156105d757600080fd5b506105e0611487565b6040516105ed919061341d565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612bc1565b61148c565b60405161062a91906130fb565b60405180910390f35b34801561063f57600080fd5b50610648611505565b604051610655919061341d565b60405180910390f35b34801561066a57600080fd5b5061067361150b565b604051610680919061341d565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906129a4565b611511565b6040516106bd91906130e0565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612977565b6115a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083257506108318261169d565b5b9050919050565b6060600180546108489061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061375c565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b66071afd498d000081565b60006108e182611707565b610920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610917906133dd565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096682610efb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906132dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f6611714565b73ffffffffffffffffffffffffffffffffffffffff161480610a255750610a2481610a1f611714565b611511565b5b610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b9061321d565b60405180910390fd5b610a6f83838361171c565b505050565b610a7c611714565b73ffffffffffffffffffffffffffffffffffffffff16610a9a611082565b73ffffffffffffffffffffffffffffffffffffffff1614610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae79061327d565b60405180910390fd5b80600b8190555050565b60008054905090565b600c60009054906101000a900460ff1681565b610b218383836117ce565b505050565b610b2e611714565b73ffffffffffffffffffffffffffffffffffffffff16610b4c611082565b73ffffffffffffffffffffffffffffffffffffffff1614610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b999061327d565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6000610bca83610f11565b8210610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061311d565b60405180910390fd5b6000610c15610afa565b905060008060005b83811015610d7b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d675786841415610d58578195505050505050610db7565b8380610d63906137bf565b9450505b508080610d73906137bf565b915050610c1d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061337d565b60405180910390fd5b92915050565b610dc5611714565b73ffffffffffffffffffffffffffffffffffffffff16610de3611082565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061327d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e84573d6000803e3d6000fd5b5050565b610ea38383836040518060200160405280600081525061142b565b505050565b6000610eb2610afa565b8210610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061317d565b60405180910390fd5b819050919050565b6000610f0682611d87565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061323d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611002611714565b73ffffffffffffffffffffffffffffffffffffffff16611020611082565b73ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061327d565b60405180910390fd5b6110806000611f8a565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110bb9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546110e79061375c565b80156111345780601f1061110957610100808354040283529160200191611134565b820191906000526020600020905b81548152906001019060200180831161111757829003601f168201915b5050505050905090565b600b5481565b66071afd498d000081600b54611158610afa565b11156111ad5734818361116b919061359e565b11156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061335d565b60405180910390fd5b5b600c60009054906101000a900460ff166111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906133bd565b60405180910390fd5b82600a5481611209610afa565b6112139190613517565b1115611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b9061319d565b60405180910390fd5b836005811115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906131dd565b60405180910390fd5b6112a33386612050565b5050505050565b6112b2611714565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113179061329d565b60405180910390fd5b806006600061132d611714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113da611714565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161141f91906130e0565b60405180910390a35050565b6114368484846117ce565b6114428484848461206e565b611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906132fd565b60405180910390fd5b50505050565b600581565b606061149782611707565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd906131fd565b60405180910390fd5b6114df82612205565b6040516020016114ef919061304c565b6040516020818303038152906040529050919050565b600a5481565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115ad611714565b73ffffffffffffffffffffffffffffffffffffffff166115cb611082565b73ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116189061327d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061313d565b60405180910390fd5b61169a81611f8a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006117d982611d87565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611800611714565b73ffffffffffffffffffffffffffffffffffffffff16148061185c5750611825611714565b73ffffffffffffffffffffffffffffffffffffffff16611844846108d6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061187857506118778260000151611872611714565b611511565b5b9050806118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906132bd565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119239061325d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561199c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611993906131bd565b60405180910390fd5b6119a98585856001612366565b6119b9600084846000015161171c565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a2791906135f8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611acb91906134d1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611bd19190613517565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d1757611c4781611707565b15611d16576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d7f868686600161236c565b505050505050565b611d8f612864565b611d9882611707565b611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce9061315d565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310611e3b5760017f000000000000000000000000000000000000000000000000000000000000000084611e2e919061362c565b611e389190613517565b90505b60008390505b818110611f49576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f3557809350505050611f85565b508080611f4190613732565b915050611e41565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061339d565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61206a828260405180602001604052806000815250612372565b5050565b600061208f8473ffffffffffffffffffffffffffffffffffffffff16612851565b156121f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120b8611714565b8786866040518563ffffffff1660e01b81526004016120da9493929190613094565b602060405180830381600087803b1580156120f457600080fd5b505af192505050801561212557506040513d601f19601f820116820180604052508101906121229190612b94565b60015b6121a8573d8060008114612155576040519150601f19603f3d011682016040523d82523d6000602084013e61215a565b606091505b506000815114156121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906132fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121fd565b600190505b949350505050565b6060600082141561224d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612361565b600082905060005b6000821461227f578080612268906137bf565b915050600a82612278919061356d565b9150612255565b60008167ffffffffffffffff81111561229b5761229a6138f5565b5b6040519080825280601f01601f1916602001820160405280156122cd5781602001600182028036833780820191505090505b5090505b6000851461235a576001826122e6919061362c565b9150600a856122f59190613808565b60306123019190613517565b60f81b818381518110612317576123166138c6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612353919061356d565b94506122d1565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df9061333d565b60405180910390fd5b6123f181611707565b15612431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124289061331d565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b906133fd565b60405180910390fd5b6124a16000858386612366565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161259e91906134d1565b6fffffffffffffffffffffffffffffffff1681526020018583602001516125c591906134d1565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561283457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127d4600088848861206e565b612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a906132fd565b60405180910390fd5b818061281e906137bf565b925050808061282c906137bf565b915050612763565b5080600081905550612849600087858861236c565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006128b16128ac8461345d565b613438565b9050828152602081018484840111156128cd576128cc613929565b5b6128d88482856136f0565b509392505050565b6000813590506128ef8161406b565b92915050565b60008135905061290481614082565b92915050565b60008135905061291981614099565b92915050565b60008151905061292e81614099565b92915050565b600082601f83011261294957612948613924565b5b813561295984826020860161289e565b91505092915050565b600081359050612971816140b0565b92915050565b60006020828403121561298d5761298c613933565b5b600061299b848285016128e0565b91505092915050565b600080604083850312156129bb576129ba613933565b5b60006129c9858286016128e0565b92505060206129da858286016128e0565b9150509250929050565b6000806000606084860312156129fd576129fc613933565b5b6000612a0b868287016128e0565b9350506020612a1c868287016128e0565b9250506040612a2d86828701612962565b9150509250925092565b60008060008060808587031215612a5157612a50613933565b5b6000612a5f878288016128e0565b9450506020612a70878288016128e0565b9350506040612a8187828801612962565b925050606085013567ffffffffffffffff811115612aa257612aa161392e565b5b612aae87828801612934565b91505092959194509250565b60008060408385031215612ad157612ad0613933565b5b6000612adf858286016128e0565b9250506020612af0858286016128f5565b9150509250929050565b60008060408385031215612b1157612b10613933565b5b6000612b1f858286016128e0565b9250506020612b3085828601612962565b9150509250929050565b600060208284031215612b5057612b4f613933565b5b6000612b5e848285016128f5565b91505092915050565b600060208284031215612b7d57612b7c613933565b5b6000612b8b8482850161290a565b91505092915050565b600060208284031215612baa57612ba9613933565b5b6000612bb88482850161291f565b91505092915050565b600060208284031215612bd757612bd6613933565b5b6000612be584828501612962565b91505092915050565b612bf781613660565b82525050565b612c0681613672565b82525050565b6000612c178261348e565b612c2181856134a4565b9350612c318185602086016136ff565b612c3a81613938565b840191505092915050565b6000612c5082613499565b612c5a81856134b5565b9350612c6a8185602086016136ff565b612c7381613938565b840191505092915050565b6000612c8982613499565b612c9381856134c6565b9350612ca38185602086016136ff565b80840191505092915050565b6000612cbc6022836134b5565b9150612cc782613949565b604082019050919050565b6000612cdf6026836134b5565b9150612cea82613998565b604082019050919050565b6000612d02602a836134b5565b9150612d0d826139e7565b604082019050919050565b6000612d256023836134b5565b9150612d3082613a36565b604082019050919050565b6000612d486022836134b5565b9150612d5382613a85565b604082019050919050565b6000612d6b6025836134b5565b9150612d7682613ad4565b604082019050919050565b6000612d8e6022836134b5565b9150612d9982613b23565b604082019050919050565b6000612db16011836134b5565b9150612dbc82613b72565b602082019050919050565b6000612dd46039836134b5565b9150612ddf82613b9b565b604082019050919050565b6000612df7602b836134b5565b9150612e0282613bea565b604082019050919050565b6000612e1a6026836134b5565b9150612e2582613c39565b604082019050919050565b6000612e3d6005836134c6565b9150612e4882613c88565b600582019050919050565b6000612e606020836134b5565b9150612e6b82613cb1565b602082019050919050565b6000612e83601a836134b5565b9150612e8e82613cda565b602082019050919050565b6000612ea66032836134b5565b9150612eb182613d03565b604082019050919050565b6000612ec96022836134b5565b9150612ed482613d52565b604082019050919050565b6000612eec6033836134b5565b9150612ef782613da1565b604082019050919050565b6000612f0f601d836134b5565b9150612f1a82613df0565b602082019050919050565b6000612f326021836134b5565b9150612f3d82613e19565b604082019050919050565b6000612f556044836134c6565b9150612f6082613e68565b604482019050919050565b6000612f786018836134b5565b9150612f8382613edd565b602082019050919050565b6000612f9b602e836134b5565b9150612fa682613f06565b604082019050919050565b6000612fbe602f836134b5565b9150612fc982613f55565b604082019050919050565b6000612fe16017836134b5565b9150612fec82613fa4565b602082019050919050565b6000613004602d836134b5565b915061300f82613fcd565b604082019050919050565b60006130276022836134b5565b91506130328261401c565b604082019050919050565b613046816136e6565b82525050565b600061305782612f48565b91506130638284612c7e565b915061306e82612e30565b915081905092915050565b600060208201905061308e6000830184612bee565b92915050565b60006080820190506130a96000830187612bee565b6130b66020830186612bee565b6130c3604083018561303d565b81810360608301526130d58184612c0c565b905095945050505050565b60006020820190506130f56000830184612bfd565b92915050565b600060208201905081810360008301526131158184612c45565b905092915050565b6000602082019050818103600083015261313681612caf565b9050919050565b6000602082019050818103600083015261315681612cd2565b9050919050565b6000602082019050818103600083015261317681612cf5565b9050919050565b6000602082019050818103600083015261319681612d18565b9050919050565b600060208201905081810360008301526131b681612d3b565b9050919050565b600060208201905081810360008301526131d681612d5e565b9050919050565b600060208201905081810360008301526131f681612d81565b9050919050565b6000602082019050818103600083015261321681612da4565b9050919050565b6000602082019050818103600083015261323681612dc7565b9050919050565b6000602082019050818103600083015261325681612dea565b9050919050565b6000602082019050818103600083015261327681612e0d565b9050919050565b6000602082019050818103600083015261329681612e53565b9050919050565b600060208201905081810360008301526132b681612e76565b9050919050565b600060208201905081810360008301526132d681612e99565b9050919050565b600060208201905081810360008301526132f681612ebc565b9050919050565b6000602082019050818103600083015261331681612edf565b9050919050565b6000602082019050818103600083015261333681612f02565b9050919050565b6000602082019050818103600083015261335681612f25565b9050919050565b6000602082019050818103600083015261337681612f6b565b9050919050565b6000602082019050818103600083015261339681612f8e565b9050919050565b600060208201905081810360008301526133b681612fb1565b9050919050565b600060208201905081810360008301526133d681612fd4565b9050919050565b600060208201905081810360008301526133f681612ff7565b9050919050565b600060208201905081810360008301526134168161301a565b9050919050565b6000602082019050613432600083018461303d565b92915050565b6000613442613453565b905061344e828261378e565b919050565b6000604051905090565b600067ffffffffffffffff821115613478576134776138f5565b5b61348182613938565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134dc826136aa565b91506134e7836136aa565b9250826fffffffffffffffffffffffffffffffff0382111561350c5761350b613839565b5b828201905092915050565b6000613522826136e6565b915061352d836136e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356257613561613839565b5b828201905092915050565b6000613578826136e6565b9150613583836136e6565b92508261359357613592613868565b5b828204905092915050565b60006135a9826136e6565b91506135b4836136e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135ed576135ec613839565b5b828202905092915050565b6000613603826136aa565b915061360e836136aa565b92508282101561362157613620613839565b5b828203905092915050565b6000613637826136e6565b9150613642836136e6565b92508282101561365557613654613839565b5b828203905092915050565b600061366b826136c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561371d578082015181840152602081019050613702565b8381111561372c576000848401525b50505050565b600061373d826136e6565b9150600082141561375157613750613839565b5b600182039050919050565b6000600282049050600182168061377457607f821691505b6020821081141561378857613787613897565b5b50919050565b61379782613938565b810181811067ffffffffffffffff821117156137b6576137b56138f5565b5b80604052505050565b60006137ca826136e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137fd576137fc613839565b5b600182019050919050565b6000613813826136e6565b915061381e836136e6565b92508261382e5761382d613868565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768206d696e74732072656d61696e696e6720746f206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e747320706572207472616e73616374696f6e2065786365656460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f697066732e696f2f697066732f516d515a714b576d79325a60008201527f4568336376734a516f707934646656704c4b53677945583433444a4437314c6160208201527f4e55502f00000000000000000000000000000000000000000000000000000000604082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61407481613660565b811461407f57600080fd5b50565b61408b81613672565b811461409657600080fd5b50565b6140a28161367e565b81146140ad57600080fd5b50565b6140b9816136e6565b81146140c457600080fd5b5056fea26469706673582212207ba822a3b4a389001fef5f9503ce132932bca8393280f1b7beca2b2d60041e3364736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80636352211e116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb0114610633578063d7224ba01461065e578063e985e9c514610689578063f2fde38b146106c6576101c2565b8063a22cb46514610579578063b88d4fde146105a2578063c6a91b42146105cb578063c87b56dd146105f6576101c2565b80638da5cb5b116100d15780638da5cb5b146104dc57806395d89b4114610507578063982d669e14610532578063a0712d681461055d576101c2565b80636352211e1461044b57806370a0823114610488578063715018a6146104c5576101c2565b80631e84c413116101645780632f745c591161013e5780632f745c59146103915780633ccfd60b146103ce57806342842e0e146103e55780634f6ccce71461040e576101c2565b80631e84c4131461031457806323b872dd1461033f57806328cad13d14610368576101c2565b8063081812fc116101a0578063081812fc1461025a578063095ea7b3146102975780630a00ae83146102c057806318160ddd146102e9576101c2565b806301ffc9a7146101c757806306fdde031461020457806307e89ec01461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612b67565b6106ef565b6040516101fb91906130e0565b60405180910390f35b34801561021057600080fd5b50610219610839565b60405161022691906130fb565b60405180910390f35b34801561023b57600080fd5b506102446108cb565b604051610251919061341d565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190612bc1565b6108d6565b60405161028e9190613079565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190612afa565b61095b565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190612bc1565b610a74565b005b3480156102f557600080fd5b506102fe610afa565b60405161030b919061341d565b60405180910390f35b34801561032057600080fd5b50610329610b03565b60405161033691906130e0565b60405180910390f35b34801561034b57600080fd5b50610366600480360381019061036191906129e4565b610b16565b005b34801561037457600080fd5b5061038f600480360381019061038a9190612b3a565b610b26565b005b34801561039d57600080fd5b506103b860048036038101906103b39190612afa565b610bbf565b6040516103c5919061341d565b60405180910390f35b3480156103da57600080fd5b506103e3610dbd565b005b3480156103f157600080fd5b5061040c600480360381019061040791906129e4565b610e88565b005b34801561041a57600080fd5b5061043560048036038101906104309190612bc1565b610ea8565b604051610442919061341d565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190612bc1565b610efb565b60405161047f9190613079565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612977565b610f11565b6040516104bc919061341d565b60405180910390f35b3480156104d157600080fd5b506104da610ffa565b005b3480156104e857600080fd5b506104f1611082565b6040516104fe9190613079565b60405180910390f35b34801561051357600080fd5b5061051c6110ac565b60405161052991906130fb565b60405180910390f35b34801561053e57600080fd5b5061054761113e565b604051610554919061341d565b60405180910390f35b61057760048036038101906105729190612bc1565b611144565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612aba565b6112aa565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612a37565b61142b565b005b3480156105d757600080fd5b506105e0611487565b6040516105ed919061341d565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612bc1565b61148c565b60405161062a91906130fb565b60405180910390f35b34801561063f57600080fd5b50610648611505565b604051610655919061341d565b60405180910390f35b34801561066a57600080fd5b5061067361150b565b604051610680919061341d565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab91906129a4565b611511565b6040516106bd91906130e0565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612977565b6115a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083257506108318261169d565b5b9050919050565b6060600180546108489061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546108749061375c565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b66071afd498d000081565b60006108e182611707565b610920576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610917906133dd565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096682610efb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906132dd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f6611714565b73ffffffffffffffffffffffffffffffffffffffff161480610a255750610a2481610a1f611714565b611511565b5b610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b9061321d565b60405180910390fd5b610a6f83838361171c565b505050565b610a7c611714565b73ffffffffffffffffffffffffffffffffffffffff16610a9a611082565b73ffffffffffffffffffffffffffffffffffffffff1614610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae79061327d565b60405180910390fd5b80600b8190555050565b60008054905090565b600c60009054906101000a900460ff1681565b610b218383836117ce565b505050565b610b2e611714565b73ffffffffffffffffffffffffffffffffffffffff16610b4c611082565b73ffffffffffffffffffffffffffffffffffffffff1614610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b999061327d565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6000610bca83610f11565b8210610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061311d565b60405180910390fd5b6000610c15610afa565b905060008060005b83811015610d7b576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d0f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d675786841415610d58578195505050505050610db7565b8380610d63906137bf565b9450505b508080610d73906137bf565b915050610c1d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae9061337d565b60405180910390fd5b92915050565b610dc5611714565b73ffffffffffffffffffffffffffffffffffffffff16610de3611082565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061327d565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e84573d6000803e3d6000fd5b5050565b610ea38383836040518060200160405280600081525061142b565b505050565b6000610eb2610afa565b8210610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061317d565b60405180910390fd5b819050919050565b6000610f0682611d87565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061323d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611002611714565b73ffffffffffffffffffffffffffffffffffffffff16611020611082565b73ffffffffffffffffffffffffffffffffffffffff1614611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061327d565b60405180910390fd5b6110806000611f8a565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546110bb9061375c565b80601f01602080910402602001604051908101604052809291908181526020018280546110e79061375c565b80156111345780601f1061110957610100808354040283529160200191611134565b820191906000526020600020905b81548152906001019060200180831161111757829003601f168201915b5050505050905090565b600b5481565b66071afd498d000081600b54611158610afa565b11156111ad5734818361116b919061359e565b11156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061335d565b60405180910390fd5b5b600c60009054906101000a900460ff166111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f3906133bd565b60405180910390fd5b82600a5481611209610afa565b6112139190613517565b1115611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b9061319d565b60405180910390fd5b836005811115611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906131dd565b60405180910390fd5b6112a33386612050565b5050505050565b6112b2611714565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113179061329d565b60405180910390fd5b806006600061132d611714565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113da611714565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161141f91906130e0565b60405180910390a35050565b6114368484846117ce565b6114428484848461206e565b611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906132fd565b60405180910390fd5b50505050565b600581565b606061149782611707565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd906131fd565b60405180910390fd5b6114df82612205565b6040516020016114ef919061304c565b6040516020818303038152906040529050919050565b600a5481565b60075481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115ad611714565b73ffffffffffffffffffffffffffffffffffffffff166115cb611082565b73ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116189061327d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116889061313d565b60405180910390fd5b61169a81611f8a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006117d982611d87565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611800611714565b73ffffffffffffffffffffffffffffffffffffffff16148061185c5750611825611714565b73ffffffffffffffffffffffffffffffffffffffff16611844846108d6565b73ffffffffffffffffffffffffffffffffffffffff16145b8061187857506118778260000151611872611714565b611511565b5b9050806118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906132bd565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119239061325d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561199c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611993906131bd565b60405180910390fd5b6119a98585856001612366565b6119b9600084846000015161171c565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611a2791906135f8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16611acb91906134d1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184611bd19190613517565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d1757611c4781611707565b15611d16576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d7f868686600161236c565b505050505050565b611d8f612864565b611d9882611707565b611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce9061315d565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000648310611e3b5760017f000000000000000000000000000000000000000000000000000000000000006484611e2e919061362c565b611e389190613517565b90505b60008390505b818110611f49576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f3557809350505050611f85565b508080611f4190613732565b915050611e41565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c9061339d565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61206a828260405180602001604052806000815250612372565b5050565b600061208f8473ffffffffffffffffffffffffffffffffffffffff16612851565b156121f8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120b8611714565b8786866040518563ffffffff1660e01b81526004016120da9493929190613094565b602060405180830381600087803b1580156120f457600080fd5b505af192505050801561212557506040513d601f19601f820116820180604052508101906121229190612b94565b60015b6121a8573d8060008114612155576040519150601f19603f3d011682016040523d82523d6000602084013e61215a565b606091505b506000815114156121a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612197906132fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121fd565b600190505b949350505050565b6060600082141561224d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612361565b600082905060005b6000821461227f578080612268906137bf565b915050600a82612278919061356d565b9150612255565b60008167ffffffffffffffff81111561229b5761229a6138f5565b5b6040519080825280601f01601f1916602001820160405280156122cd5781602001600182028036833780820191505090505b5090505b6000851461235a576001826122e6919061362c565b9150600a856122f59190613808565b60306123019190613517565b60f81b818381518110612317576123166138c6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612353919061356d565b94506122d1565b8093505050505b919050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df9061333d565b60405180910390fd5b6123f181611707565b15612431576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124289061331d565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000064831115612494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248b906133fd565b60405180910390fd5b6124a16000858386612366565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161259e91906134d1565b6fffffffffffffffffffffffffffffffff1681526020018583602001516125c591906134d1565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561283457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127d4600088848861206e565b612813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280a906132fd565b60405180910390fd5b818061281e906137bf565b925050808061282c906137bf565b915050612763565b5080600081905550612849600087858861236c565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b60006128b16128ac8461345d565b613438565b9050828152602081018484840111156128cd576128cc613929565b5b6128d88482856136f0565b509392505050565b6000813590506128ef8161406b565b92915050565b60008135905061290481614082565b92915050565b60008135905061291981614099565b92915050565b60008151905061292e81614099565b92915050565b600082601f83011261294957612948613924565b5b813561295984826020860161289e565b91505092915050565b600081359050612971816140b0565b92915050565b60006020828403121561298d5761298c613933565b5b600061299b848285016128e0565b91505092915050565b600080604083850312156129bb576129ba613933565b5b60006129c9858286016128e0565b92505060206129da858286016128e0565b9150509250929050565b6000806000606084860312156129fd576129fc613933565b5b6000612a0b868287016128e0565b9350506020612a1c868287016128e0565b9250506040612a2d86828701612962565b9150509250925092565b60008060008060808587031215612a5157612a50613933565b5b6000612a5f878288016128e0565b9450506020612a70878288016128e0565b9350506040612a8187828801612962565b925050606085013567ffffffffffffffff811115612aa257612aa161392e565b5b612aae87828801612934565b91505092959194509250565b60008060408385031215612ad157612ad0613933565b5b6000612adf858286016128e0565b9250506020612af0858286016128f5565b9150509250929050565b60008060408385031215612b1157612b10613933565b5b6000612b1f858286016128e0565b9250506020612b3085828601612962565b9150509250929050565b600060208284031215612b5057612b4f613933565b5b6000612b5e848285016128f5565b91505092915050565b600060208284031215612b7d57612b7c613933565b5b6000612b8b8482850161290a565b91505092915050565b600060208284031215612baa57612ba9613933565b5b6000612bb88482850161291f565b91505092915050565b600060208284031215612bd757612bd6613933565b5b6000612be584828501612962565b91505092915050565b612bf781613660565b82525050565b612c0681613672565b82525050565b6000612c178261348e565b612c2181856134a4565b9350612c318185602086016136ff565b612c3a81613938565b840191505092915050565b6000612c5082613499565b612c5a81856134b5565b9350612c6a8185602086016136ff565b612c7381613938565b840191505092915050565b6000612c8982613499565b612c9381856134c6565b9350612ca38185602086016136ff565b80840191505092915050565b6000612cbc6022836134b5565b9150612cc782613949565b604082019050919050565b6000612cdf6026836134b5565b9150612cea82613998565b604082019050919050565b6000612d02602a836134b5565b9150612d0d826139e7565b604082019050919050565b6000612d256023836134b5565b9150612d3082613a36565b604082019050919050565b6000612d486022836134b5565b9150612d5382613a85565b604082019050919050565b6000612d6b6025836134b5565b9150612d7682613ad4565b604082019050919050565b6000612d8e6022836134b5565b9150612d9982613b23565b604082019050919050565b6000612db16011836134b5565b9150612dbc82613b72565b602082019050919050565b6000612dd46039836134b5565b9150612ddf82613b9b565b604082019050919050565b6000612df7602b836134b5565b9150612e0282613bea565b604082019050919050565b6000612e1a6026836134b5565b9150612e2582613c39565b604082019050919050565b6000612e3d6005836134c6565b9150612e4882613c88565b600582019050919050565b6000612e606020836134b5565b9150612e6b82613cb1565b602082019050919050565b6000612e83601a836134b5565b9150612e8e82613cda565b602082019050919050565b6000612ea66032836134b5565b9150612eb182613d03565b604082019050919050565b6000612ec96022836134b5565b9150612ed482613d52565b604082019050919050565b6000612eec6033836134b5565b9150612ef782613da1565b604082019050919050565b6000612f0f601d836134b5565b9150612f1a82613df0565b602082019050919050565b6000612f326021836134b5565b9150612f3d82613e19565b604082019050919050565b6000612f556044836134c6565b9150612f6082613e68565b604482019050919050565b6000612f786018836134b5565b9150612f8382613edd565b602082019050919050565b6000612f9b602e836134b5565b9150612fa682613f06565b604082019050919050565b6000612fbe602f836134b5565b9150612fc982613f55565b604082019050919050565b6000612fe16017836134b5565b9150612fec82613fa4565b602082019050919050565b6000613004602d836134b5565b915061300f82613fcd565b604082019050919050565b60006130276022836134b5565b91506130328261401c565b604082019050919050565b613046816136e6565b82525050565b600061305782612f48565b91506130638284612c7e565b915061306e82612e30565b915081905092915050565b600060208201905061308e6000830184612bee565b92915050565b60006080820190506130a96000830187612bee565b6130b66020830186612bee565b6130c3604083018561303d565b81810360608301526130d58184612c0c565b905095945050505050565b60006020820190506130f56000830184612bfd565b92915050565b600060208201905081810360008301526131158184612c45565b905092915050565b6000602082019050818103600083015261313681612caf565b9050919050565b6000602082019050818103600083015261315681612cd2565b9050919050565b6000602082019050818103600083015261317681612cf5565b9050919050565b6000602082019050818103600083015261319681612d18565b9050919050565b600060208201905081810360008301526131b681612d3b565b9050919050565b600060208201905081810360008301526131d681612d5e565b9050919050565b600060208201905081810360008301526131f681612d81565b9050919050565b6000602082019050818103600083015261321681612da4565b9050919050565b6000602082019050818103600083015261323681612dc7565b9050919050565b6000602082019050818103600083015261325681612dea565b9050919050565b6000602082019050818103600083015261327681612e0d565b9050919050565b6000602082019050818103600083015261329681612e53565b9050919050565b600060208201905081810360008301526132b681612e76565b9050919050565b600060208201905081810360008301526132d681612e99565b9050919050565b600060208201905081810360008301526132f681612ebc565b9050919050565b6000602082019050818103600083015261331681612edf565b9050919050565b6000602082019050818103600083015261333681612f02565b9050919050565b6000602082019050818103600083015261335681612f25565b9050919050565b6000602082019050818103600083015261337681612f6b565b9050919050565b6000602082019050818103600083015261339681612f8e565b9050919050565b600060208201905081810360008301526133b681612fb1565b9050919050565b600060208201905081810360008301526133d681612fd4565b9050919050565b600060208201905081810360008301526133f681612ff7565b9050919050565b600060208201905081810360008301526134168161301a565b9050919050565b6000602082019050613432600083018461303d565b92915050565b6000613442613453565b905061344e828261378e565b919050565b6000604051905090565b600067ffffffffffffffff821115613478576134776138f5565b5b61348182613938565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006134dc826136aa565b91506134e7836136aa565b9250826fffffffffffffffffffffffffffffffff0382111561350c5761350b613839565b5b828201905092915050565b6000613522826136e6565b915061352d836136e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561356257613561613839565b5b828201905092915050565b6000613578826136e6565b9150613583836136e6565b92508261359357613592613868565b5b828204905092915050565b60006135a9826136e6565b91506135b4836136e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135ed576135ec613839565b5b828202905092915050565b6000613603826136aa565b915061360e836136aa565b92508282101561362157613620613839565b5b828203905092915050565b6000613637826136e6565b9150613642836136e6565b92508282101561365557613654613839565b5b828203905092915050565b600061366b826136c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561371d578082015181840152602081019050613702565b8381111561372c576000848401525b50505050565b600061373d826136e6565b9150600082141561375157613750613839565b5b600182039050919050565b6000600282049050600182168061377457607f821691505b6020821081141561378857613787613897565b5b50919050565b61379782613938565b810181811067ffffffffffffffff821117156137b6576137b56138f5565b5b80604052505050565b60006137ca826136e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137fd576137fc613839565b5b600182019050919050565b6000613813826136e6565b915061381e836136e6565b92508261382e5761382d613868565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768206d696e74732072656d61696e696e6720746f206d6960008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e747320706572207472616e73616374696f6e2065786365656460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f68747470733a2f2f697066732e696f2f697066732f516d515a714b576d79325a60008201527f4568336376734a516f707934646656704c4b53677945583433444a4437314c6160208201527f4e55502f00000000000000000000000000000000000000000000000000000000604082015250565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206f70656e000000000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61407481613660565b811461407f57600080fd5b50565b61408b81613672565b811461409657600080fd5b50565b6140a28161367e565b81146140ad57600080fd5b50565b6140b9816136e6565b81146140c457600080fd5b5056fea26469706673582212207ba822a3b4a389001fef5f9503ce132932bca8393280f1b7beca2b2d60041e3364736f6c63430008070033
Deployed Bytecode Sourcemap
55075:3054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42584:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44310:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55327:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45835:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45398:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57201:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41145:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55432:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46685:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57033:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41776:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57350:143;;;;;;;;;;;;;:::i;:::-;;46890:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41308:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43010:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19168:103;;;;;;;;;;;;;:::i;:::-;;18517:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44465:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55389:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56726:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46103:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47110:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55238:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57765:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55289:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51525:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46440:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19426:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42584:370;42711:4;42756:25;42741:40;;;:11;:40;;;;:99;;;;42807:33;42792:48;;;:11;:48;;;;42741:99;:160;;;;42866:35;42851:50;;;:11;:50;;;;42741:160;:207;;;;42912:36;42936:11;42912:23;:36::i;:::-;42741:207;42727:221;;42584:370;;;:::o;44310:94::-;44364:13;44393:5;44386:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44310:94;:::o;55327:55::-;55371:11;55327:55;:::o;45835:204::-;45903:7;45927:16;45935:7;45927;:16::i;:::-;45919:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46009:15;:24;46025:7;46009:24;;;;;;;;;;;;;;;;;;;;;46002:31;;45835:204;;;:::o;45398:379::-;45467:13;45483:24;45499:7;45483:15;:24::i;:::-;45467:40;;45528:5;45522:11;;:2;:11;;;;45514:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45613:5;45597:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;45622:37;45639:5;45646:12;:10;:12::i;:::-;45622:16;:37::i;:::-;45597:62;45581:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;45743:28;45752:2;45756:7;45765:5;45743:8;:28::i;:::-;45460:317;45398:379;;:::o;57201:139::-;18748:12;:10;:12::i;:::-;18737:23;;:7;:5;:7::i;:::-;:23;;;18729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57319:13:::1;57302:14;:30;;;;57201:139:::0;:::o;41145:94::-;41198:7;41221:12;;41214:19;;41145:94;:::o;55432:37::-;;;;;;;;;;;;;:::o;46685:142::-;46793:28;46803:4;46809:2;46813:7;46793:9;:28::i;:::-;46685:142;;;:::o;57033:158::-;18748:12;:10;:12::i;:::-;18737:23;;:7;:5;:7::i;:::-;:23;;;18729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57164:19:::1;57143:18;;:40;;;;;;;;;;;;;;;;;;57033:158:::0;:::o;41776:744::-;41885:7;41920:16;41930:5;41920:9;:16::i;:::-;41912:5;:24;41904:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41982:22;42007:13;:11;:13::i;:::-;41982:38;;42027:19;42057:25;42107:9;42102:350;42126:14;42122:1;:18;42102:350;;;42156:31;42190:11;:14;42202:1;42190:14;;;;;;;;;;;42156:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42243:1;42217:28;;:9;:14;;;:28;;;42213:89;;42278:9;:14;;;42258:34;;42213:89;42335:5;42314:26;;:17;:26;;;42310:135;;;42372:5;42357:11;:20;42353:59;;;42399:1;42392:8;;;;;;;;;42353:59;42422:13;;;;;:::i;:::-;;;;42310:135;42147:305;42142:3;;;;;:::i;:::-;;;;42102:350;;;;42458:56;;;;;;;;;;:::i;:::-;;;;;;;;41776:744;;;;;:::o;57350:143::-;18748:12;:10;:12::i;:::-;18737:23;;:7;:5;:7::i;:::-;:23;;;18729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57398:15:::1;57416:21;57398:39;;57456:10;57448:28;;:37;57477:7;57448:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;57387:106;57350:143::o:0;46890:157::-;47002:39;47019:4;47025:2;47029:7;47002:39;;;;;;;;;;;;:16;:39::i;:::-;46890:157;;;:::o;41308:177::-;41375:7;41407:13;:11;:13::i;:::-;41399:5;:21;41391:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41474:5;41467:12;;41308:177;;;:::o;44133:118::-;44197:7;44220:20;44232:7;44220:11;:20::i;:::-;:25;;;44213:32;;44133:118;;;:::o;43010:211::-;43074:7;43115:1;43098:19;;:5;:19;;;;43090:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43187:12;:19;43200:5;43187:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;43179:36;;43172:43;;43010:211;;;:::o;19168:103::-;18748:12;:10;:12::i;:::-;18737:23;;:7;:5;:7::i;:::-;:23;;;18729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19233:30:::1;19260:1;19233:18;:30::i;:::-;19168:103::o:0;18517:87::-;18563:7;18590:6;;;;;;;;;;;18583:13;;18517:87;:::o;44465:98::-;44521:13;44550:7;44543:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44465:98;:::o;55389:36::-;;;;:::o;56726:299::-;55371:11;56844:14;56397;;56383:13;:11;:13::i;:::-;:28;56380:166;;;56473:9;56454:14;56446:5;:22;;;;:::i;:::-;56445:37;;56423:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;56380:166;55595:18:::1;;;;;;;;;;;55587:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;56907:14:::2;56006:9;;55971:14;55955:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:60;;55933:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;56946:14:::3;55281:1;55753:14;:34;;55731:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;56980:37:::4;56990:10;57002:14;56980:9;:37::i;:::-;56088:1:::3;55652::::2;56726:299:::0;;;:::o;46103:274::-;46206:12;:10;:12::i;:::-;46194:24;;:8;:24;;;;46186:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46303:8;46258:18;:32;46277:12;:10;:12::i;:::-;46258:32;;;;;;;;;;;;;;;:42;46291:8;46258:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;46352:8;46323:48;;46338:12;:10;:12::i;:::-;46323:48;;;46362:8;46323:48;;;;;;:::i;:::-;;;;;;;;46103:274;;:::o;47110:311::-;47247:28;47257:4;47263:2;47267:7;47247:9;:28::i;:::-;47298:48;47321:4;47327:2;47331:7;47340:5;47298:22;:48::i;:::-;47282:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;47110:311;;;;:::o;55238:44::-;55281:1;55238:44;:::o;57765:361::-;57883:13;57922:16;57930:7;57922;:16::i;:::-;57914:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;58089:18;:7;:16;:18::i;:::-;58000:117;;;;;;;;:::i;:::-;;;;;;;;;;;;;57973:145;;57765:361;;;:::o;55289:31::-;;;;:::o;51525:43::-;;;;:::o;46440:186::-;46562:4;46585:18;:25;46604:5;46585:25;;;;;;;;;;;;;;;:35;46611:8;46585:35;;;;;;;;;;;;;;;;;;;;;;;;;46578:42;;46440:186;;;;:::o;19426:201::-;18748:12;:10;:12::i;:::-;18737:23;;:7;:5;:7::i;:::-;:23;;;18729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19535:1:::1;19515:22;;:8;:22;;;;19507:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19591:28;19610:8;19591:18;:28::i;:::-;19426:201:::0;:::o;31917:157::-;32002:4;32041:25;32026:40;;;:11;:40;;;;32019:47;;31917:157;;;:::o;47660:105::-;47717:4;47747:12;;47737:7;:22;47730:29;;47660:105;;;:::o;17241:98::-;17294:7;17321:10;17314:17;;17241:98;:::o;51347:172::-;51471:2;51444:15;:24;51460:7;51444:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;51505:7;51501:2;51485:28;;51494:5;51485:28;;;;;;;;;;;;51347:172;;;:::o;49712:1529::-;49809:35;49847:20;49859:7;49847:11;:20::i;:::-;49809:58;;49876:22;49918:13;:18;;;49902:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;49971:12;:10;:12::i;:::-;49947:36;;:20;49959:7;49947:11;:20::i;:::-;:36;;;49902:81;:142;;;;49994:50;50011:13;:18;;;50031:12;:10;:12::i;:::-;49994:16;:50::i;:::-;49902:142;49876:169;;50070:17;50054:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;50202:4;50180:26;;:13;:18;;;:26;;;50164:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;50291:1;50277:16;;:2;:16;;;;50269:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50344:43;50366:4;50372:2;50376:7;50385:1;50344:21;:43::i;:::-;50444:49;50461:1;50465:7;50474:13;:18;;;50444:8;:49::i;:::-;50532:1;50502:12;:18;50515:4;50502:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50568:1;50540:12;:16;50553:2;50540:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;50599:43;;;;;;;;50614:2;50599:43;;;;;;50625:15;50599:43;;;;;50576:11;:20;50588:7;50576:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50870:19;50902:1;50892:7;:11;;;;:::i;:::-;50870:33;;50955:1;50914:43;;:11;:24;50926:11;50914:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;50910:236;;;50972:20;50980:11;50972:7;:20::i;:::-;50968:171;;;51032:97;;;;;;;;51059:13;:18;;;51032:97;;;;;;51090:13;:28;;;51032:97;;;;;51005:11;:24;51017:11;51005:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50968:171;50910:236;51178:7;51174:2;51159:27;;51168:4;51159:27;;;;;;;;;;;;51193:42;51214:4;51220:2;51224:7;51233:1;51193:20;:42::i;:::-;49802:1439;;;49712:1529;;;:::o;43473:606::-;43549:21;;:::i;:::-;43590:16;43598:7;43590;:16::i;:::-;43582:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;43662:26;43710:12;43699:7;:23;43695:93;;43779:1;43764:12;43754:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;43733:47;;43695:93;43801:12;43816:7;43801:22;;43796:212;43833:18;43825:4;:26;43796:212;;43870:31;43904:11;:17;43916:4;43904:17;;;;;;;;;;;43870:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43960:1;43934:28;;:9;:14;;;:28;;;43930:71;;43982:9;43975:16;;;;;;;43930:71;43861:147;43853:6;;;;;:::i;:::-;;;;43796:212;;;;44016:57;;;;;;;;;;:::i;:::-;;;;;;;;43473:606;;;;:::o;19787:191::-;19861:16;19880:6;;;;;;;;;;;19861:25;;19906:8;19897:6;;:17;;;;;;;;;;;;;;;;;;19961:8;19930:40;;19951:8;19930:40;;;;;;;;;;;;19850:128;19787:191;:::o;47771:98::-;47836:27;47846:2;47850:8;47836:27;;;;;;;;;;;;:9;:27::i;:::-;47771:98;;:::o;53062:690::-;53199:4;53216:15;:2;:13;;;:15::i;:::-;53212:535;;;53271:2;53255:36;;;53292:12;:10;:12::i;:::-;53306:4;53312:7;53321:5;53255:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53242:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53503:1;53486:6;:13;:18;53482:215;;;53519:61;;;;;;;;;;:::i;:::-;;;;;;;;53482:215;53665:6;53659:13;53650:6;53646:2;53642:15;53635:38;53242:464;53387:45;;;53377:55;;;:6;:55;;;;53370:62;;;;;53212:535;53735:4;53728:11;;53062:690;;;;;;;:::o;14803:723::-;14859:13;15089:1;15080:5;:10;15076:53;;;15107:10;;;;;;;;;;;;;;;;;;;;;15076:53;15139:12;15154:5;15139:20;;15170:14;15195:78;15210:1;15202:4;:9;15195:78;;15228:8;;;;;:::i;:::-;;;;15259:2;15251:10;;;;;:::i;:::-;;;15195:78;;;15283:19;15315:6;15305:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15283:39;;15333:154;15349:1;15340:5;:10;15333:154;;15377:1;15367:11;;;;;:::i;:::-;;;15444:2;15436:5;:10;;;;:::i;:::-;15423:2;:24;;;;:::i;:::-;15410:39;;15393:6;15400;15393:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15473:2;15464:11;;;;;:::i;:::-;;;15333:154;;;15511:6;15497:21;;;;;14803:723;;;;:::o;54214:141::-;;;;;:::o;54741:140::-;;;;;:::o;48208:1272::-;48313:20;48336:12;;48313:35;;48377:1;48363:16;;:2;:16;;;;48355:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48554:21;48562:12;48554:7;:21::i;:::-;48553:22;48545:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;48636:12;48624:8;:24;;48616:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48696:61;48726:1;48730:2;48734:12;48748:8;48696:21;:61::i;:::-;48766:30;48799:12;:16;48812:2;48799:16;;;;;;;;;;;;;;;48766:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48841:119;;;;;;;;48891:8;48861:11;:19;;;:39;;;;:::i;:::-;48841:119;;;;;;48944:8;48909:11;:24;;;:44;;;;:::i;:::-;48841:119;;;;;48822:12;:16;48835:2;48822:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48995:43;;;;;;;;49010:2;48995:43;;;;;;49021:15;48995:43;;;;;48967:11;:25;48979:12;48967:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49047:20;49070:12;49047:35;;49096:9;49091:281;49115:8;49111:1;:12;49091:281;;;49169:12;49165:2;49144:38;;49161:1;49144:38;;;;;;;;;;;;49209:59;49240:1;49244:2;49248:12;49262:5;49209:22;:59::i;:::-;49191:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;49350:14;;;;;:::i;:::-;;;;49125:3;;;;;:::i;:::-;;;;49091:281;;;;49395:12;49380;:27;;;;49414:60;49443:1;49447:2;49451:12;49465:8;49414:20;:60::i;:::-;48306:1174;;;48208:1272;;;:::o;20805:387::-;20865:4;21073:12;21140:7;21128:20;21120:28;;21183:1;21176:4;:8;21169:15;;;20805:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:323::-;4898:6;4947:2;4935:9;4926:7;4922:23;4918:32;4915:119;;;4953:79;;:::i;:::-;4915:119;5073:1;5098:50;5140:7;5131:6;5120:9;5116:22;5098:50;:::i;:::-;5088:60;;5044:114;4842:323;;;;:::o;5171:327::-;5229:6;5278:2;5266:9;5257:7;5253:23;5249:32;5246:119;;;5284:79;;:::i;:::-;5246:119;5404:1;5429:52;5473:7;5464:6;5453:9;5449:22;5429:52;:::i;:::-;5419:62;;5375:116;5171:327;;;;:::o;5504:349::-;5573:6;5622:2;5610:9;5601:7;5597:23;5593:32;5590:119;;;5628:79;;:::i;:::-;5590:119;5748:1;5773:63;5828:7;5819:6;5808:9;5804:22;5773:63;:::i;:::-;5763:73;;5719:127;5504:349;;;;:::o;5859:329::-;5918:6;5967:2;5955:9;5946:7;5942:23;5938:32;5935:119;;;5973:79;;:::i;:::-;5935:119;6093:1;6118:53;6163:7;6154:6;6143:9;6139:22;6118:53;:::i;:::-;6108:63;;6064:117;5859:329;;;;:::o;6194:118::-;6281:24;6299:5;6281:24;:::i;:::-;6276:3;6269:37;6194:118;;:::o;6318:109::-;6399:21;6414:5;6399:21;:::i;:::-;6394:3;6387:34;6318:109;;:::o;6433:360::-;6519:3;6547:38;6579:5;6547:38;:::i;:::-;6601:70;6664:6;6659:3;6601:70;:::i;:::-;6594:77;;6680:52;6725:6;6720:3;6713:4;6706:5;6702:16;6680:52;:::i;:::-;6757:29;6779:6;6757:29;:::i;:::-;6752:3;6748:39;6741:46;;6523:270;6433:360;;;;:::o;6799:364::-;6887:3;6915:39;6948:5;6915:39;:::i;:::-;6970:71;7034:6;7029:3;6970:71;:::i;:::-;6963:78;;7050:52;7095:6;7090:3;7083:4;7076:5;7072:16;7050:52;:::i;:::-;7127:29;7149:6;7127:29;:::i;:::-;7122:3;7118:39;7111:46;;6891:272;6799:364;;;;:::o;7169:377::-;7275:3;7303:39;7336:5;7303:39;:::i;:::-;7358:89;7440:6;7435:3;7358:89;:::i;:::-;7351:96;;7456:52;7501:6;7496:3;7489:4;7482:5;7478:16;7456:52;:::i;:::-;7533:6;7528:3;7524:16;7517:23;;7279:267;7169:377;;;;:::o;7552:366::-;7694:3;7715:67;7779:2;7774:3;7715:67;:::i;:::-;7708:74;;7791:93;7880:3;7791:93;:::i;:::-;7909:2;7904:3;7900:12;7893:19;;7552:366;;;:::o;7924:::-;8066:3;8087:67;8151:2;8146:3;8087:67;:::i;:::-;8080:74;;8163:93;8252:3;8163:93;:::i;:::-;8281:2;8276:3;8272:12;8265:19;;7924:366;;;:::o;8296:::-;8438:3;8459:67;8523:2;8518:3;8459:67;:::i;:::-;8452:74;;8535:93;8624:3;8535:93;:::i;:::-;8653:2;8648:3;8644:12;8637:19;;8296:366;;;:::o;8668:::-;8810:3;8831:67;8895:2;8890:3;8831:67;:::i;:::-;8824:74;;8907:93;8996:3;8907:93;:::i;:::-;9025:2;9020:3;9016:12;9009:19;;8668:366;;;:::o;9040:::-;9182:3;9203:67;9267:2;9262:3;9203:67;:::i;:::-;9196:74;;9279:93;9368:3;9279:93;:::i;:::-;9397:2;9392:3;9388:12;9381:19;;9040:366;;;:::o;9412:::-;9554:3;9575:67;9639:2;9634:3;9575:67;:::i;:::-;9568:74;;9651:93;9740:3;9651:93;:::i;:::-;9769:2;9764:3;9760:12;9753:19;;9412:366;;;:::o;9784:::-;9926:3;9947:67;10011:2;10006:3;9947:67;:::i;:::-;9940:74;;10023:93;10112:3;10023:93;:::i;:::-;10141:2;10136:3;10132:12;10125:19;;9784:366;;;:::o;10156:::-;10298:3;10319:67;10383:2;10378:3;10319:67;:::i;:::-;10312:74;;10395:93;10484:3;10395:93;:::i;:::-;10513:2;10508:3;10504:12;10497:19;;10156:366;;;:::o;10528:::-;10670:3;10691:67;10755:2;10750:3;10691:67;:::i;:::-;10684:74;;10767:93;10856:3;10767:93;:::i;:::-;10885:2;10880:3;10876:12;10869:19;;10528:366;;;:::o;10900:::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:::-;11414:3;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11511:93;11600:3;11511:93;:::i;:::-;11629:2;11624:3;11620:12;11613:19;;11272:366;;;:::o;11644:400::-;11804:3;11825:84;11907:1;11902:3;11825:84;:::i;:::-;11818:91;;11918:93;12007:3;11918:93;:::i;:::-;12036:1;12031:3;12027:11;12020:18;;11644:400;;;:::o;12050:366::-;12192:3;12213:67;12277:2;12272:3;12213:67;:::i;:::-;12206:74;;12289:93;12378:3;12289:93;:::i;:::-;12407:2;12402:3;12398:12;12391:19;;12050:366;;;:::o;12422:::-;12564:3;12585:67;12649:2;12644:3;12585:67;:::i;:::-;12578:74;;12661:93;12750:3;12661:93;:::i;:::-;12779:2;12774:3;12770:12;12763:19;;12422:366;;;:::o;12794:::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:::-;13308:3;13329:67;13393:2;13388:3;13329:67;:::i;:::-;13322:74;;13405:93;13494:3;13405:93;:::i;:::-;13523:2;13518:3;13514:12;13507:19;;13166:366;;;:::o;13538:::-;13680:3;13701:67;13765:2;13760:3;13701:67;:::i;:::-;13694:74;;13777:93;13866:3;13777:93;:::i;:::-;13895:2;13890:3;13886:12;13879:19;;13538:366;;;:::o;13910:::-;14052:3;14073:67;14137:2;14132:3;14073:67;:::i;:::-;14066:74;;14149:93;14238:3;14149:93;:::i;:::-;14267:2;14262:3;14258:12;14251:19;;13910:366;;;:::o;14282:::-;14424:3;14445:67;14509:2;14504:3;14445:67;:::i;:::-;14438:74;;14521:93;14610:3;14521:93;:::i;:::-;14639:2;14634:3;14630:12;14623:19;;14282:366;;;:::o;14654:402::-;14814:3;14835:85;14917:2;14912:3;14835:85;:::i;:::-;14828:92;;14929:93;15018:3;14929:93;:::i;:::-;15047:2;15042:3;15038:12;15031:19;;14654:402;;;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:::-;15576:3;15597:67;15661:2;15656:3;15597:67;:::i;:::-;15590:74;;15673:93;15762:3;15673:93;:::i;:::-;15791:2;15786:3;15782:12;15775:19;;15434:366;;;:::o;15806:::-;15948:3;15969:67;16033:2;16028:3;15969:67;:::i;:::-;15962:74;;16045:93;16134:3;16045:93;:::i;:::-;16163:2;16158:3;16154:12;16147:19;;15806:366;;;:::o;16178:::-;16320:3;16341:67;16405:2;16400:3;16341:67;:::i;:::-;16334:74;;16417:93;16506:3;16417:93;:::i;:::-;16535:2;16530:3;16526:12;16519:19;;16178:366;;;:::o;16550:::-;16692:3;16713:67;16777:2;16772:3;16713:67;:::i;:::-;16706:74;;16789:93;16878:3;16789:93;:::i;:::-;16907:2;16902:3;16898:12;16891:19;;16550:366;;;:::o;16922:::-;17064:3;17085:67;17149:2;17144:3;17085:67;:::i;:::-;17078:74;;17161:93;17250:3;17161:93;:::i;:::-;17279:2;17274:3;17270:12;17263:19;;16922:366;;;:::o;17294:118::-;17381:24;17399:5;17381:24;:::i;:::-;17376:3;17369:37;17294:118;;:::o;17418:807::-;17752:3;17774:148;17918:3;17774:148;:::i;:::-;17767:155;;17939:95;18030:3;18021:6;17939:95;:::i;:::-;17932:102;;18051:148;18195:3;18051:148;:::i;:::-;18044:155;;18216:3;18209:10;;17418:807;;;;:::o;18231:222::-;18324:4;18362:2;18351:9;18347:18;18339:26;;18375:71;18443:1;18432:9;18428:17;18419:6;18375:71;:::i;:::-;18231:222;;;;:::o;18459:640::-;18654:4;18692:3;18681:9;18677:19;18669:27;;18706:71;18774:1;18763:9;18759:17;18750:6;18706:71;:::i;:::-;18787:72;18855:2;18844:9;18840:18;18831:6;18787:72;:::i;:::-;18869;18937:2;18926:9;18922:18;18913:6;18869:72;:::i;:::-;18988:9;18982:4;18978:20;18973:2;18962:9;18958:18;18951:48;19016:76;19087:4;19078:6;19016:76;:::i;:::-;19008:84;;18459:640;;;;;;;:::o;19105:210::-;19192:4;19230:2;19219:9;19215:18;19207:26;;19243:65;19305:1;19294:9;19290:17;19281:6;19243:65;:::i;:::-;19105:210;;;;:::o;19321:313::-;19434:4;19472:2;19461:9;19457:18;19449:26;;19521:9;19515:4;19511:20;19507:1;19496:9;19492:17;19485:47;19549:78;19622:4;19613:6;19549:78;:::i;:::-;19541:86;;19321:313;;;;:::o;19640:419::-;19806:4;19844:2;19833:9;19829:18;19821:26;;19893:9;19887:4;19883:20;19879:1;19868:9;19864:17;19857:47;19921:131;20047:4;19921:131;:::i;:::-;19913:139;;19640:419;;;:::o;20065:::-;20231:4;20269:2;20258:9;20254:18;20246:26;;20318:9;20312:4;20308:20;20304:1;20293:9;20289:17;20282:47;20346:131;20472:4;20346:131;:::i;:::-;20338:139;;20065:419;;;:::o;20490:::-;20656:4;20694:2;20683:9;20679:18;20671:26;;20743:9;20737:4;20733:20;20729:1;20718:9;20714:17;20707:47;20771:131;20897:4;20771:131;:::i;:::-;20763:139;;20490:419;;;:::o;20915:::-;21081:4;21119:2;21108:9;21104:18;21096:26;;21168:9;21162:4;21158:20;21154:1;21143:9;21139:17;21132:47;21196:131;21322:4;21196:131;:::i;:::-;21188:139;;20915:419;;;:::o;21340:::-;21506:4;21544:2;21533:9;21529:18;21521:26;;21593:9;21587:4;21583:20;21579:1;21568:9;21564:17;21557:47;21621:131;21747:4;21621:131;:::i;:::-;21613:139;;21340:419;;;:::o;21765:::-;21931:4;21969:2;21958:9;21954:18;21946:26;;22018:9;22012:4;22008:20;22004:1;21993:9;21989:17;21982:47;22046:131;22172:4;22046:131;:::i;:::-;22038:139;;21765:419;;;:::o;22190:::-;22356:4;22394:2;22383:9;22379:18;22371:26;;22443:9;22437:4;22433:20;22429:1;22418:9;22414:17;22407:47;22471:131;22597:4;22471:131;:::i;:::-;22463:139;;22190:419;;;:::o;22615:::-;22781:4;22819:2;22808:9;22804:18;22796:26;;22868:9;22862:4;22858:20;22854:1;22843:9;22839:17;22832:47;22896:131;23022:4;22896:131;:::i;:::-;22888:139;;22615:419;;;:::o;23040:::-;23206:4;23244:2;23233:9;23229:18;23221:26;;23293:9;23287:4;23283:20;23279:1;23268:9;23264:17;23257:47;23321:131;23447:4;23321:131;:::i;:::-;23313:139;;23040:419;;;:::o;23465:::-;23631:4;23669:2;23658:9;23654:18;23646:26;;23718:9;23712:4;23708:20;23704:1;23693:9;23689:17;23682:47;23746:131;23872:4;23746:131;:::i;:::-;23738:139;;23465:419;;;:::o;23890:::-;24056:4;24094:2;24083:9;24079:18;24071:26;;24143:9;24137:4;24133:20;24129:1;24118:9;24114:17;24107:47;24171:131;24297:4;24171:131;:::i;:::-;24163:139;;23890:419;;;:::o;24315:::-;24481:4;24519:2;24508:9;24504:18;24496:26;;24568:9;24562:4;24558:20;24554:1;24543:9;24539:17;24532:47;24596:131;24722:4;24596:131;:::i;:::-;24588:139;;24315:419;;;:::o;24740:::-;24906:4;24944:2;24933:9;24929:18;24921:26;;24993:9;24987:4;24983:20;24979:1;24968:9;24964:17;24957:47;25021:131;25147:4;25021:131;:::i;:::-;25013:139;;24740:419;;;:::o;25165:::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:::-;25756:4;25794:2;25783:9;25779:18;25771:26;;25843:9;25837:4;25833:20;25829:1;25818:9;25814:17;25807:47;25871:131;25997:4;25871:131;:::i;:::-;25863:139;;25590:419;;;:::o;26015:::-;26181:4;26219:2;26208:9;26204:18;26196:26;;26268:9;26262:4;26258:20;26254:1;26243:9;26239:17;26232:47;26296:131;26422:4;26296:131;:::i;:::-;26288:139;;26015:419;;;:::o;26440:::-;26606:4;26644:2;26633:9;26629:18;26621:26;;26693:9;26687:4;26683:20;26679:1;26668:9;26664:17;26657:47;26721:131;26847:4;26721:131;:::i;:::-;26713:139;;26440:419;;;:::o;26865:::-;27031:4;27069:2;27058:9;27054:18;27046:26;;27118:9;27112:4;27108:20;27104:1;27093:9;27089:17;27082:47;27146:131;27272:4;27146:131;:::i;:::-;27138:139;;26865:419;;;:::o;27290:::-;27456:4;27494:2;27483:9;27479:18;27471:26;;27543:9;27537:4;27533:20;27529:1;27518:9;27514:17;27507:47;27571:131;27697:4;27571:131;:::i;:::-;27563:139;;27290:419;;;:::o;27715:::-;27881:4;27919:2;27908:9;27904:18;27896:26;;27968:9;27962:4;27958:20;27954:1;27943:9;27939:17;27932:47;27996:131;28122:4;27996:131;:::i;:::-;27988:139;;27715:419;;;:::o;28140:::-;28306:4;28344:2;28333:9;28329:18;28321:26;;28393:9;28387:4;28383:20;28379:1;28368:9;28364:17;28357:47;28421:131;28547:4;28421:131;:::i;:::-;28413:139;;28140:419;;;:::o;28565:::-;28731:4;28769:2;28758:9;28754:18;28746:26;;28818:9;28812:4;28808:20;28804:1;28793:9;28789:17;28782:47;28846:131;28972:4;28846:131;:::i;:::-;28838:139;;28565:419;;;:::o;28990:::-;29156:4;29194:2;29183:9;29179:18;29171:26;;29243:9;29237:4;29233:20;29229:1;29218:9;29214:17;29207:47;29271:131;29397:4;29271:131;:::i;:::-;29263:139;;28990:419;;;:::o;29415:::-;29581:4;29619:2;29608:9;29604:18;29596:26;;29668:9;29662:4;29658:20;29654:1;29643:9;29639:17;29632:47;29696:131;29822:4;29696:131;:::i;:::-;29688:139;;29415:419;;;:::o;29840:222::-;29933:4;29971:2;29960:9;29956:18;29948:26;;29984:71;30052:1;30041:9;30037:17;30028:6;29984:71;:::i;:::-;29840:222;;;;:::o;30068:129::-;30102:6;30129:20;;:::i;:::-;30119:30;;30158:33;30186:4;30178:6;30158:33;:::i;:::-;30068:129;;;:::o;30203:75::-;30236:6;30269:2;30263:9;30253:19;;30203:75;:::o;30284:307::-;30345:4;30435:18;30427:6;30424:30;30421:56;;;30457:18;;:::i;:::-;30421:56;30495:29;30517:6;30495:29;:::i;:::-;30487:37;;30579:4;30573;30569:15;30561:23;;30284:307;;;:::o;30597:98::-;30648:6;30682:5;30676:12;30666:22;;30597:98;;;:::o;30701:99::-;30753:6;30787:5;30781:12;30771:22;;30701:99;;;:::o;30806:168::-;30889:11;30923:6;30918:3;30911:19;30963:4;30958:3;30954:14;30939:29;;30806:168;;;;:::o;30980:169::-;31064:11;31098:6;31093:3;31086:19;31138:4;31133:3;31129:14;31114:29;;30980:169;;;;:::o;31155:148::-;31257:11;31294:3;31279:18;;31155:148;;;;:::o;31309:273::-;31349:3;31368:20;31386:1;31368:20;:::i;:::-;31363:25;;31402:20;31420:1;31402:20;:::i;:::-;31397:25;;31524:1;31488:34;31484:42;31481:1;31478:49;31475:75;;;31530:18;;:::i;:::-;31475:75;31574:1;31571;31567:9;31560:16;;31309:273;;;;:::o;31588:305::-;31628:3;31647:20;31665:1;31647:20;:::i;:::-;31642:25;;31681:20;31699:1;31681:20;:::i;:::-;31676:25;;31835:1;31767:66;31763:74;31760:1;31757:81;31754:107;;;31841:18;;:::i;:::-;31754:107;31885:1;31882;31878:9;31871:16;;31588:305;;;;:::o;31899:185::-;31939:1;31956:20;31974:1;31956:20;:::i;:::-;31951:25;;31990:20;32008:1;31990:20;:::i;:::-;31985:25;;32029:1;32019:35;;32034:18;;:::i;:::-;32019:35;32076:1;32073;32069:9;32064:14;;31899:185;;;;:::o;32090:348::-;32130:7;32153:20;32171:1;32153:20;:::i;:::-;32148:25;;32187:20;32205:1;32187:20;:::i;:::-;32182:25;;32375:1;32307:66;32303:74;32300:1;32297:81;32292:1;32285:9;32278:17;32274:105;32271:131;;;32382:18;;:::i;:::-;32271:131;32430:1;32427;32423:9;32412:20;;32090:348;;;;:::o;32444:191::-;32484:4;32504:20;32522:1;32504:20;:::i;:::-;32499:25;;32538:20;32556:1;32538:20;:::i;:::-;32533:25;;32577:1;32574;32571:8;32568:34;;;32582:18;;:::i;:::-;32568:34;32627:1;32624;32620:9;32612:17;;32444:191;;;;:::o;32641:::-;32681:4;32701:20;32719:1;32701:20;:::i;:::-;32696:25;;32735:20;32753:1;32735:20;:::i;:::-;32730:25;;32774:1;32771;32768:8;32765:34;;;32779:18;;:::i;:::-;32765:34;32824:1;32821;32817:9;32809:17;;32641:191;;;;:::o;32838:96::-;32875:7;32904:24;32922:5;32904:24;:::i;:::-;32893:35;;32838:96;;;:::o;32940:90::-;32974:7;33017:5;33010:13;33003:21;32992:32;;32940:90;;;:::o;33036:149::-;33072:7;33112:66;33105:5;33101:78;33090:89;;33036:149;;;:::o;33191:118::-;33228:7;33268:34;33261:5;33257:46;33246:57;;33191:118;;;:::o;33315:126::-;33352:7;33392:42;33385:5;33381:54;33370:65;;33315:126;;;:::o;33447:77::-;33484:7;33513:5;33502:16;;33447:77;;;:::o;33530:154::-;33614:6;33609:3;33604;33591:30;33676:1;33667:6;33662:3;33658:16;33651:27;33530:154;;;:::o;33690:307::-;33758:1;33768:113;33782:6;33779:1;33776:13;33768:113;;;33867:1;33862:3;33858:11;33852:18;33848:1;33843:3;33839:11;33832:39;33804:2;33801:1;33797:10;33792:15;;33768:113;;;33899:6;33896:1;33893:13;33890:101;;;33979:1;33970:6;33965:3;33961:16;33954:27;33890:101;33739:258;33690:307;;;:::o;34003:171::-;34042:3;34065:24;34083:5;34065:24;:::i;:::-;34056:33;;34111:4;34104:5;34101:15;34098:41;;;34119:18;;:::i;:::-;34098:41;34166:1;34159:5;34155:13;34148:20;;34003:171;;;:::o;34180:320::-;34224:6;34261:1;34255:4;34251:12;34241:22;;34308:1;34302:4;34298:12;34329:18;34319:81;;34385:4;34377:6;34373:17;34363:27;;34319:81;34447:2;34439:6;34436:14;34416:18;34413:38;34410:84;;;34466:18;;:::i;:::-;34410:84;34231:269;34180:320;;;:::o;34506:281::-;34589:27;34611:4;34589:27;:::i;:::-;34581:6;34577:40;34719:6;34707:10;34704:22;34683:18;34671:10;34668:34;34665:62;34662:88;;;34730:18;;:::i;:::-;34662:88;34770:10;34766:2;34759:22;34549:238;34506:281;;:::o;34793:233::-;34832:3;34855:24;34873:5;34855:24;:::i;:::-;34846:33;;34901:66;34894:5;34891:77;34888:103;;;34971:18;;:::i;:::-;34888:103;35018:1;35011:5;35007:13;35000:20;;34793:233;;;:::o;35032:176::-;35064:1;35081:20;35099:1;35081:20;:::i;:::-;35076:25;;35115:20;35133:1;35115:20;:::i;:::-;35110:25;;35154:1;35144:35;;35159:18;;:::i;:::-;35144:35;35200:1;35197;35193:9;35188:14;;35032:176;;;;:::o;35214:180::-;35262:77;35259:1;35252:88;35359:4;35356:1;35349:15;35383:4;35380:1;35373:15;35400:180;35448:77;35445:1;35438:88;35545:4;35542:1;35535:15;35569:4;35566:1;35559:15;35586:180;35634:77;35631:1;35624:88;35731:4;35728:1;35721:15;35755:4;35752:1;35745:15;35772:180;35820:77;35817:1;35810:88;35917:4;35914:1;35907:15;35941:4;35938:1;35931:15;35958:180;36006:77;36003:1;35996:88;36103:4;36100:1;36093:15;36127:4;36124:1;36117:15;36144:117;36253:1;36250;36243:12;36267:117;36376:1;36373;36366:12;36390:117;36499:1;36496;36489:12;36513:117;36622:1;36619;36612:12;36636:102;36677:6;36728:2;36724:7;36719:2;36712:5;36708:14;36704:28;36694:38;;36636:102;;;:::o;36744:221::-;36884:34;36880:1;36872:6;36868:14;36861:58;36953:4;36948:2;36940:6;36936:15;36929:29;36744:221;:::o;36971:225::-;37111:34;37107:1;37099:6;37095:14;37088:58;37180:8;37175:2;37167:6;37163:15;37156:33;36971:225;:::o;37202:229::-;37342:34;37338:1;37330:6;37326:14;37319:58;37411:12;37406:2;37398:6;37394:15;37387:37;37202:229;:::o;37437:222::-;37577:34;37573:1;37565:6;37561:14;37554:58;37646:5;37641:2;37633:6;37629:15;37622:30;37437:222;:::o;37665:221::-;37805:34;37801:1;37793:6;37789:14;37782:58;37874:4;37869:2;37861:6;37857:15;37850:29;37665:221;:::o;37892:224::-;38032:34;38028:1;38020:6;38016:14;38009:58;38101:7;38096:2;38088:6;38084:15;38077:32;37892:224;:::o;38122:221::-;38262:34;38258:1;38250:6;38246:14;38239:58;38331:4;38326:2;38318:6;38314:15;38307:29;38122:221;:::o;38349:167::-;38489:19;38485:1;38477:6;38473:14;38466:43;38349:167;:::o;38522:244::-;38662:34;38658:1;38650:6;38646:14;38639:58;38731:27;38726:2;38718:6;38714:15;38707:52;38522:244;:::o;38772:230::-;38912:34;38908:1;38900:6;38896:14;38889:58;38981:13;38976:2;38968:6;38964:15;38957:38;38772:230;:::o;39008:225::-;39148:34;39144:1;39136:6;39132:14;39125:58;39217:8;39212:2;39204:6;39200:15;39193:33;39008:225;:::o;39239:155::-;39379:7;39375:1;39367:6;39363:14;39356:31;39239:155;:::o;39400:182::-;39540:34;39536:1;39528:6;39524:14;39517:58;39400:182;:::o;39588:176::-;39728:28;39724:1;39716:6;39712:14;39705:52;39588:176;:::o;39770:237::-;39910:34;39906:1;39898:6;39894:14;39887:58;39979:20;39974:2;39966:6;39962:15;39955:45;39770:237;:::o;40013:221::-;40153:34;40149:1;40141:6;40137:14;40130:58;40222:4;40217:2;40209:6;40205:15;40198:29;40013:221;:::o;40240:238::-;40380:34;40376:1;40368:6;40364:14;40357:58;40449:21;40444:2;40436:6;40432:15;40425:46;40240:238;:::o;40484:179::-;40624:31;40620:1;40612:6;40608:14;40601:55;40484:179;:::o;40669:220::-;40809:34;40805:1;40797:6;40793:14;40786:58;40878:3;40873:2;40865:6;40861:15;40854:28;40669:220;:::o;40895:304::-;41035:34;41031:1;41023:6;41019:14;41012:58;41108:34;41103:2;41095:6;41091:15;41084:59;41181:6;41176:2;41168:6;41164:15;41157:31;40895:304;:::o;41209:182::-;41353:26;41349:1;41341:6;41337:14;41330:50;41209:182;:::o;41401:245::-;41545:34;41541:1;41533:6;41529:14;41522:58;41618:16;41613:2;41605:6;41601:15;41594:41;41401:245;:::o;41656:246::-;41800:34;41796:1;41788:6;41784:14;41777:58;41873:17;41868:2;41860:6;41856:15;41849:42;41656:246;:::o;41912:181::-;42056:25;42052:1;42044:6;42040:14;42033:49;41912:181;:::o;42103:244::-;42247:34;42243:1;42235:6;42231:14;42224:58;42320:15;42315:2;42307:6;42303:15;42296:40;42103:244;:::o;42357:233::-;42501:34;42497:1;42489:6;42485:14;42478:58;42574:4;42569:2;42561:6;42557:15;42550:29;42357:233;:::o;42600:130::-;42677:24;42695:5;42677:24;:::i;:::-;42670:5;42667:35;42657:63;;42716:1;42713;42706:12;42657:63;42600:130;:::o;42740:124::-;42814:21;42829:5;42814:21;:::i;:::-;42807:5;42804:32;42794:60;;42850:1;42847;42840:12;42794:60;42740:124;:::o;42874:128::-;42950:23;42967:5;42950:23;:::i;:::-;42943:5;42940:34;42930:62;;42988:1;42985;42978:12;42930:62;42874:128;:::o;43012:130::-;43089:24;43107:5;43089:24;:::i;:::-;43082:5;43079:35;43069:63;;43128:1;43125;43118:12;43069:63;43012:130;:::o
Swarm Source
ipfs://7ba822a3b4a389001fef5f9503ce132932bca8393280f1b7beca2b2d60041e33
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.