More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 567 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 56706854 | 220 days ago | IN | 0 POL | 0.00138624 | ||||
Set Approval For... | 55100839 | 263 days ago | IN | 0 POL | 0.00947457 | ||||
Set Approval For... | 52851299 | 321 days ago | IN | 0 POL | 0.00169602 | ||||
Set Approval For... | 50771552 | 375 days ago | IN | 0 POL | 0.00609617 | ||||
Set Approval For... | 50382309 | 384 days ago | IN | 0 POL | 0.00138638 | ||||
Set Approval For... | 49878880 | 397 days ago | IN | 0 POL | 0.00179471 | ||||
Set Approval For... | 48285444 | 437 days ago | IN | 0 POL | 0.00682815 | ||||
Set Approval For... | 47743271 | 451 days ago | IN | 0 POL | 0.00508917 | ||||
Set Approval For... | 47522202 | 457 days ago | IN | 0 POL | 0.00283206 | ||||
Set Approval For... | 47051143 | 469 days ago | IN | 0 POL | 0.00516094 | ||||
Set Approval For... | 46145545 | 491 days ago | IN | 0 POL | 0.00413567 | ||||
Set Approval For... | 46064773 | 493 days ago | IN | 0 POL | 0.00869692 | ||||
Set Approval For... | 46018625 | 495 days ago | IN | 0 POL | 0.00424545 | ||||
Set Approval For... | 45646992 | 504 days ago | IN | 0 POL | 0.00325094 | ||||
Safe Transfer Fr... | 44750645 | 527 days ago | IN | 0 POL | 0.02570653 | ||||
Safe Transfer Fr... | 44673739 | 529 days ago | IN | 0 POL | 0.0166977 | ||||
Set Approval For... | 44660571 | 529 days ago | IN | 0 POL | 0.00570661 | ||||
Set Approval For... | 44555770 | 532 days ago | IN | 0 POL | 0.00459519 | ||||
Set Approval For... | 44555770 | 532 days ago | IN | 0 POL | 0.00586509 | ||||
Set Approval For... | 44450704 | 534 days ago | IN | 0 POL | 0.00858771 | ||||
Set Approval For... | 43609293 | 556 days ago | IN | 0 POL | 0.0036042 | ||||
Set Approval For... | 43604234 | 556 days ago | IN | 0 POL | 0.0071639 | ||||
Set Approval For... | 43570035 | 557 days ago | IN | 0 POL | 0.00808768 | ||||
Set Approval For... | 42656072 | 581 days ago | IN | 0 POL | 0.00802962 | ||||
Set Approval For... | 42265304 | 590 days ago | IN | 0 POL | 0.01278643 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
40978823 | 624 days ago | 40 POL | ||||
40978643 | 624 days ago | 40 POL | ||||
40978562 | 624 days ago | 40 POL | ||||
40977853 | 624 days ago | 40 POL | ||||
40977836 | 624 days ago | 40 POL | ||||
40977721 | 624 days ago | 40 POL | ||||
40977648 | 624 days ago | 40 POL | ||||
40977648 | 624 days ago | 40 POL | ||||
40977395 | 624 days ago | 40 POL | ||||
40974593 | 624 days ago | 25 POL | ||||
40968346 | 624 days ago | 40 POL | ||||
40952635 | 624 days ago | 40 POL | ||||
40934743 | 625 days ago | 25 POL | ||||
40881652 | 626 days ago | 40 POL | ||||
40874624 | 626 days ago | 50 POL | ||||
40873597 | 626 days ago | 40 POL | ||||
40868475 | 626 days ago | 40 POL | ||||
40868299 | 626 days ago | 50 POL | ||||
40868091 | 626 days ago | 50 POL | ||||
40867402 | 627 days ago | 25 POL | ||||
40865210 | 627 days ago | 25 POL | ||||
40865207 | 627 days ago | 50 POL | ||||
40865148 | 627 days ago | 50 POL | ||||
40860218 | 627 days ago | 40 POL | ||||
40859869 | 627 days ago | 40 POL |
Loading...
Loading
Contract Name:
MintERC1155
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-03-23 */ // SPDX-License-Identifier: MIT // 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/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // 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/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burnBatch(account, ids, values); } } // 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: FirstEdition_v2.sol pragma solidity ^0.8.4; contract MintERC1155 is ERC1155, Ownable, ERC1155Burnable { using Strings for uint256; ERC1155Burnable mintPassContract; IERC20 token; IERC1155 token1155; string public constant name = "Spinblade First Edition Box"; string public constant symbol = "SBCBOX"; mapping(uint256=> string) private _uris; string baseURI; bool public paused; address public TreasuryWallet = 0x2d504E0B2363F9c5fCEC571d62476F08e36CCA0d;//our secret multi-sig wallet and we will save all of money here until presale is ended uint256 public cost = 1 * 10 ** 18; uint256 public totalPaid; mapping(address => uint256[]) adrToIds; mapping(uint256 => Item) private items; mapping(uint256 => uint256) public mintTypes; // id => percent(100 = 1%); struct wl { uint256 amount; uint256 cost; } mapping(address => uint256) public amountsNFT; mapping(address => uint256) public amountsNFTMinted; mapping(address => uint256) publicMinted; /*mapping(address => uint256[]) public idOfUser;*/ mapping(uint256 => Admin) idToAdmin; mapping(address => uint256) adrToId; mapping(address => bool) isAdmin; uint256 public adminAmount; address[] private admins; struct Admin { uint256 id; address user; bool isAdmin; } uint256 public nftAmountPerUser; uint256 public maxAmount = 2500; uint256 public currentAmount; struct Item { uint256 id; address creator; uint256 quantity; address holder; } struct drop { uint256 totalSupply; uint256 minted; uint256 privateStartTime; uint256 privateDuration; uint256 publicStartTime; uint256 publicDuration; uint cost; } mapping(uint256 => drop) idToDrop; uint256 public totalDrop; uint256 nextDropStartTime; uint256 nextDropDuration; uint256 nextDropAmount; constructor( uint256 cost_, uint256 nftAmountPerUser_, address mintPassAddress, address tokenAddress ) payable ERC1155("") { cost = cost_; paused = true; nftAmountPerUser = nftAmountPerUser_; mintPassContract = ERC1155Burnable(mintPassAddress); token = IERC20(tokenAddress); token1155 = IERC1155(mintPassAddress); } function changeTokenContract(address newToken) external onlyOwner { token = IERC20(newToken); } function changeMintPassContract(address newTokenContract) external onlyOwner { mintPassContract = ERC1155Burnable(newTokenContract); token1155 = ERC1155(newTokenContract); } function mint(address to, uint256 amount, uint256 tokenId) external payable { require(!paused, "mint is paused"); require(currentAmount + amount <= maxAmount); require( publicMinted[msg.sender] + amount <= nftAmountPerUser, "NFT per user is exceeded" ); require( block.timestamp > idToDrop[totalDrop].publicStartTime && block.timestamp < idToDrop[totalDrop].publicStartTime + idToDrop[totalDrop].publicDuration, "Not time to mint" ); require( idToDrop[totalDrop].minted + amount <= idToDrop[totalDrop].totalSupply, "Supply is exceeded" ); uint256 value = msg.value; (bool sent,) = TreasuryWallet.call{value: value}(""); require(sent, "Failed to send Ether"); _mint(to, tokenId, amount, ""); currentAmount += amount; amountsNFT[to] += amount; amountsNFTMinted[msg.sender] += amount; publicMinted[msg.sender] += amount; idToDrop[totalDrop].minted += amount; items[tokenId] = Item(tokenId, msg.sender, amount, msg.sender); } function ownerMint(uint256 amount, uint256 tokenId) external onlyOwner{ require(!paused, "mint is paused"); require(currentAmount + amount <= maxAmount, "Amount is exceeded"); _mint(msg.sender, tokenId, amount, ""); currentAmount += amount; amountsNFT[msg.sender] += amount; idToDrop[1].minted += amount; items[tokenId] = Item(tokenId, msg.sender, amount, msg.sender); } function mintTool(uint256 amount, uint256 passId, uint256 tokenId) external payable { require(!paused, "mint is paused"); require(currentAmount + amount <= maxAmount, "Amount is exceeded"); require( (block.timestamp > idToDrop[totalDrop].privateStartTime && block.timestamp < idToDrop[totalDrop].privateStartTime + idToDrop[totalDrop].privateDuration) || (block.timestamp > idToDrop[totalDrop].publicStartTime && block.timestamp < idToDrop[totalDrop].publicStartTime + idToDrop[totalDrop].publicDuration), "Not time to mint" ); require( idToDrop[totalDrop].minted + amount <= idToDrop[totalDrop].totalSupply, "Supply is exceeded" ); address user = msg.sender; require( token1155.balanceOf(user, passId) > 0, "You don't have this token" ); mintPassContract.burn(msg.sender, passId, amount); if(mintTypes[passId] != 0) { // token.transferFrom( // msg.sender, // address(this), // (cost * amount * mintTypes[passId]) / 10000 // ); // address(this).send((cost * amount * mintTypes[passId]) / 10000); uint256 value = msg.value; (bool success,) = TreasuryWallet.call{value : value}(""); require(success, "Failed to send Ether"); } _mint(msg.sender, tokenId, amount, ""); currentAmount += amount; amountsNFT[msg.sender] += amount; idToDrop[totalDrop].minted += amount; items[tokenId] = Item(tokenId, msg.sender, amount, msg.sender); } function makeDrop( uint256 amount, uint256 privateStartTime, uint256 privateDuration, uint256 publicStartTime, uint256 publicDuration, uint cost_ ) external onlyOwner { totalDrop++; idToDrop[totalDrop] = drop(amount, 0, privateStartTime, privateDuration, publicStartTime, publicDuration, cost_); cost = cost_; } function changeDrop(uint256 _dropId, uint256 _newAmount, uint256 _privateStartTime, uint256 _privateDuration, uint256 _publicStartTime, uint256 _publicDuration, uint256 _newCost) external onlyOwner{ idToDrop[_dropId].totalSupply = _newAmount; idToDrop[_dropId].privateStartTime = _privateStartTime; idToDrop[_dropId].privateDuration = _privateDuration; idToDrop[_dropId].publicStartTime = _publicStartTime; idToDrop[_dropId].publicDuration = _publicDuration; idToDrop[_dropId].cost = _newCost; cost = _newCost; } function changePauseStatus() external onlyOwner { paused = !paused; } function changeMaxAmount(uint256 newMaxAMount) external onlyOwner { require(newMaxAMount >= currentAmount); maxAmount = newMaxAMount; } function changeNftAmountPerUser(uint256 newAmount) external onlyOwner { nftAmountPerUser = newAmount; } function checkUserIds() external view returns (uint256[] memory) { return adrToIds[msg.sender]; } function checkUserMintedAmount() external view returns (uint256) { return amountsNFTMinted[msg.sender]; } function checkUserActualAmount() external view returns (uint256) { return amountsNFT[msg.sender]; } function checkCurrentDropSupply() external view returns (uint256) { return idToDrop[totalDrop].totalSupply; } function _ownerOf(uint256 _tokenId) internal view returns (bool) { return balanceOf(msg.sender, _tokenId) != 0; } function isInArray(uint256[] memory Ids, uint256 id) internal pure returns (bool) { for (uint256 i; i < Ids.length; i++) { if (Ids[i] == id) { return true; } } return false; } function setTokenUriWithID(uint256 _tokenId, string memory _uri) public onlyOwner{ require(bytes(_uris[_tokenId]).length == 0, "Cannot set uri twice"); _uris[_tokenId] = _uri; } function setTreasuryWallet(address _newMultiSig) public onlyOwner{ TreasuryWallet = _newMultiSig; } function uri(uint256 _tokenId) override public view returns (string memory){ return(_uris[_tokenId]); } function batchTransfer( address from, address to, uint256[] memory ids, uint256[] memory amounts ) external payable { //require(blacklist[msg.sender] == false, "User blacklisted"); for (uint256 i; i < amounts.length; i++) { require(amounts[i] == 1, "amount has to be 1"); } require(from == msg.sender, "not allowance"); _safeBatchTransferFrom(from, to, ids, amounts, ""); //adrToIds[msg.sender] for (uint256 i; i < adrToIds[msg.sender].length; i++) { for (uint256 j; j < ids.length; j++) { if (adrToIds[msg.sender][i] == ids[j]) { adrToIds[to].push(ids[j]); remove(i, msg.sender); items[ids[j]].holder = to; } } } amountsNFT[msg.sender] -= ids.length; amountsNFT[to] += ids.length; } function transfer( address from, address to, uint256 id, uint256 amount ) external payable { require(from == msg.sender, "not allowance"); require(amount == 1, "amount has to be 1"); _safeTransferFrom(from, to, id, amount, ""); items[id].holder = to; for (uint256 i; i < adrToIds[msg.sender].length; i++) { if (adrToIds[msg.sender][i] == id) { adrToIds[to].push(id); remove(i, msg.sender); } } amountsNFT[msg.sender]--; amountsNFT[to]++; } function remove(uint256 index, address user) internal returns (uint256[] memory) { for (uint256 i = index; i < adrToIds[user].length - 1; i++) { adrToIds[user][i] = adrToIds[user][i + 1]; } delete adrToIds[user][adrToIds[user].length - 1]; adrToIds[user].pop(); return adrToIds[user]; } function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override {} function isInArrayMarket(address[] memory markets, address adr) internal pure returns (bool) { for (uint256 i; i < markets.length; i++) { if (markets[i] == adr) { return true; } } return false; } function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { _safeTransferFrom(from, to, id, amount, data); adrToIds[to].push(id); for (uint256 i; i < adrToIds[from].length; i++) { if (adrToIds[from][i] == id) { remove(i, from); } } items[id].holder = to; amountsNFT[from]--; amountsNFT[to]++; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function addAdmin(address admin) external onlyOwner { require(isAdmin[admin] != true, "Already admin"); adminAmount++; idToAdmin[adminAmount] = Admin(adminAmount, admin, true); adrToId[admin] = adminAmount; admins.push(admin); isAdmin[admin] = true; } function showAdmins() external view returns (address[] memory) { return (admins); } function deleteAdmin(address admin) external onlyOwner { require( idToAdmin[adrToId[admin]].isAdmin == true, "User is not in admin list" ); idToAdmin[adrToId[admin]].isAdmin = false; for (uint256 i; i < admins.length; i++) { if (admins[i] == idToAdmin[adrToId[admin]].user) { removeAdmin(i); break; } } adminAmount--; isAdmin[admin] = false; } function removeAdmin(uint256 index) internal returns (address[] memory) { for (uint256 i = index; i < admins.length - 1; i++) { admins[i] = admins[i + 1]; } delete admins[admins.length - 1]; admins.pop(); return admins; } function showItems(uint256 number) external view returns (Item memory) { require(items[number].id == number); return items[number]; } function checkDropInfo(uint256 number) external view returns (drop memory) { require(number <= totalDrop, "drop number doesn't exist"); return idToDrop[number]; } function setMintTypes(uint256 _passId, uint256 _percent) external onlyOwner { mintTypes[_passId] = _percent; } function availableNFTs() external view returns (uint256 amount, uint256 costForMint) { return (idToDrop[totalDrop].totalSupply - idToDrop[totalDrop].minted, cost); } function getOwner() public view returns (address) { return owner(); } function withdraw() public onlyOwner { uint256 amount = address(this).balance; (bool success,) = owner().call{value : amount}(""); require(success, "Failed to withdraw funds"); } fallback() external payable {} receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"},{"internalType":"uint256","name":"nftAmountPerUser_","type":"uint256"},{"internalType":"address","name":"mintPassAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"TreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountsNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"amountsNFTMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableNFTs","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"costForMint","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dropId","type":"uint256"},{"internalType":"uint256","name":"_newAmount","type":"uint256"},{"internalType":"uint256","name":"_privateStartTime","type":"uint256"},{"internalType":"uint256","name":"_privateDuration","type":"uint256"},{"internalType":"uint256","name":"_publicStartTime","type":"uint256"},{"internalType":"uint256","name":"_publicDuration","type":"uint256"},{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"changeDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxAMount","type":"uint256"}],"name":"changeMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTokenContract","type":"address"}],"name":"changeMintPassContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"changeNftAmountPerUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"changeTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkCurrentDropSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"checkDropInfo","outputs":[{"components":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"minted","type":"uint256"},{"internalType":"uint256","name":"privateStartTime","type":"uint256"},{"internalType":"uint256","name":"privateDuration","type":"uint256"},{"internalType":"uint256","name":"publicStartTime","type":"uint256"},{"internalType":"uint256","name":"publicDuration","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"}],"internalType":"struct MintERC1155.drop","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUserActualAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUserIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUserMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"deleteAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"privateStartTime","type":"uint256"},{"internalType":"uint256","name":"privateDuration","type":"uint256"},{"internalType":"uint256","name":"publicStartTime","type":"uint256"},{"internalType":"uint256","name":"publicDuration","type":"uint256"},{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"makeDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"passId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintTool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAmountPerUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_passId","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setMintTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setTokenUriWithID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMultiSig","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"showItems","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"internalType":"struct MintERC1155.Item","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaid","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":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604081905260098054610100600160a81b031916742d504e0b2363f9c5fcec571d62476f08e36cca0d00179055670de0b6b3a7640000600a556109c4601855620043fd388190039081908339810160408190526200005f916200020e565b6040805160208101909152600081526200007981620000e0565b506200008533620000f9565b600a939093556009805460ff19166001179055601791909155600480546001600160a01b039283166001600160a01b031991821681179092556005805494909316938116939093179091556006805490921617905562000296565b8051620000f59060029060208401906200014b565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001599062000259565b90600052602060002090601f0160209004810192826200017d5760008555620001c8565b82601f106200019857805160ff1916838001178555620001c8565b82800160010185558215620001c8579182015b82811115620001c8578251825591602001919060010190620001ab565b50620001d6929150620001da565b5090565b5b80821115620001d65760008155600101620001db565b80516001600160a01b03811681146200020957600080fd5b919050565b600080600080608085870312156200022557600080fd5b84519350602085015192506200023e60408601620001f1565b91506200024e60608601620001f1565b905092959194509250565b600181811c908216806200026e57607f821691505b602082108114156200029057634e487b7160e01b600052602260045260246000fd5b50919050565b61415780620002a66000396000f3fe6080604052600436106103265760003560e01c80638cd66b5a116101ae578063d4a6cf43116100eb578063ea520b181161008f578063f2b67f261161006c578063f2b67f2614610a71578063f2fde38b14610a93578063f441b1c814610ab3578063f5298aca14610ac957005b8063ea520b1814610a25578063ee7952dc14610a3b578063f242432a14610a5157005b8063e153fa45116100c8578063e153fa451461097c578063e7b0f6661461099c578063e985e9c5146109b2578063ea317fff146109fb57005b8063d4a6cf4314610927578063daf210b114610949578063decece311461095c57005b8063a8602fea11610152578063c45494081161012f578063c454940814610870578063c8b747b814610885578063ca810daa146108e7578063d47573d41461090757005b8063a8602fea14610810578063b26a158214610830578063b8b9dad01461085057005b806395d89b411161018b57806395d89b411461077a578063a196d1d8146107ac578063a1ea6b21146107d0578063a22cb465146107f057005b80638cd66b5a146107195780638da5cb5b1461072f57806394079f541461074d57005b806332504d921161027c5780635c975abb1161022057806370480275116101fd578063704802751461065957806370b99c9e14610679578063715018a6146106ef578063893d20e81461070457005b80635c975abb146106095780635f48f393146106235780636b20c4541461063957005b80633ccfd60b116102595780633ccfd60b1461059457806344a0d68a146105a95780634e1273f4146105c9578063523aee69146105e957005b806332504d921461052557806335ded439146105525780633c88e3511461057257005b806311388ab5116102e3578063156e29f6116102c0578063156e29f6146104a357806327e1f7df146104b65780632eb2c2d6146104d657806330998906146104f857005b806311388ab51461043d57806311ffeaf21461045057806313faede61461048d57005b8062fdd58e1461032f57806301ffc9a7146103625780630411b2521461039257806306fdde03146103a55780630e89341c146103fb5780630f17dfcf1461041b57005b3661032d57005b005b34801561033b57600080fd5b5061034f61034a366004613870565b610ae9565b6040519081526020015b60405180910390f35b34801561036e57600080fd5b5061038261037d36600461399e565b610b7f565b6040519015158152602001610359565b61032d6103a0366004613719565b610bd1565b3480156103b157600080fd5b506103ee6040518060400160405280601b81526020017f5370696e626c6164652046697273742045646974696f6e20426f78000000000081525081565b6040516103599190613cf1565b34801561040757600080fd5b506103ee6104163660046139d8565b610d8a565b34801561042757600080fd5b50610430610e2c565b6040516103599190613c63565b61032d61044b366004613a7d565b610e8e565b34801561045c57600080fd5b506009546104759061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610359565b34801561049957600080fd5b5061034f600a5481565b61032d6104b136600461389a565b611334565b3480156104c257600080fd5b5061032d6104d136600461359c565b6116bc565b3480156104e257600080fd5b5061032d6104f136600461366f565b5050505050565b34801561050457600080fd5b5061034f6105133660046139d8565b600e6020526000908152604090205481565b34801561053157600080fd5b5061034f61054036600461359c565b600f6020526000908152604090205481565b34801561055e57600080fd5b5061032d61056d3660046139d8565b61183d565b34801561057e57600080fd5b50610587611859565b6040516103599190613cb0565b3480156105a057600080fd5b5061032d6118b9565b3480156105b557600080fd5b5061032d6105c43660046139d8565b61197a565b3480156105d557600080fd5b506105876105e43660046138cd565b611987565b3480156105f557600080fd5b5061032d61060436600461359c565b611ab1565b34801561061557600080fd5b506009546103829060ff1681565b34801561062f57600080fd5b5061034f60185481565b34801561064557600080fd5b5061032d6106543660046137c0565b611adb565b34801561066557600080fd5b5061032d61067436600461359c565b611b23565b34801561068557600080fd5b506106996106943660046139d8565b611c63565b6040516103599190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156106fb57600080fd5b5061032d611d58565b34801561071057600080fd5b50610475611d6c565b34801561072557600080fd5b5061034f60155481565b34801561073b57600080fd5b506003546001600160a01b0316610475565b34801561075957600080fd5b5061034f61076836600461359c565b60106020526000908152604090205481565b34801561078657600080fd5b506103ee604051806040016040528060068152602001650a68486849eb60d31b81525081565b3480156107b857600080fd5b50601b546000908152601a602052604090205461034f565b3480156107dc57600080fd5b5061032d6107eb366004613aa9565b611d85565b3480156107fc57600080fd5b5061032d61080b366004613834565b611e1f565b34801561081c57600080fd5b5061032d61082b36600461359c565b611e2a565b34801561083c57600080fd5b5061032d61084b366004613a5b565b611e5a565b34801561085c57600080fd5b5061032d61086b3660046139d8565b611e74565b34801561087c57600080fd5b5061032d611e81565b34801561089157600080fd5b506108a56108a03660046139d8565b611e9d565b6040516103599190815181526020808301516001600160a01b039081169183019190915260408084015190830152606092830151169181019190915260800190565b3480156108f357600080fd5b5061032d610902366004613a0a565b611f2a565b34801561091357600080fd5b5061032d610922366004613a5b565b611fb0565b34801561093357600080fd5b50336000908152600f602052604090205461034f565b61032d6109573660046135ea565b612139565b34801561096857600080fd5b5061032d61097736600461359c565b6123cd565b34801561098857600080fd5b5061032d610997366004613aec565b612401565b3480156109a857600080fd5b5061034f600b5481565b3480156109be57600080fd5b506103826109cd3660046135b7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b348015610a0757600080fd5b50610a10612440565b60408051928352602083019190915201610359565b348015610a3157600080fd5b5061034f601b5481565b348015610a4757600080fd5b5061034f60175481565b348015610a5d57600080fd5b5061032d610a6c36600461375b565b61246e565b348015610a7d57600080fd5b503360009081526010602052604090205461034f565b348015610a9f57600080fd5b5061032d610aae36600461359c565b6125a3565b348015610abf57600080fd5b5061034f60195481565b348015610ad557600080fd5b5061032d610ae436600461389a565b61261c565b60006001600160a01b038316610b595760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b1480610bb057506001600160e01b031982166303a24d0760e21b145b80610bcb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0384163314610c195760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420616c6c6f77616e636560981b6044820152606401610b50565b80600114610c5e5760405162461bcd60e51b8152602060048201526012602482015271616d6f756e742068617320746f206265203160701b6044820152606401610b50565b610c7a848484846040518060200160405280600081525061265f565b6000828152600d6020526040812060030180546001600160a01b0319166001600160a01b0386161790555b336000908152600c6020526040902054811015610d3a57336000908152600c60205260409020805484919083908110610ce057610ce0614039565b90600052602060002001541415610d28576001600160a01b0384166000908152600c6020908152604082208054600181018255908352912001839055610d268133612789565b505b80610d3281613ff2565b915050610ca5565b50336000908152600f60205260408120805491610d5683613f73565b90915550506001600160a01b0383166000908152600f60205260408120805491610d7f83613ff2565b919050555050505050565b6000818152600760205260409020805460609190610da790613f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd390613f8a565b8015610e205780601f10610df557610100808354040283529160200191610e20565b820191906000526020600020905b815481529060010190602001808311610e0357829003601f168201915b50505050509050919050565b60606016805480602002602001604051908101604052809291908181526020018280548015610e8457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e66575b5050505050905090565b60095460ff1615610eb15760405162461bcd60e51b8152600401610b5090613ef8565b60185483601954610ec29190613f44565b1115610f055760405162461bcd60e51b8152602060048201526012602482015271105b5bdd5b9d081a5cc8195e18d95959195960721b6044820152606401610b50565b601b546000908152601a602052604090206002015442118015610f4c5750601b546000908152601a602052604090206003810154600290910154610f499190613f44565b42105b80610f995750601b546000908152601a602052604090206004015442118015610f995750601b546000908152601a602052604090206005810154600490910154610f969190613f44565b42105b610fd85760405162461bcd60e51b815260206004820152601060248201526f139bdd081d1a5b59481d1bc81b5a5b9d60821b6044820152606401610b50565b601b546000908152601a602052604090208054600190910154610ffc908590613f44565b111561103f5760405162461bcd60e51b815260206004820152601260248201527114dd5c1c1b1e481a5cc8195e18d95959195960721b6044820152606401610b50565b600654604051627eeac760e11b8152336004820181905260248201859052916000916001600160a01b039091169062fdd58e9060440160206040518083038186803b15801561108d57600080fd5b505afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c591906139f1565b116111125760405162461bcd60e51b815260206004820152601960248201527f596f7520646f6e27742068617665207468697320746f6b656e000000000000006044820152606401610b50565b60048054604051637a94c56560e11b8152339281019290925260248201859052604482018690526001600160a01b03169063f5298aca90606401600060405180830381600087803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b5050506000848152600e602052604090205415905061123d5760095460405134916000916101009091046001600160a01b031690839060006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508061123a5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610b50565b50505b61125833838660405180602001604052806000815250612935565b836019600082825461126a9190613f44565b9091555050336000908152600f60205260408120805486929061128e908490613f44565b9091555050601b546000908152601a6020526040812060010180548692906112b7908490613f44565b909155505060408051608081018252838152336020808301828152838501988952606084019283526000968752600d909152929094209051815590516001820180546001600160a01b039283166001600160a01b031991821617909155955160028301559251600390910180549190931694169390931790555050565b60095460ff16156113575760405162461bcd60e51b8152600401610b5090613ef8565b601854826019546113689190613f44565b111561137357600080fd5b60175433600090815260116020526040902054611391908490613f44565b11156113df5760405162461bcd60e51b815260206004820152601860248201527f4e465420706572207573657220697320657863656564656400000000000000006044820152606401610b50565b601b546000908152601a6020526040902060040154421180156114265750601b546000908152601a6020526040902060058101546004909101546114239190613f44565b42105b6114655760405162461bcd60e51b815260206004820152601060248201526f139bdd081d1a5b59481d1bc81b5a5b9d60821b6044820152606401610b50565b601b546000908152601a602052604090208054600190910154611489908490613f44565b11156114cc5760405162461bcd60e51b815260206004820152601260248201527114dd5c1c1b1e481a5cc8195e18d95959195960721b6044820152606401610b50565b60095460405134916000916101009091046001600160a01b031690839060006040518083038185875af1925050503d8060008114611526576040519150601f19603f3d011682016040523d82523d6000602084013e61152b565b606091505b50509050806115735760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610b50565b61158e85848660405180602001604052806000815250612935565b83601960008282546115a09190613f44565b90915550506001600160a01b0385166000908152600f6020526040812080548692906115cd908490613f44565b909155505033600090815260106020526040812080548692906115f1908490613f44565b90915550503360009081526011602052604081208054869290611615908490613f44565b9091555050601b546000908152601a60205260408120600101805486929061163e908490613f44565b909155505060408051608081018252848152336020808301828152838501988952606084019283526000978852600d909152929095209051815590516001820180546001600160a01b03199081166001600160a01b039384161790915595516002830155935160039091018054909516931692909217909255505050565b6116c4612a49565b6001600160a01b038116600090815260136020908152604080832054835260129091529020600190810154600160a01b900460ff161515146117485760405162461bcd60e51b815260206004820152601960248201527f55736572206973206e6f7420696e2061646d696e206c697374000000000000006044820152606401610b50565b6001600160a01b038116600090815260136020908152604080832054835260129091528120600101805460ff60a01b191690555b601654811015611806576001600160a01b038083166000908152601360209081526040808320548352601290915290206001015460168054919092169190839081106117ca576117ca614039565b6000918252602090912001546001600160a01b031614156117f4576117ee81612aa3565b50611806565b806117fe81613ff2565b91505061177c565b506015805490600061181783613f73565b90915550506001600160a01b03166000908152601460205260409020805460ff19169055565b611845612a49565b60195481101561185457600080fd5b601855565b336000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610e8457602002820191906000526020600020905b81548152602001906001019080831161189c575050505050905090565b6118c1612a49565b4760006118d66003546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611920576040519150601f19603f3d011682016040523d82523d6000602084013e611925565b606091505b50509050806119765760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2077697468647261772066756e647300000000000000006044820152606401610b50565b5050565b611982612a49565b600a55565b606081518351146119ec5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b50565b6000835167ffffffffffffffff811115611a0857611a0861404f565b604051908082528060200260200182016040528015611a31578160200160208202803683370190505b50905060005b8451811015611aa957611a7c858281518110611a5557611a55614039565b6020026020010151858381518110611a6f57611a6f614039565b6020026020010151610ae9565b828281518110611a8e57611a8e614039565b6020908102919091010152611aa281613ff2565b9050611a37565b509392505050565b611ab9612a49565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316331480611af75750611af783336109cd565b611b135760405162461bcd60e51b8152600401610b5090613d90565b611b1e838383612c0d565b505050565b611b2b612a49565b6001600160a01b03811660009081526014602052604090205460ff16151560011415611b895760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9030b236b4b760991b6044820152606401610b50565b60158054906000611b9983613ff2565b909155505060408051606081018252601580548083526001600160a01b0394851660208085018281526001868801818152600095865260128452888620975188559151968101805492511515600160a01b026001600160a81b031990931697909916969096171790965591548282526013865284822055601680548085019091557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319168317905590815260149093529120805460ff19169091179055565b611ca36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601b54821115611cf55760405162461bcd60e51b815260206004820152601960248201527f64726f70206e756d62657220646f65736e2774206578697374000000000000006044820152606401610b50565b506000908152601a6020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a082015260069091015460c082015290565b611d60612a49565b611d6a6000612d98565b565b6000611d806003546001600160a01b031690565b905090565b611d8d612a49565b601b8054906000611d9d83613ff2565b90915550506040805160e0810182529687526000602080890182815289840198895260608a0197885260808a0196875260a08a0195865260c08a01858152601b548452601a9092529290912097518855905160018801559451600287015592516003860155905160048501555160058401559051600690920191909155600a55565b611976338383612dea565b611e32612a49565b600980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b611e62612a49565b6000918252600e602052604090912055565b611e7c612a49565b601755565b611e89612a49565b6009805460ff19811660ff90911615179055565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600d60205260409020548214611edb57600080fd5b506000908152600d602090815260409182902082516080810184528154815260018201546001600160a01b03908116938201939093526002820154938101939093526003015416606082015290565b611f32612a49565b60008281526007602052604090208054611f4b90613f8a565b159050611f915760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742075726920747769636560601b6044820152606401610b50565b60008281526007602090815260409091208251611b1e928401906133eb565b611fb8612a49565b60095460ff1615611fdb5760405162461bcd60e51b8152600401610b5090613ef8565b60185482601954611fec9190613f44565b111561202f5760405162461bcd60e51b8152602060048201526012602482015271105b5bdd5b9d081a5cc8195e18d95959195960721b6044820152606401610b50565b61204a33828460405180602001604052806000815250612935565b816019600082825461205c9190613f44565b9091555050336000908152600f602052604081208054849290612080908490613f44565b909155505060016000908152601a6020527ff88cd8d612926ebb404e40725c01084b6e9b3ce0344cde068570342cbd448c6280548492906120c2908490613f44565b909155505060408051608081018252828152336020808301828152838501968752606084019283526000958652600d909152929093209051815590516001820180546001600160a01b03199081166001600160a01b0393841617909155935160028301559151600390910180549093169116179055565b60005b81518110156121b55781818151811061215757612157614039565b60200260200101516001146121a35760405162461bcd60e51b8152602060048201526012602482015271616d6f756e742068617320746f206265203160701b6044820152606401610b50565b806121ad81613ff2565b91505061213c565b506001600160a01b03841633146121fe5760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420616c6c6f77616e636560981b6044820152606401610b50565b61221a8484848460405180602001604052806000815250612ecb565b60005b336000908152600c60205260409020548110156123715760005b835181101561235e5783818151811061225257612252614039565b6020026020010151600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020838154811061229057612290614039565b9060005260206000200154141561234c576001600160a01b0385166000908152600c6020526040902084518590839081106122cd576122cd614039565b602090810291909101810151825460018101845560009384529190922001556122f68233612789565b5084600d600086848151811061230e5761230e614039565b6020026020010151815260200190815260200160002060030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061235681613ff2565b915050612237565b508061236981613ff2565b91505061221d565b508151336000908152600f602052604081208054909190612393908490613f5c565b909155505081516001600160a01b0384166000908152600f6020526040812080549091906123c2908490613f44565b909155505050505050565b6123d5612a49565b600480546001600160a01b039092166001600160a01b0319928316811790915560068054909216179055565b612409612a49565b6000968752601a60205260409096209485556002850193909355600384019190915560048301556005820155600601819055600a55565b601b546000908152601a6020526040812060018101549054829161246391613f5c565b600a54915091509091565b61247b858585858561265f565b6001600160a01b0384166000908152600c6020908152604082208054600181018255908352908220018490555b6001600160a01b0386166000908152600c6020526040902054811015612524576001600160a01b0386166000908152600c602052604090208054859190839081106124f5576124f5614039565b90600052602060002001541415612512576125108187612789565b505b8061251c81613ff2565b9150506124a8565b506000838152600d6020908152604080832060030180546001600160a01b0319166001600160a01b038981169190911790915588168352600f909152812080549161256e83613f73565b90915550506001600160a01b0384166000908152600f6020526040812080549161259783613ff2565b91905055505050505050565b6125ab612a49565b6001600160a01b0381166126105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b61261981612d98565b50565b6001600160a01b038316331480612638575061263883336109cd565b6126545760405162461bcd60e51b8152600401610b5090613d90565b611b1e838383613067565b6001600160a01b0384166126855760405162461bcd60e51b8152600401610b5090613dde565b3360006126918561316b565b9050600061269e8561316b565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156126e15760405162461bcd60e51b8152600401610b5090613e66565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061271e908490613f44565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461277e848a8a8a8a8a6131b6565b505050505050505050565b6060825b6001600160a01b0383166000908152600c60205260409020546127b290600190613f5c565b81101561284b576001600160a01b0383166000908152600c602052604090206127dc826001613f44565b815481106127ec576127ec614039565b9060005260206000200154600c6000856001600160a01b03166001600160a01b03168152602001908152602001600020828154811061282d5761282d614039565b6000918252602090912001558061284381613ff2565b91505061278d565b506001600160a01b0382166000908152600c60205260409020805461287290600190613f5c565b8154811061288257612882614039565b600091825260208083209091018290556001600160a01b0384168252600c9052604090208054806128b5576128b5614023565b6000828152602080822083016000199081018390559092019092556001600160a01b0384168252600c81526040918290208054835181840281018401909452808452909183018282801561292857602002820191906000526020600020905b815481526020019060010190808311612914575b5050505050905092915050565b6001600160a01b0384166129955760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b50565b3360006129a18561316b565b905060006129ae8561316b565b90506000868152602081815260408083206001600160a01b038b168452909152812080548792906129e0908490613f44565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612a40836000898989896131b6565b50505050505050565b6003546001600160a01b03163314611d6a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b50565b6060815b601654612ab690600190613f5c565b811015612b41576016612aca826001613f44565b81548110612ada57612ada614039565b600091825260209091200154601680546001600160a01b039092169183908110612b0657612b06614039565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905580612b3981613ff2565b915050612aa7565b5060168054612b5290600190613f5c565b81548110612b6257612b62614039565b600091825260209091200180546001600160a01b03191690556016805480612b8c57612b8c614023565b6000828152602090819020820160001990810180546001600160a01b031916905590910190915560168054604080518285028101850190915281815292830182828015610e2057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612be45750505050509050919050565b6001600160a01b038316612c335760405162461bcd60e51b8152600401610b5090613e23565b8051825114612c545760405162461bcd60e51b8152600401610b5090613eb0565b604080516020810190915260009081905233905b8351811015612d2a576000848281518110612c8557612c85614039565b602002602001015190506000848381518110612ca357612ca3614039565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015612cf35760405162461bcd60e51b8152600401610b5090613d4c565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580612d2281613ff2565b915050612c68565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612d7b929190613cc3565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415612e5e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b50565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b8151835114612eec5760405162461bcd60e51b8152600401610b5090613eb0565b6001600160a01b038416612f125760405162461bcd60e51b8152600401610b5090613dde565b3360005b8451811015612ff9576000858281518110612f3357612f33614039565b602002602001015190506000858381518110612f5157612f51614039565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015612fa15760405162461bcd60e51b8152600401610b5090613e66565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612fde908490613f44565b9250508190555050505080612ff290613ff2565b9050612f16565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613049929190613cc3565b60405180910390a461305f818787878787613321565b505050505050565b6001600160a01b03831661308d5760405162461bcd60e51b8152600401610b5090613e23565b3360006130998461316b565b905060006130a68461316b565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156130f35760405162461bcd60e51b8152600401610b5090613d4c565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052612a40565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106131a5576131a5614039565b602090810291909101015292915050565b6001600160a01b0384163b1561305f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906131fa9089908990889088908890600401613c1e565b602060405180830381600087803b15801561321457600080fd5b505af1925050508015613244575060408051601f3d908101601f19168201909252613241918101906139bb565b60015b6132f157613250614065565b806308c379a0141561328a5750613265614081565b80613270575061328c565b8060405162461bcd60e51b8152600401610b509190613cf1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b50565b6001600160e01b0319811663f23a6e6160e01b14612a405760405162461bcd60e51b8152600401610b5090613d04565b6001600160a01b0384163b1561305f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906133659089908990889088908890600401613bc0565b602060405180830381600087803b15801561337f57600080fd5b505af19250505080156133af575060408051601f3d908101601f191682019092526133ac918101906139bb565b60015b6133bb57613250614065565b6001600160e01b0319811663bc197c8160e01b14612a405760405162461bcd60e51b8152600401610b5090613d04565b8280546133f790613f8a565b90600052602060002090601f016020900481019282613419576000855561345f565b82601f1061343257805160ff191683800117855561345f565b8280016001018555821561345f579182015b8281111561345f578251825591602001919060010190613444565b5061346b92915061346f565b5090565b5b8082111561346b5760008155600101613470565b600067ffffffffffffffff83111561349e5761349e61404f565b6040516134b5601f8501601f191660200182613fc5565b8091508381528484840111156134ca57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b03811681146134f957600080fd5b919050565b600082601f83011261350f57600080fd5b8135602061351c82613f20565b6040516135298282613fc5565b8381528281019150858301600585901b8701840188101561354957600080fd5b60005b858110156135685781358452928401929084019060010161354c565b5090979650505050505050565b600082601f83011261358657600080fd5b61359583833560208501613484565b9392505050565b6000602082840312156135ae57600080fd5b613595826134e2565b600080604083850312156135ca57600080fd5b6135d3836134e2565b91506135e1602084016134e2565b90509250929050565b6000806000806080858703121561360057600080fd5b613609856134e2565b9350613617602086016134e2565b9250604085013567ffffffffffffffff8082111561363457600080fd5b613640888389016134fe565b9350606087013591508082111561365657600080fd5b50613663878288016134fe565b91505092959194509250565b600080600080600060a0868803121561368757600080fd5b613690866134e2565b945061369e602087016134e2565b9350604086013567ffffffffffffffff808211156136bb57600080fd5b6136c789838a016134fe565b945060608801359150808211156136dd57600080fd5b6136e989838a016134fe565b935060808801359150808211156136ff57600080fd5b5061370c88828901613575565b9150509295509295909350565b6000806000806080858703121561372f57600080fd5b613738856134e2565b9350613746602086016134e2565b93969395505050506040820135916060013590565b600080600080600060a0868803121561377357600080fd5b61377c866134e2565b945061378a602087016134e2565b93506040860135925060608601359150608086013567ffffffffffffffff8111156137b457600080fd5b61370c88828901613575565b6000806000606084860312156137d557600080fd5b6137de846134e2565b9250602084013567ffffffffffffffff808211156137fb57600080fd5b613807878388016134fe565b9350604086013591508082111561381d57600080fd5b5061382a868287016134fe565b9150509250925092565b6000806040838503121561384757600080fd5b613850836134e2565b91506020830135801515811461386557600080fd5b809150509250929050565b6000806040838503121561388357600080fd5b61388c836134e2565b946020939093013593505050565b6000806000606084860312156138af57600080fd5b6138b8846134e2565b95602085013595506040909401359392505050565b600080604083850312156138e057600080fd5b823567ffffffffffffffff808211156138f857600080fd5b818501915085601f83011261390c57600080fd5b8135602061391982613f20565b6040516139268282613fc5565b8381528281019150858301600585901b870184018b101561394657600080fd5b600096505b848710156139705761395c816134e2565b83526001969096019591830191830161394b565b509650508601359250508082111561398757600080fd5b50613994858286016134fe565b9150509250929050565b6000602082840312156139b057600080fd5b81356135958161410b565b6000602082840312156139cd57600080fd5b81516135958161410b565b6000602082840312156139ea57600080fd5b5035919050565b600060208284031215613a0357600080fd5b5051919050565b60008060408385031215613a1d57600080fd5b82359150602083013567ffffffffffffffff811115613a3b57600080fd5b8301601f81018513613a4c57600080fd5b61399485823560208401613484565b60008060408385031215613a6e57600080fd5b50508035926020909101359150565b600080600060608486031215613a9257600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c08789031215613ac257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600080600080600060e0888a031215613b0757600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600081518084526020808501945080840160005b83811015613b6857815187529582019590820190600101613b4c565b509495945050505050565b6000815180845260005b81811015613b9957602081850181015186830182015201613b7d565b81811115613bab576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090613bec90830186613b38565b8281036060840152613bfe8186613b38565b90508281036080840152613c128185613b73565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613c5890830184613b73565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ca45783516001600160a01b031683529284019291840191600101613c7f565b50909695505050505050565b6020815260006135956020830184613b38565b604081526000613cd66040830185613b38565b8281036020840152613ce88185613b38565b95945050505050565b6020815260006135956020830184613b73565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252600e908201526d1b5a5b9d081a5cc81c185d5cd95960921b604082015260600190565b600067ffffffffffffffff821115613f3a57613f3a61404f565b5060051b60200190565b60008219821115613f5757613f5761400d565b500190565b600082821015613f6e57613f6e61400d565b500390565b600081613f8257613f8261400d565b506000190190565b600181811c90821680613f9e57607f821691505b60208210811415613fbf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613feb57613feb61404f565b6040525050565b60006000198214156140065761400661400d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561407e5760046000803e5060005160e01c5b90565b600060443d101561408f5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156140bf57505050505090565b82850191508151818111156140d75750505050505090565b843d87010160208285010111156140f15750505050505090565b61410060208286010187613fc5565b509095945050505050565b6001600160e01b03198116811461261957600080fdfea264697066735822122099e2db92c9cb5c1e56534054f7c99cb7048099cc4bb4ba2c5657420bf6966dae64736f6c63430008070033000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000a21d3fc728efadf5fb3f55c43d1bef15b4398fb20000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Deployed Bytecode
0x6080604052600436106103265760003560e01c80638cd66b5a116101ae578063d4a6cf43116100eb578063ea520b181161008f578063f2b67f261161006c578063f2b67f2614610a71578063f2fde38b14610a93578063f441b1c814610ab3578063f5298aca14610ac957005b8063ea520b1814610a25578063ee7952dc14610a3b578063f242432a14610a5157005b8063e153fa45116100c8578063e153fa451461097c578063e7b0f6661461099c578063e985e9c5146109b2578063ea317fff146109fb57005b8063d4a6cf4314610927578063daf210b114610949578063decece311461095c57005b8063a8602fea11610152578063c45494081161012f578063c454940814610870578063c8b747b814610885578063ca810daa146108e7578063d47573d41461090757005b8063a8602fea14610810578063b26a158214610830578063b8b9dad01461085057005b806395d89b411161018b57806395d89b411461077a578063a196d1d8146107ac578063a1ea6b21146107d0578063a22cb465146107f057005b80638cd66b5a146107195780638da5cb5b1461072f57806394079f541461074d57005b806332504d921161027c5780635c975abb1161022057806370480275116101fd578063704802751461065957806370b99c9e14610679578063715018a6146106ef578063893d20e81461070457005b80635c975abb146106095780635f48f393146106235780636b20c4541461063957005b80633ccfd60b116102595780633ccfd60b1461059457806344a0d68a146105a95780634e1273f4146105c9578063523aee69146105e957005b806332504d921461052557806335ded439146105525780633c88e3511461057257005b806311388ab5116102e3578063156e29f6116102c0578063156e29f6146104a357806327e1f7df146104b65780632eb2c2d6146104d657806330998906146104f857005b806311388ab51461043d57806311ffeaf21461045057806313faede61461048d57005b8062fdd58e1461032f57806301ffc9a7146103625780630411b2521461039257806306fdde03146103a55780630e89341c146103fb5780630f17dfcf1461041b57005b3661032d57005b005b34801561033b57600080fd5b5061034f61034a366004613870565b610ae9565b6040519081526020015b60405180910390f35b34801561036e57600080fd5b5061038261037d36600461399e565b610b7f565b6040519015158152602001610359565b61032d6103a0366004613719565b610bd1565b3480156103b157600080fd5b506103ee6040518060400160405280601b81526020017f5370696e626c6164652046697273742045646974696f6e20426f78000000000081525081565b6040516103599190613cf1565b34801561040757600080fd5b506103ee6104163660046139d8565b610d8a565b34801561042757600080fd5b50610430610e2c565b6040516103599190613c63565b61032d61044b366004613a7d565b610e8e565b34801561045c57600080fd5b506009546104759061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610359565b34801561049957600080fd5b5061034f600a5481565b61032d6104b136600461389a565b611334565b3480156104c257600080fd5b5061032d6104d136600461359c565b6116bc565b3480156104e257600080fd5b5061032d6104f136600461366f565b5050505050565b34801561050457600080fd5b5061034f6105133660046139d8565b600e6020526000908152604090205481565b34801561053157600080fd5b5061034f61054036600461359c565b600f6020526000908152604090205481565b34801561055e57600080fd5b5061032d61056d3660046139d8565b61183d565b34801561057e57600080fd5b50610587611859565b6040516103599190613cb0565b3480156105a057600080fd5b5061032d6118b9565b3480156105b557600080fd5b5061032d6105c43660046139d8565b61197a565b3480156105d557600080fd5b506105876105e43660046138cd565b611987565b3480156105f557600080fd5b5061032d61060436600461359c565b611ab1565b34801561061557600080fd5b506009546103829060ff1681565b34801561062f57600080fd5b5061034f60185481565b34801561064557600080fd5b5061032d6106543660046137c0565b611adb565b34801561066557600080fd5b5061032d61067436600461359c565b611b23565b34801561068557600080fd5b506106996106943660046139d8565b611c63565b6040516103599190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b3480156106fb57600080fd5b5061032d611d58565b34801561071057600080fd5b50610475611d6c565b34801561072557600080fd5b5061034f60155481565b34801561073b57600080fd5b506003546001600160a01b0316610475565b34801561075957600080fd5b5061034f61076836600461359c565b60106020526000908152604090205481565b34801561078657600080fd5b506103ee604051806040016040528060068152602001650a68486849eb60d31b81525081565b3480156107b857600080fd5b50601b546000908152601a602052604090205461034f565b3480156107dc57600080fd5b5061032d6107eb366004613aa9565b611d85565b3480156107fc57600080fd5b5061032d61080b366004613834565b611e1f565b34801561081c57600080fd5b5061032d61082b36600461359c565b611e2a565b34801561083c57600080fd5b5061032d61084b366004613a5b565b611e5a565b34801561085c57600080fd5b5061032d61086b3660046139d8565b611e74565b34801561087c57600080fd5b5061032d611e81565b34801561089157600080fd5b506108a56108a03660046139d8565b611e9d565b6040516103599190815181526020808301516001600160a01b039081169183019190915260408084015190830152606092830151169181019190915260800190565b3480156108f357600080fd5b5061032d610902366004613a0a565b611f2a565b34801561091357600080fd5b5061032d610922366004613a5b565b611fb0565b34801561093357600080fd5b50336000908152600f602052604090205461034f565b61032d6109573660046135ea565b612139565b34801561096857600080fd5b5061032d61097736600461359c565b6123cd565b34801561098857600080fd5b5061032d610997366004613aec565b612401565b3480156109a857600080fd5b5061034f600b5481565b3480156109be57600080fd5b506103826109cd3660046135b7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b348015610a0757600080fd5b50610a10612440565b60408051928352602083019190915201610359565b348015610a3157600080fd5b5061034f601b5481565b348015610a4757600080fd5b5061034f60175481565b348015610a5d57600080fd5b5061032d610a6c36600461375b565b61246e565b348015610a7d57600080fd5b503360009081526010602052604090205461034f565b348015610a9f57600080fd5b5061032d610aae36600461359c565b6125a3565b348015610abf57600080fd5b5061034f60195481565b348015610ad557600080fd5b5061032d610ae436600461389a565b61261c565b60006001600160a01b038316610b595760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b1480610bb057506001600160e01b031982166303a24d0760e21b145b80610bcb57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b0384163314610c195760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420616c6c6f77616e636560981b6044820152606401610b50565b80600114610c5e5760405162461bcd60e51b8152602060048201526012602482015271616d6f756e742068617320746f206265203160701b6044820152606401610b50565b610c7a848484846040518060200160405280600081525061265f565b6000828152600d6020526040812060030180546001600160a01b0319166001600160a01b0386161790555b336000908152600c6020526040902054811015610d3a57336000908152600c60205260409020805484919083908110610ce057610ce0614039565b90600052602060002001541415610d28576001600160a01b0384166000908152600c6020908152604082208054600181018255908352912001839055610d268133612789565b505b80610d3281613ff2565b915050610ca5565b50336000908152600f60205260408120805491610d5683613f73565b90915550506001600160a01b0383166000908152600f60205260408120805491610d7f83613ff2565b919050555050505050565b6000818152600760205260409020805460609190610da790613f8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd390613f8a565b8015610e205780601f10610df557610100808354040283529160200191610e20565b820191906000526020600020905b815481529060010190602001808311610e0357829003601f168201915b50505050509050919050565b60606016805480602002602001604051908101604052809291908181526020018280548015610e8457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e66575b5050505050905090565b60095460ff1615610eb15760405162461bcd60e51b8152600401610b5090613ef8565b60185483601954610ec29190613f44565b1115610f055760405162461bcd60e51b8152602060048201526012602482015271105b5bdd5b9d081a5cc8195e18d95959195960721b6044820152606401610b50565b601b546000908152601a602052604090206002015442118015610f4c5750601b546000908152601a602052604090206003810154600290910154610f499190613f44565b42105b80610f995750601b546000908152601a602052604090206004015442118015610f995750601b546000908152601a602052604090206005810154600490910154610f969190613f44565b42105b610fd85760405162461bcd60e51b815260206004820152601060248201526f139bdd081d1a5b59481d1bc81b5a5b9d60821b6044820152606401610b50565b601b546000908152601a602052604090208054600190910154610ffc908590613f44565b111561103f5760405162461bcd60e51b815260206004820152601260248201527114dd5c1c1b1e481a5cc8195e18d95959195960721b6044820152606401610b50565b600654604051627eeac760e11b8152336004820181905260248201859052916000916001600160a01b039091169062fdd58e9060440160206040518083038186803b15801561108d57600080fd5b505afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c591906139f1565b116111125760405162461bcd60e51b815260206004820152601960248201527f596f7520646f6e27742068617665207468697320746f6b656e000000000000006044820152606401610b50565b60048054604051637a94c56560e11b8152339281019290925260248201859052604482018690526001600160a01b03169063f5298aca90606401600060405180830381600087803b15801561116657600080fd5b505af115801561117a573d6000803e3d6000fd5b5050506000848152600e602052604090205415905061123d5760095460405134916000916101009091046001600160a01b031690839060006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508061123a5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610b50565b50505b61125833838660405180602001604052806000815250612935565b836019600082825461126a9190613f44565b9091555050336000908152600f60205260408120805486929061128e908490613f44565b9091555050601b546000908152601a6020526040812060010180548692906112b7908490613f44565b909155505060408051608081018252838152336020808301828152838501988952606084019283526000968752600d909152929094209051815590516001820180546001600160a01b039283166001600160a01b031991821617909155955160028301559251600390910180549190931694169390931790555050565b60095460ff16156113575760405162461bcd60e51b8152600401610b5090613ef8565b601854826019546113689190613f44565b111561137357600080fd5b60175433600090815260116020526040902054611391908490613f44565b11156113df5760405162461bcd60e51b815260206004820152601860248201527f4e465420706572207573657220697320657863656564656400000000000000006044820152606401610b50565b601b546000908152601a6020526040902060040154421180156114265750601b546000908152601a6020526040902060058101546004909101546114239190613f44565b42105b6114655760405162461bcd60e51b815260206004820152601060248201526f139bdd081d1a5b59481d1bc81b5a5b9d60821b6044820152606401610b50565b601b546000908152601a602052604090208054600190910154611489908490613f44565b11156114cc5760405162461bcd60e51b815260206004820152601260248201527114dd5c1c1b1e481a5cc8195e18d95959195960721b6044820152606401610b50565b60095460405134916000916101009091046001600160a01b031690839060006040518083038185875af1925050503d8060008114611526576040519150601f19603f3d011682016040523d82523d6000602084013e61152b565b606091505b50509050806115735760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610b50565b61158e85848660405180602001604052806000815250612935565b83601960008282546115a09190613f44565b90915550506001600160a01b0385166000908152600f6020526040812080548692906115cd908490613f44565b909155505033600090815260106020526040812080548692906115f1908490613f44565b90915550503360009081526011602052604081208054869290611615908490613f44565b9091555050601b546000908152601a60205260408120600101805486929061163e908490613f44565b909155505060408051608081018252848152336020808301828152838501988952606084019283526000978852600d909152929095209051815590516001820180546001600160a01b03199081166001600160a01b039384161790915595516002830155935160039091018054909516931692909217909255505050565b6116c4612a49565b6001600160a01b038116600090815260136020908152604080832054835260129091529020600190810154600160a01b900460ff161515146117485760405162461bcd60e51b815260206004820152601960248201527f55736572206973206e6f7420696e2061646d696e206c697374000000000000006044820152606401610b50565b6001600160a01b038116600090815260136020908152604080832054835260129091528120600101805460ff60a01b191690555b601654811015611806576001600160a01b038083166000908152601360209081526040808320548352601290915290206001015460168054919092169190839081106117ca576117ca614039565b6000918252602090912001546001600160a01b031614156117f4576117ee81612aa3565b50611806565b806117fe81613ff2565b91505061177c565b506015805490600061181783613f73565b90915550506001600160a01b03166000908152601460205260409020805460ff19169055565b611845612a49565b60195481101561185457600080fd5b601855565b336000908152600c6020908152604091829020805483518184028101840190945280845260609392830182828015610e8457602002820191906000526020600020905b81548152602001906001019080831161189c575050505050905090565b6118c1612a49565b4760006118d66003546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611920576040519150601f19603f3d011682016040523d82523d6000602084013e611925565b606091505b50509050806119765760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2077697468647261772066756e647300000000000000006044820152606401610b50565b5050565b611982612a49565b600a55565b606081518351146119ec5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b50565b6000835167ffffffffffffffff811115611a0857611a0861404f565b604051908082528060200260200182016040528015611a31578160200160208202803683370190505b50905060005b8451811015611aa957611a7c858281518110611a5557611a55614039565b6020026020010151858381518110611a6f57611a6f614039565b6020026020010151610ae9565b828281518110611a8e57611a8e614039565b6020908102919091010152611aa281613ff2565b9050611a37565b509392505050565b611ab9612a49565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316331480611af75750611af783336109cd565b611b135760405162461bcd60e51b8152600401610b5090613d90565b611b1e838383612c0d565b505050565b611b2b612a49565b6001600160a01b03811660009081526014602052604090205460ff16151560011415611b895760405162461bcd60e51b815260206004820152600d60248201526c20b63932b0b23c9030b236b4b760991b6044820152606401610b50565b60158054906000611b9983613ff2565b909155505060408051606081018252601580548083526001600160a01b0394851660208085018281526001868801818152600095865260128452888620975188559151968101805492511515600160a01b026001600160a81b031990931697909916969096171790965591548282526013865284822055601680548085019091557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319168317905590815260149093529120805460ff19169091179055565b611ca36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b601b54821115611cf55760405162461bcd60e51b815260206004820152601960248201527f64726f70206e756d62657220646f65736e2774206578697374000000000000006044820152606401610b50565b506000908152601a6020908152604091829020825160e081018452815481526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a082015260069091015460c082015290565b611d60612a49565b611d6a6000612d98565b565b6000611d806003546001600160a01b031690565b905090565b611d8d612a49565b601b8054906000611d9d83613ff2565b90915550506040805160e0810182529687526000602080890182815289840198895260608a0197885260808a0196875260a08a0195865260c08a01858152601b548452601a9092529290912097518855905160018801559451600287015592516003860155905160048501555160058401559051600690920191909155600a55565b611976338383612dea565b611e32612a49565b600980546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b611e62612a49565b6000918252600e602052604090912055565b611e7c612a49565b601755565b611e89612a49565b6009805460ff19811660ff90911615179055565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600d60205260409020548214611edb57600080fd5b506000908152600d602090815260409182902082516080810184528154815260018201546001600160a01b03908116938201939093526002820154938101939093526003015416606082015290565b611f32612a49565b60008281526007602052604090208054611f4b90613f8a565b159050611f915760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207365742075726920747769636560601b6044820152606401610b50565b60008281526007602090815260409091208251611b1e928401906133eb565b611fb8612a49565b60095460ff1615611fdb5760405162461bcd60e51b8152600401610b5090613ef8565b60185482601954611fec9190613f44565b111561202f5760405162461bcd60e51b8152602060048201526012602482015271105b5bdd5b9d081a5cc8195e18d95959195960721b6044820152606401610b50565b61204a33828460405180602001604052806000815250612935565b816019600082825461205c9190613f44565b9091555050336000908152600f602052604081208054849290612080908490613f44565b909155505060016000908152601a6020527ff88cd8d612926ebb404e40725c01084b6e9b3ce0344cde068570342cbd448c6280548492906120c2908490613f44565b909155505060408051608081018252828152336020808301828152838501968752606084019283526000958652600d909152929093209051815590516001820180546001600160a01b03199081166001600160a01b0393841617909155935160028301559151600390910180549093169116179055565b60005b81518110156121b55781818151811061215757612157614039565b60200260200101516001146121a35760405162461bcd60e51b8152602060048201526012602482015271616d6f756e742068617320746f206265203160701b6044820152606401610b50565b806121ad81613ff2565b91505061213c565b506001600160a01b03841633146121fe5760405162461bcd60e51b815260206004820152600d60248201526c6e6f7420616c6c6f77616e636560981b6044820152606401610b50565b61221a8484848460405180602001604052806000815250612ecb565b60005b336000908152600c60205260409020548110156123715760005b835181101561235e5783818151811061225257612252614039565b6020026020010151600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020838154811061229057612290614039565b9060005260206000200154141561234c576001600160a01b0385166000908152600c6020526040902084518590839081106122cd576122cd614039565b602090810291909101810151825460018101845560009384529190922001556122f68233612789565b5084600d600086848151811061230e5761230e614039565b6020026020010151815260200190815260200160002060030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061235681613ff2565b915050612237565b508061236981613ff2565b91505061221d565b508151336000908152600f602052604081208054909190612393908490613f5c565b909155505081516001600160a01b0384166000908152600f6020526040812080549091906123c2908490613f44565b909155505050505050565b6123d5612a49565b600480546001600160a01b039092166001600160a01b0319928316811790915560068054909216179055565b612409612a49565b6000968752601a60205260409096209485556002850193909355600384019190915560048301556005820155600601819055600a55565b601b546000908152601a6020526040812060018101549054829161246391613f5c565b600a54915091509091565b61247b858585858561265f565b6001600160a01b0384166000908152600c6020908152604082208054600181018255908352908220018490555b6001600160a01b0386166000908152600c6020526040902054811015612524576001600160a01b0386166000908152600c602052604090208054859190839081106124f5576124f5614039565b90600052602060002001541415612512576125108187612789565b505b8061251c81613ff2565b9150506124a8565b506000838152600d6020908152604080832060030180546001600160a01b0319166001600160a01b038981169190911790915588168352600f909152812080549161256e83613f73565b90915550506001600160a01b0384166000908152600f6020526040812080549161259783613ff2565b91905055505050505050565b6125ab612a49565b6001600160a01b0381166126105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b61261981612d98565b50565b6001600160a01b038316331480612638575061263883336109cd565b6126545760405162461bcd60e51b8152600401610b5090613d90565b611b1e838383613067565b6001600160a01b0384166126855760405162461bcd60e51b8152600401610b5090613dde565b3360006126918561316b565b9050600061269e8561316b565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156126e15760405162461bcd60e51b8152600401610b5090613e66565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061271e908490613f44565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461277e848a8a8a8a8a6131b6565b505050505050505050565b6060825b6001600160a01b0383166000908152600c60205260409020546127b290600190613f5c565b81101561284b576001600160a01b0383166000908152600c602052604090206127dc826001613f44565b815481106127ec576127ec614039565b9060005260206000200154600c6000856001600160a01b03166001600160a01b03168152602001908152602001600020828154811061282d5761282d614039565b6000918252602090912001558061284381613ff2565b91505061278d565b506001600160a01b0382166000908152600c60205260409020805461287290600190613f5c565b8154811061288257612882614039565b600091825260208083209091018290556001600160a01b0384168252600c9052604090208054806128b5576128b5614023565b6000828152602080822083016000199081018390559092019092556001600160a01b0384168252600c81526040918290208054835181840281018401909452808452909183018282801561292857602002820191906000526020600020905b815481526020019060010190808311612914575b5050505050905092915050565b6001600160a01b0384166129955760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b50565b3360006129a18561316b565b905060006129ae8561316b565b90506000868152602081815260408083206001600160a01b038b168452909152812080548792906129e0908490613f44565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612a40836000898989896131b6565b50505050505050565b6003546001600160a01b03163314611d6a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b50565b6060815b601654612ab690600190613f5c565b811015612b41576016612aca826001613f44565b81548110612ada57612ada614039565b600091825260209091200154601680546001600160a01b039092169183908110612b0657612b06614039565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905580612b3981613ff2565b915050612aa7565b5060168054612b5290600190613f5c565b81548110612b6257612b62614039565b600091825260209091200180546001600160a01b03191690556016805480612b8c57612b8c614023565b6000828152602090819020820160001990810180546001600160a01b031916905590910190915560168054604080518285028101850190915281815292830182828015610e2057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612be45750505050509050919050565b6001600160a01b038316612c335760405162461bcd60e51b8152600401610b5090613e23565b8051825114612c545760405162461bcd60e51b8152600401610b5090613eb0565b604080516020810190915260009081905233905b8351811015612d2a576000848281518110612c8557612c85614039565b602002602001015190506000848381518110612ca357612ca3614039565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015612cf35760405162461bcd60e51b8152600401610b5090613d4c565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580612d2281613ff2565b915050612c68565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612d7b929190613cc3565b60405180910390a460408051602081019091526000905250505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415612e5e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b50565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b8151835114612eec5760405162461bcd60e51b8152600401610b5090613eb0565b6001600160a01b038416612f125760405162461bcd60e51b8152600401610b5090613dde565b3360005b8451811015612ff9576000858281518110612f3357612f33614039565b602002602001015190506000858381518110612f5157612f51614039565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015612fa15760405162461bcd60e51b8152600401610b5090613e66565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612fde908490613f44565b9250508190555050505080612ff290613ff2565b9050612f16565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613049929190613cc3565b60405180910390a461305f818787878787613321565b505050505050565b6001600160a01b03831661308d5760405162461bcd60e51b8152600401610b5090613e23565b3360006130998461316b565b905060006130a68461316b565b60408051602080820183526000918290528882528181528282206001600160a01b038b16835290522054909150848110156130f35760405162461bcd60e51b8152600401610b5090613d4c565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052612a40565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106131a5576131a5614039565b602090810291909101015292915050565b6001600160a01b0384163b1561305f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906131fa9089908990889088908890600401613c1e565b602060405180830381600087803b15801561321457600080fd5b505af1925050508015613244575060408051601f3d908101601f19168201909252613241918101906139bb565b60015b6132f157613250614065565b806308c379a0141561328a5750613265614081565b80613270575061328c565b8060405162461bcd60e51b8152600401610b509190613cf1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b50565b6001600160e01b0319811663f23a6e6160e01b14612a405760405162461bcd60e51b8152600401610b5090613d04565b6001600160a01b0384163b1561305f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906133659089908990889088908890600401613bc0565b602060405180830381600087803b15801561337f57600080fd5b505af19250505080156133af575060408051601f3d908101601f191682019092526133ac918101906139bb565b60015b6133bb57613250614065565b6001600160e01b0319811663bc197c8160e01b14612a405760405162461bcd60e51b8152600401610b5090613d04565b8280546133f790613f8a565b90600052602060002090601f016020900481019282613419576000855561345f565b82601f1061343257805160ff191683800117855561345f565b8280016001018555821561345f579182015b8281111561345f578251825591602001919060010190613444565b5061346b92915061346f565b5090565b5b8082111561346b5760008155600101613470565b600067ffffffffffffffff83111561349e5761349e61404f565b6040516134b5601f8501601f191660200182613fc5565b8091508381528484840111156134ca57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b03811681146134f957600080fd5b919050565b600082601f83011261350f57600080fd5b8135602061351c82613f20565b6040516135298282613fc5565b8381528281019150858301600585901b8701840188101561354957600080fd5b60005b858110156135685781358452928401929084019060010161354c565b5090979650505050505050565b600082601f83011261358657600080fd5b61359583833560208501613484565b9392505050565b6000602082840312156135ae57600080fd5b613595826134e2565b600080604083850312156135ca57600080fd5b6135d3836134e2565b91506135e1602084016134e2565b90509250929050565b6000806000806080858703121561360057600080fd5b613609856134e2565b9350613617602086016134e2565b9250604085013567ffffffffffffffff8082111561363457600080fd5b613640888389016134fe565b9350606087013591508082111561365657600080fd5b50613663878288016134fe565b91505092959194509250565b600080600080600060a0868803121561368757600080fd5b613690866134e2565b945061369e602087016134e2565b9350604086013567ffffffffffffffff808211156136bb57600080fd5b6136c789838a016134fe565b945060608801359150808211156136dd57600080fd5b6136e989838a016134fe565b935060808801359150808211156136ff57600080fd5b5061370c88828901613575565b9150509295509295909350565b6000806000806080858703121561372f57600080fd5b613738856134e2565b9350613746602086016134e2565b93969395505050506040820135916060013590565b600080600080600060a0868803121561377357600080fd5b61377c866134e2565b945061378a602087016134e2565b93506040860135925060608601359150608086013567ffffffffffffffff8111156137b457600080fd5b61370c88828901613575565b6000806000606084860312156137d557600080fd5b6137de846134e2565b9250602084013567ffffffffffffffff808211156137fb57600080fd5b613807878388016134fe565b9350604086013591508082111561381d57600080fd5b5061382a868287016134fe565b9150509250925092565b6000806040838503121561384757600080fd5b613850836134e2565b91506020830135801515811461386557600080fd5b809150509250929050565b6000806040838503121561388357600080fd5b61388c836134e2565b946020939093013593505050565b6000806000606084860312156138af57600080fd5b6138b8846134e2565b95602085013595506040909401359392505050565b600080604083850312156138e057600080fd5b823567ffffffffffffffff808211156138f857600080fd5b818501915085601f83011261390c57600080fd5b8135602061391982613f20565b6040516139268282613fc5565b8381528281019150858301600585901b870184018b101561394657600080fd5b600096505b848710156139705761395c816134e2565b83526001969096019591830191830161394b565b509650508601359250508082111561398757600080fd5b50613994858286016134fe565b9150509250929050565b6000602082840312156139b057600080fd5b81356135958161410b565b6000602082840312156139cd57600080fd5b81516135958161410b565b6000602082840312156139ea57600080fd5b5035919050565b600060208284031215613a0357600080fd5b5051919050565b60008060408385031215613a1d57600080fd5b82359150602083013567ffffffffffffffff811115613a3b57600080fd5b8301601f81018513613a4c57600080fd5b61399485823560208401613484565b60008060408385031215613a6e57600080fd5b50508035926020909101359150565b600080600060608486031215613a9257600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c08789031215613ac257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600080600080600060e0888a031215613b0757600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600081518084526020808501945080840160005b83811015613b6857815187529582019590820190600101613b4c565b509495945050505050565b6000815180845260005b81811015613b9957602081850181015186830182015201613b7d565b81811115613bab576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090613bec90830186613b38565b8281036060840152613bfe8186613b38565b90508281036080840152613c128185613b73565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090613c5890830184613b73565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613ca45783516001600160a01b031683529284019291840191600101613c7f565b50909695505050505050565b6020815260006135956020830184613b38565b604081526000613cd66040830185613b38565b8281036020840152613ce88185613b38565b95945050505050565b6020815260006135956020830184613b73565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252600e908201526d1b5a5b9d081a5cc81c185d5cd95960921b604082015260600190565b600067ffffffffffffffff821115613f3a57613f3a61404f565b5060051b60200190565b60008219821115613f5757613f5761400d565b500190565b600082821015613f6e57613f6e61400d565b500390565b600081613f8257613f8261400d565b506000190190565b600181811c90821680613f9e57607f821691505b60208210811415613fbf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715613feb57613feb61404f565b6040525050565b60006000198214156140065761400661400d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561407e5760046000803e5060005160e01c5b90565b600060443d101561408f5790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156140bf57505050505090565b82850191508151818111156140d75750505050505090565b843d87010160208285010111156140f15750505050505090565b61410060208286010187613fc5565b509095945050505050565b6001600160e01b03198116811461261957600080fdfea264697066735822122099e2db92c9cb5c1e56534054f7c99cb7048099cc4bb4ba2c5657420bf6966dae64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000002b5e3af16b1880000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000a21d3fc728efadf5fb3f55c43d1bef15b4398fb20000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
-----Decoded View---------------
Arg [0] : cost_ (uint256): 50000000000000000000
Arg [1] : nftAmountPerUser_ (uint256): 10
Arg [2] : mintPassAddress (address): 0xa21D3fc728efADf5fB3f55C43D1beF15B4398Fb2
Arg [3] : tokenAddress (address): 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000002b5e3af16b1880000
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [2] : 000000000000000000000000a21d3fc728efadf5fb3f55c43d1bef15b4398fb2
Arg [3] : 0000000000000000000000002791bca1f2de4661ed88a30c99a7a9449aa84174
Deployed Bytecode Sourcemap
58482:14365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39035:230;;;;;;;;;;-1:-1:-1;39035:230:0;;;;;:::i;:::-;;:::i;:::-;;;27744:25:1;;;27732:2;27717:18;39035:230:0;;;;;;;;38058:310;;;;;;;;;;-1:-1:-1;38058:310:0;;;;;:::i;:::-;;:::i;:::-;;;15655:14:1;;15648:22;15630:41;;15618:2;15603:18;38058:310:0;15490:187:1;68413:621:0;;;;;;:::i;:::-;;:::i;58664:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;67323:117::-;;;;;;;;;;-1:-1:-1;67323:117:0;;;;;:::i;:::-;;:::i;70866:97::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;62943:1751::-;;;;;;:::i;:::-;;:::i;58873:74::-;;;;;;;;;;-1:-1:-1;58873:74:0;;;;;;;-1:-1:-1;;;;;58873:74:0;;;;;;-1:-1:-1;;;;;12022:32:1;;;12004:51;;11992:2;11977:18;58873:74:0;11858:203:1;59043:34:0;;;;;;;;;;;;;;;;61276:1213;;;;;;:::i;:::-;;:::i;70971:497::-;;;;;;;;;;-1:-1:-1;70971:497:0;;;;;:::i;:::-;;:::i;69414:202::-;;;;;;;;;;-1:-1:-1;69414:202:0;;;;;:::i;:::-;;;;;;;59211:44;;;;;;;;;;-1:-1:-1;59211:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;59367:45;;;;;;;;;;-1:-1:-1;59367:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;65791:158;;;;;;;;;;-1:-1:-1;65791:158:0;;;;;:::i;:::-;;:::i;66082:111::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;72559:210::-;;;;;;;;;;;;;:::i;70454:86::-;;;;;;;;;;-1:-1:-1;70454:86:0;;;;;:::i;:::-;;:::i;39431:524::-;;;;;;;;;;-1:-1:-1;39431:524:0;;;;;:::i;:::-;;:::i;60938:109::-;;;;;;;;;;-1:-1:-1;60938:109:0;;;;;:::i;:::-;;:::i;58846:18::-;;;;;;;;;;-1:-1:-1;58846:18:0;;;;;;;;59907:31;;;;;;;;;;;;;;;;55340:358;;;;;;;;;;-1:-1:-1;55340:358:0;;;;;:::i;:::-;;:::i;70548:310::-;;;;;;;;;;-1:-1:-1;70548:310:0;;;;;:::i;:::-;;:::i;71936:185::-;;;;;;;;;;-1:-1:-1;71936:185:0;;;;;:::i;:::-;;:::i;:::-;;;;;;27122:4:1;27164:3;27153:9;27149:19;27141:27;;27201:6;27195:13;27184:9;27177:32;27265:4;27257:6;27253:17;27247:24;27240:4;27229:9;27225:20;27218:54;27328:4;27320:6;27316:17;27310:24;27303:4;27292:9;27288:20;27281:54;27391:4;27383:6;27379:17;27373:24;27366:4;27355:9;27351:20;27344:54;27454:4;27446:6;27442:17;27436:24;27429:4;27418:9;27414:20;27407:54;27517:4;27509:6;27505:17;27499:24;27492:4;27481:9;27477:20;27470:54;27580:4;27572:6;27568:17;27562:24;27555:4;27544:9;27540:20;27533:54;26986:607;;;;;57588:103:0;;;;;;;;;;;;;:::i;72468:83::-;;;;;;;;;;;;;:::i;59705:26::-;;;;;;;;;;;;;;;;56940:87;;;;;;;;;;-1:-1:-1;57013:6:0;;-1:-1:-1;;;;;57013:6:0;56940:87;;59419:51;;;;;;;;;;-1:-1:-1;59419:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;58730:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;58730:40:0;;;;;66449:123;;;;;;;;;;-1:-1:-1;66542:9:0;;66506:7;66533:19;;;:8;:19;;;;;:31;66449:123;;64702:402;;;;;;;;;;-1:-1:-1;64702:402:0;;;;;:::i;:::-;;:::i;40028:155::-;;;;;;;;;;-1:-1:-1;40028:155:0;;;;;:::i;:::-;;:::i;67201:113::-;;;;;;;;;;-1:-1:-1;67201:113:0;;;;;:::i;:::-;;:::i;72129:124::-;;;;;;;;;;-1:-1:-1;72129:124:0;;;;;:::i;:::-;;:::i;65957:117::-;;;;;;;;;;-1:-1:-1;65957:117:0;;;;;:::i;:::-;;:::i;65700:83::-;;;;;;;;;;;;;:::i;71770:156::-;;;;;;;;;;-1:-1:-1;71770:156:0;;;;;:::i;:::-;;:::i;:::-;;;;;;26675:13:1;;26657:32;;26736:4;26724:17;;;26718:24;-1:-1:-1;;;;;26818:21:1;;;26796:20;;;26789:51;;;;26896:4;26884:17;;;26878:24;26856:20;;;26849:54;26963:4;26951:17;;;26945:24;26941:33;26919:20;;;26912:63;;;;26644:3;26629:19;;26466:515;66993:200:0;;;;;;;;;;-1:-1:-1;66993:200:0;;;;;:::i;:::-;;:::i;62497:438::-;;;;;;;;;;-1:-1:-1;62497:438:0;;;;;:::i;:::-;;:::i;66328:113::-;;;;;;;;;;-1:-1:-1;66422:10:0;66384:7;66411:22;;;:10;:22;;;;;;66328:113;;67448:957;;;;;;:::i;:::-;;:::i;61055:211::-;;;;;;;;;;-1:-1:-1;61055:211:0;;;;;:::i;:::-;;:::i;65112:580::-;;;;;;;;;;-1:-1:-1;65112:580:0;;;;;:::i;:::-;;:::i;59084:24::-;;;;;;;;;;;;;;;;40255:168;;;;;;;;;;-1:-1:-1;40255:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;40378:27:0;;;40354:4;40378:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;40255:168;72261:199;;;;;;;;;;;;;:::i;:::-;;;;27954:25:1;;;28010:2;27995:18;;27988:34;;;;27927:18;72261:199:0;27780:248:1;60388:24:0;;;;;;;;;;;;;;;;59867:31;;;;;;;;;;;;;;;;69922:524;;;;;;;;;;-1:-1:-1;69922:524:0;;;;;:::i;:::-;;:::i;66201:119::-;;;;;;;;;;-1:-1:-1;66301:10:0;66257:7;66284:28;;;:16;:28;;;;;;66201:119;;57846:201;;;;;;;;;;-1:-1:-1;57846:201:0;;;;;:::i;:::-;;:::i;59945:28::-;;;;;;;;;;;;;;;;55006:326;;;;;;;;;;-1:-1:-1;55006:326:0;;;;;:::i;:::-;;:::i;39035:230::-;39121:7;-1:-1:-1;;;;;39149:21:0;;39141:76;;;;-1:-1:-1;;;39141:76:0;;18360:2:1;39141:76:0;;;18342:21:1;18399:2;18379:18;;;18372:30;18438:34;18418:18;;;18411:62;-1:-1:-1;;;18489:18:1;;;18482:40;18539:19;;39141:76:0;;;;;;;;;-1:-1:-1;39235:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;39235:22:0;;;;;;;;;;;;39035:230::o;38058:310::-;38160:4;-1:-1:-1;;;;;;38197:41:0;;-1:-1:-1;;;38197:41:0;;:110;;-1:-1:-1;;;;;;;38255:52:0;;-1:-1:-1;;;38255:52:0;38197:110;:163;;;-1:-1:-1;;;;;;;;;;28555:40:0;;;38324:36;38177:183;38058:310;-1:-1:-1;;38058:310:0:o;68413:621::-;-1:-1:-1;;;;;68564:18:0;;68572:10;68564:18;68556:44;;;;-1:-1:-1;;;68556:44:0;;18018:2:1;68556:44:0;;;18000:21:1;18057:2;18037:18;;;18030:30;-1:-1:-1;;;18076:18:1;;;18069:43;18129:18;;68556:44:0;17816:337:1;68556:44:0;68619:6;68629:1;68619:11;68611:42;;;;-1:-1:-1;;;68611:42:0;;22157:2:1;68611:42:0;;;22139:21:1;22196:2;22176:18;;;22169:30;-1:-1:-1;;;22215:18:1;;;22208:48;22273:18;;68611:42:0;21955:342:1;68611:42:0;68666:43;68684:4;68690:2;68694;68698:6;68666:43;;;;;;;;;;;;:17;:43::i;:::-;68720:9;;;;:5;:9;;;;;:16;;:21;;-1:-1:-1;;;;;;68720:21:0;-1:-1:-1;;;;;68720:21:0;;;;;68754:211;68783:10;68774:20;;;;:8;:20;;;;;:27;68770:31;;68754:211;;;68836:10;68827:20;;;;:8;:20;;;;;:23;;68854:2;;68827:20;68848:1;;68827:23;;;;;;:::i;:::-;;;;;;;;;:29;68823:131;;;-1:-1:-1;;;;;68877:12:0;;;;;;:8;:12;;;;;;;:21;;;;;;;;;;;;;;;;68917;68924:1;68927:10;68917:6;:21::i;:::-;;68823:131;68803:3;;;;:::i;:::-;;;;68754:211;;;-1:-1:-1;68986:10:0;68975:22;;;;:10;:22;;;;;:24;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;69010:14:0;;;;;;:10;:14;;;;;:16;;;;;;:::i;:::-;;;;;;68413:621;;;;:::o;67323:117::-;67416:15;;;;:5;:15;;;;;67409:23;;67384:13;;67416:15;67409:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67323:117;;;:::o;70866:97::-;70911:16;70948:6;70940:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70940:15:0;;;;;;;;;;;;;;;;;;;;;;;70866:97;:::o;62943:1751::-;63047:6;;;;63046:7;63038:34;;;;-1:-1:-1;;;63038:34:0;;;;;;;:::i;:::-;63119:9;;63109:6;63093:13;;:22;;;;:::i;:::-;:35;;63085:66;;;;-1:-1:-1;;;63085:66:0;;16859:2:1;63085:66:0;;;16841:21:1;16898:2;16878:18;;;16871:30;-1:-1:-1;;;16917:18:1;;;16910:48;16975:18;;63085:66:0;16657:342:1;63085:66:0;63214:9;;63205:19;;;;:8;:19;;;;;:36;;;63187:15;:54;:150;;;;-1:-1:-1;63311:9:0;;63302:19;;;;:8;:19;;;;;:35;;;;63263:36;;;;;:74;;63302:35;63263:74;:::i;:::-;63245:15;:92;63187:150;63186:319;;;-1:-1:-1;63384:9:0;;63375:19;;;;:8;:19;;;;;:35;;;63357:15;:53;:147;;;;-1:-1:-1;63479:9:0;;63470:19;;;;:8;:19;;;;;:34;;;;63432:35;;;;;:72;;63470:34;63432:72;:::i;:::-;63414:15;:90;63357:147;63164:385;;;;-1:-1:-1;;;63164:385:0;;20648:2:1;63164:385:0;;;20630:21:1;20687:2;20667:18;;;20660:30;-1:-1:-1;;;20706:18:1;;;20699:46;20762:18;;63164:385:0;20446:340:1;63164:385:0;63645:9;;63636:19;;;;:8;:19;;;;;:31;;63584:26;;;;;:35;;63613:6;;63584:35;:::i;:::-;:83;;63562:151;;;;-1:-1:-1;;;63562:151:0;;25547:2:1;63562:151:0;;;25529:21:1;25586:2;25566:18;;;25559:30;-1:-1:-1;;;25605:18:1;;;25598:48;25663:18;;63562:151:0;25345:342:1;63562:151:0;63786:9;;:33;;-1:-1:-1;;;63786:33:0;;63741:10;63786:33;;;13636:51:1;;;13703:18;;;13696:34;;;63741:10:0;63726:12;;-1:-1:-1;;;;;63786:9:0;;;;:19;;13609:18:1;;63786:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;63764:112;;;;-1:-1:-1;;;63764:112:0;;24448:2:1;63764:112:0;;;24430:21:1;24487:2;24467:18;;;24460:30;24526:27;24506:18;;;24499:55;24571:18;;63764:112:0;24246:349:1;63764:112:0;63889:16;;;:49;;-1:-1:-1;;;63889:49:0;;63911:10;63889:49;;;13943:51:1;;;;14010:18;;;14003:34;;;14053:18;;;14046:34;;;-1:-1:-1;;;;;63889:16:0;;:21;;13916:18:1;;63889:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;63954:17:0;;;;:9;:17;;;;;;:22;;-1:-1:-1;63951:486:0;;64332:14;;:38;;64276:9;;64260:13;;64332:14;;;;-1:-1:-1;;;;;64332:14:0;;64276:9;;64332:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64314:56;;;64393:7;64385:40;;;;-1:-1:-1;;;64385:40:0;;18771:2:1;64385:40:0;;;18753:21:1;18810:2;18790:18;;;18783:30;-1:-1:-1;;;18829:18:1;;;18822:50;18889:18;;64385:40:0;18569:344:1;64385:40:0;63978:459;;63951:486;64449:38;64455:10;64467:7;64476:6;64449:38;;;;;;;;;;;;:5;:38::i;:::-;64517:6;64500:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;64545:10:0;64534:22;;;;:10;:22;;;;;:32;;64560:6;;64534:22;:32;;64560:6;;64534:32;:::i;:::-;;;;-1:-1:-1;;64586:9:0;;64577:19;;;;:8;:19;;;;;:26;;:36;;64607:6;;64577:19;:36;;64607:6;;64577:36;:::i;:::-;;;;-1:-1:-1;;64641:45:0;;;;;;;;;;;64655:10;64641:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;64624:14:0;;;:5;:14;;;;;;;:62;;;;;;;;;;;-1:-1:-1;;;;;64624:62:0;;;-1:-1:-1;;;;;;64624:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;62943:1751:0:o;61276:1213::-;61372:6;;;;61371:7;61363:34;;;;-1:-1:-1;;;61363:34:0;;;;;;;:::i;:::-;61444:9;;61434:6;61418:13;;:22;;;;:::i;:::-;:35;;61410:44;;;;;;61526:16;;61502:10;61489:24;;;;:12;:24;;;;;;:33;;61516:6;;61489:33;:::i;:::-;:53;;61467:127;;;;-1:-1:-1;;;61467:127:0;;19889:2:1;61467:127:0;;;19871:21:1;19928:2;19908:18;;;19901:30;19967:26;19947:18;;;19940:54;20011:18;;61467:127:0;19687:348:1;61467:127:0;61654:9;;61645:19;;;;:8;:19;;;;;:35;;;61627:15;:53;:173;;;;-1:-1:-1;61775:9:0;;61766:19;;;;:8;:19;;;;;:34;;;;61728:35;;;;;:72;;61766:34;61728:72;:::i;:::-;61697:15;:103;61627:173;61605:239;;;;-1:-1:-1;;;61605:239:0;;20648:2:1;61605:239:0;;;20630:21:1;20687:2;20667:18;;;20660:30;-1:-1:-1;;;20706:18:1;;;20699:46;20762:18;;61605:239:0;20446:340:1;61605:239:0;61938:9;;61929:19;;;;:8;:19;;;;;:31;;61877:26;;;;;:35;;61906:6;;61877:35;:::i;:::-;:83;;61855:151;;;;-1:-1:-1;;;61855:151:0;;25547:2:1;61855:151:0;;;25529:21:1;25586:2;25566:18;;;25559:30;-1:-1:-1;;;25605:18:1;;;25598:48;25663:18;;61855:151:0;25345:342:1;61855:151:0;62070:14;;:37;;62035:9;;62019:13;;62070:14;;;;-1:-1:-1;;;;;62070:14:0;;62035:9;;62070:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62055:52;;;62126:4;62118:37;;;;-1:-1:-1;;;62118:37:0;;18771:2:1;62118:37:0;;;18753:21:1;18810:2;18790:18;;;18783:30;-1:-1:-1;;;18829:18:1;;;18822:50;18889:18;;62118:37:0;18569:344:1;62118:37:0;62168:30;62174:2;62178:7;62187:6;62168:30;;;;;;;;;;;;:5;:30::i;:::-;62226:6;62209:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;62243:14:0;;;;;;:10;:14;;;;;:24;;62261:6;;62243:14;:24;;62261:6;;62243:24;:::i;:::-;;;;-1:-1:-1;;62295:10:0;62278:28;;;;:16;:28;;;;;:38;;62310:6;;62278:28;:38;;62310:6;;62278:38;:::i;:::-;;;;-1:-1:-1;;62340:10:0;62327:24;;;;:12;:24;;;;;:34;;62355:6;;62327:24;:34;;62355:6;;62327:34;:::i;:::-;;;;-1:-1:-1;;62381:9:0;;62372:19;;;;:8;:19;;;;;:26;;:36;;62402:6;;62372:19;:36;;62402:6;;62372:36;:::i;:::-;;;;-1:-1:-1;;62436:45:0;;;;;;;;;;;62450:10;62436:45;;;;;;;;;;;;;;;;;;;-1:-1:-1;62419:14:0;;;:5;:14;;;;;;;:62;;;;;;;;;;;-1:-1:-1;;;;;;62419:62:0;;;-1:-1:-1;;;;;62419:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;61276:1213:0:o;70971:497::-;56826:13;:11;:13::i;:::-;-1:-1:-1;;;;;71069:14:0;::::1;71059:25;71069:14:::0;;;:7:::1;:14;::::0;;;;;;;;71059:25;;:9:::1;:25:::0;;;;;:33:::1;::::0;;::::1;::::0;-1:-1:-1;;;71059:33:0;::::1;;;:41;;;71037:116;;;::::0;-1:-1:-1;;;71037:116:0;;22865:2:1;71037:116:0::1;::::0;::::1;22847:21:1::0;22904:2;22884:18;;;22877:30;22943:27;22923:18;;;22916:55;22988:18;;71037:116:0::1;22663:349:1::0;71037:116:0::1;-1:-1:-1::0;;;;;71174:14:0;::::1;71200:5;71174:14:::0;;;:7:::1;:14;::::0;;;;;;;;71164:25;;:9:::1;:25:::0;;;;;:33:::1;;:41:::0;;-1:-1:-1;;;;71164:41:0::1;::::0;;71216:188:::1;71236:6;:13:::0;71232:17;::::1;71216:188;;;-1:-1:-1::0;;;;;71298:14:0;;::::1;71288:25;71298:14:::0;;;:7:::1;:14;::::0;;;;;;;;71288:25;;:9:::1;:25:::0;;;;;:30:::1;;::::0;71275:6:::1;:9:::0;;71288:30;;;::::1;::::0;71275:6;71282:1;;71275:9;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;71275:9:0::1;:43;71271:122;;;71339:14;71351:1;71339:11;:14::i;:::-;;71372:5;;71271:122;71251:3:::0;::::1;::::0;::::1;:::i;:::-;;;;71216:188;;;-1:-1:-1::0;71414:11:0::1;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;71438:14:0::1;71455:5;71438:14:::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;71438:22:0::1;::::0;;70971:497::o;65791:158::-;56826:13;:11;:13::i;:::-;65892::::1;;65876:12;:29;;65868:38;;;::::0;::::1;;65917:9;:24:::0;65791:158::o;66082:111::-;66174:10;66165:20;;;;:8;:20;;;;;;;;;66158:27;;;;;;;;;;;;;;;;;66129:16;;66158:27;;;66165:20;66158:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66082:111;:::o;72559:210::-;56826:13;:11;:13::i;:::-;72624:21:::1;72607:14;72674:7;57013:6:::0;;-1:-1:-1;;;;;57013:6:0;;56940:87;72674:7:::1;-1:-1:-1::0;;;;;72674:12:0::1;72695:6;72674:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72656:50;;;72725:7;72717:44;;;::::0;-1:-1:-1;;;72717:44:0;;26315:2:1;72717:44:0::1;::::0;::::1;26297:21:1::0;26354:2;26334:18;;;26327:30;26393:26;26373:18;;;26366:54;26437:18;;72717:44:0::1;26113:348:1::0;72717:44:0::1;72596:173;;72559:210::o:0;70454:86::-;56826:13;:11;:13::i;:::-;70517:4:::1;:15:::0;70454:86::o;39431:524::-;39587:16;39648:3;:10;39629:8;:15;:29;39621:83;;;;-1:-1:-1;;;39621:83:0;;23629:2:1;39621:83:0;;;23611:21:1;23668:2;23648:18;;;23641:30;23707:34;23687:18;;;23680:62;-1:-1:-1;;;23758:18:1;;;23751:39;23807:19;;39621:83:0;23427:405:1;39621:83:0;39717:30;39764:8;:15;39750:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39750:30:0;;39717:63;;39798:9;39793:122;39817:8;:15;39813:1;:19;39793:122;;;39873:30;39883:8;39892:1;39883:11;;;;;;;;:::i;:::-;;;;;;;39896:3;39900:1;39896:6;;;;;;;;:::i;:::-;;;;;;;39873:9;:30::i;:::-;39854:13;39868:1;39854:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;39834:3;;;:::i;:::-;;;39793:122;;;-1:-1:-1;39934:13:0;39431:524;-1:-1:-1;;;39431:524:0:o;60938:109::-;56826:13;:11;:13::i;:::-;61015:5:::1;:24:::0;;-1:-1:-1;;;;;;61015:24:0::1;-1:-1:-1::0;;;;;61015:24:0;;;::::1;::::0;;;::::1;::::0;;60938:109::o;55340:358::-;-1:-1:-1;;;;;55505:23:0;;36832:10;55505:23;;:66;;-1:-1:-1;55532:39:0;55549:7;36832:10;40255:168;:::i;55532:39::-;55483:162;;;;-1:-1:-1;;;55483:162:0;;;;;;;:::i;:::-;55658:32;55669:7;55678:3;55683:6;55658:10;:32::i;:::-;55340:358;;;:::o;70548:310::-;56826:13;:11;:13::i;:::-;-1:-1:-1;;;;;70619:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;::::1;;:22;;:14:::0;:22:::1;;70611:48;;;::::0;-1:-1:-1;;;70611:48:0;;16517:2:1;70611:48:0::1;::::0;::::1;16499:21:1::0;16556:2;16536:18;;;16529:30;-1:-1:-1;;;16575:18:1;;;16568:43;16628:18;;70611:48:0::1;16315:337:1::0;70611:48:0::1;70670:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;70719:31:0::1;::::0;;::::1;::::0;::::1;::::0;;70725:11:::1;::::0;;70719:31;;;-1:-1:-1;;;;;70719:31:0;;::::1;;::::0;;::::1;::::0;;;70745:4:::1;70719:31:::0;;;;;;-1:-1:-1;70694:22:0;;;:9:::1;:22:::0;;;;;:56;;;;;;;;::::1;::::0;;;;::::1;;-1:-1:-1::0;;;70694:56:0::1;-1:-1:-1::0;;;;;;70694:56:0;;;;;;::::1;::::0;;;;::::1;::::0;;;70778:11;;70761:14;;;:7:::1;:14:::0;;;;;:28;70800:6:::1;:18:::0;;;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;70800:18:0::1;::::0;::::1;::::0;;70829:14;;;70694:56:::1;70829:14:::0;;;;;:21;;-1:-1:-1;;70829:21:0::1;::::0;;::::1;::::0;;70548:310::o;71936:185::-;71998:11;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71998:11:0;72040:9;;72030:6;:19;;72022:57;;;;-1:-1:-1;;;72022:57:0;;19535:2:1;72022:57:0;;;19517:21:1;19574:2;19554:18;;;19547:30;19613:27;19593:18;;;19586:55;19658:18;;72022:57:0;19333:349:1;72022:57:0;-1:-1:-1;72097:16:0;;;;:8;:16;;;;;;;;;72090:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71936:185::o;57588:103::-;56826:13;:11;:13::i;:::-;57653:30:::1;57680:1;57653:18;:30::i;:::-;57588:103::o:0;72468:83::-;72509:7;72536;57013:6;;-1:-1:-1;;;;;57013:6:0;;56940:87;72536:7;72529:14;;72468:83;:::o;64702:402::-;56826:13;:11;:13::i;:::-;64939:9:::1;:11:::0;;;:9:::1;:11;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;64983:90:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;64983:90:0::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64970:9:::1;::::0;64961:19;;:8:::1;:19:::0;;;;;;;:112;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;65084:4:::1;:12:::0;64702:402::o;40028:155::-;40123:52;36832:10;40156:8;40166;40123:18;:52::i;67201:113::-;56826:13;:11;:13::i;:::-;67277:14:::1;:29:::0;;-1:-1:-1;;;;;67277:29:0;;::::1;;;-1:-1:-1::0;;;;;;67277:29:0;;::::1;::::0;;;::::1;::::0;;67201:113::o;72129:124::-;56826:13;:11;:13::i;:::-;72216:18:::1;::::0;;;:9:::1;:18;::::0;;;;;:29;72129:124::o;65957:117::-;56826:13;:11;:13::i;:::-;66038:16:::1;:28:::0;65957:117::o;65700:83::-;56826:13;:11;:13::i;:::-;65769:6:::1;::::0;;-1:-1:-1;;65759:16:0;::::1;65769:6;::::0;;::::1;65768:7;65759:16;::::0;;65700:83::o;71770:156::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71860:13:0;;;;:5;:13;;;;;:16;:26;;71852:35;;;;;;-1:-1:-1;71905:13:0;;;;:5;:13;;;;;;;;;71898:20;;;;;;;;;;;;;;;-1:-1:-1;;;;;71898:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71770:156::o;66993:200::-;56826:13;:11;:13::i;:::-;67099:15:::1;::::0;;;:5:::1;:15;::::0;;;;67093:29;;::::1;::::0;::::1;:::i;:::-;:34:::0;;-1:-1:-1;67085:67:0::1;;;::::0;-1:-1:-1;;;67085:67:0;;20993:2:1;67085:67:0::1;::::0;::::1;20975:21:1::0;21032:2;21012:18;;;21005:30;-1:-1:-1;;;21051:18:1;;;21044:50;21111:18;;67085:67:0::1;20791:344:1::0;67085:67:0::1;67163:15;::::0;;;:5:::1;:15;::::0;;;;;;;:22;;::::1;::::0;;::::1;::::0;::::1;:::i;62497:438::-:0;56826:13;:11;:13::i;:::-;62587:6:::1;::::0;::::1;;62586:7;62578:34;;;;-1:-1:-1::0;;;62578:34:0::1;;;;;;;:::i;:::-;62657:9;;62647:6;62631:13;;:22;;;;:::i;:::-;:35;;62623:66;;;::::0;-1:-1:-1;;;62623:66:0;;16859:2:1;62623:66:0::1;::::0;::::1;16841:21:1::0;16898:2;16878:18;;;16871:30;-1:-1:-1;;;16917:18:1;;;16910:48;16975:18;;62623:66:0::1;16657:342:1::0;62623:66:0::1;62700:38;62706:10;62718:7;62727:6;62700:38;;;;;;;;;;;::::0;:5:::1;:38::i;:::-;62766:6;62749:13;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;62794:10:0::1;62783:22;::::0;;;:10:::1;:22;::::0;;;;:32;;62809:6;;62783:22;:32:::1;::::0;62809:6;;62783:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;62835:1:0::1;62826:11;::::0;;;:8:::1;:11;::::0;:18;:28;;62848:6;;62826:11;:28:::1;::::0;62848:6;;62826:28:::1;:::i;:::-;::::0;;;-1:-1:-1;;62882:45:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;62896:10:::1;62882:45;::::0;;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;62865:14:0;;;:5:::1;:14:::0;;;;;;;:62;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;62865:62:0;;::::1;-1:-1:-1::0;;;;;62865:62:0;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;62497:438::o;67448:957::-;67693:9;67688:114;67708:7;:14;67704:1;:18;67688:114;;;67752:7;67760:1;67752:10;;;;;;;;:::i;:::-;;;;;;;67766:1;67752:15;67744:46;;;;-1:-1:-1;;;67744:46:0;;22157:2:1;67744:46:0;;;22139:21:1;22196:2;22176:18;;;22169:30;-1:-1:-1;;;22215:18:1;;;22208:48;22273:18;;67744:46:0;21955:342:1;67744:46:0;67724:3;;;;:::i;:::-;;;;67688:114;;;-1:-1:-1;;;;;;67820:18:0;;67828:10;67820:18;67812:44;;;;-1:-1:-1;;;67812:44:0;;18018:2:1;67812:44:0;;;18000:21:1;18057:2;18037:18;;;18030:30;-1:-1:-1;;;18076:18:1;;;18069:43;18129:18;;67812:44:0;17816:337:1;67812:44:0;67869:50;67892:4;67898:2;67902:3;67907:7;67869:50;;;;;;;;;;;;:22;:50::i;:::-;67967:9;67962:350;67991:10;67982:20;;;;:8;:20;;;;;:27;67978:31;;67962:350;;;68036:9;68031:270;68051:3;:10;68047:1;:14;68031:270;;;68118:3;68122:1;68118:6;;;;;;;;:::i;:::-;;;;;;;68091:8;:20;68100:10;-1:-1:-1;;;;;68091:20:0;-1:-1:-1;;;;;68091:20:0;;;;;;;;;;;;68112:1;68091:23;;;;;;;;:::i;:::-;;;;;;;;;:33;68087:199;;;-1:-1:-1;;;;;68149:12:0;;;;;;:8;:12;;;;;68167:6;;:3;;68171:1;;68167:6;;;;;;:::i;:::-;;;;;;;;;;;;68149:25;;;;;;;-1:-1:-1;68149:25:0;;;;;;;;;68197:21;68204:1;68207:10;68197:6;:21::i;:::-;;68264:2;68241:5;:13;68247:3;68251:1;68247:6;;;;;;;;:::i;:::-;;;;;;;68241:13;;;;;;;;;;;:20;;;:25;;;;;-1:-1:-1;;;;;68241:25:0;;;;;-1:-1:-1;;;;;68241:25:0;;;;;;68087:199;68063:3;;;;:::i;:::-;;;;68031:270;;;-1:-1:-1;68011:3:0;;;;:::i;:::-;;;;67962:350;;;-1:-1:-1;68348:10:0;;68333;68322:22;;;;:10;:22;;;;;:36;;:22;;;:36;;68348:10;;68322:36;:::i;:::-;;;;-1:-1:-1;;68387:10:0;;-1:-1:-1;;;;;68369:14:0;;;;;;:10;:14;;;;;:28;;:14;;;:28;;68387:10;;68369:28;:::i;:::-;;;;-1:-1:-1;;;;;;67448:957:0:o;61055:211::-;56826:13;:11;:13::i;:::-;61158:16:::1;:52:::0;;-1:-1:-1;;;;;61158:52:0;;::::1;-1:-1:-1::0;;;;;;61158:52:0;;::::1;::::0;::::1;::::0;;;61221:9:::1;:37:::0;;;;::::1;;::::0;;61055:211::o;65112:580::-;56826:13;:11;:13::i;:::-;65320:17:::1;::::0;;;:8:::1;:17;::::0;;;;;:42;;;65373:34:::1;::::0;::::1;:54:::0;;;;65438:33:::1;::::0;::::1;:52:::0;;;;65501:33:::1;::::0;::::1;:52:::0;65564:32:::1;::::0;::::1;:50:::0;65625:22:::1;;:33:::0;;;65669:4:::1;:15:::0;65112:580::o;72261:199::-;72428:9;;72324:14;72419:19;;;:8;:19;;;;;:26;;;;72385:31;;72324:14;;72385:60;;;:::i;:::-;72447:4;;72377:75;;;;72261:199;;:::o;69922:524::-;70110:45;70128:4;70134:2;70138;70142:6;70150:4;70110:17;:45::i;:::-;-1:-1:-1;;;;;70166:12:0;;;;;;:8;:12;;;;;;;:21;;;;;;;;;;;;;;;;;70198:153;-1:-1:-1;;;;;70218:14:0;;;;;;:8;:14;;;;;:21;70214:25;;70198:153;;;-1:-1:-1;;;;;70265:14:0;;;;;;:8;:14;;;;;:17;;70286:2;;70265:14;70280:1;;70265:17;;;;;;:::i;:::-;;;;;;;;;:23;70261:79;;;70309:15;70316:1;70319:4;70309:6;:15::i;:::-;;70261:79;70241:3;;;;:::i;:::-;;;;70198:153;;;-1:-1:-1;70361:9:0;;;;:5;:9;;;;;;;;:16;;:21;;-1:-1:-1;;;;;;70361:21:0;-1:-1:-1;;;;;70361:21:0;;;;;;;;;;70393:16;;;;:10;:16;;;;;:18;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;70422:14:0;;;;;;:10;:14;;;;;:16;;;;;;:::i;:::-;;;;;;69922:524;;;;;:::o;57846:201::-;56826:13;:11;:13::i;:::-;-1:-1:-1;;;;;57935:22:0;::::1;57927:73;;;::::0;-1:-1:-1;;;57927:73:0;;17206:2:1;57927:73:0::1;::::0;::::1;17188:21:1::0;17245:2;17225:18;;;17218:30;17284:34;17264:18;;;17257:62;-1:-1:-1;;;17335:18:1;;;17328:36;17381:19;;57927:73:0::1;17004:402:1::0;57927:73:0::1;58011:28;58030:8;58011:18;:28::i;:::-;57846:201:::0;:::o;55006:326::-;-1:-1:-1;;;;;55146:23:0;;36832:10;55146:23;;:66;;-1:-1:-1;55173:39:0;55190:7;36832:10;40255:168;:::i;55173:39::-;55124:162;;;;-1:-1:-1;;;55124:162:0;;;;;;;:::i;:::-;55299:25;55305:7;55314:2;55318:5;55299;:25::i;41880:974::-;-1:-1:-1;;;;;42068:16:0;;42060:66;;;;-1:-1:-1;;;42060:66:0;;;;;;;:::i;:::-;36832:10;42139:16;42204:21;42222:2;42204:17;:21::i;:::-;42181:44;;42236:24;42263:25;42281:6;42263:17;:25::i;:::-;42236:52;;42374:19;42396:13;;;;;;;;;;;-1:-1:-1;;;;;42396:19:0;;;;;;;;;;42434:21;;;;42426:76;;;;-1:-1:-1;;;42426:76:0;;;;;;;:::i;:::-;42538:9;:13;;;;;;;;;;;-1:-1:-1;;;;;42538:19:0;;;;;;;;;;42560:20;;;42538:42;;42602:17;;;;;;;:27;;42560:20;;42538:9;42602:27;;42560:20;;42602:27;:::i;:::-;;;;-1:-1:-1;;42647:46:0;;;27954:25:1;;;28010:2;27995:18;;27988:34;;;-1:-1:-1;;;;;42647:46:0;;;;;;;;;;;;;;27927:18:1;42647:46:0;;;;;;;42778:68;42809:8;42819:4;42825:2;42829;42833:6;42841:4;42778:30;:68::i;:::-;42049:805;;;;41880:974;;;;;:::o;69042:364::-;69115:16;69166:5;69149:128;-1:-1:-1;;;;;69177:14:0;;;;;;:8;:14;;;;;:21;:25;;69201:1;;69177:25;:::i;:::-;69173:1;:29;69149:128;;;-1:-1:-1;;;;;69244:14:0;;;;;;:8;:14;;;;;69259:5;:1;69263;69259:5;:::i;:::-;69244:21;;;;;;;;:::i;:::-;;;;;;;;;69224:8;:14;69233:4;-1:-1:-1;;;;;69224:14:0;-1:-1:-1;;;;;69224:14:0;;;;;;;;;;;;69239:1;69224:17;;;;;;;;:::i;:::-;;;;;;;;;;:41;69204:3;;;;:::i;:::-;;;;69149:128;;;-1:-1:-1;;;;;;69294:14:0;;;;;;:8;:14;;;;;69309:21;;:25;;69333:1;;69309:25;:::i;:::-;69294:41;;;;;;;;:::i;:::-;;;;;;;;;;;;69287:48;;;-1:-1:-1;;;;;69346:14:0;;;;:8;:14;;;;;:20;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;69346:20:0;;;;;;;;;;;;-1:-1:-1;;;;;69384:14:0;;;;:8;:14;;;;;;;69377:21;;;;;;;;;;;;;;;;;69384:14;;69377:21;;69384:14;69377:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69042:364;;;;:::o;45676:729::-;-1:-1:-1;;;;;45829:16:0;;45821:62;;;;-1:-1:-1;;;45821:62:0;;24802:2:1;45821:62:0;;;24784:21:1;24841:2;24821:18;;;24814:30;24880:34;24860:18;;;24853:62;-1:-1:-1;;;24931:18:1;;;24924:31;24972:19;;45821:62:0;24600:397:1;45821:62:0;36832:10;45896:16;45961:21;45979:2;45961:17;:21::i;:::-;45938:44;;45993:24;46020:25;46038:6;46020:17;:25::i;:::-;45993:52;;46137:9;:13;;;;;;;;;;;-1:-1:-1;;;;;46137:17:0;;;;;;;;;:27;;46158:6;;46137:9;:27;;46158:6;;46137:27;:::i;:::-;;;;-1:-1:-1;;46180:52:0;;;27954:25:1;;;28010:2;27995:18;;27988:34;;;-1:-1:-1;;;;;46180:52:0;;;;46213:1;;46180:52;;;;;;27927:18:1;46180:52:0;;;;;;;46323:74;46354:8;46372:1;46376:2;46380;46384:6;46392:4;46323:30;:74::i;:::-;45810:595;;;45676:729;;;;:::o;57105:132::-;57013:6;;-1:-1:-1;;;;;57013:6:0;36832:10;57169:23;57161:68;;;;-1:-1:-1;;;57161:68:0;;22504:2:1;57161:68:0;;;22486:21:1;;;22523:18;;;22516:30;22582:34;22562:18;;;22555:62;22634:18;;57161:68:0;22302:356:1;71476:286:0;71530:16;71578:5;71561:104;71589:6;:13;:17;;71605:1;;71589:17;:::i;:::-;71585:1;:21;71561:104;;;71640:6;71647:5;:1;71651;71647:5;:::i;:::-;71640:13;;;;;;;;:::i;:::-;;;;;;;;;;;71628:6;:9;;-1:-1:-1;;;;;71640:13:0;;;;71635:1;;71628:9;;;;;;:::i;:::-;;;;;;;;;;:25;;-1:-1:-1;;;;;;71628:25:0;-1:-1:-1;;;;;71628:25:0;;;;;;;;;;71608:3;;;;:::i;:::-;;;;71561:104;;;-1:-1:-1;71682:6:0;71689:13;;:17;;71705:1;;71689:17;:::i;:::-;71682:25;;;;;;;;:::i;:::-;;;;;;;;;;71675:32;;-1:-1:-1;;;;;;71675:32:0;;;71718:6;:12;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;71718:12:0;;;;;-1:-1:-1;;;;;;71718:12:0;;;;;;;;;71748:6;71741:13;;;;;;;;;;;;;;;;;;;;;71748:6;71741:13;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;71741:13:0;;;;;;;;;;;;;;;;;;;;;;71476:286;;;:::o;48977:969::-;-1:-1:-1;;;;;49129:18:0;;49121:66;;;;-1:-1:-1;;;49121:66:0;;;;;;;:::i;:::-;49220:7;:14;49206:3;:10;:28;49198:81;;;;-1:-1:-1;;;49198:81:0;;;;;;;:::i;:::-;49336:66;;;;;;;;;49292:16;49336:66;;;;36832:10;;49415:373;49439:3;:10;49435:1;:14;49415:373;;;49471:10;49484:3;49488:1;49484:6;;;;;;;;:::i;:::-;;;;;;;49471:19;;49505:14;49522:7;49530:1;49522:10;;;;;;;;:::i;:::-;;;;;;;;;;;;49549:19;49571:13;;;;;;;;;;-1:-1:-1;;;;;49571:19:0;;;;;;;;;;;;49522:10;;-1:-1:-1;49613:21:0;;;;49605:70;;;;-1:-1:-1;;;49605:70:0;;;;;;;:::i;:::-;49719:9;:13;;;;;;;;;;;-1:-1:-1;;;;;49719:19:0;;;;;;;;;;49741:20;;49719:42;;49451:3;;;;:::i;:::-;;;;49415:373;;;;49843:1;-1:-1:-1;;;;;49805:55:0;49829:4;-1:-1:-1;;;;;49805:55:0;49819:8;-1:-1:-1;;;;;49805:55:0;;49847:3;49852:7;49805:55;;;;;;;:::i;:::-;;;;;;;;49873:65;;;;;;;;;49917:1;49873:65;;49110:836;48977:969;;;:::o;58207:191::-;58300:6;;;-1:-1:-1;;;;;58317:17:0;;;-1:-1:-1;;;;;;58317:17:0;;;;;;;58350:40;;58300:6;;;58317:17;58300:6;;58350:40;;58281:16;;58350:40;58270:128;58207:191;:::o;50089:331::-;50244:8;-1:-1:-1;;;;;50235:17:0;:5;-1:-1:-1;;;;;50235:17:0;;;50227:71;;;;-1:-1:-1;;;50227:71:0;;23219:2:1;50227:71:0;;;23201:21:1;23258:2;23238:18;;;23231:30;23297:34;23277:18;;;23270:62;-1:-1:-1;;;23348:18:1;;;23341:39;23397:19;;50227:71:0;23017:405:1;50227:71:0;-1:-1:-1;;;;;50309:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;50309:46:0;;;;;;;;;;50371:41;;15630::1;;;50371::0;;15603:18:1;50371:41:0;;;;;;;50089:331;;;:::o;43212:1146::-;43439:7;:14;43425:3;:10;:28;43417:81;;;;-1:-1:-1;;;43417:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43517:16:0;;43509:66;;;;-1:-1:-1;;;43509:66:0;;;;;;;:::i;:::-;36832:10;43588:16;43705:421;43729:3;:10;43725:1;:14;43705:421;;;43761:10;43774:3;43778:1;43774:6;;;;;;;;:::i;:::-;;;;;;;43761:19;;43795:14;43812:7;43820:1;43812:10;;;;;;;;:::i;:::-;;;;;;;;;;;;43839:19;43861:13;;;;;;;;;;-1:-1:-1;;;;;43861:19:0;;;;;;;;;;;;43812:10;;-1:-1:-1;43903:21:0;;;;43895:76;;;;-1:-1:-1;;;43895:76:0;;;;;;;:::i;:::-;44015:9;:13;;;;;;;;;;;-1:-1:-1;;;;;44015:19:0;;;;;;;;;;44037:20;;;44015:42;;44087:17;;;;;;;:27;;44037:20;;44015:9;44087:27;;44037:20;;44087:27;:::i;:::-;;;;;;;;43746:380;;;43741:3;;;;:::i;:::-;;;43705:421;;;;44173:2;-1:-1:-1;;;;;44143:47:0;44167:4;-1:-1:-1;;;;;44143:47:0;44157:8;-1:-1:-1;;;;;44143:47:0;;44177:3;44182:7;44143:47;;;;;;;:::i;:::-;;;;;;;;44275:75;44311:8;44321:4;44327:2;44331:3;44336:7;44345:4;44275:35;:75::i;:::-;43406:952;43212:1146;;;;;:::o;47919:808::-;-1:-1:-1;;;;;48046:18:0;;48038:66;;;;-1:-1:-1;;;48038:66:0;;;;;;;:::i;:::-;36832:10;48117:16;48182:21;48200:2;48182:17;:21::i;:::-;48159:44;;48214:24;48241:25;48259:6;48241:17;:25::i;:::-;48279:66;;;;;;;;;-1:-1:-1;48279:66:0;;;;48380:13;;;;;;;;;-1:-1:-1;;;;;48380:19:0;;;;;;;;48214:52;;-1:-1:-1;48418:21:0;;;;48410:70;;;;-1:-1:-1;;;48410:70:0;;;;;;;:::i;:::-;48516:9;:13;;;;;;;;;;;-1:-1:-1;;;;;48516:19:0;;;;;;;;;;;;48538:20;;;48516:42;;48587:54;;27954:25:1;;;27995:18;;;27988:34;;;48516:19:0;;48587:54;;;;;;27927:18:1;48587:54:0;;;;;;;48654:65;;;;;;;;;48698:1;48654:65;;;43212:1146;54355:198;54475:16;;;54489:1;54475:16;;;;;;;;;54421;;54450:22;;54475:16;;;;;;;;;;;;-1:-1:-1;54475:16:0;54450:41;;54513:7;54502:5;54508:1;54502:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;54540:5;54355:198;-1:-1:-1;;54355:198:0:o;52782:744::-;-1:-1:-1;;;;;52997:13:0;;19639:19;:23;52993:526;;53033:72;;-1:-1:-1;;;53033:72:0;;-1:-1:-1;;;;;53033:38:0;;;;;:72;;53072:8;;53082:4;;53088:2;;53092:6;;53100:4;;53033:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53033:72:0;;;;;;;;-1:-1:-1;;53033:72:0;;;;;;;;;;;;:::i;:::-;;;53029:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;53381:6;53374:14;;-1:-1:-1;;;53374:14:0;;;;;;;;:::i;53029:479::-;;;53430:62;;-1:-1:-1;;;53430:62:0;;25894:2:1;53430:62:0;;;25876:21:1;25933:2;25913:18;;;25906:30;25972:34;25952:18;;;25945:62;-1:-1:-1;;;26023:18:1;;;26016:50;26083:19;;53430:62:0;25692:416:1;53029:479:0;-1:-1:-1;;;;;;53155:55:0;;-1:-1:-1;;;53155:55:0;53151:154;;53235:50;;-1:-1:-1;;;53235:50:0;;;;;;;:::i;53534:813::-;-1:-1:-1;;;;;53774:13:0;;19639:19;:23;53770:570;;53810:79;;-1:-1:-1;;;53810:79:0;;-1:-1:-1;;;;;53810:43:0;;;;;:79;;53854:8;;53864:4;;53870:3;;53875:7;;53884:4;;53810:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53810:79:0;;;;;;;;-1:-1:-1;;53810:79:0;;;;;;;;;;;;:::i;:::-;;;53806:523;;;;:::i;:::-;-1:-1:-1;;;;;;53971:60:0;;-1:-1:-1;;;53971:60:0;53967:159;;54056:50;;-1:-1:-1;;;54056:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:220::-;1447:5;1500:3;1493:4;1485:6;1481:17;1477:27;1467:55;;1518:1;1515;1508:12;1467:55;1540:79;1615:3;1606:6;1593:20;1586:4;1578:6;1574:17;1540:79;:::i;:::-;1531:88;1405:220;-1:-1:-1;;;1405:220:1:o;1630:186::-;1689:6;1742:2;1730:9;1721:7;1717:23;1713:32;1710:52;;;1758:1;1755;1748:12;1710:52;1781:29;1800:9;1781:29;:::i;1821:260::-;1889:6;1897;1950:2;1938:9;1929:7;1925:23;1921:32;1918:52;;;1966:1;1963;1956:12;1918:52;1989:29;2008:9;1989:29;:::i;:::-;1979:39;;2037:38;2071:2;2060:9;2056:18;2037:38;:::i;:::-;2027:48;;1821:260;;;;;:::o;2086:744::-;2222:6;2230;2238;2246;2299:3;2287:9;2278:7;2274:23;2270:33;2267:53;;;2316:1;2313;2306:12;2267:53;2339:29;2358:9;2339:29;:::i;:::-;2329:39;;2387:38;2421:2;2410:9;2406:18;2387:38;:::i;:::-;2377:48;;2476:2;2465:9;2461:18;2448:32;2499:18;2540:2;2532:6;2529:14;2526:34;;;2556:1;2553;2546:12;2526:34;2579:61;2632:7;2623:6;2612:9;2608:22;2579:61;:::i;:::-;2569:71;;2693:2;2682:9;2678:18;2665:32;2649:48;;2722:2;2712:8;2709:16;2706:36;;;2738:1;2735;2728:12;2706:36;;2761:63;2816:7;2805:8;2794:9;2790:24;2761:63;:::i;:::-;2751:73;;;2086:744;;;;;;;:::o;2835:943::-;2989:6;2997;3005;3013;3021;3074:3;3062:9;3053:7;3049:23;3045:33;3042:53;;;3091:1;3088;3081:12;3042:53;3114:29;3133:9;3114:29;:::i;:::-;3104:39;;3162:38;3196:2;3185:9;3181:18;3162:38;:::i;:::-;3152:48;;3251:2;3240:9;3236:18;3223:32;3274:18;3315:2;3307:6;3304:14;3301:34;;;3331:1;3328;3321:12;3301:34;3354:61;3407:7;3398:6;3387:9;3383:22;3354:61;:::i;:::-;3344:71;;3468:2;3457:9;3453:18;3440:32;3424:48;;3497:2;3487:8;3484:16;3481:36;;;3513:1;3510;3503:12;3481:36;3536:63;3591:7;3580:8;3569:9;3565:24;3536:63;:::i;:::-;3526:73;;3652:3;3641:9;3637:19;3624:33;3608:49;;3682:2;3672:8;3669:16;3666:36;;;3698:1;3695;3688:12;3666:36;;3721:51;3764:7;3753:8;3742:9;3738:24;3721:51;:::i;:::-;3711:61;;;2835:943;;;;;;;;:::o;3783:397::-;3869:6;3877;3885;3893;3946:3;3934:9;3925:7;3921:23;3917:33;3914:53;;;3963:1;3960;3953:12;3914:53;3986:29;4005:9;3986:29;:::i;:::-;3976:39;;4034:38;4068:2;4057:9;4053:18;4034:38;:::i;:::-;3783:397;;4024:48;;-1:-1:-1;;;;4119:2:1;4104:18;;4091:32;;4170:2;4155:18;4142:32;;3783:397::o;4185:606::-;4289:6;4297;4305;4313;4321;4374:3;4362:9;4353:7;4349:23;4345:33;4342:53;;;4391:1;4388;4381:12;4342:53;4414:29;4433:9;4414:29;:::i;:::-;4404:39;;4462:38;4496:2;4485:9;4481:18;4462:38;:::i;:::-;4452:48;;4547:2;4536:9;4532:18;4519:32;4509:42;;4598:2;4587:9;4583:18;4570:32;4560:42;;4653:3;4642:9;4638:19;4625:33;4681:18;4673:6;4670:30;4667:50;;;4713:1;4710;4703:12;4667:50;4736:49;4777:7;4768:6;4757:9;4753:22;4736:49;:::i;4796:669::-;4923:6;4931;4939;4992:2;4980:9;4971:7;4967:23;4963:32;4960:52;;;5008:1;5005;4998:12;4960:52;5031:29;5050:9;5031:29;:::i;:::-;5021:39;;5111:2;5100:9;5096:18;5083:32;5134:18;5175:2;5167:6;5164:14;5161:34;;;5191:1;5188;5181:12;5161:34;5214:61;5267:7;5258:6;5247:9;5243:22;5214:61;:::i;:::-;5204:71;;5328:2;5317:9;5313:18;5300:32;5284:48;;5357:2;5347:8;5344:16;5341:36;;;5373:1;5370;5363:12;5341:36;;5396:63;5451:7;5440:8;5429:9;5425:24;5396:63;:::i;:::-;5386:73;;;4796:669;;;;;:::o;5470:347::-;5535:6;5543;5596:2;5584:9;5575:7;5571:23;5567:32;5564:52;;;5612:1;5609;5602:12;5564:52;5635:29;5654:9;5635:29;:::i;:::-;5625:39;;5714:2;5703:9;5699:18;5686:32;5761:5;5754:13;5747:21;5740:5;5737:32;5727:60;;5783:1;5780;5773:12;5727:60;5806:5;5796:15;;;5470:347;;;;;:::o;5822:254::-;5890:6;5898;5951:2;5939:9;5930:7;5926:23;5922:32;5919:52;;;5967:1;5964;5957:12;5919:52;5990:29;6009:9;5990:29;:::i;:::-;5980:39;6066:2;6051:18;;;;6038:32;;-1:-1:-1;;;5822:254:1:o;6081:322::-;6158:6;6166;6174;6227:2;6215:9;6206:7;6202:23;6198:32;6195:52;;;6243:1;6240;6233:12;6195:52;6266:29;6285:9;6266:29;:::i;:::-;6256:39;6342:2;6327:18;;6314:32;;-1:-1:-1;6393:2:1;6378:18;;;6365:32;;6081:322;-1:-1:-1;;;6081:322:1:o;6408:1219::-;6526:6;6534;6587:2;6575:9;6566:7;6562:23;6558:32;6555:52;;;6603:1;6600;6593:12;6555:52;6643:9;6630:23;6672:18;6713:2;6705:6;6702:14;6699:34;;;6729:1;6726;6719:12;6699:34;6767:6;6756:9;6752:22;6742:32;;6812:7;6805:4;6801:2;6797:13;6793:27;6783:55;;6834:1;6831;6824:12;6783:55;6870:2;6857:16;6892:4;6915:43;6955:2;6915:43;:::i;:::-;6987:2;6981:9;6999:31;7027:2;7019:6;6999:31;:::i;:::-;7065:18;;;7099:15;;;;-1:-1:-1;7134:11:1;;;7176:1;7172:10;;;7164:19;;7160:28;;7157:41;-1:-1:-1;7154:61:1;;;7211:1;7208;7201:12;7154:61;7233:1;7224:10;;7243:169;7257:2;7254:1;7251:9;7243:169;;;7314:23;7333:3;7314:23;:::i;:::-;7302:36;;7275:1;7268:9;;;;;7358:12;;;;7390;;7243:169;;;-1:-1:-1;7431:6:1;-1:-1:-1;;7475:18:1;;7462:32;;-1:-1:-1;;7506:16:1;;;7503:36;;;7535:1;7532;7525:12;7503:36;;7558:63;7613:7;7602:8;7591:9;7587:24;7558:63;:::i;:::-;7548:73;;;6408:1219;;;;;:::o;7632:245::-;7690:6;7743:2;7731:9;7722:7;7718:23;7714:32;7711:52;;;7759:1;7756;7749:12;7711:52;7798:9;7785:23;7817:30;7841:5;7817:30;:::i;7882:249::-;7951:6;8004:2;7992:9;7983:7;7979:23;7975:32;7972:52;;;8020:1;8017;8010:12;7972:52;8052:9;8046:16;8071:30;8095:5;8071:30;:::i;8136:180::-;8195:6;8248:2;8236:9;8227:7;8223:23;8219:32;8216:52;;;8264:1;8261;8254:12;8216:52;-1:-1:-1;8287:23:1;;8136:180;-1:-1:-1;8136:180:1:o;8321:184::-;8391:6;8444:2;8432:9;8423:7;8419:23;8415:32;8412:52;;;8460:1;8457;8450:12;8412:52;-1:-1:-1;8483:16:1;;8321:184;-1:-1:-1;8321:184:1:o;8510:518::-;8588:6;8596;8649:2;8637:9;8628:7;8624:23;8620:32;8617:52;;;8665:1;8662;8655:12;8617:52;8701:9;8688:23;8678:33;;8762:2;8751:9;8747:18;8734:32;8789:18;8781:6;8778:30;8775:50;;;8821:1;8818;8811:12;8775:50;8844:22;;8897:4;8889:13;;8885:27;-1:-1:-1;8875:55:1;;8926:1;8923;8916:12;8875:55;8949:73;9014:7;9009:2;8996:16;8991:2;8987;8983:11;8949:73;:::i;9033:248::-;9101:6;9109;9162:2;9150:9;9141:7;9137:23;9133:32;9130:52;;;9178:1;9175;9168:12;9130:52;-1:-1:-1;;9201:23:1;;;9271:2;9256:18;;;9243:32;;-1:-1:-1;9033:248:1:o;9286:316::-;9363:6;9371;9379;9432:2;9420:9;9411:7;9407:23;9403:32;9400:52;;;9448:1;9445;9438:12;9400:52;-1:-1:-1;;9471:23:1;;;9541:2;9526:18;;9513:32;;-1:-1:-1;9592:2:1;9577:18;;;9564:32;;9286:316;-1:-1:-1;9286:316:1:o;9607:523::-;9711:6;9719;9727;9735;9743;9751;9804:3;9792:9;9783:7;9779:23;9775:33;9772:53;;;9821:1;9818;9811:12;9772:53;-1:-1:-1;;9844:23:1;;;9914:2;9899:18;;9886:32;;-1:-1:-1;9965:2:1;9950:18;;9937:32;;10016:2;10001:18;;9988:32;;-1:-1:-1;10067:3:1;10052:19;;10039:33;;-1:-1:-1;10119:3:1;10104:19;10091:33;;-1:-1:-1;9607:523:1;-1:-1:-1;9607:523:1:o;10135:592::-;10248:6;10256;10264;10272;10280;10288;10296;10349:3;10337:9;10328:7;10324:23;10320:33;10317:53;;;10366:1;10363;10356:12;10317:53;-1:-1:-1;;10389:23:1;;;10459:2;10444:18;;10431:32;;-1:-1:-1;10510:2:1;10495:18;;10482:32;;10561:2;10546:18;;10533:32;;-1:-1:-1;10612:3:1;10597:19;;10584:33;;-1:-1:-1;10664:3:1;10649:19;;10636:33;;-1:-1:-1;10716:3:1;10701:19;10688:33;;-1:-1:-1;10135:592:1;-1:-1:-1;10135:592:1:o;10732:435::-;10785:3;10823:5;10817:12;10850:6;10845:3;10838:19;10876:4;10905:2;10900:3;10896:12;10889:19;;10942:2;10935:5;10931:14;10963:1;10973:169;10987:6;10984:1;10981:13;10973:169;;;11048:13;;11036:26;;11082:12;;;;11117:15;;;;11009:1;11002:9;10973:169;;;-1:-1:-1;11158:3:1;;10732:435;-1:-1:-1;;;;;10732:435:1:o;11172:471::-;11213:3;11251:5;11245:12;11278:6;11273:3;11266:19;11303:1;11313:162;11327:6;11324:1;11321:13;11313:162;;;11389:4;11445:13;;;11441:22;;11435:29;11417:11;;;11413:20;;11406:59;11342:12;11313:162;;;11493:6;11490:1;11487:13;11484:87;;;11559:1;11552:4;11543:6;11538:3;11534:16;11530:27;11523:38;11484:87;-1:-1:-1;11625:2:1;11604:15;-1:-1:-1;;11600:29:1;11591:39;;;;11632:4;11587:50;;11172:471;-1:-1:-1;;11172:471:1:o;12066:826::-;-1:-1:-1;;;;;12463:15:1;;;12445:34;;12515:15;;12510:2;12495:18;;12488:43;12425:3;12562:2;12547:18;;12540:31;;;12388:4;;12594:57;;12631:19;;12623:6;12594:57;:::i;:::-;12699:9;12691:6;12687:22;12682:2;12671:9;12667:18;12660:50;12733:44;12770:6;12762;12733:44;:::i;:::-;12719:58;;12826:9;12818:6;12814:22;12808:3;12797:9;12793:19;12786:51;12854:32;12879:6;12871;12854:32;:::i;:::-;12846:40;12066:826;-1:-1:-1;;;;;;;;12066:826:1:o;12897:560::-;-1:-1:-1;;;;;13194:15:1;;;13176:34;;13246:15;;13241:2;13226:18;;13219:43;13293:2;13278:18;;13271:34;;;13336:2;13321:18;;13314:34;;;13156:3;13379;13364:19;;13357:32;;;13119:4;;13406:45;;13431:19;;13423:6;13406:45;:::i;:::-;13398:53;12897:560;-1:-1:-1;;;;;;;12897:560:1:o;14091:658::-;14262:2;14314:21;;;14384:13;;14287:18;;;14406:22;;;14233:4;;14262:2;14485:15;;;;14459:2;14444:18;;;14233:4;14528:195;14542:6;14539:1;14536:13;14528:195;;;14607:13;;-1:-1:-1;;;;;14603:39:1;14591:52;;14698:15;;;;14663:12;;;;14639:1;14557:9;14528:195;;;-1:-1:-1;14740:3:1;;14091:658;-1:-1:-1;;;;;;14091:658:1:o;14754:261::-;14933:2;14922:9;14915:21;14896:4;14953:56;15005:2;14994:9;14990:18;14982:6;14953:56;:::i;15020:465::-;15277:2;15266:9;15259:21;15240:4;15303:56;15355:2;15344:9;15340:18;15332:6;15303:56;:::i;:::-;15407:9;15399:6;15395:22;15390:2;15379:9;15375:18;15368:50;15435:44;15472:6;15464;15435:44;:::i;:::-;15427:52;15020:465;-1:-1:-1;;;;;15020:465:1:o;15682:219::-;15831:2;15820:9;15813:21;15794:4;15851:44;15891:2;15880:9;15876:18;15868:6;15851:44;:::i;15906:404::-;16108:2;16090:21;;;16147:2;16127:18;;;16120:30;16186:34;16181:2;16166:18;;16159:62;-1:-1:-1;;;16252:2:1;16237:18;;16230:38;16300:3;16285:19;;15906:404::o;17411:400::-;17613:2;17595:21;;;17652:2;17632:18;;;17625:30;17691:34;17686:2;17671:18;;17664:62;-1:-1:-1;;;17757:2:1;17742:18;;17735:34;17801:3;17786:19;;17411:400::o;18918:410::-;19120:2;19102:21;;;19159:2;19139:18;;;19132:30;19198:34;19193:2;19178:18;;19171:62;-1:-1:-1;;;19264:2:1;19249:18;;19242:44;19318:3;19303:19;;18918:410::o;20040:401::-;20242:2;20224:21;;;20281:2;20261:18;;;20254:30;20320:34;20315:2;20300:18;;20293:62;-1:-1:-1;;;20386:2:1;20371:18;;20364:35;20431:3;20416:19;;20040:401::o;21140:399::-;21342:2;21324:21;;;21381:2;21361:18;;;21354:30;21420:34;21415:2;21400:18;;21393:62;-1:-1:-1;;;21486:2:1;21471:18;;21464:33;21529:3;21514:19;;21140:399::o;21544:406::-;21746:2;21728:21;;;21785:2;21765:18;;;21758:30;21824:34;21819:2;21804:18;;21797:62;-1:-1:-1;;;21890:2:1;21875:18;;21868:40;21940:3;21925:19;;21544:406::o;23837:404::-;24039:2;24021:21;;;24078:2;24058:18;;;24051:30;24117:34;24112:2;24097:18;;24090:62;-1:-1:-1;;;24183:2:1;24168:18;;24161:38;24231:3;24216:19;;23837:404::o;25002:338::-;25204:2;25186:21;;;25243:2;25223:18;;;25216:30;-1:-1:-1;;;25277:2:1;25262:18;;25255:44;25331:2;25316:18;;25002:338::o;28033:183::-;28093:4;28126:18;28118:6;28115:30;28112:56;;;28148:18;;:::i;:::-;-1:-1:-1;28193:1:1;28189:14;28205:4;28185:25;;28033:183::o;28221:128::-;28261:3;28292:1;28288:6;28285:1;28282:13;28279:39;;;28298:18;;:::i;:::-;-1:-1:-1;28334:9:1;;28221:128::o;28354:125::-;28394:4;28422:1;28419;28416:8;28413:34;;;28427:18;;:::i;:::-;-1:-1:-1;28464:9:1;;28354:125::o;28484:136::-;28523:3;28551:5;28541:39;;28560:18;;:::i;:::-;-1:-1:-1;;;28596:18:1;;28484:136::o;28625:380::-;28704:1;28700:12;;;;28747;;;28768:61;;28822:4;28814:6;28810:17;28800:27;;28768:61;28875:2;28867:6;28864:14;28844:18;28841:38;28838:161;;;28921:10;28916:3;28912:20;28909:1;28902:31;28956:4;28953:1;28946:15;28984:4;28981:1;28974:15;28838:161;;28625:380;;;:::o;29010:249::-;29120:2;29101:13;;-1:-1:-1;;29097:27:1;29085:40;;29155:18;29140:34;;29176:22;;;29137:62;29134:88;;;29202:18;;:::i;:::-;29238:2;29231:22;-1:-1:-1;;29010:249:1:o;29264:135::-;29303:3;-1:-1:-1;;29324:17:1;;29321:43;;;29344:18;;:::i;:::-;-1:-1:-1;29391:1:1;29380:13;;29264:135::o;29404:127::-;29465:10;29460:3;29456:20;29453:1;29446:31;29496:4;29493:1;29486:15;29520:4;29517:1;29510:15;29536:127;29597:10;29592:3;29588:20;29585:1;29578:31;29628:4;29625:1;29618:15;29652:4;29649:1;29642:15;29668:127;29729:10;29724:3;29720:20;29717:1;29710:31;29760:4;29757:1;29750:15;29784:4;29781:1;29774:15;29800:127;29861:10;29856:3;29852:20;29849:1;29842:31;29892:4;29889:1;29882:15;29916:4;29913:1;29906:15;29932:179;29967:3;30009:1;29991:16;29988:23;29985:120;;;30055:1;30052;30049;30034:23;-1:-1:-1;30092:1:1;30086:8;30081:3;30077:18;29985:120;29932:179;:::o;30116:671::-;30155:3;30197:4;30179:16;30176:26;30173:39;;;30116:671;:::o;30173:39::-;30239:2;30233:9;-1:-1:-1;;30304:16:1;30300:25;;30297:1;30233:9;30276:50;30355:4;30349:11;30379:16;30414:18;30485:2;30478:4;30470:6;30466:17;30463:25;30458:2;30450:6;30447:14;30444:45;30441:58;;;30492:5;;;;;30116:671;:::o;30441:58::-;30529:6;30523:4;30519:17;30508:28;;30565:3;30559:10;30592:2;30584:6;30581:14;30578:27;;;30598:5;;;;;;30116:671;:::o;30578:27::-;30682:2;30663:16;30657:4;30653:27;30649:36;30642:4;30633:6;30628:3;30624:16;30620:27;30617:69;30614:82;;;30689:5;;;;;;30116:671;:::o;30614:82::-;30705:57;30756:4;30747:6;30739;30735:19;30731:30;30725:4;30705:57;:::i;:::-;-1:-1:-1;30778:3:1;;30116:671;-1:-1:-1;;;;;30116:671:1:o;30792:131::-;-1:-1:-1;;;;;;30866:32:1;;30856:43;;30846:71;;30913:1;30910;30903:12
Swarm Source
ipfs://99e2db92c9cb5c1e56534054f7c99cb7048099cc4bb4ba2c5657420bf6966dae
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.