Contract Overview
Balance:
0.02 MATIC
MATIC Value:
$0.02 (@ $1.10/MATIC)
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
BAnetNFT
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-25 */ // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ 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 (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _ownerOf(tokenId); require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner or approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist */ function _ownerOf(uint256 tokenId) internal view virtual returns (address) { return _owners[tokenId]; } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _ownerOf(tokenId) != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId, 1); // Check that tokenId was not minted by `_beforeTokenTransfer` hook require(!_exists(tokenId), "ERC721: token already minted"); unchecked { // Will not overflow unless all 2**256 token ids are minted to the same owner. // Given that tokens are minted one by one, it is impossible in practice that // this ever happens. Might change if we allow batch minting. // The ERC fails to describe this case. _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * This is an internal function that does not check if the sender is authorized to operate on the token. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId, 1); // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook owner = ERC721.ownerOf(tokenId); // Clear approvals delete _tokenApprovals[tokenId]; unchecked { // Cannot overflow, as that would require more tokens to be burned/transferred // out than the owner initially received through minting and transferring in. _balances[owner] -= 1; } delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId, 1); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId, 1); // Check that tokenId was not transferred by `_beforeTokenTransfer` hook require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); // Clear approvals from the previous owner delete _tokenApprovals[tokenId]; unchecked { // `_balances[from]` cannot overflow for the same reason as described in `_burn`: // `from`'s balance is the number of token held, which is at least one before the current // transfer. // `_balances[to]` could overflow in the conditions described in `_mint`. That would require // all 2**256 token ids to be minted, which in practice is impossible. _balances[from] -= 1; _balances[to] += 1; } _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`. * - When `from` is zero, the tokens will be minted for `to`. * - When `to` is zero, ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256, /* firstTokenId */ uint256 batchSize ) internal virtual { if (batchSize > 1) { if (from != address(0)) { _balances[from] -= batchSize; } if (to != address(0)) { _balances[to] += batchSize; } } } /** * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`. * - When `from` is zero, the tokens were minted for `to`. * - When `to` is zero, ``from``'s tokens were burned. * - `from` and `to` are never both zero. * - `batchSize` is non-zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev See {ERC721-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address from, address to, uint256 firstTokenId, uint256 batchSize ) internal virtual override { super._beforeTokenTransfer(from, to, firstTokenId, batchSize); if (batchSize > 1) { // Will only trigger during construction. Batch transferring (minting) is not available afterwards. revert("ERC721Enumerable: consecutive transfers not supported"); } uint256 tokenId = firstTokenId; if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/automint-royalties-banetnft.sol pragma solidity ^0.8.0; //import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/interfaces/IERC2981.sol"; contract BAnetNFT is ERC721Enumerable, Ownable { using Strings for uint256; // Address of the royalties recipient address private _royaltiesReceiver; // Percentage of each sale to pay as royalties uint256 public constant royaltiesPercentage = 10; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.01 ether; uint256 public maxSupply = 1000000; uint256 public maxMintAmount = 1; bool public paused = false; mapping(address => bool) public whitelisted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, address initialRoyaltiesReceiver ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); _royaltiesReceiver = initialRoyaltiesReceiver; mint(msg.sender, 3); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); // require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner() { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } /// @notice Getter function for _royaltiesReceiver /// @return the address of the royalties recipient function royaltiesReceiver() external returns(address) { return _royaltiesReceiver; } /// @notice Changes the royalties' recipient address (in case rights are /// transferred for instance) /// @param newRoyaltiesReceiver - address of the new royalties recipient function setRoyaltiesReceiver(address newRoyaltiesReceiver) external onlyOwner { require(newRoyaltiesReceiver != _royaltiesReceiver); // dev: Same address _royaltiesReceiver = newRoyaltiesReceiver; } /// @notice Informs callers that this contract supports ERC2981 function supportsInterface(bytes4 interfaceId) public view override(ERC721Enumerable) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /// @notice 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 - 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 _value sale price function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view returns (address receiver, uint256 royaltyAmount) { uint256 _royalties = (_salePrice * royaltiesPercentage) / 100; return (_royaltiesReceiver, _royalties); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"initialRoyaltiesReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltiesPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltiesReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRoyaltiesReceiver","type":"address"}],"name":"setRoyaltiesReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90816200004a9190620012d6565b50662386f26fc10000600e55620f4240600f5560016010556000601160006101000a81548160ff0219169083151502179055503480156200008a57600080fd5b506040516200627b3803806200627b8339818101604052810190620000b0919062001586565b83838160009081620000c39190620012d6565b508060019081620000d59190620012d6565b505050620000f8620000ec6200016760201b60201c565b6200016f60201b60201c565b62000109826200023560201b60201c565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200015d3360036200025a60201b60201c565b5050505062001c81565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000245620003b960201b60201c565b80600c9081620002569190620012d6565b5050565b60006200026c6200044a60201b60201c565b9050601160009054906101000a900460ff16156200028957600080fd5b600082116200029757600080fd5b600f548282620002a8919062001684565b1115620002b457600080fd5b620002c46200045760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200036f5760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146200036e5781600e54620003609190620016bf565b3410156200036d57600080fd5b5b5b6000600190505b828111620003b3576200039d84828462000391919062001684565b6200048160201b60201c565b8080620003aa906200170a565b91505062000376565b50505050565b620003c96200016760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003ef6200045760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000448576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043f90620017b8565b60405180910390fd5b565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004a3828260405180602001604052806000815250620004a760201b60201c565b5050565b620004b983836200051560201b60201c565b620004ce60008484846200075b60201b60201c565b62000510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005079062001850565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057e90620018c2565b60405180910390fd5b62000598816200090460201b60201c565b15620005db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d29062001934565b60405180910390fd5b620005f16000838360016200094d60201b60201c565b62000602816200090460201b60201c565b1562000645576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063c9062001934565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46200075760008383600162000ae160201b60201c565b5050565b6000620007898473ffffffffffffffffffffffffffffffffffffffff1662000ae760201b620017a91760201c565b15620008f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007bb6200016760201b60201c565b8786866040518563ffffffff1660e01b8152600401620007df9493929190620019d5565b6020604051808303816000875af19250505080156200081e57506040513d601f19601f820116820180604052508101906200081b919062001a86565b60015b620008a6573d806000811462000851576040519150601f19603f3d011682016040523d82523d6000602084013e62000856565b606091505b5060008151036200089e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008959062001850565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008fc565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166200092e8362000b0a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620009668484848462000b4760201b620017cc1760201c565b6001811115620009ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a49062001b2e565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620009fe57620009f88162000c7460201b60201c565b62000a46565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161462000a455762000a44858262000cbd60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000a925762000a8c8162000e3a60201b60201c565b62000ada565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000ad95762000ad8848262000f1660201b60201c565b5b5b5050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600181111562000c6e57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000bdf5780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bd7919062001b50565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c6d5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c65919062001684565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000cd78462000fa260201b620012331760201c565b62000ce3919062001b50565b905060006007600084815260200190815260200160002054905081811462000dc9576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e50919062001b50565b905060006009600084815260200190815260200160002054905060006008838154811062000e835762000e8262001b8b565b5b90600052602060002001549050806008838154811062000ea85762000ea762001b8b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000efa5762000ef962001bba565b5b6001900381819060005260206000200160009055905550505050565b600062000f2e8362000fa260201b620012331760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001015576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200100c9062001c5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010de57607f821691505b602082108103620010f457620010f362001096565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200115e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200111f565b6200116a86836200111f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620011b7620011b1620011ab8462001182565b6200118c565b62001182565b9050919050565b6000819050919050565b620011d38362001196565b620011eb620011e282620011be565b8484546200112c565b825550505050565b600090565b62001202620011f3565b6200120f818484620011c8565b505050565b5b8181101562001237576200122b600082620011f8565b60018101905062001215565b5050565b601f82111562001286576200125081620010fa565b6200125b846200110f565b810160208510156200126b578190505b620012836200127a856200110f565b83018262001214565b50505b505050565b600082821c905092915050565b6000620012ab600019846008026200128b565b1980831691505092915050565b6000620012c6838362001298565b9150826002028217905092915050565b620012e1826200105c565b67ffffffffffffffff811115620012fd57620012fc62001067565b5b620013098254620010c5565b620013168282856200123b565b600060209050601f8311600181146200134e576000841562001339578287015190505b620013458582620012b8565b865550620013b5565b601f1984166200135e86620010fa565b60005b82811015620013885784890151825560018201915060208501945060208101905062001361565b86831015620013a85784890151620013a4601f89168262001298565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620013f782620013db565b810181811067ffffffffffffffff8211171562001419576200141862001067565b5b80604052505050565b60006200142e620013bd565b90506200143c8282620013ec565b919050565b600067ffffffffffffffff8211156200145f576200145e62001067565b5b6200146a82620013db565b9050602081019050919050565b60005b83811015620014975780820151818401526020810190506200147a565b60008484015250505050565b6000620014ba620014b48462001441565b62001422565b905082815260208101848484011115620014d957620014d8620013d6565b5b620014e684828562001477565b509392505050565b600082601f830112620015065762001505620013d1565b5b815162001518848260208601620014a3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200154e8262001521565b9050919050565b620015608162001541565b81146200156c57600080fd5b50565b600081519050620015808162001555565b92915050565b60008060008060808587031215620015a357620015a2620013c7565b5b600085015167ffffffffffffffff811115620015c457620015c3620013cc565b5b620015d287828801620014ee565b945050602085015167ffffffffffffffff811115620015f657620015f5620013cc565b5b6200160487828801620014ee565b935050604085015167ffffffffffffffff811115620016285762001627620013cc565b5b6200163687828801620014ee565b925050606062001649878288016200156f565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620016918262001182565b91506200169e8362001182565b9250828201905080821115620016b957620016b862001655565b5b92915050565b6000620016cc8262001182565b9150620016d98362001182565b9250828202620016e98162001182565b9150828204841483151762001703576200170262001655565b5b5092915050565b6000620017178262001182565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200174c576200174b62001655565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620017a060208362001757565b9150620017ad8262001768565b602082019050919050565b60006020820190508181036000830152620017d38162001791565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006200183860328362001757565b91506200184582620017da565b604082019050919050565b600060208201905081810360008301526200186b8162001829565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620018aa60208362001757565b9150620018b78262001872565b602082019050919050565b60006020820190508181036000830152620018dd816200189b565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006200191c601c8362001757565b91506200192982620018e4565b602082019050919050565b600060208201905081810360008301526200194f816200190d565b9050919050565b620019618162001541565b82525050565b620019728162001182565b82525050565b600081519050919050565b600082825260208201905092915050565b6000620019a18262001978565b620019ad818562001983565b9350620019bf81856020860162001477565b620019ca81620013db565b840191505092915050565b6000608082019050620019ec600083018762001956565b620019fb602083018662001956565b62001a0a604083018562001967565b818103606083015262001a1e818462001994565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001a608162001a29565b811462001a6c57600080fd5b50565b60008151905062001a808162001a55565b92915050565b60006020828403121562001a9f5762001a9e620013c7565b5b600062001aaf8482850162001a6f565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b600062001b1660358362001757565b915062001b238262001ab8565b604082019050919050565b6000602082019050818103600083015262001b498162001b07565b9050919050565b600062001b5d8262001182565b915062001b6a8362001182565b925082820390508181111562001b855762001b8462001655565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600062001c4760298362001757565b915062001c548262001be9565b604082019050919050565b6000602082019050818103600083015262001c7a8162001c38565b9050919050565b6145ea8062001c916000396000f3fe60806040526004361061023b5760003560e01c80635c975abb1161012e578063b5143715116100ab578063d5abeb011161006f578063d5abeb0114610868578063d936547e14610893578063da3ef23f146108d0578063e985e9c5146108f9578063f2fde38b146109365761023b565b8063b514371514610783578063b88d4fde146107ac578063c6682862146107d5578063c87b56dd14610800578063cafa8dfe1461083d5761023b565b80637f00c7a6116100f25780637f00c7a6146106b05780638da5cb5b146106d957806395d89b4114610704578063a22cb4651461072f578063a3a51bd5146107585761023b565b80635c975abb146105c95780636352211e146105f45780636c0360eb1461063157806370a082311461065c578063715018a6146106995761023b565b80632f745c59116101bc578063438b630011610180578063438b6300146104d457806344a0d68a146105115780634a4c560d1461053a5780634f6ccce71461056357806355f804b3146105a05761023b565b80632f745c591461041f57806330cc7ae01461045c5780633ccfd60b1461048557806340c10f191461048f57806342842e0e146104ab5761023b565b806313faede61161020357806313faede61461033757806318160ddd14610362578063239c70ae1461038d57806323b872dd146103b85780632a55205a146103e15761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190612e82565b61095f565b6040516102749190612eca565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612f11565b6109d9565b005b3480156102b257600080fd5b506102bb6109fe565b6040516102c89190612fce565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613026565b610a90565b6040516103059190613094565b60405180910390f35b34801561031a57600080fd5b50610335600480360381019061033091906130db565b610ad6565b005b34801561034357600080fd5b5061034c610bed565b604051610359919061312a565b60405180910390f35b34801561036e57600080fd5b50610377610bf3565b604051610384919061312a565b60405180910390f35b34801561039957600080fd5b506103a2610c00565b6040516103af919061312a565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190613145565b610c06565b005b3480156103ed57600080fd5b5061040860048036038101906104039190613198565b610c66565b6040516104169291906131d8565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906130db565b610cb6565b604051610453919061312a565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613201565b610d5b565b005b61048d610dbe565b005b6104a960048036038101906104a491906130db565b610e06565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190613145565b610f3d565b005b3480156104e057600080fd5b506104fb60048036038101906104f69190613201565b610f5d565b60405161050891906132ec565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190613026565b61100b565b005b34801561054657600080fd5b50610561600480360381019061055c9190613201565b61101d565b005b34801561056f57600080fd5b5061058a60048036038101906105859190613026565b611080565b604051610597919061312a565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613443565b6110f1565b005b3480156105d557600080fd5b506105de61110c565b6040516105eb9190612eca565b60405180910390f35b34801561060057600080fd5b5061061b60048036038101906106169190613026565b61111f565b6040516106289190613094565b60405180910390f35b34801561063d57600080fd5b506106466111a5565b6040516106539190612fce565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190613201565b611233565b604051610690919061312a565b60405180910390f35b3480156106a557600080fd5b506106ae6112ea565b005b3480156106bc57600080fd5b506106d760048036038101906106d29190613026565b6112fe565b005b3480156106e557600080fd5b506106ee611310565b6040516106fb9190613094565b60405180910390f35b34801561071057600080fd5b5061071961133a565b6040516107269190612fce565b60405180910390f35b34801561073b57600080fd5b506107566004803603810190610751919061348c565b6113cc565b005b34801561076457600080fd5b5061076d6113e2565b60405161077a9190613094565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190613201565b61140c565b005b3480156107b857600080fd5b506107d360048036038101906107ce919061356d565b6114b2565b005b3480156107e157600080fd5b506107ea611514565b6040516107f79190612fce565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190613026565b6115a2565b6040516108349190612fce565b60405180910390f35b34801561084957600080fd5b5061085261164c565b60405161085f919061312a565b60405180910390f35b34801561087457600080fd5b5061087d611651565b60405161088a919061312a565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613201565b611657565b6040516108c79190612eca565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613443565b611677565b005b34801561090557600080fd5b50610920600480360381019061091b91906135f0565b611692565b60405161092d9190612eca565b60405180910390f35b34801561094257600080fd5b5061095d60048036038101906109589190613201565b611726565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d257506109d1826118f2565b5b9050919050565b6109e161196c565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a0d9061365f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a399061365f565b8015610a865780601f10610a5b57610100808354040283529160200191610a86565b820191906000526020600020905b815481529060010190602001808311610a6957829003601f168201915b5050505050905090565b6000610a9b826119ea565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae18261111f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4890613702565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b70611a35565b73ffffffffffffffffffffffffffffffffffffffff161480610b9f5750610b9e81610b99611a35565b611692565b5b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590613794565b60405180910390fd5b610be88383611a3d565b505050565b600e5481565b6000600880549050905090565b60105481565b610c17610c11611a35565b82611af6565b610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d90613826565b60405180910390fd5b610c61838383611b8b565b505050565b60008060006064600a85610c7a9190613875565b610c8491906138e6565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b6000610cc183611233565b8210610d02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf990613989565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d6361196c565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610dc661196c565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e0457600080fd5b565b6000610e10610bf3565b9050601160009054906101000a900460ff1615610e2c57600080fd5b60008211610e3957600080fd5b600f548282610e4891906139a9565b1115610e5357600080fd5b610e5b611310565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f015760011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f005781600e54610ef39190613875565b341015610eff57600080fd5b5b5b6000600190505b828111610f3757610f24848284610f1f91906139a9565b611e84565b8080610f2f906139dd565b915050610f08565b50505050565b610f58838383604051806020016040528060008152506114b2565b505050565b60606000610f6a83611233565b905060008167ffffffffffffffff811115610f8857610f87613318565b5b604051908082528060200260200182016040528015610fb65781602001602082028036833780820191505090505b50905060005b8281101561100057610fce8582610cb6565b828281518110610fe157610fe0613a25565b5b6020026020010181815250508080610ff8906139dd565b915050610fbc565b508092505050919050565b61101361196c565b80600e8190555050565b61102561196c565b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061108a610bf3565b82106110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c290613ac6565b60405180910390fd5b600882815481106110df576110de613a25565b5b90600052602060002001549050919050565b6110f961196c565b80600c90816111089190613c92565b5050565b601160009054906101000a900460ff1681565b60008061112b83611ea2565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390613db0565b60405180910390fd5b80915050919050565b600c80546111b29061365f565b80601f01602080910402602001604051908101604052809291908181526020018280546111de9061365f565b801561122b5780601f106112005761010080835404028352916020019161122b565b820191906000526020600020905b81548152906001019060200180831161120e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90613e42565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112f261196c565b6112fc6000611edf565b565b61130661196c565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113499061365f565b80601f01602080910402602001604051908101604052809291908181526020018280546113759061365f565b80156113c25780601f10611397576101008083540402835291602001916113c2565b820191906000526020600020905b8154815290600101906020018083116113a557829003601f168201915b5050505050905090565b6113de6113d7611a35565b8383611fa5565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61141461196c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361146e57600080fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114c36114bd611a35565b83611af6565b611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990613826565b60405180910390fd5b61150e84848484612111565b50505050565b600d80546115219061365f565b80601f016020809104026020016040519081016040528092919081815260200182805461154d9061365f565b801561159a5780601f1061156f5761010080835404028352916020019161159a565b820191906000526020600020905b81548152906001019060200180831161157d57829003601f168201915b505050505081565b60606115ad8261216d565b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390613ed4565b60405180910390fd5b60006115f66121ae565b905060008151116116165760405180602001604052806000815250611644565b8061162084612240565b600d60405160200161163493929190613fb3565b6040516020818303038152906040525b915050919050565b600a81565b600f5481565b60126020528060005260406000206000915054906101000a900460ff1681565b61167f61196c565b80600d908161168e9190613c92565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61172e61196c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490614056565b60405180910390fd5b6117a681611edf565b50565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60018111156118ec57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146118605780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118589190614076565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118eb5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118e391906139a9565b925050819055505b5b50505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061196557506119648261230e565b5b9050919050565b611974611a35565b73ffffffffffffffffffffffffffffffffffffffff16611992611310565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df906140f6565b60405180910390fd5b565b6119f38161216d565b611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990613db0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ab08361111f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611b028361111f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b445750611b438185611692565b5b80611b8257508373ffffffffffffffffffffffffffffffffffffffff16611b6a84610a90565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611bab8261111f565b73ffffffffffffffffffffffffffffffffffffffff1614611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf890614188565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c679061421a565b60405180910390fd5b611c7d83838360016123f0565b8273ffffffffffffffffffffffffffffffffffffffff16611c9d8261111f565b73ffffffffffffffffffffffffffffffffffffffff1614611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea90614188565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e7f838383600161254e565b505050565b611e9e828260405180602001604052806000815250612554565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90614286565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121049190612eca565b60405180910390a3505050565b61211c848484611b8b565b612128848484846125af565b612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90614318565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff1661218f83611ea2565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c80546121bd9061365f565b80601f01602080910402602001604051908101604052809291908181526020018280546121e99061365f565b80156122365780601f1061220b57610100808354040283529160200191612236565b820191906000526020600020905b81548152906001019060200180831161221957829003601f168201915b5050505050905090565b60606000600161224f84612736565b01905060008167ffffffffffffffff81111561226e5761226d613318565b5b6040519080825280601f01601f1916602001820160405280156122a05781602001600182028036833780820191505090505b509050600082602001820190505b600115612303578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816122f7576122f66138b7565b5b049450600085036122ae575b819350505050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123d957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123e957506123e882612889565b5b9050919050565b6123fc848484846117cc565b6001811115612440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612437906143aa565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361248757612482816128f3565b6124c6565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146124c5576124c4858261293c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125085761250381612aa9565b612547565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612546576125458482612b7a565b5b5b5050505050565b50505050565b61255e8383612bf9565b61256b60008484846125af565b6125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a190614318565b60405180910390fd5b505050565b60006125d08473ffffffffffffffffffffffffffffffffffffffff166117a9565b15612729578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f9611a35565b8786866040518563ffffffff1660e01b815260040161261b949392919061441f565b6020604051808303816000875af192505050801561265757506040513d601f19601f820116820180604052508101906126549190614480565b60015b6126d9573d8060008114612687576040519150601f19603f3d011682016040523d82523d6000602084013e61268c565b606091505b5060008151036126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890614318565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061272e565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612794577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161278a576127896138b7565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106127d1576d04ee2d6d415b85acef810000000083816127c7576127c66138b7565b5b0492506020810190505b662386f26fc10000831061280057662386f26fc1000083816127f6576127f56138b7565b5b0492506010810190505b6305f5e1008310612829576305f5e100838161281f5761281e6138b7565b5b0492506008810190505b612710831061284e576127108381612844576128436138b7565b5b0492506004810190505b606483106128715760648381612867576128666138b7565b5b0492506002810190505b600a8310612880576001810190505b80915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161294984611233565b6129539190614076565b9050600060076000848152602001908152602001600020549050818114612a38576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612abd9190614076565b9050600060096000848152602001908152602001600020549050600060088381548110612aed57612aec613a25565b5b906000526020600020015490508060088381548110612b0f57612b0e613a25565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b5e57612b5d6144ad565b5b6001900381819060005260206000200160009055905550505050565b6000612b8583611233565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5f90614528565b60405180910390fd5b612c718161216d565b15612cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca890614594565b60405180910390fd5b612cbf6000838360016123f0565b612cc88161216d565b15612d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cff90614594565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e1260008383600161254e565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e5f81612e2a565b8114612e6a57600080fd5b50565b600081359050612e7c81612e56565b92915050565b600060208284031215612e9857612e97612e20565b5b6000612ea684828501612e6d565b91505092915050565b60008115159050919050565b612ec481612eaf565b82525050565b6000602082019050612edf6000830184612ebb565b92915050565b612eee81612eaf565b8114612ef957600080fd5b50565b600081359050612f0b81612ee5565b92915050565b600060208284031215612f2757612f26612e20565b5b6000612f3584828501612efc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f78578082015181840152602081019050612f5d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fa082612f3e565b612faa8185612f49565b9350612fba818560208601612f5a565b612fc381612f84565b840191505092915050565b60006020820190508181036000830152612fe88184612f95565b905092915050565b6000819050919050565b61300381612ff0565b811461300e57600080fd5b50565b60008135905061302081612ffa565b92915050565b60006020828403121561303c5761303b612e20565b5b600061304a84828501613011565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061307e82613053565b9050919050565b61308e81613073565b82525050565b60006020820190506130a96000830184613085565b92915050565b6130b881613073565b81146130c357600080fd5b50565b6000813590506130d5816130af565b92915050565b600080604083850312156130f2576130f1612e20565b5b6000613100858286016130c6565b925050602061311185828601613011565b9150509250929050565b61312481612ff0565b82525050565b600060208201905061313f600083018461311b565b92915050565b60008060006060848603121561315e5761315d612e20565b5b600061316c868287016130c6565b935050602061317d868287016130c6565b925050604061318e86828701613011565b9150509250925092565b600080604083850312156131af576131ae612e20565b5b60006131bd85828601613011565b92505060206131ce85828601613011565b9150509250929050565b60006040820190506131ed6000830185613085565b6131fa602083018461311b565b9392505050565b60006020828403121561321757613216612e20565b5b6000613225848285016130c6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61326381612ff0565b82525050565b6000613275838361325a565b60208301905092915050565b6000602082019050919050565b60006132998261322e565b6132a38185613239565b93506132ae8361324a565b8060005b838110156132df5781516132c68882613269565b97506132d183613281565b9250506001810190506132b2565b5085935050505092915050565b60006020820190508181036000830152613306818461328e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61335082612f84565b810181811067ffffffffffffffff8211171561336f5761336e613318565b5b80604052505050565b6000613382612e16565b905061338e8282613347565b919050565b600067ffffffffffffffff8211156133ae576133ad613318565b5b6133b782612f84565b9050602081019050919050565b82818337600083830152505050565b60006133e66133e184613393565b613378565b90508281526020810184848401111561340257613401613313565b5b61340d8482856133c4565b509392505050565b600082601f83011261342a5761342961330e565b5b813561343a8482602086016133d3565b91505092915050565b60006020828403121561345957613458612e20565b5b600082013567ffffffffffffffff81111561347757613476612e25565b5b61348384828501613415565b91505092915050565b600080604083850312156134a3576134a2612e20565b5b60006134b1858286016130c6565b92505060206134c285828601612efc565b9150509250929050565b600067ffffffffffffffff8211156134e7576134e6613318565b5b6134f082612f84565b9050602081019050919050565b600061351061350b846134cc565b613378565b90508281526020810184848401111561352c5761352b613313565b5b6135378482856133c4565b509392505050565b600082601f8301126135545761355361330e565b5b81356135648482602086016134fd565b91505092915050565b6000806000806080858703121561358757613586612e20565b5b6000613595878288016130c6565b94505060206135a6878288016130c6565b93505060406135b787828801613011565b925050606085013567ffffffffffffffff8111156135d8576135d7612e25565b5b6135e48782880161353f565b91505092959194509250565b6000806040838503121561360757613606612e20565b5b6000613615858286016130c6565b9250506020613626858286016130c6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367757607f821691505b60208210810361368a57613689613630565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136ec602183612f49565b91506136f782613690565b604082019050919050565b6000602082019050818103600083015261371b816136df565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061377e603d83612f49565b915061378982613722565b604082019050919050565b600060208201905081810360008301526137ad81613771565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613810602d83612f49565b915061381b826137b4565b604082019050919050565b6000602082019050818103600083015261383f81613803565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388082612ff0565b915061388b83612ff0565b925082820261389981612ff0565b915082820484148315176138b0576138af613846565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138f182612ff0565b91506138fc83612ff0565b92508261390c5761390b6138b7565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613973602b83612f49565b915061397e82613917565b604082019050919050565b600060208201905081810360008301526139a281613966565b9050919050565b60006139b482612ff0565b91506139bf83612ff0565b92508282019050808211156139d7576139d6613846565b5b92915050565b60006139e882612ff0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a1a57613a19613846565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ab0602c83612f49565b9150613abb82613a54565b604082019050919050565b60006020820190508181036000830152613adf81613aa3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b0b565b613b528683613b0b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b8f613b8a613b8584612ff0565b613b6a565b612ff0565b9050919050565b6000819050919050565b613ba983613b74565b613bbd613bb582613b96565b848454613b18565b825550505050565b600090565b613bd2613bc5565b613bdd818484613ba0565b505050565b5b81811015613c0157613bf6600082613bca565b600181019050613be3565b5050565b601f821115613c4657613c1781613ae6565b613c2084613afb565b81016020851015613c2f578190505b613c43613c3b85613afb565b830182613be2565b50505b505050565b600082821c905092915050565b6000613c6960001984600802613c4b565b1980831691505092915050565b6000613c828383613c58565b9150826002028217905092915050565b613c9b82612f3e565b67ffffffffffffffff811115613cb457613cb3613318565b5b613cbe825461365f565b613cc9828285613c05565b600060209050601f831160018114613cfc5760008415613cea578287015190505b613cf48582613c76565b865550613d5c565b601f198416613d0a86613ae6565b60005b82811015613d3257848901518255600182019150602085019450602081019050613d0d565b86831015613d4f5784890151613d4b601f891682613c58565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613d9a601883612f49565b9150613da582613d64565b602082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613e2c602983612f49565b9150613e3782613dd0565b604082019050919050565b60006020820190508181036000830152613e5b81613e1f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ebe602f83612f49565b9150613ec982613e62565b604082019050919050565b60006020820190508181036000830152613eed81613eb1565b9050919050565b600081905092915050565b6000613f0a82612f3e565b613f148185613ef4565b9350613f24818560208601612f5a565b80840191505092915050565b60008154613f3d8161365f565b613f478186613ef4565b94506001821660008114613f625760018114613f7757613faa565b60ff1983168652811515820286019350613faa565b613f8085613ae6565b60005b83811015613fa257815481890152600182019150602081019050613f83565b838801955050505b50505092915050565b6000613fbf8286613eff565b9150613fcb8285613eff565b9150613fd78284613f30565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614040602683612f49565b915061404b82613fe4565b604082019050919050565b6000602082019050818103600083015261406f81614033565b9050919050565b600061408182612ff0565b915061408c83612ff0565b92508282039050818111156140a4576140a3613846565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140e0602083612f49565b91506140eb826140aa565b602082019050919050565b6000602082019050818103600083015261410f816140d3565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614172602583612f49565b915061417d82614116565b604082019050919050565b600060208201905081810360008301526141a181614165565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614204602483612f49565b915061420f826141a8565b604082019050919050565b60006020820190508181036000830152614233816141f7565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614270601983612f49565b915061427b8261423a565b602082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614302603283612f49565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000614394603583612f49565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143f1826143ca565b6143fb81856143d5565b935061440b818560208601612f5a565b61441481612f84565b840191505092915050565b60006080820190506144346000830187613085565b6144416020830186613085565b61444e604083018561311b565b818103606083015261446081846143e6565b905095945050505050565b60008151905061447a81612e56565b92915050565b60006020828403121561449657614495612e20565b5b60006144a48482850161446b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614512602083612f49565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061457e601c83612f49565b915061458982614548565b602082019050919050565b600060208201905081810360008301526145ad81614571565b905091905056fea2646970667358221220152568bc0d125b0021b028da0b45a54365f17279b85e983be9d6ef183ddb402d64736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000ece369f372f55baebfe37d5a27a70e145bfbe31e000000000000000000000000000000000000000000000000000000000000001442412e6e65742f667265652d6e66742d6d696e74000000000000000000000000000000000000000000000000000000000000000000000000000000000000001042412d4e45542d467265652d4d696e7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f73736c2e62612e6e65742f6e66742f6f726967696e616c2f
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000ece369f372f55baebfe37d5a27a70e145bfbe31e000000000000000000000000000000000000000000000000000000000000001442412e6e65742f667265652d6e66742d6d696e74000000000000000000000000000000000000000000000000000000000000000000000000000000000000001042412d4e45542d467265652d4d696e7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f73736c2e62612e6e65742f6e66742f6f726967696e616c2f
-----Decoded View---------------
Arg [0] : _name (string): BA.net/free-nft-mint
Arg [1] : _symbol (string): BA-NET-Free-Mint
Arg [2] : _initBaseURI (string): https://ssl.ba.net/nft/original/
Arg [3] : initialRoyaltiesReceiver (address): 0xece369f372f55baebfe37d5a27a70e145bfbe31e
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000ece369f372f55baebfe37d5a27a70e145bfbe31e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [5] : 42412e6e65742f667265652d6e66742d6d696e74000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [7] : 42412d4e45542d467265652d4d696e7400000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [9] : 68747470733a2f2f73736c2e62612e6e65742f6e66742f6f726967696e616c2f
Deployed ByteCode Sourcemap
63528:4789:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67377:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66244:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41450:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42962:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42480:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63873:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58028:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63949:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43662:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68040:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;57696:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66423:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66529:114;;;:::i;:::-;;64492:503;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44068:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65001:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65800:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66323:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58218:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66012:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63986:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41160:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63805:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40891:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17975:103;;;;;;;;;;;;;:::i;:::-;;65888:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17327:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41619:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43205:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66763:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67069:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44324:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63831:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65355:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63750:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63910:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64017:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66116:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43431:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18233:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;67377:227;67482:4;67521:26;67506:41;;;:11;:41;;;;:90;;;;67560:36;67584:11;67560:23;:36::i;:::-;67506:90;67499:97;;67377:227;;;:::o;66244:73::-;17213:13;:11;:13::i;:::-;66305:6:::1;66296;;:15;;;;;;;;;;;;;;;;;;66244:73:::0;:::o;41450:100::-;41504:13;41537:5;41530:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41450:100;:::o;42962:171::-;43038:7;43058:23;43073:7;43058:14;:23::i;:::-;43101:15;:24;43117:7;43101:24;;;;;;;;;;;;;;;;;;;;;43094:31;;42962:171;;;:::o;42480:416::-;42561:13;42577:23;42592:7;42577:14;:23::i;:::-;42561:39;;42625:5;42619:11;;:2;:11;;;42611:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42719:5;42703:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;42728:37;42745:5;42752:12;:10;:12::i;:::-;42728:16;:37::i;:::-;42703:62;42681:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;42867:21;42876:2;42880:7;42867:8;:21::i;:::-;42550:346;42480:416;;:::o;63873:32::-;;;;:::o;58028:113::-;58089:7;58116:10;:17;;;;58109:24;;58028:113;:::o;63949:32::-;;;;:::o;43662:335::-;43857:41;43876:12;:10;:12::i;:::-;43890:7;43857:18;:41::i;:::-;43849:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;43961:28;43971:4;43977:2;43981:7;43961:9;:28::i;:::-;43662:335;;;:::o;68040:258::-;68127:16;68145:21;68179:18;68237:3;63796:2;68201:10;:32;;;;:::i;:::-;68200:40;;;;:::i;:::-;68179:61;;68259:18;;;;;;;;;;;68279:10;68251:39;;;;;68040:258;;;;;:::o;57696:256::-;57793:7;57829:23;57846:5;57829:16;:23::i;:::-;57821:5;:31;57813:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;57918:12;:19;57931:5;57918:19;;;;;;;;;;;;;;;:26;57938:5;57918:26;;;;;;;;;;;;57911:33;;57696:256;;;;:::o;66423:100::-;17213:13;:11;:13::i;:::-;66512:5:::1;66491:11;:18;66503:5;66491:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;66423:100:::0;:::o;66529:114::-;17213:13;:11;:13::i;:::-;66597:10:::1;66589:24;;:47;66614:21;66589:47;;;;;;;;;;;;;;;;;;;;;;;66581:56;;;::::0;::::1;;66529:114::o:0;64492:503::-;64562:14;64579:13;:11;:13::i;:::-;64562:30;;64608:6;;;;;;;;;;;64607:7;64599:16;;;;;;64644:1;64630:11;:15;64622:24;;;;;;64731:9;;64716:11;64707:6;:20;;;;:::i;:::-;:33;;64699:42;;;;;;64768:7;:5;:7::i;:::-;64754:21;;:10;:21;;;64750:146;;64818:4;64791:31;;:11;:23;64803:10;64791:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;64788:101;;64865:11;64858:4;;:18;;;;:::i;:::-;64845:9;:31;;64837:40;;;;;;64788:101;64750:146;64909:9;64921:1;64909:13;;64904:86;64929:11;64924:1;:16;64904:86;;64956:26;64966:3;64980:1;64971:6;:10;;;;:::i;:::-;64956:9;:26::i;:::-;64942:3;;;;;:::i;:::-;;;;64904:86;;;;64555:440;64492:503;;:::o;44068:185::-;44206:39;44223:4;44229:2;44233:7;44206:39;;;;;;;;;;;;:16;:39::i;:::-;44068:185;;;:::o;65001:348::-;65076:16;65104:23;65130:17;65140:6;65130:9;:17::i;:::-;65104:43;;65154:25;65196:15;65182:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65154:58;;65224:9;65219:103;65239:15;65235:1;:19;65219:103;;;65284:30;65304:6;65312:1;65284:19;:30::i;:::-;65270:8;65279:1;65270:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;65256:3;;;;;:::i;:::-;;;;65219:103;;;;65335:8;65328:15;;;;65001:348;;;:::o;65800:82::-;17213:13;:11;:13::i;:::-;65868:8:::1;65861:4;:15;;;;65800:82:::0;:::o;66323:93::-;17213:13;:11;:13::i;:::-;66406:4:::1;66385:11;:18;66397:5;66385:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;66323:93:::0;:::o;58218:233::-;58293:7;58329:30;:28;:30::i;:::-;58321:5;:38;58313:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;58426:10;58437:5;58426:17;;;;;;;;:::i;:::-;;;;;;;;;;58419:24;;58218:233;;;:::o;66012:98::-;17213:13;:11;:13::i;:::-;66093:11:::1;66083:7;:21;;;;;;:::i;:::-;;66012:98:::0;:::o;63986:26::-;;;;;;;;;;;;;:::o;41160:223::-;41232:7;41252:13;41268:17;41277:7;41268:8;:17::i;:::-;41252:33;;41321:1;41304:19;;:5;:19;;;41296:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41370:5;41363:12;;;41160:223;;;:::o;63805:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40891:207::-;40963:7;41008:1;40991:19;;:5;:19;;;40983:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41074:9;:16;41084:5;41074:16;;;;;;;;;;;;;;;;41067:23;;40891:207;;;:::o;17975:103::-;17213:13;:11;:13::i;:::-;18040:30:::1;18067:1;18040:18;:30::i;:::-;17975:103::o:0;65888:118::-;17213:13;:11;:13::i;:::-;65983:17:::1;65967:13;:33;;;;65888:118:::0;:::o;17327:87::-;17373:7;17400:6;;;;;;;;;;;17393:13;;17327:87;:::o;41619:104::-;41675:13;41708:7;41701:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41619:104;:::o;43205:155::-;43300:52;43319:12;:10;:12::i;:::-;43333:8;43343;43300:18;:52::i;:::-;43205:155;;:::o;66763:99::-;66809:7;66836:18;;;;;;;;;;;66829:25;;66763:99;:::o;67069:227::-;17213:13;:11;:13::i;:::-;67196:18:::1;;;;;;;;;;;67172:42;;:20;:42;;::::0;67164:51:::1;;;::::0;::::1;;67268:20;67247:18;;:41;;;;;;;;;;;;;;;;;;67069:227:::0;:::o;44324:322::-;44498:41;44517:12;:10;:12::i;:::-;44531:7;44498:18;:41::i;:::-;44490:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44600:38;44614:4;44620:2;44624:7;44633:4;44600:13;:38::i;:::-;44324:322;;;;:::o;63831:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;65355:423::-;65453:13;65494:16;65502:7;65494;:16::i;:::-;65478:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;65584:28;65615:10;:8;:10::i;:::-;65584:41;;65670:1;65645:14;65639:28;:32;:133;;;;;;;;;;;;;;;;;65707:14;65723:18;:7;:16;:18::i;:::-;65743:13;65690:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65639:133;65632:140;;;65355:423;;;:::o;63750:48::-;63796:2;63750:48;:::o;63910:34::-;;;;:::o;64017:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;66116:122::-;17213:13;:11;:13::i;:::-;66215:17:::1;66199:13;:33;;;;;;:::i;:::-;;66116:122:::0;:::o;43431:164::-;43528:4;43552:18;:25;43571:5;43552:25;;;;;;;;;;;;;;;:35;43578:8;43552:35;;;;;;;;;;;;;;;;;;;;;;;;;43545:42;;43431:164;;;;:::o;18233:201::-;17213:13;:11;:13::i;:::-;18342:1:::1;18322:22;;:8;:22;;::::0;18314:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18398:28;18417:8;18398:18;:28::i;:::-;18233:201:::0;:::o;20025:326::-;20085:4;20342:1;20320:7;:19;;;:23;20313:30;;20025:326;;;:::o;55065:410::-;55255:1;55243:9;:13;55239:229;;;55293:1;55277:18;;:4;:18;;;55273:87;;55335:9;55316;:15;55326:4;55316:15;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;55273:87;55392:1;55378:16;;:2;:16;;;55374:83;;55432:9;55415;:13;55425:2;55415:13;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;55374:83;55239:229;55065:410;;;;:::o;57388:224::-;57490:4;57529:35;57514:50;;;:11;:50;;;;:90;;;;57568:36;57592:11;57568:23;:36::i;:::-;57514:90;57507:97;;57388:224;;;:::o;17492:132::-;17567:12;:10;:12::i;:::-;17556:23;;:7;:5;:7::i;:::-;:23;;;17548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17492:132::o;52781:135::-;52863:16;52871:7;52863;:16::i;:::-;52855:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;52781:135;:::o;15878:98::-;15931:7;15958:10;15951:17;;15878:98;:::o;52060:174::-;52162:2;52135:15;:24;52151:7;52135:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;52218:7;52214:2;52180:46;;52189:23;52204:7;52189:14;:23::i;:::-;52180:46;;;;;;;;;;;;52060:174;;:::o;46679:264::-;46772:4;46789:13;46805:23;46820:7;46805:14;:23::i;:::-;46789:39;;46858:5;46847:16;;:7;:16;;;:52;;;;46867:32;46884:5;46891:7;46867:16;:32::i;:::-;46847:52;:87;;;;46927:7;46903:31;;:20;46915:7;46903:11;:20::i;:::-;:31;;;46847:87;46839:96;;;46679:264;;;;:::o;50678:1263::-;50837:4;50810:31;;:23;50825:7;50810:14;:23::i;:::-;:31;;;50802:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;50916:1;50902:16;;:2;:16;;;50894:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50972:42;50993:4;50999:2;51003:7;51012:1;50972:20;:42::i;:::-;51144:4;51117:31;;:23;51132:7;51117:14;:23::i;:::-;:31;;;51109:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;51262:15;:24;51278:7;51262:24;;;;;;;;;;;;51255:31;;;;;;;;;;;51757:1;51738:9;:15;51748:4;51738:15;;;;;;;;;;;;;;;;:20;;;;;;;;;;;51790:1;51773:9;:13;51783:2;51773:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;51832:2;51813:7;:16;51821:7;51813:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;51871:7;51867:2;51852:27;;51861:4;51852:27;;;;;;;;;;;;51892:41;51912:4;51918:2;51922:7;51931:1;51892:19;:41::i;:::-;50678:1263;;;:::o;47285:110::-;47361:26;47371:2;47375:7;47361:26;;;;;;;;;;;;:9;:26::i;:::-;47285:110;;:::o;45954:117::-;46020:7;46047;:16;46055:7;46047:16;;;;;;;;;;;;;;;;;;;;;46040:23;;45954:117;;;:::o;18594:191::-;18668:16;18687:6;;;;;;;;;;;18668:25;;18713:8;18704:6;;:17;;;;;;;;;;;;;;;;;;18768:8;18737:40;;18758:8;18737:40;;;;;;;;;;;;18657:128;18594:191;:::o;52377:315::-;52532:8;52523:17;;:5;:17;;;52515:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52619:8;52581:18;:25;52600:5;52581:25;;;;;;;;;;;;;;;:35;52607:8;52581:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;52665:8;52643:41;;52658:5;52643:41;;;52675:8;52643:41;;;;;;:::i;:::-;;;;;;;;52377:315;;;:::o;45527:313::-;45683:28;45693:4;45699:2;45703:7;45683:9;:28::i;:::-;45730:47;45753:4;45759:2;45763:7;45772:4;45730:22;:47::i;:::-;45722:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;45527:313;;;;:::o;46384:128::-;46449:4;46502:1;46473:31;;:17;46482:7;46473:8;:17::i;:::-;:31;;;;46466:38;;46384:128;;;:::o;64371:102::-;64431:13;64460:7;64453:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64371:102;:::o;13305:716::-;13361:13;13412:14;13449:1;13429:17;13440:5;13429:10;:17::i;:::-;:21;13412:38;;13465:20;13499:6;13488:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13465:41;;13521:11;13650:6;13646:2;13642:15;13634:6;13630:28;13623:35;;13687:288;13694:4;13687:288;;;13719:5;;;;;;;;13861:8;13856:2;13849:5;13845:14;13840:30;13835:3;13827:44;13917:2;13908:11;;;;;;:::i;:::-;;;;;13951:1;13942:5;:10;13687:288;13938:21;13687:288;13996:6;13989:13;;;;;13305:716;;;:::o;40522:305::-;40624:4;40676:25;40661:40;;;:11;:40;;;;:105;;;;40733:33;40718:48;;;:11;:48;;;;40661:105;:158;;;;40783:36;40807:11;40783:23;:36::i;:::-;40661:158;40641:178;;40522:305;;;:::o;58525:915::-;58702:61;58729:4;58735:2;58739:12;58753:9;58702:26;:61::i;:::-;58792:1;58780:9;:13;58776:222;;;58923:63;;;;;;;;;;:::i;:::-;;;;;;;;58776:222;59010:15;59028:12;59010:30;;59073:1;59057:18;;:4;:18;;;59053:187;;59092:40;59124:7;59092:31;:40::i;:::-;59053:187;;;59162:2;59154:10;;:4;:10;;;59150:90;;59181:47;59214:4;59220:7;59181:32;:47::i;:::-;59150:90;59053:187;59268:1;59254:16;;:2;:16;;;59250:183;;59287:45;59324:7;59287:36;:45::i;:::-;59250:183;;;59360:4;59354:10;;:2;:10;;;59350:83;;59381:40;59409:2;59413:7;59381:27;:40::i;:::-;59350:83;59250:183;58691:749;58525:915;;;;:::o;56197:158::-;;;;;:::o;47622:319::-;47751:18;47757:2;47761:7;47751:5;:18::i;:::-;47802:53;47833:1;47837:2;47841:7;47850:4;47802:22;:53::i;:::-;47780:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;47622:319;;;:::o;53480:853::-;53634:4;53655:15;:2;:13;;;:15::i;:::-;53651:675;;;53707:2;53691:36;;;53728:12;:10;:12::i;:::-;53742:4;53748:7;53757:4;53691:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;53687:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53949:1;53932:6;:13;:18;53928:328;;53975:60;;;;;;;;;;:::i;:::-;;;;;;;;53928:328;54206:6;54200:13;54191:6;54187:2;54183:15;54176:38;53687:584;53823:41;;;53813:51;;;:6;:51;;;;53806:58;;;;;53651:675;54310:4;54303:11;;53480:853;;;;;;;:::o;10171:922::-;10224:7;10244:14;10261:1;10244:18;;10311:6;10302:5;:15;10298:102;;10347:6;10338:15;;;;;;:::i;:::-;;;;;10382:2;10372:12;;;;10298:102;10427:6;10418:5;:15;10414:102;;10463:6;10454:15;;;;;;:::i;:::-;;;;;10498:2;10488:12;;;;10414:102;10543:6;10534:5;:15;10530:102;;10579:6;10570:15;;;;;;:::i;:::-;;;;;10614:2;10604:12;;;;10530:102;10659:5;10650;:14;10646:99;;10694:5;10685:14;;;;;;:::i;:::-;;;;;10728:1;10718:11;;;;10646:99;10772:5;10763;:14;10759:99;;10807:5;10798:14;;;;;;:::i;:::-;;;;;10841:1;10831:11;;;;10759:99;10885:5;10876;:14;10872:99;;10920:5;10911:14;;;;;;:::i;:::-;;;;;10954:1;10944:11;;;;10872:99;10998:5;10989;:14;10985:66;;11034:1;11024:11;;;;10985:66;11079:6;11072:13;;;10171:922;;;:::o;31954:157::-;32039:4;32078:25;32063:40;;;:11;:40;;;;32056:47;;31954:157;;;:::o;60163:164::-;60267:10;:17;;;;60240:15;:24;60256:7;60240:24;;;;;;;;;;;:44;;;;60295:10;60311:7;60295:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60163:164;:::o;60954:988::-;61220:22;61270:1;61245:22;61262:4;61245:16;:22::i;:::-;:26;;;;:::i;:::-;61220:51;;61282:18;61303:17;:26;61321:7;61303:26;;;;;;;;;;;;61282:47;;61450:14;61436:10;:28;61432:328;;61481:19;61503:12;:18;61516:4;61503:18;;;;;;;;;;;;;;;:34;61522:14;61503:34;;;;;;;;;;;;61481:56;;61587:11;61554:12;:18;61567:4;61554:18;;;;;;;;;;;;;;;:30;61573:10;61554:30;;;;;;;;;;;:44;;;;61704:10;61671:17;:30;61689:11;61671:30;;;;;;;;;;;:43;;;;61466:294;61432:328;61856:17;:26;61874:7;61856:26;;;;;;;;;;;61849:33;;;61900:12;:18;61913:4;61900:18;;;;;;;;;;;;;;;:34;61919:14;61900:34;;;;;;;;;;;61893:41;;;61035:907;;60954:988;;:::o;62237:1079::-;62490:22;62535:1;62515:10;:17;;;;:21;;;;:::i;:::-;62490:46;;62547:18;62568:15;:24;62584:7;62568:24;;;;;;;;;;;;62547:45;;62919:19;62941:10;62952:14;62941:26;;;;;;;;:::i;:::-;;;;;;;;;;62919:48;;63005:11;62980:10;62991;62980:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;63116:10;63085:15;:28;63101:11;63085:28;;;;;;;;;;;:41;;;;63257:15;:24;63273:7;63257:24;;;;;;;;;;;63250:31;;;63292:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;62308:1008;;;62237:1079;:::o;59741:221::-;59826:14;59843:20;59860:2;59843:16;:20::i;:::-;59826:37;;59901:7;59874:12;:16;59887:2;59874:16;;;;;;;;;;;;;;;:24;59891:6;59874:24;;;;;;;;;;;:34;;;;59948:6;59919:17;:26;59937:7;59919:26;;;;;;;;;;;:35;;;;59815:147;59741:221;;:::o;48277:942::-;48371:1;48357:16;;:2;:16;;;48349:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48430:16;48438:7;48430;:16::i;:::-;48429:17;48421:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:48;48521:1;48525:2;48529:7;48538:1;48492:20;:48::i;:::-;48639:16;48647:7;48639;:16::i;:::-;48638:17;48630:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;49054:1;49037:9;:13;49047:2;49037:13;;;;;;;;;;;;;;;;:18;;;;;;;;;;;49098:2;49079:7;:16;49087:7;49079:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;49143:7;49139:2;49118:33;;49135:1;49118:33;;;;;;;;;;;;49164:47;49192:1;49196:2;49200:7;49209:1;49164:19;:47::i;:::-;48277:942;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:474::-;6525:6;6533;6582:2;6570:9;6561:7;6557:23;6553:32;6550:119;;;6588:79;;:::i;:::-;6550:119;6708:1;6733:53;6778:7;6769:6;6758:9;6754:22;6733:53;:::i;:::-;6723:63;;6679:117;6835:2;6861:53;6906:7;6897:6;6886:9;6882:22;6861:53;:::i;:::-;6851:63;;6806:118;6457:474;;;;;:::o;6937:332::-;7058:4;7096:2;7085:9;7081:18;7073:26;;7109:71;7177:1;7166:9;7162:17;7153:6;7109:71;:::i;:::-;7190:72;7258:2;7247:9;7243:18;7234:6;7190:72;:::i;:::-;6937:332;;;;;:::o;7275:329::-;7334:6;7383:2;7371:9;7362:7;7358:23;7354:32;7351:119;;;7389:79;;:::i;:::-;7351:119;7509:1;7534:53;7579:7;7570:6;7559:9;7555:22;7534:53;:::i;:::-;7524:63;;7480:117;7275:329;;;;:::o;7610:114::-;7677:6;7711:5;7705:12;7695:22;;7610:114;;;:::o;7730:184::-;7829:11;7863:6;7858:3;7851:19;7903:4;7898:3;7894:14;7879:29;;7730:184;;;;:::o;7920:132::-;7987:4;8010:3;8002:11;;8040:4;8035:3;8031:14;8023:22;;7920:132;;;:::o;8058:108::-;8135:24;8153:5;8135:24;:::i;:::-;8130:3;8123:37;8058:108;;:::o;8172:179::-;8241:10;8262:46;8304:3;8296:6;8262:46;:::i;:::-;8340:4;8335:3;8331:14;8317:28;;8172:179;;;;:::o;8357:113::-;8427:4;8459;8454:3;8450:14;8442:22;;8357:113;;;:::o;8506:732::-;8625:3;8654:54;8702:5;8654:54;:::i;:::-;8724:86;8803:6;8798:3;8724:86;:::i;:::-;8717:93;;8834:56;8884:5;8834:56;:::i;:::-;8913:7;8944:1;8929:284;8954:6;8951:1;8948:13;8929:284;;;9030:6;9024:13;9057:63;9116:3;9101:13;9057:63;:::i;:::-;9050:70;;9143:60;9196:6;9143:60;:::i;:::-;9133:70;;8989:224;8976:1;8973;8969:9;8964:14;;8929:284;;;8933:14;9229:3;9222:10;;8630:608;;;8506:732;;;;:::o;9244:373::-;9387:4;9425:2;9414:9;9410:18;9402:26;;9474:9;9468:4;9464:20;9460:1;9449:9;9445:17;9438:47;9502:108;9605:4;9596:6;9502:108;:::i;:::-;9494:116;;9244:373;;;;:::o;9623:117::-;9732:1;9729;9722:12;9746:117;9855:1;9852;9845:12;9869:180;9917:77;9914:1;9907:88;10014:4;10011:1;10004:15;10038:4;10035:1;10028:15;10055:281;10138:27;10160:4;10138:27;:::i;:::-;10130:6;10126:40;10268:6;10256:10;10253:22;10232:18;10220:10;10217:34;10214:62;10211:88;;;10279:18;;:::i;:::-;10211:88;10319:10;10315:2;10308:22;10098:238;10055:281;;:::o;10342:129::-;10376:6;10403:20;;:::i;:::-;10393:30;;10432:33;10460:4;10452:6;10432:33;:::i;:::-;10342:129;;;:::o;10477:308::-;10539:4;10629:18;10621:6;10618:30;10615:56;;;10651:18;;:::i;:::-;10615:56;10689:29;10711:6;10689:29;:::i;:::-;10681:37;;10773:4;10767;10763:15;10755:23;;10477:308;;;:::o;10791:146::-;10888:6;10883:3;10878;10865:30;10929:1;10920:6;10915:3;10911:16;10904:27;10791:146;;;:::o;10943:425::-;11021:5;11046:66;11062:49;11104:6;11062:49;:::i;:::-;11046:66;:::i;:::-;11037:75;;11135:6;11128:5;11121:21;11173:4;11166:5;11162:16;11211:3;11202:6;11197:3;11193:16;11190:25;11187:112;;;11218:79;;:::i;:::-;11187:112;11308:54;11355:6;11350:3;11345;11308:54;:::i;:::-;11027:341;10943:425;;;;;:::o;11388:340::-;11444:5;11493:3;11486:4;11478:6;11474:17;11470:27;11460:122;;11501:79;;:::i;:::-;11460:122;11618:6;11605:20;11643:79;11718:3;11710:6;11703:4;11695:6;11691:17;11643:79;:::i;:::-;11634:88;;11450:278;11388:340;;;;:::o;11734:509::-;11803:6;11852:2;11840:9;11831:7;11827:23;11823:32;11820:119;;;11858:79;;:::i;:::-;11820:119;12006:1;11995:9;11991:17;11978:31;12036:18;12028:6;12025:30;12022:117;;;12058:79;;:::i;:::-;12022:117;12163:63;12218:7;12209:6;12198:9;12194:22;12163:63;:::i;:::-;12153:73;;11949:287;11734:509;;;;:::o;12249:468::-;12314:6;12322;12371:2;12359:9;12350:7;12346:23;12342:32;12339:119;;;12377:79;;:::i;:::-;12339:119;12497:1;12522:53;12567:7;12558:6;12547:9;12543:22;12522:53;:::i;:::-;12512:63;;12468:117;12624:2;12650:50;12692:7;12683:6;12672:9;12668:22;12650:50;:::i;:::-;12640:60;;12595:115;12249:468;;;;;:::o;12723:307::-;12784:4;12874:18;12866:6;12863:30;12860:56;;;12896:18;;:::i;:::-;12860:56;12934:29;12956:6;12934:29;:::i;:::-;12926:37;;13018:4;13012;13008:15;13000:23;;12723:307;;;:::o;13036:423::-;13113:5;13138:65;13154:48;13195:6;13154:48;:::i;:::-;13138:65;:::i;:::-;13129:74;;13226:6;13219:5;13212:21;13264:4;13257:5;13253:16;13302:3;13293:6;13288:3;13284:16;13281:25;13278:112;;;13309:79;;:::i;:::-;13278:112;13399:54;13446:6;13441:3;13436;13399:54;:::i;:::-;13119:340;13036:423;;;;;:::o;13478:338::-;13533:5;13582:3;13575:4;13567:6;13563:17;13559:27;13549:122;;13590:79;;:::i;:::-;13549:122;13707:6;13694:20;13732:78;13806:3;13798:6;13791:4;13783:6;13779:17;13732:78;:::i;:::-;13723:87;;13539:277;13478:338;;;;:::o;13822:943::-;13917:6;13925;13933;13941;13990:3;13978:9;13969:7;13965:23;13961:33;13958:120;;;13997:79;;:::i;:::-;13958:120;14117:1;14142:53;14187:7;14178:6;14167:9;14163:22;14142:53;:::i;:::-;14132:63;;14088:117;14244:2;14270:53;14315:7;14306:6;14295:9;14291:22;14270:53;:::i;:::-;14260:63;;14215:118;14372:2;14398:53;14443:7;14434:6;14423:9;14419:22;14398:53;:::i;:::-;14388:63;;14343:118;14528:2;14517:9;14513:18;14500:32;14559:18;14551:6;14548:30;14545:117;;;14581:79;;:::i;:::-;14545:117;14686:62;14740:7;14731:6;14720:9;14716:22;14686:62;:::i;:::-;14676:72;;14471:287;13822:943;;;;;;;:::o;14771:474::-;14839:6;14847;14896:2;14884:9;14875:7;14871:23;14867:32;14864:119;;;14902:79;;:::i;:::-;14864:119;15022:1;15047:53;15092:7;15083:6;15072:9;15068:22;15047:53;:::i;:::-;15037:63;;14993:117;15149:2;15175:53;15220:7;15211:6;15200:9;15196:22;15175:53;:::i;:::-;15165:63;;15120:118;14771:474;;;;;:::o;15251:180::-;15299:77;15296:1;15289:88;15396:4;15393:1;15386:15;15420:4;15417:1;15410:15;15437:320;15481:6;15518:1;15512:4;15508:12;15498:22;;15565:1;15559:4;15555:12;15586:18;15576:81;;15642:4;15634:6;15630:17;15620:27;;15576:81;15704:2;15696:6;15693:14;15673:18;15670:38;15667:84;;15723:18;;:::i;:::-;15667:84;15488:269;15437:320;;;:::o;15763:220::-;15903:34;15899:1;15891:6;15887:14;15880:58;15972:3;15967:2;15959:6;15955:15;15948:28;15763:220;:::o;15989:366::-;16131:3;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16228:93;16317:3;16228:93;:::i;:::-;16346:2;16341:3;16337:12;16330:19;;15989:366;;;:::o;16361:419::-;16527:4;16565:2;16554:9;16550:18;16542:26;;16614:9;16608:4;16604:20;16600:1;16589:9;16585:17;16578:47;16642:131;16768:4;16642:131;:::i;:::-;16634:139;;16361:419;;;:::o;16786:248::-;16926:34;16922:1;16914:6;16910:14;16903:58;16995:31;16990:2;16982:6;16978:15;16971:56;16786:248;:::o;17040:366::-;17182:3;17203:67;17267:2;17262:3;17203:67;:::i;:::-;17196:74;;17279:93;17368:3;17279:93;:::i;:::-;17397:2;17392:3;17388:12;17381:19;;17040:366;;;:::o;17412:419::-;17578:4;17616:2;17605:9;17601:18;17593:26;;17665:9;17659:4;17655:20;17651:1;17640:9;17636:17;17629:47;17693:131;17819:4;17693:131;:::i;:::-;17685:139;;17412:419;;;:::o;17837:232::-;17977:34;17973:1;17965:6;17961:14;17954:58;18046:15;18041:2;18033:6;18029:15;18022:40;17837:232;:::o;18075:366::-;18217:3;18238:67;18302:2;18297:3;18238:67;:::i;:::-;18231:74;;18314:93;18403:3;18314:93;:::i;:::-;18432:2;18427:3;18423:12;18416:19;;18075:366;;;:::o;18447:419::-;18613:4;18651:2;18640:9;18636:18;18628:26;;18700:9;18694:4;18690:20;18686:1;18675:9;18671:17;18664:47;18728:131;18854:4;18728:131;:::i;:::-;18720:139;;18447:419;;;:::o;18872:180::-;18920:77;18917:1;18910:88;19017:4;19014:1;19007:15;19041:4;19038:1;19031:15;19058:410;19098:7;19121:20;19139:1;19121:20;:::i;:::-;19116:25;;19155:20;19173:1;19155:20;:::i;:::-;19150:25;;19210:1;19207;19203:9;19232:30;19250:11;19232:30;:::i;:::-;19221:41;;19411:1;19402:7;19398:15;19395:1;19392:22;19372:1;19365:9;19345:83;19322:139;;19441:18;;:::i;:::-;19322:139;19106:362;19058:410;;;;:::o;19474:180::-;19522:77;19519:1;19512:88;19619:4;19616:1;19609:15;19643:4;19640:1;19633:15;19660:185;19700:1;19717:20;19735:1;19717:20;:::i;:::-;19712:25;;19751:20;19769:1;19751:20;:::i;:::-;19746:25;;19790:1;19780:35;;19795:18;;:::i;:::-;19780:35;19837:1;19834;19830:9;19825:14;;19660:185;;;;:::o;19851:230::-;19991:34;19987:1;19979:6;19975:14;19968:58;20060:13;20055:2;20047:6;20043:15;20036:38;19851:230;:::o;20087:366::-;20229:3;20250:67;20314:2;20309:3;20250:67;:::i;:::-;20243:74;;20326:93;20415:3;20326:93;:::i;:::-;20444:2;20439:3;20435:12;20428:19;;20087:366;;;:::o;20459:419::-;20625:4;20663:2;20652:9;20648:18;20640:26;;20712:9;20706:4;20702:20;20698:1;20687:9;20683:17;20676:47;20740:131;20866:4;20740:131;:::i;:::-;20732:139;;20459:419;;;:::o;20884:191::-;20924:3;20943:20;20961:1;20943:20;:::i;:::-;20938:25;;20977:20;20995:1;20977:20;:::i;:::-;20972:25;;21020:1;21017;21013:9;21006:16;;21041:3;21038:1;21035:10;21032:36;;;21048:18;;:::i;:::-;21032:36;20884:191;;;;:::o;21081:233::-;21120:3;21143:24;21161:5;21143:24;:::i;:::-;21134:33;;21189:66;21182:5;21179:77;21176:103;;21259:18;;:::i;:::-;21176:103;21306:1;21299:5;21295:13;21288:20;;21081:233;;;:::o;21320:180::-;21368:77;21365:1;21358:88;21465:4;21462:1;21455:15;21489:4;21486:1;21479:15;21506:231;21646:34;21642:1;21634:6;21630:14;21623:58;21715:14;21710:2;21702:6;21698:15;21691:39;21506:231;:::o;21743:366::-;21885:3;21906:67;21970:2;21965:3;21906:67;:::i;:::-;21899:74;;21982:93;22071:3;21982:93;:::i;:::-;22100:2;22095:3;22091:12;22084:19;;21743:366;;;:::o;22115:419::-;22281:4;22319:2;22308:9;22304:18;22296:26;;22368:9;22362:4;22358:20;22354:1;22343:9;22339:17;22332:47;22396:131;22522:4;22396:131;:::i;:::-;22388:139;;22115:419;;;:::o;22540:141::-;22589:4;22612:3;22604:11;;22635:3;22632:1;22625:14;22669:4;22666:1;22656:18;22648:26;;22540:141;;;:::o;22687:93::-;22724:6;22771:2;22766;22759:5;22755:14;22751:23;22741:33;;22687:93;;;:::o;22786:107::-;22830:8;22880:5;22874:4;22870:16;22849:37;;22786:107;;;;:::o;22899:393::-;22968:6;23018:1;23006:10;23002:18;23041:97;23071:66;23060:9;23041:97;:::i;:::-;23159:39;23189:8;23178:9;23159:39;:::i;:::-;23147:51;;23231:4;23227:9;23220:5;23216:21;23207:30;;23280:4;23270:8;23266:19;23259:5;23256:30;23246:40;;22975:317;;22899:393;;;;;:::o;23298:60::-;23326:3;23347:5;23340:12;;23298:60;;;:::o;23364:142::-;23414:9;23447:53;23465:34;23474:24;23492:5;23474:24;:::i;:::-;23465:34;:::i;:::-;23447:53;:::i;:::-;23434:66;;23364:142;;;:::o;23512:75::-;23555:3;23576:5;23569:12;;23512:75;;;:::o;23593:269::-;23703:39;23734:7;23703:39;:::i;:::-;23764:91;23813:41;23837:16;23813:41;:::i;:::-;23805:6;23798:4;23792:11;23764:91;:::i;:::-;23758:4;23751:105;23669:193;23593:269;;;:::o;23868:73::-;23913:3;23868:73;:::o;23947:189::-;24024:32;;:::i;:::-;24065:65;24123:6;24115;24109:4;24065:65;:::i;:::-;24000:136;23947:189;;:::o;24142:186::-;24202:120;24219:3;24212:5;24209:14;24202:120;;;24273:39;24310:1;24303:5;24273:39;:::i;:::-;24246:1;24239:5;24235:13;24226:22;;24202:120;;;24142:186;;:::o;24334:543::-;24435:2;24430:3;24427:11;24424:446;;;24469:38;24501:5;24469:38;:::i;:::-;24553:29;24571:10;24553:29;:::i;:::-;24543:8;24539:44;24736:2;24724:10;24721:18;24718:49;;;24757:8;24742:23;;24718:49;24780:80;24836:22;24854:3;24836:22;:::i;:::-;24826:8;24822:37;24809:11;24780:80;:::i;:::-;24439:431;;24424:446;24334:543;;;:::o;24883:117::-;24937:8;24987:5;24981:4;24977:16;24956:37;;24883:117;;;;:::o;25006:169::-;25050:6;25083:51;25131:1;25127:6;25119:5;25116:1;25112:13;25083:51;:::i;:::-;25079:56;25164:4;25158;25154:15;25144:25;;25057:118;25006:169;;;;:::o;25180:295::-;25256:4;25402:29;25427:3;25421:4;25402:29;:::i;:::-;25394:37;;25464:3;25461:1;25457:11;25451:4;25448:21;25440:29;;25180:295;;;;:::o;25480:1395::-;25597:37;25630:3;25597:37;:::i;:::-;25699:18;25691:6;25688:30;25685:56;;;25721:18;;:::i;:::-;25685:56;25765:38;25797:4;25791:11;25765:38;:::i;:::-;25850:67;25910:6;25902;25896:4;25850:67;:::i;:::-;25944:1;25968:4;25955:17;;26000:2;25992:6;25989:14;26017:1;26012:618;;;;26674:1;26691:6;26688:77;;;26740:9;26735:3;26731:19;26725:26;26716:35;;26688:77;26791:67;26851:6;26844:5;26791:67;:::i;:::-;26785:4;26778:81;26647:222;25982:887;;26012:618;26064:4;26060:9;26052:6;26048:22;26098:37;26130:4;26098:37;:::i;:::-;26157:1;26171:208;26185:7;26182:1;26179:14;26171:208;;;26264:9;26259:3;26255:19;26249:26;26241:6;26234:42;26315:1;26307:6;26303:14;26293:24;;26362:2;26351:9;26347:18;26334:31;;26208:4;26205:1;26201:12;26196:17;;26171:208;;;26407:6;26398:7;26395:19;26392:179;;;26465:9;26460:3;26456:19;26450:26;26508:48;26550:4;26542:6;26538:17;26527:9;26508:48;:::i;:::-;26500:6;26493:64;26415:156;26392:179;26617:1;26613;26605:6;26601:14;26597:22;26591:4;26584:36;26019:611;;;25982:887;;25572:1303;;;25480:1395;;:::o;26881:174::-;27021:26;27017:1;27009:6;27005:14;26998:50;26881:174;:::o;27061:366::-;27203:3;27224:67;27288:2;27283:3;27224:67;:::i;:::-;27217:74;;27300:93;27389:3;27300:93;:::i;:::-;27418:2;27413:3;27409:12;27402:19;;27061:366;;;:::o;27433:419::-;27599:4;27637:2;27626:9;27622:18;27614:26;;27686:9;27680:4;27676:20;27672:1;27661:9;27657:17;27650:47;27714:131;27840:4;27714:131;:::i;:::-;27706:139;;27433:419;;;:::o;27858:228::-;27998:34;27994:1;27986:6;27982:14;27975:58;28067:11;28062:2;28054:6;28050:15;28043:36;27858:228;:::o;28092:366::-;28234:3;28255:67;28319:2;28314:3;28255:67;:::i;:::-;28248:74;;28331:93;28420:3;28331:93;:::i;:::-;28449:2;28444:3;28440:12;28433:19;;28092:366;;;:::o;28464:419::-;28630:4;28668:2;28657:9;28653:18;28645:26;;28717:9;28711:4;28707:20;28703:1;28692:9;28688:17;28681:47;28745:131;28871:4;28745:131;:::i;:::-;28737:139;;28464:419;;;:::o;28889:234::-;29029:34;29025:1;29017:6;29013:14;29006:58;29098:17;29093:2;29085:6;29081:15;29074:42;28889:234;:::o;29129:366::-;29271:3;29292:67;29356:2;29351:3;29292:67;:::i;:::-;29285:74;;29368:93;29457:3;29368:93;:::i;:::-;29486:2;29481:3;29477:12;29470:19;;29129:366;;;:::o;29501:419::-;29667:4;29705:2;29694:9;29690:18;29682:26;;29754:9;29748:4;29744:20;29740:1;29729:9;29725:17;29718:47;29782:131;29908:4;29782:131;:::i;:::-;29774:139;;29501:419;;;:::o;29926:148::-;30028:11;30065:3;30050:18;;29926:148;;;;:::o;30080:390::-;30186:3;30214:39;30247:5;30214:39;:::i;:::-;30269:89;30351:6;30346:3;30269:89;:::i;:::-;30262:96;;30367:65;30425:6;30420:3;30413:4;30406:5;30402:16;30367:65;:::i;:::-;30457:6;30452:3;30448:16;30441:23;;30190:280;30080:390;;;;:::o;30500:874::-;30603:3;30640:5;30634:12;30669:36;30695:9;30669:36;:::i;:::-;30721:89;30803:6;30798:3;30721:89;:::i;:::-;30714:96;;30841:1;30830:9;30826:17;30857:1;30852:166;;;;31032:1;31027:341;;;;30819:549;;30852:166;30936:4;30932:9;30921;30917:25;30912:3;30905:38;30998:6;30991:14;30984:22;30976:6;30972:35;30967:3;30963:45;30956:52;;30852:166;;31027:341;31094:38;31126:5;31094:38;:::i;:::-;31154:1;31168:154;31182:6;31179:1;31176:13;31168:154;;;31256:7;31250:14;31246:1;31241:3;31237:11;31230:35;31306:1;31297:7;31293:15;31282:26;;31204:4;31201:1;31197:12;31192:17;;31168:154;;;31351:6;31346:3;31342:16;31335:23;;31034:334;;30819:549;;30607:767;;30500:874;;;;:::o;31380:589::-;31605:3;31627:95;31718:3;31709:6;31627:95;:::i;:::-;31620:102;;31739:95;31830:3;31821:6;31739:95;:::i;:::-;31732:102;;31851:92;31939:3;31930:6;31851:92;:::i;:::-;31844:99;;31960:3;31953:10;;31380:589;;;;;;:::o;31975:225::-;32115:34;32111:1;32103:6;32099:14;32092:58;32184:8;32179:2;32171:6;32167:15;32160:33;31975:225;:::o;32206:366::-;32348:3;32369:67;32433:2;32428:3;32369:67;:::i;:::-;32362:74;;32445:93;32534:3;32445:93;:::i;:::-;32563:2;32558:3;32554:12;32547:19;;32206:366;;;:::o;32578:419::-;32744:4;32782:2;32771:9;32767:18;32759:26;;32831:9;32825:4;32821:20;32817:1;32806:9;32802:17;32795:47;32859:131;32985:4;32859:131;:::i;:::-;32851:139;;32578:419;;;:::o;33003:194::-;33043:4;33063:20;33081:1;33063:20;:::i;:::-;33058:25;;33097:20;33115:1;33097:20;:::i;:::-;33092:25;;33141:1;33138;33134:9;33126:17;;33165:1;33159:4;33156:11;33153:37;;;33170:18;;:::i;:::-;33153:37;33003:194;;;;:::o;33203:182::-;33343:34;33339:1;33331:6;33327:14;33320:58;33203:182;:::o;33391:366::-;33533:3;33554:67;33618:2;33613:3;33554:67;:::i;:::-;33547:74;;33630:93;33719:3;33630:93;:::i;:::-;33748:2;33743:3;33739:12;33732:19;;33391:366;;;:::o;33763:419::-;33929:4;33967:2;33956:9;33952:18;33944:26;;34016:9;34010:4;34006:20;34002:1;33991:9;33987:17;33980:47;34044:131;34170:4;34044:131;:::i;:::-;34036:139;;33763:419;;;:::o;34188:224::-;34328:34;34324:1;34316:6;34312:14;34305:58;34397:7;34392:2;34384:6;34380:15;34373:32;34188:224;:::o;34418:366::-;34560:3;34581:67;34645:2;34640:3;34581:67;:::i;:::-;34574:74;;34657:93;34746:3;34657:93;:::i;:::-;34775:2;34770:3;34766:12;34759:19;;34418:366;;;:::o;34790:419::-;34956:4;34994:2;34983:9;34979:18;34971:26;;35043:9;35037:4;35033:20;35029:1;35018:9;35014:17;35007:47;35071:131;35197:4;35071:131;:::i;:::-;35063:139;;34790:419;;;:::o;35215:223::-;35355:34;35351:1;35343:6;35339:14;35332:58;35424:6;35419:2;35411:6;35407:15;35400:31;35215:223;:::o;35444:366::-;35586:3;35607:67;35671:2;35666:3;35607:67;:::i;:::-;35600:74;;35683:93;35772:3;35683:93;:::i;:::-;35801:2;35796:3;35792:12;35785:19;;35444:366;;;:::o;35816:419::-;35982:4;36020:2;36009:9;36005:18;35997:26;;36069:9;36063:4;36059:20;36055:1;36044:9;36040:17;36033:47;36097:131;36223:4;36097:131;:::i;:::-;36089:139;;35816:419;;;:::o;36241:175::-;36381:27;36377:1;36369:6;36365:14;36358:51;36241:175;:::o;36422:366::-;36564:3;36585:67;36649:2;36644:3;36585:67;:::i;:::-;36578:74;;36661:93;36750:3;36661:93;:::i;:::-;36779:2;36774:3;36770:12;36763:19;;36422:366;;;:::o;36794:419::-;36960:4;36998:2;36987:9;36983:18;36975:26;;37047:9;37041:4;37037:20;37033:1;37022:9;37018:17;37011:47;37075:131;37201:4;37075:131;:::i;:::-;37067:139;;36794:419;;;:::o;37219:237::-;37359:34;37355:1;37347:6;37343:14;37336:58;37428:20;37423:2;37415:6;37411:15;37404:45;37219:237;:::o;37462:366::-;37604:3;37625:67;37689:2;37684:3;37625:67;:::i;:::-;37618:74;;37701:93;37790:3;37701:93;:::i;:::-;37819:2;37814:3;37810:12;37803:19;;37462:366;;;:::o;37834:419::-;38000:4;38038:2;38027:9;38023:18;38015:26;;38087:9;38081:4;38077:20;38073:1;38062:9;38058:17;38051:47;38115:131;38241:4;38115:131;:::i;:::-;38107:139;;37834:419;;;:::o;38259:240::-;38399:34;38395:1;38387:6;38383:14;38376:58;38468:23;38463:2;38455:6;38451:15;38444:48;38259:240;:::o;38505:366::-;38647:3;38668:67;38732:2;38727:3;38668:67;:::i;:::-;38661:74;;38744:93;38833:3;38744:93;:::i;:::-;38862:2;38857:3;38853:12;38846:19;;38505:366;;;:::o;38877:419::-;39043:4;39081:2;39070:9;39066:18;39058:26;;39130:9;39124:4;39120:20;39116:1;39105:9;39101:17;39094:47;39158:131;39284:4;39158:131;:::i;:::-;39150:139;;38877:419;;;:::o;39302:98::-;39353:6;39387:5;39381:12;39371:22;;39302:98;;;:::o;39406:168::-;39489:11;39523:6;39518:3;39511:19;39563:4;39558:3;39554:14;39539:29;;39406:168;;;;:::o;39580:373::-;39666:3;39694:38;39726:5;39694:38;:::i;:::-;39748:70;39811:6;39806:3;39748:70;:::i;:::-;39741:77;;39827:65;39885:6;39880:3;39873:4;39866:5;39862:16;39827:65;:::i;:::-;39917:29;39939:6;39917:29;:::i;:::-;39912:3;39908:39;39901:46;;39670:283;39580:373;;;;:::o;39959:640::-;40154:4;40192:3;40181:9;40177:19;40169:27;;40206:71;40274:1;40263:9;40259:17;40250:6;40206:71;:::i;:::-;40287:72;40355:2;40344:9;40340:18;40331:6;40287:72;:::i;:::-;40369;40437:2;40426:9;40422:18;40413:6;40369:72;:::i;:::-;40488:9;40482:4;40478:20;40473:2;40462:9;40458:18;40451:48;40516:76;40587:4;40578:6;40516:76;:::i;:::-;40508:84;;39959:640;;;;;;;:::o;40605:141::-;40661:5;40692:6;40686:13;40677:22;;40708:32;40734:5;40708:32;:::i;:::-;40605:141;;;;:::o;40752:349::-;40821:6;40870:2;40858:9;40849:7;40845:23;40841:32;40838:119;;;40876:79;;:::i;:::-;40838:119;40996:1;41021:63;41076:7;41067:6;41056:9;41052:22;41021:63;:::i;:::-;41011:73;;40967:127;40752:349;;;;:::o;41107:180::-;41155:77;41152:1;41145:88;41252:4;41249:1;41242:15;41276:4;41273:1;41266:15;41293:182;41433:34;41429:1;41421:6;41417:14;41410:58;41293:182;:::o;41481:366::-;41623:3;41644:67;41708:2;41703:3;41644:67;:::i;:::-;41637:74;;41720:93;41809:3;41720:93;:::i;:::-;41838:2;41833:3;41829:12;41822:19;;41481:366;;;:::o;41853:419::-;42019:4;42057:2;42046:9;42042:18;42034:26;;42106:9;42100:4;42096:20;42092:1;42081:9;42077:17;42070:47;42134:131;42260:4;42134:131;:::i;:::-;42126:139;;41853:419;;;:::o;42278:178::-;42418:30;42414:1;42406:6;42402:14;42395:54;42278:178;:::o;42462:366::-;42604:3;42625:67;42689:2;42684:3;42625:67;:::i;:::-;42618:74;;42701:93;42790:3;42701:93;:::i;:::-;42819:2;42814:3;42810:12;42803:19;;42462:366;;;:::o;42834:419::-;43000:4;43038:2;43027:9;43023:18;43015:26;;43087:9;43081:4;43077:20;43073:1;43062:9;43058:17;43051:47;43115:131;43241:4;43115:131;:::i;:::-;43107:139;;42834:419;;;:::o
Swarm Source
ipfs://152568bc0d125b0021b028da0b45a54365f17279b85e983be9d6ef183ddb402d
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.