Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 160 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19192076 | 217 days ago | IN | 0 ETH | 0.00181608 | ||||
Approve | 19186326 | 218 days ago | IN | 0 ETH | 0.0015955 | ||||
Approve | 19186325 | 218 days ago | IN | 0 ETH | 0.00164204 | ||||
Approve | 19186303 | 218 days ago | IN | 0 ETH | 0.00392486 | ||||
Approve | 19186288 | 218 days ago | IN | 0 ETH | 0.00245614 | ||||
Approve | 19186272 | 218 days ago | IN | 0 ETH | 0.00661041 | ||||
Approve | 19186261 | 218 days ago | IN | 0 ETH | 0.00256837 | ||||
Approve | 19186261 | 218 days ago | IN | 0 ETH | 0.00401135 | ||||
Approve | 19186252 | 218 days ago | IN | 0 ETH | 0.00392805 | ||||
Approve | 19186236 | 218 days ago | IN | 0 ETH | 0.00357286 | ||||
Approve | 19186228 | 218 days ago | IN | 0 ETH | 0.00335752 | ||||
Set Limit | 19186226 | 218 days ago | IN | 0 ETH | 0.00212989 | ||||
Approve | 19186222 | 218 days ago | IN | 0 ETH | 0.00326603 | ||||
Approve | 19186222 | 218 days ago | IN | 0 ETH | 0.00326603 | ||||
Approve | 19186221 | 218 days ago | IN | 0 ETH | 0.00294303 | ||||
Set Limit | 19186221 | 218 days ago | IN | 0 ETH | 0.00189187 | ||||
Set Limit | 19186218 | 218 days ago | IN | 0 ETH | 0.00229398 | ||||
Approve | 19186218 | 218 days ago | IN | 0 ETH | 0.00325164 | ||||
Approve | 19186215 | 218 days ago | IN | 0 ETH | 0.00314826 | ||||
Approve | 19186212 | 218 days ago | IN | 0 ETH | 0.00344557 | ||||
Approve | 19186212 | 218 days ago | IN | 0 ETH | 0.00351812 | ||||
Approve | 19186208 | 218 days ago | IN | 0 ETH | 0.00205959 | ||||
Approve | 19186205 | 218 days ago | IN | 0 ETH | 0.00375527 | ||||
Set Limit | 19186205 | 218 days ago | IN | 0 ETH | 0.0024128 | ||||
Approve | 19186202 | 218 days ago | IN | 0 ETH | 0.00379751 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FroggyFriends404
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-08 */ //SPDX-License-Identifier: UNLICENSED /* The Official FroggyFriends Contract - ERC404 88888 db 888b. 888b. .d88b. 8 8888 8 dPYb 8 8 8 .8 8P Y8 8 8www 8 dPwwYb 8 8 8wwP' 8b d8 8 8 8 dP Yb 888P' 8 `Y88P' 8888 8888 Website https://www.froggyfriends.io/ Swap https://swap.froggyfriendsnft.com/ Opensea https://opensea.io/collection/froggyfriendsnft Ribbit Items https://opensea.io/collection/ribbit-items Soulbound https://opensea.io/collection/froggy-soulbounds Twitter https://twitter.com/FroggyFriendNFT */ pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the 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 towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (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 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 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. uint256 twos = denominator & (0 - denominator); 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 (unsignedRoundsUp(rounding) && 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 * towards zero. * * 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 + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * 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 256, 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 + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @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), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @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) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } 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); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/utils/Pausable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { bool private _paused; /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/access/Ownable2Step.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } } // File: contracts/ERC404.sol pragma solidity ^0.8.0; abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } /// @notice ERC404 /// A gas-efficient, mixed ERC20 / ERC721 implementation /// with native liquidity and fractionalization. /// /// This is an experimental standard designed to integrate /// with pre-existing ERC20 / ERC721 support as smoothly as /// possible. /// /// @dev In order to support full functionality of ERC20 and ERC721 /// supply assumptions are made that slightly constraint usage. /// Ensure decimals are sufficiently large (standard 18 recommended) /// as ids are effectively encoded in the lowest range of amounts. /// /// NFTs are spent on ERC20 functions in a FILO queue, this is by /// design. /// abstract contract ERC404 is Ownable2Step { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); error Unauthorized(); error InvalidOwner(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amountOrId ) public virtual { if (amountOrId <= minted) { if (from != _ownerOf[amountOrId]) { revert InvalidSender(); } if (to == address(0)) { revert InvalidRecipient(); } if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; // update _owned for sender uint256 updatedId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[amountOrId]] = updatedId; // pop _owned[from].pop(); // update index for the moved id _ownedIndex[updatedId] = _ownedIndex[amountOrId]; // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, _getUnit()); } else { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal virtual returns (bool) { uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas if (!whitelist[from]) { uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < tokens_to_burn; i++) { _burn(from); } } // Skip minting for certain addresses to save gas if (!whitelist[to]) { uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } emit ERC20Transfer(from, to, amount); return true; } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mint(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } unchecked { minted++; } uint256 id = minted; if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; emit Transfer(address(0), to, id); } function _burn(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; emit Transfer(from, address(0), id); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } } // File: contracts/FroggyFriends.sol contract FroggyFriends404 is ERC404, Pausable, ReentrancyGuard { string public baseTokenURI; uint256 public buyLimit; uint256 public sellLimit; uint256 public txLimit; mapping (address => uint256) public userBuylimit; mapping (address => uint256) public userSelllimit; using Strings for uint256; bool public applyTxLimit; constructor( address _owner, uint256 _initialSupply, uint8 _decimal, uint256 _buylimit, uint256 _selllimit ) ERC404("Froggy Friends 404", "TADPOLE", _decimal, _initialSupply, _owner) { balanceOf[_owner] = _initialSupply * 10 ** _decimal; buyLimit = _buylimit * 10 ** _decimal; sellLimit = _selllimit * 10 ** _decimal; txLimit = 10 * 10 ** _decimal; } function setLimit(uint256 _buylimit, uint256 _selllimit) public onlyOwner{ buyLimit = _buylimit; sellLimit = _selllimit; } function _mint( address to ) internal override whenNotPaused{ return super._mint(to); } function startApplyingLimit() external onlyOwner{ applyTxLimit = true; } function stopApplyingLimit() external onlyOwner{ applyTxLimit = false; } function _transfer( address from, address to, uint256 amount ) internal override virtual whenNotPaused returns (bool){ if(applyTxLimit){ require(amount < txLimit, "exceed tx limit"); } if(!whitelist[from]){ userSelllimit[from] += amount; require(userSelllimit[from] <= sellLimit, "not allowed anymore to sell"); } if(!whitelist[to]){ userBuylimit[to] += amount; require(userBuylimit[to] <= buyLimit, "not allowed anymore to buy"); } return super._transfer(from, to, amount); } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString(), ".json") : ""; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBuylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSelllimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801562000010575f80fd5b50604051620023603803806200236083398101604081905262000033916200020f565b6040805180820182526012815271119c9bd9d9de48119c9a595b991cc80d0c0d60721b60208083019190915282518084019093526007835266544144504f4c4560c81b9083015290848688806001600160a01b038116620000ad57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000b881620001a2565b506002620000c7868262000310565b506003620000d6858262000310565b5060ff83166080819052620000ed90600a620004eb565b620000f9908362000502565b60a0525050600d805460ff1916905550506001600e55506200011d83600a620004eb565b62000129908562000502565b6001600160a01b0386165f908152600560205260409020556200014e83600a620004eb565b6200015a908362000502565b6010556200016a83600a620004eb565b62000176908262000502565b6011556200018683600a620004eb565b6200019390600a62000502565b601255506200051c9350505050565b600180546001600160a01b0319169055620001bd81620001c0565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f805f60a0868803121562000224575f80fd5b85516001600160a01b03811681146200023b575f80fd5b60208701516040880151919650945060ff8116811462000259575f80fd5b6060870151608090970151959894975095949392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200029b57607f821691505b602082108103620002ba57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200030b57805f5260205f20601f840160051c81016020851015620002e75750805b601f840160051c820191505b8181101562000308575f8155600101620002f3565b50505b505050565b81516001600160401b038111156200032c576200032c62000272565b62000344816200033d845462000286565b84620002c0565b602080601f8311600181146200037a575f8415620003625750858301515b5f19600386901b1c1916600185901b178555620003d4565b5f85815260208120601f198616915b82811015620003aa5788860151825594840194600190910190840162000389565b5085821015620003c857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200043057815f1904821115620004145762000414620003dc565b808516156200042257918102915b93841c9390800290620003f5565b509250929050565b5f826200044857506001620004e5565b816200045657505f620004e5565b81600181146200046f57600281146200047a576200049a565b6001915050620004e5565b60ff8411156200048e576200048e620003dc565b50506001821b620004e5565b5060208310610133831016604e8410600b8410161715620004bf575081810a620004e5565b620004cb8383620003f0565b805f1904821115620004e157620004e1620003dc565b0290505b92915050565b5f620004fb60ff84168362000438565b9392505050565b8082028115828204841417620004e557620004e5620003dc565b60805160a051611e1b620005455f395f6102a801525f81816103120152610f040152611e1b5ff3fe608060405234801561000f575f80fd5b506004361061021e575f3560e01c8063715018a61161012a578063c87b56dd116100b4578063e30c397811610079578063e30c3978146104e2578063e985e9c5146104f3578063f0306ea414610520578063f2fde38b14610528578063f349b1731461053b575f80fd5b8063c87b56dd1461046b578063d547cfb71461047e578063dd62ed3e14610486578063e0df5b6f146104b0578063e2d6f33a146104c3575f80fd5b80639b19251a116100fa5780639b19251a14610408578063a22cb4651461042a578063a9059cbb1461043d578063b88d4fde14610450578063c6a6035a14610463575f80fd5b8063715018a6146103e057806379ba5097146103e85780638da5cb5b146103f057806395d89b4114610400575f80fd5b80634f02c420116101ab578063589210d91161017b578063589210d9146103915780635c975abb1461039a5780636352211e146103a55780636caae832146103b857806370a08231146103c1575f80fd5b80634f02c420146103595780634f91e48c14610362578063504334c21461036b57806353d6fd591461037e575f80fd5b80631e70b6df116101f15780631e70b6df146102d8578063207add91146102e557806323b872dd146102fa578063313ce5671461030d57806342842e0e14610346575f80fd5b806306fdde0314610222578063081812fc14610240578063095ea7b31461028057806318160ddd146102a3575b5f80fd5b61022a61055a565b6040516102379190611709565b60405180910390f35b61026861024e36600461173b565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610237565b61029361028e366004611768565b6105e6565b6040519015158152602001610237565b6102ca7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610237565b6015546102939060ff1681565b6102f86102f3366004611790565b610731565b005b6102f86103083660046117b0565b610744565b6103347f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610237565b6102f86103543660046117b0565b610ac0565b6102ca60045481565b6102ca60115481565b6102f8610379366004611886565b610b91565b6102f861038c3660046118e6565b610ba7565b6102ca60105481565b600d5460ff16610293565b6102686103b336600461173b565b610bd9565b6102ca60125481565b6102ca6103cf36600461191f565b60056020525f908152604090205481565b6102f8610c13565b6102f8610c26565b5f546001600160a01b0316610268565b61022a610c6f565b61029361041636600461191f565b600c6020525f908152604090205460ff1681565b6102f86104383660046118e6565b610c7c565b61029361044b366004611768565b610ce7565b6102f861045e366004611938565b610cfa565b6102f8610dba565b61022a61047936600461173b565b610dd1565b61022a610e2d565b6102ca6104943660046119cb565b600660209081525f928352604080842090915290825290205481565b6102f86104be3660046119fc565b610e3a565b6102ca6104d136600461191f565b60136020525f908152604090205481565b6001546001600160a01b0316610268565b6102936105013660046119cb565b600860209081525f928352604080842090915290825290205460ff1681565b6102f8610e4e565b6102f861053636600461191f565b610e62565b6102ca61054936600461191f565b60146020525f908152604090205481565b6002805461056790611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461059390611a2e565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b505050505081565b5f60045482111580156105f857505f82115b156106cc575f828152600960205260409020546001600160a01b031633811480159061064757506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610664576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610727565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610739610ed2565b601091909155601155565b6004548111610a54575f818152600960205260409020546001600160a01b0384811691161461078657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107ad57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107e957506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561080b57505f818152600760205260409020546001600160a01b03163314155b15610828576040516282b42960e81b815260040160405180910390fd5b610830610efe565b6001600160a01b0384165f9081526005602052604081208054909190610857908490611a7a565b909155506108659050610efe565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a905290812080546108ce90600190611a7a565b815481106108de576108de611a8d565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061092157610921611a8d565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061095557610955611aa1565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109b79190611a7a565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a3d610efe565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610aad57610a898282611a7a565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610ab8848484610f2f565b50505b505050565b610acb838383610744565b6001600160a01b0382163b15801590610b735750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190611ab5565b6001600160e01b03191614155b15610abb57604051633da6393160e01b815260040160405180910390fd5b610b99610ed2565b610ba38282611101565b5050565b610baf610ed2565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c0e5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c1b610ed2565b610c245f61111a565b565b60015433906001600160a01b03168114610c635760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c6c8161111a565b50565b6003805461056790611a2e565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610cf3338484610f2f565b9392505050565b610d05858585610744565b6001600160a01b0384163b15801590610d9c5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d4f9033908a90899089908990600401611adc565b6020604051808303815f875af1158015610d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611ab5565b6001600160e01b03191614155b15610ab857604051633da6393160e01b815260040160405180910390fd5b610dc2610ed2565b6015805460ff19166001179055565b60605f600f8054610de190611a2e565b905011610dfc5760405180602001604052805f81525061072b565b600f610e0783611133565b604051602001610e18929190611b2e565b60405160208183030381529060405292915050565b600f805461056790611a2e565b610e42610ed2565b600f610ba38282611c05565b610e56610ed2565b6015805460ff19169055565b610e6a610ed2565b600180546001600160a01b0383166001600160a01b03199091168117909155610e9a5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c245760405163118cdaa760e01b8152336004820152602401610c5a565b5f610f2a7f0000000000000000000000000000000000000000000000000000000000000000600a611da5565b905090565b5f610f386111c3565b60155460ff1615610f86576012548210610f865760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c5a565b6001600160a01b0384165f908152600c602052604090205460ff1661103a576001600160a01b0384165f9081526014602052604081208054849290610fcc908490611db3565b90915550506011546001600160a01b0385165f90815260146020526040902054111561103a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c5a565b6001600160a01b0383165f908152600c602052604090205460ff166110ee576001600160a01b0383165f9081526013602052604081208054849290611080908490611db3565b90915550506010546001600160a01b0384165f9081526013602052604090205411156110ee5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c5a565b6110f98484846111e7565b949350505050565b600261110d8382611c05565b506003610abb8282611c05565b600180546001600160a01b0319169055610c6c8161138c565b60605f61113f836113db565b60010190505f8167ffffffffffffffff81111561115e5761115e6117e9565b6040519080825280601f01601f191660200182016040528015611188576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461119257509392505050565b600d5460ff1615610c245760405163d93c066560e01b815260040160405180910390fd5b5f806111f1610efe565b6001600160a01b038087165f818152600560205260408082208054948a168352908220549282529394509192909186919061122c8386611a7a565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166112bb576001600160a01b0387165f90815260056020526040812054611287908590611dc6565b6112918585611dc6565b61129b9190611a7a565b90505f5b818110156112b8576112b0896114b2565b60010161129f565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611332575f6112e58483611dc6565b6001600160a01b0388165f90815260056020526040902054611308908690611dc6565b6113129190611a7a565b90505f5b8181101561132f57611327886115d3565b600101611316565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161137791815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611445576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146357662386f26fc10000830492506010015b6305f5e100831061147b576305f5e100830492506008015b612710831061148f57612710830492506004015b606483106114a1576064830492506002015b600a831061072b5760010192915050565b6001600160a01b0381166114d957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546114fe90600190611a7a565b8154811061150e5761150e611a8d565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061154b5761154b611aa1565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6115db6111c3565b610c6c816001600160a01b03811661160657604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b0316156116465760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a8352908320805460018181018355828652938520018590559252905461169d9190611a7a565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156117015781810151838201526020016116e9565b50505f910152565b602081525f82518060208401526117278160408501602087016116e7565b601f01601f19169190910160400192915050565b5f6020828403121561174b575f80fd5b5035919050565b80356001600160a01b0381168114610c0e575f80fd5b5f8060408385031215611779575f80fd5b61178283611752565b946020939093013593505050565b5f80604083850312156117a1575f80fd5b50508035926020909101359150565b5f805f606084860312156117c2575f80fd5b6117cb84611752565b92506117d960208501611752565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261180c575f80fd5b813567ffffffffffffffff80821115611827576118276117e9565b604051601f8301601f19908116603f0116810190828211818310171561184f5761184f6117e9565b81604052838152866020858801011115611867575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611897575f80fd5b823567ffffffffffffffff808211156118ae575f80fd5b6118ba868387016117fd565b935060208501359150808211156118cf575f80fd5b506118dc858286016117fd565b9150509250929050565b5f80604083850312156118f7575f80fd5b61190083611752565b915060208301358015158114611914575f80fd5b809150509250929050565b5f6020828403121561192f575f80fd5b610cf382611752565b5f805f805f6080868803121561194c575f80fd5b61195586611752565b945061196360208701611752565b935060408601359250606086013567ffffffffffffffff80821115611986575f80fd5b818801915088601f830112611999575f80fd5b8135818111156119a7575f80fd5b8960208285010111156119b8575f80fd5b9699959850939650602001949392505050565b5f80604083850312156119dc575f80fd5b6119e583611752565b91506119f360208401611752565b90509250929050565b5f60208284031215611a0c575f80fd5b813567ffffffffffffffff811115611a22575f80fd5b6110f9848285016117fd565b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072b5761072b611a66565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611ac5575f80fd5b81516001600160e01b031981168114610cf3575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611b3b81611a2e565b60018281168015611b535760018114611b6857611b94565b60ff1984168752821515830287019450611b94565b885f526020805f205f5b85811015611b8b5781548a820152908401908201611b72565b50505082870194505b505050508351611ba88183602088016116e7565b64173539b7b760d91b9101908152600501949350505050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611be65750805b601f840160051c820191505b81811015610ab8575f8155600101611bf2565b815167ffffffffffffffff811115611c1f57611c1f6117e9565b611c3381611c2d8454611a2e565b84611bc1565b602080601f831160018114611c66575f8415611c4f5750858301515b5f19600386901b1c1916600185901b178555611cbd565b5f85815260208120601f198616915b82811015611c9457888601518255948401946001909101908401611c75565b5085821015611cb157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b600181815b80851115611cff57815f1904821115611ce557611ce5611a66565b80851615611cf257918102915b93841c9390800290611cca565b509250929050565b5f82611d155750600161072b565b81611d2157505f61072b565b8160018114611d375760028114611d4157611d5d565b600191505061072b565b60ff841115611d5257611d52611a66565b50506001821b61072b565b5060208310610133831016604e8410600b8410161715611d80575081810a61072b565b611d8a8383611cc5565b805f1904821115611d9d57611d9d611a66565b029392505050565b5f610cf360ff841683611d07565b8082018082111561072b5761072b611a66565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220fb974e82a3e34013358f0175cd67d21e32261033ab96b55b1e4e0d7a617cc5cf64736f6c63430008180033000000000000000000000000a4826a269b7d4b9d7911544a7364e3b8216a8b1d0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061021e575f3560e01c8063715018a61161012a578063c87b56dd116100b4578063e30c397811610079578063e30c3978146104e2578063e985e9c5146104f3578063f0306ea414610520578063f2fde38b14610528578063f349b1731461053b575f80fd5b8063c87b56dd1461046b578063d547cfb71461047e578063dd62ed3e14610486578063e0df5b6f146104b0578063e2d6f33a146104c3575f80fd5b80639b19251a116100fa5780639b19251a14610408578063a22cb4651461042a578063a9059cbb1461043d578063b88d4fde14610450578063c6a6035a14610463575f80fd5b8063715018a6146103e057806379ba5097146103e85780638da5cb5b146103f057806395d89b4114610400575f80fd5b80634f02c420116101ab578063589210d91161017b578063589210d9146103915780635c975abb1461039a5780636352211e146103a55780636caae832146103b857806370a08231146103c1575f80fd5b80634f02c420146103595780634f91e48c14610362578063504334c21461036b57806353d6fd591461037e575f80fd5b80631e70b6df116101f15780631e70b6df146102d8578063207add91146102e557806323b872dd146102fa578063313ce5671461030d57806342842e0e14610346575f80fd5b806306fdde0314610222578063081812fc14610240578063095ea7b31461028057806318160ddd146102a3575b5f80fd5b61022a61055a565b6040516102379190611709565b60405180910390f35b61026861024e36600461173b565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610237565b61029361028e366004611768565b6105e6565b6040519015158152602001610237565b6102ca7f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b604051908152602001610237565b6015546102939060ff1681565b6102f86102f3366004611790565b610731565b005b6102f86103083660046117b0565b610744565b6103347f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610237565b6102f86103543660046117b0565b610ac0565b6102ca60045481565b6102ca60115481565b6102f8610379366004611886565b610b91565b6102f861038c3660046118e6565b610ba7565b6102ca60105481565b600d5460ff16610293565b6102686103b336600461173b565b610bd9565b6102ca60125481565b6102ca6103cf36600461191f565b60056020525f908152604090205481565b6102f8610c13565b6102f8610c26565b5f546001600160a01b0316610268565b61022a610c6f565b61029361041636600461191f565b600c6020525f908152604090205460ff1681565b6102f86104383660046118e6565b610c7c565b61029361044b366004611768565b610ce7565b6102f861045e366004611938565b610cfa565b6102f8610dba565b61022a61047936600461173b565b610dd1565b61022a610e2d565b6102ca6104943660046119cb565b600660209081525f928352604080842090915290825290205481565b6102f86104be3660046119fc565b610e3a565b6102ca6104d136600461191f565b60136020525f908152604090205481565b6001546001600160a01b0316610268565b6102936105013660046119cb565b600860209081525f928352604080842090915290825290205460ff1681565b6102f8610e4e565b6102f861053636600461191f565b610e62565b6102ca61054936600461191f565b60146020525f908152604090205481565b6002805461056790611a2e565b80601f016020809104026020016040519081016040528092919081815260200182805461059390611a2e565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b505050505081565b5f60045482111580156105f857505f82115b156106cc575f828152600960205260409020546001600160a01b031633811480159061064757506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610664576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610727565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610739610ed2565b601091909155601155565b6004548111610a54575f818152600960205260409020546001600160a01b0384811691161461078657604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107ad57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107e957506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561080b57505f818152600760205260409020546001600160a01b03163314155b15610828576040516282b42960e81b815260040160405180910390fd5b610830610efe565b6001600160a01b0384165f9081526005602052604081208054909190610857908490611a7a565b909155506108659050610efe565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a905290812080546108ce90600190611a7a565b815481106108de576108de611a8d565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061092157610921611a8d565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061095557610955611aa1565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109b79190611a7a565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a3d610efe565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610aad57610a898282611a7a565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610ab8848484610f2f565b50505b505050565b610acb838383610744565b6001600160a01b0382163b15801590610b735750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b669190611ab5565b6001600160e01b03191614155b15610abb57604051633da6393160e01b815260040160405180910390fd5b610b99610ed2565b610ba38282611101565b5050565b610baf610ed2565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c0e5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c1b610ed2565b610c245f61111a565b565b60015433906001600160a01b03168114610c635760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c6c8161111a565b50565b6003805461056790611a2e565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610cf3338484610f2f565b9392505050565b610d05858585610744565b6001600160a01b0384163b15801590610d9c5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d4f9033908a90899089908990600401611adc565b6020604051808303815f875af1158015610d6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8f9190611ab5565b6001600160e01b03191614155b15610ab857604051633da6393160e01b815260040160405180910390fd5b610dc2610ed2565b6015805460ff19166001179055565b60605f600f8054610de190611a2e565b905011610dfc5760405180602001604052805f81525061072b565b600f610e0783611133565b604051602001610e18929190611b2e565b60405160208183030381529060405292915050565b600f805461056790611a2e565b610e42610ed2565b600f610ba38282611c05565b610e56610ed2565b6015805460ff19169055565b610e6a610ed2565b600180546001600160a01b0383166001600160a01b03199091168117909155610e9a5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c245760405163118cdaa760e01b8152336004820152602401610c5a565b5f610f2a7f0000000000000000000000000000000000000000000000000000000000000012600a611da5565b905090565b5f610f386111c3565b60155460ff1615610f86576012548210610f865760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c5a565b6001600160a01b0384165f908152600c602052604090205460ff1661103a576001600160a01b0384165f9081526014602052604081208054849290610fcc908490611db3565b90915550506011546001600160a01b0385165f90815260146020526040902054111561103a5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c5a565b6001600160a01b0383165f908152600c602052604090205460ff166110ee576001600160a01b0383165f9081526013602052604081208054849290611080908490611db3565b90915550506010546001600160a01b0384165f9081526013602052604090205411156110ee5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c5a565b6110f98484846111e7565b949350505050565b600261110d8382611c05565b506003610abb8282611c05565b600180546001600160a01b0319169055610c6c8161138c565b60605f61113f836113db565b60010190505f8167ffffffffffffffff81111561115e5761115e6117e9565b6040519080825280601f01601f191660200182016040528015611188576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461119257509392505050565b600d5460ff1615610c245760405163d93c066560e01b815260040160405180910390fd5b5f806111f1610efe565b6001600160a01b038087165f818152600560205260408082208054948a168352908220549282529394509192909186919061122c8386611a7a565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166112bb576001600160a01b0387165f90815260056020526040812054611287908590611dc6565b6112918585611dc6565b61129b9190611a7a565b90505f5b818110156112b8576112b0896114b2565b60010161129f565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611332575f6112e58483611dc6565b6001600160a01b0388165f90815260056020526040902054611308908690611dc6565b6113129190611a7a565b90505f5b8181101561132f57611327886115d3565b600101611316565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161137791815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611445576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146357662386f26fc10000830492506010015b6305f5e100831061147b576305f5e100830492506008015b612710831061148f57612710830492506004015b606483106114a1576064830492506002015b600a831061072b5760010192915050565b6001600160a01b0381166114d957604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546114fe90600190611a7a565b8154811061150e5761150e611a8d565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061154b5761154b611aa1565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6115db6111c3565b610c6c816001600160a01b03811661160657604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b0316156116465760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a8352908320805460018181018355828652938520018590559252905461169d9190611a7a565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156117015781810151838201526020016116e9565b50505f910152565b602081525f82518060208401526117278160408501602087016116e7565b601f01601f19169190910160400192915050565b5f6020828403121561174b575f80fd5b5035919050565b80356001600160a01b0381168114610c0e575f80fd5b5f8060408385031215611779575f80fd5b61178283611752565b946020939093013593505050565b5f80604083850312156117a1575f80fd5b50508035926020909101359150565b5f805f606084860312156117c2575f80fd5b6117cb84611752565b92506117d960208501611752565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261180c575f80fd5b813567ffffffffffffffff80821115611827576118276117e9565b604051601f8301601f19908116603f0116810190828211818310171561184f5761184f6117e9565b81604052838152866020858801011115611867575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611897575f80fd5b823567ffffffffffffffff808211156118ae575f80fd5b6118ba868387016117fd565b935060208501359150808211156118cf575f80fd5b506118dc858286016117fd565b9150509250929050565b5f80604083850312156118f7575f80fd5b61190083611752565b915060208301358015158114611914575f80fd5b809150509250929050565b5f6020828403121561192f575f80fd5b610cf382611752565b5f805f805f6080868803121561194c575f80fd5b61195586611752565b945061196360208701611752565b935060408601359250606086013567ffffffffffffffff80821115611986575f80fd5b818801915088601f830112611999575f80fd5b8135818111156119a7575f80fd5b8960208285010111156119b8575f80fd5b9699959850939650602001949392505050565b5f80604083850312156119dc575f80fd5b6119e583611752565b91506119f360208401611752565b90509250929050565b5f60208284031215611a0c575f80fd5b813567ffffffffffffffff811115611a22575f80fd5b6110f9848285016117fd565b600181811c90821680611a4257607f821691505b602082108103611a6057634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561072b5761072b611a66565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611ac5575f80fd5b81516001600160e01b031981168114610cf3575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611b3b81611a2e565b60018281168015611b535760018114611b6857611b94565b60ff1984168752821515830287019450611b94565b885f526020805f205f5b85811015611b8b5781548a820152908401908201611b72565b50505082870194505b505050508351611ba88183602088016116e7565b64173539b7b760d91b9101908152600501949350505050565b601f821115610abb57805f5260205f20601f840160051c81016020851015611be65750805b601f840160051c820191505b81811015610ab8575f8155600101611bf2565b815167ffffffffffffffff811115611c1f57611c1f6117e9565b611c3381611c2d8454611a2e565b84611bc1565b602080601f831160018114611c66575f8415611c4f5750858301515b5f19600386901b1c1916600185901b178555611cbd565b5f85815260208120601f198616915b82811015611c9457888601518255948401946001909101908401611c75565b5085821015611cb157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b600181815b80851115611cff57815f1904821115611ce557611ce5611a66565b80851615611cf257918102915b93841c9390800290611cca565b509250929050565b5f82611d155750600161072b565b81611d2157505f61072b565b8160018114611d375760028114611d4157611d5d565b600191505061072b565b60ff841115611d5257611d52611a66565b50506001821b61072b565b5060208310610133831016604e8410600b8410161715611d80575081810a61072b565b611d8a8383611cc5565b805f1904821115611d9d57611d9d611a66565b029392505050565b5f610cf360ff841683611d07565b8082018082111561072b5761072b611a66565b5f82611de057634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220fb974e82a3e34013358f0175cd67d21e32261033ab96b55b1e4e0d7a617cc5cf64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a4826a269b7d4b9d7911544a7364e3b8216a8b1d0000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c8
-----Decoded View---------------
Arg [0] : _owner (address): 0xA4826a269b7D4B9D7911544a7364e3B8216a8B1d
Arg [1] : _initialSupply (uint256): 10000
Arg [2] : _decimal (uint8): 18
Arg [3] : _buylimit (uint256): 200
Arg [4] : _selllimit (uint256): 200
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000a4826a269b7d4b9d7911544a7364e3b8216a8b1d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode Sourcemap
44052:2404:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35124:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35835:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;35835:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;35835:46:0;855:203:1;37666:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;37666:642:0;1500:187:1;35360:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;35360:36:0;1692:177:1;44388:24:0;;;;;;;;;44870:145;;;;;;:::i;:::-;;:::i;:::-;;38715:1716;;;;;;:::i;:::-;;:::i;35260:31::-;;;;;;;;2632:4:1;2620:17;;;2602:36;;2590:2;2575:18;35260:31:0;2460:184:1;40727:405:0;;;;;;:::i;:::-;;:::i;35495:21::-;;;;;;44185:24;;;;;;46097:158;;;;;;:::i;:::-;;:::i;36995:111::-;;;;;;:::i;:::-;;:::i;44155:23::-;;;;;;26906:86;26977:7;;;;26906:86;;37178:193;;;;;;:::i;:::-;;:::i;44216:22::-;;;;;;35601:44;;;;;;:::i;:::-;;;;;;;;;;;;;;30279:103;;;:::i;32916:235::-;;;:::i;29604:87::-;29650:7;29677:6;-1:-1:-1;;;;;29677:6:0;29604:87;;35178:20;;;:::i;36446:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38359:207;;;;;;:::i;:::-;;:::i;40490:160::-;;;;;;:::i;:::-;;:::i;41227:437::-;;;;;;:::i;:::-;;:::i;45146:86::-;;;:::i;46263:190::-;;;;;;:::i;:::-;;:::i;44122:26::-;;;:::i;35715:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;45983:106;;;;;;:::i;:::-;;:::i;44245:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;32004:101;32084:13;;-1:-1:-1;;;;;32084:13:0;32004:101;;35946:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;45240:86;;;:::i;32304:181::-;;;;;;:::i;:::-;;:::i;44300:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;35124:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37666:642::-;37769:4;37804:6;;37790:10;:20;;:38;;;;;37827:1;37814:10;:14;37790:38;37786:491;;;37845:13;37861:20;;;:8;:20;;;;;;-1:-1:-1;;;;;37861:20:0;37902:10;:19;;;;;:59;;-1:-1:-1;;;;;;37926:23:0;;;;;;:16;:23;;;;;;;;37950:10;37926:35;;;;;;;;;;37925:36;37902:59;37898:121;;;37989:14;;-1:-1:-1;;;37989:14:0;;;;;;;;;;;37898:121;38035:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;38035:33:0;-1:-1:-1;;;;;38035:33:0;;;;;;;;;38090:36;;1838:25:1;;;38090:36:0;;;;;;1811:18:1;38090:36:0;;;;;;;37830:308;37786:491;;;38169:10;38159:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;38159:30:0;;;;;;;;;;;;:43;;;38224:41;1838:25:1;;;38159:30:0;;38169:10;38224:41;;1811:18:1;38224:41:0;;;;;;;37786:491;-1:-1:-1;38296:4:0;37666:642;;;;;:::o;44870:145::-;29490:13;:11;:13::i;:::-;44954:8:::1;:20:::0;;;;44985:9:::1;:22:::0;44870:145::o;38715:1716::-;38861:6;;38847:10;:20;38843:1581;;38896:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;38888:28:0;;;38896:20;;38888:28;38884:91;;38944:15;;-1:-1:-1;;;38944:15:0;;;;;;;;;;;38884:91;-1:-1:-1;;;;;38995:16:0;;38991:82;;39039:18;;-1:-1:-1;;;39039:18:0;;;;;;;;;;;38991:82;39111:10;-1:-1:-1;;;;;39111:18:0;;;;;;:74;;-1:-1:-1;;;;;;39151:22:0;;;;;;:16;:22;;;;;;;;39174:10;39151:34;;;;;;;;;;39150:35;39111:74;:132;;;;-1:-1:-1;39220:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;39220:23:0;39206:10;:37;;39111:132;39089:226;;;39285:14;;-1:-1:-1;;;39285:14:0;;;;;;;;;;;39089:226;39350:10;:8;:10::i;:::-;-1:-1:-1;;;;;39331:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;39423:10:0;;-1:-1:-1;39423:8:0;:10::i;:::-;-1:-1:-1;;;;;39406:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;39465:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;39465:25:0;;;;;;;;39512:11;:23;;;;;39505:30;;;;;;;;39613:12;;;;;:6;:12;;;;;39626:19;;:23;;-1:-1:-1;;39626:23:0;:::i;:::-;39613:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39665:12:0;;;;:6;:12;;;;;;39678:23;;;:11;:23;;;;;;;39665:37;;39613;;-1:-1:-1;39613:37:0;;39665;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;39749:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;39749:18:0;;;;;;;;;;;;39853:23;;;:11;:23;;;;;;;39828:22;;;;;;:48;-1:-1:-1;;;;;39930:10:0;;;;;:6;:10;;;;;:27;;39749:18;39930:27;;;;;;;;;;;;;;;40040:10;;:17;;:21;;39749:18;40040:21;:::i;:::-;40014:23;;;;:11;:23;;;;;;:47;;;;40083:30;;40026:10;;-1:-1:-1;;;;;40083:30:0;;;;;;;;;;;40153:2;-1:-1:-1;;;;;40133:35:0;40147:4;-1:-1:-1;;;;;40133:35:0;;40157:10;:8;:10::i;:::-;40133:35;;1838:25:1;;;1826:2;1811:18;40133:35:0;;;;;;;38869:1311;38715:1716;;;:::o;38843:1581::-;-1:-1:-1;;;;;40219:15:0;;40201;40219;;;:9;:15;;;;;;;;40235:10;40219:27;;;;;;;;-1:-1:-1;;40267:28:0;;40263:101;;40344:20;40354:10;40344:7;:20;:::i;:::-;-1:-1:-1;;;;;40314:15:0;;;;;;:9;:15;;;;;;;;40330:10;40314:27;;;;;;;:50;40263:101;40381:31;40391:4;40397:2;40401:10;40381:9;:31::i;:::-;;40186:238;38843:1581;38715:1716;;;:::o;40727:405::-;40851:26;40864:4;40870:2;40874;40851:12;:26::i;:::-;-1:-1:-1;;;;;40908:14:0;;;:19;;;;:154;;-1:-1:-1;40944:61:0;;-1:-1:-1;;;40944:61:0;;;40980:10;40944:61;;;7220:34:1;-1:-1:-1;;;;;7290:15:1;;;7270:18;;;7263:43;7322:18;;;7315:34;;;7385:3;7365:18;;;7358:31;-1:-1:-1;7405:19:1;;;7398:30;41022:40:0;;40944:35;;;;41022:40;;7445:19:1;;40944:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;40944:118:0;;;40908:154;40890:235;;;41096:17;;-1:-1:-1;;;41096:17:0;;;;;;;;;;;46097:158;29490:13;:11;:13::i;:::-;46217:30:::1;46232:5;46239:7;46217:14;:30::i;:::-;46097:158:::0;;:::o;36995:111::-;29490:13;:11;:13::i;:::-;-1:-1:-1;;;;;37073:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;37073:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36995:111::o;37178:193::-;37236:13;37270:12;;;:8;:12;;;;;;-1:-1:-1;;;;;37270:12:0;;37295:69;;37342:10;;-1:-1:-1;;;37342:10:0;;;;;;;;;;;37295:69;37178:193;;;:::o;30279:103::-;29490:13;:11;:13::i;:::-;30344:30:::1;30371:1;30344:18;:30::i;:::-;30279:103::o:0;32916:235::-;32084:13;;24765:10;;-1:-1:-1;;;;;32084:13:0;33013:24;;33009:98;;33061:34;;-1:-1:-1;;;33061:34:0;;-1:-1:-1;;;;;1019:32:1;;33061:34:0;;;1001:51:1;974:18;;33061:34:0;;;;;;;;33009:98;33117:26;33136:6;33117:18;:26::i;:::-;32958:193;32916:235::o;35178:20::-;;;;;;;:::i;38359:207::-;38462:10;38445:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;38445:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;38445:49:0;;;;;;;;;;38512:46;;1640:41:1;;;38445:38:0;;38462:10;38512:46;;1613:18:1;38512:46:0;;;;;;;38359:207;;:::o;40490:160::-;40585:4;40609:33;40619:10;40631:2;40635:6;40609:9;:33::i;:::-;40602:40;40490:160;-1:-1:-1;;;40490:160:0:o;41227:437::-;41381:26;41394:4;41400:2;41404;41381:12;:26::i;:::-;-1:-1:-1;;;;;41438:14:0;;;:19;;;;:156;;-1:-1:-1;41474:63:0;;-1:-1:-1;;;41474:63:0;;;41554:40;-1:-1:-1;;;;;41474:35:0;;;41554:40;;41474:63;;41510:10;;41522:4;;41528:2;;41532:4;;;;41474:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;41474:120:0;;;41438:156;41420:237;;;41628:17;;-1:-1:-1;;;41628:17:0;;;;;;;;;;;45146:86;29490:13;:11;:13::i;:::-;45205:12:::1;:19:::0;;-1:-1:-1;;45205:19:0::1;45220:4;45205:19;::::0;;45146:86::o;46263:190::-;46323:13;46385:1;46362:12;46356:26;;;;;:::i;:::-;;;:30;:89;;;;;;;;;;;;;;;;;46403:12;46417:13;:2;:11;:13::i;:::-;46389:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46349:96;46263:190;-1:-1:-1;;46263:190:0:o;44122:26::-;;;;;;;:::i;45983:106::-;29490:13;:11;:13::i;:::-;46057:12:::1;:24;46072:9:::0;46057:12;:24:::1;:::i;45240:86::-:0;29490:13;:11;:13::i;:::-;45298:12:::1;:20:::0;;-1:-1:-1;;45298:20:0::1;::::0;;45240:86::o;32304:181::-;29490:13;:11;:13::i;:::-;32394::::1;:24:::0;;-1:-1:-1;;;;;32394:24:0;::::1;-1:-1:-1::0;;;;;;32394:24:0;;::::1;::::0;::::1;::::0;;;32459:7:::1;29650::::0;29677:6;-1:-1:-1;;;;;29677:6:0;;29604:87;32459:7:::1;-1:-1:-1::0;;;;;32434:43:0::1;;;;;;;;;;;32304:181:::0;:::o;29769:166::-;29650:7;29677:6;-1:-1:-1;;;;;29677:6:0;24765:10;29829:23;29825:103;;29876:40;;-1:-1:-1;;;29876:40:0;;24765:10;29876:40;;;1001:51:1;974:18;;29876:40:0;855:203:1;42872:92:0;42915:7;42942:14;42948:8;42942:2;:14;:::i;:::-;42935:21;;42872:92;:::o;45334:641::-;45478:4;26511:19;:17;:19::i;:::-;45497:12:::1;::::0;::::1;;45494:87;;;45542:7;;45533:6;:16;45525:44;;;::::0;-1:-1:-1;;;45525:44:0;;13368:2:1;45525:44:0::1;::::0;::::1;13350:21:1::0;13407:2;13387:18;;;13380:30;-1:-1:-1;;;13426:18:1;;;13419:45;13481:18;;45525:44:0::1;13166:339:1::0;45525:44:0::1;-1:-1:-1::0;;;;;45595:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;45591:163;;-1:-1:-1::0;;;;;45626:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;:29;;45649:6;;45626:19;:29:::1;::::0;45649:6;;45626:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;45701:9:0::1;::::0;-1:-1:-1;;;;;45678:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;;45670:72;;;::::0;-1:-1:-1;;;45670:72:0;;13842:2:1;45670:72:0::1;::::0;::::1;13824:21:1::0;13881:2;13861:18;;;13854:30;13920:29;13900:18;;;13893:57;13967:18;;45670:72:0::1;13640:351:1::0;45670:72:0::1;-1:-1:-1::0;;;;;45768:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;45764:153;;-1:-1:-1::0;;;;;45797:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:26;;45817:6;;45797:16;:26:::1;::::0;45817:6;;45797:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;45866:8:0::1;::::0;-1:-1:-1;;;;;45846:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;:28:::1;;45838:67;;;::::0;-1:-1:-1;;;45838:67:0;;14198:2:1;45838:67:0::1;::::0;::::1;14180:21:1::0;14237:2;14217:18;;;14210:30;14276:28;14256:18;;;14249:56;14322:18;;45838:67:0::1;13996:350:1::0;45838:67:0::1;45934:33;45950:4;45956:2;45960:6;45934:15;:33::i;:::-;45927:40:::0;45334:641;-1:-1:-1;;;;45334:641:0:o;43835:160::-;43948:4;:12;43955:5;43948:4;:12;:::i;:::-;-1:-1:-1;43971:6:0;:16;43980:7;43971:6;:16;:::i;32675:156::-;32765:13;32758:20;;-1:-1:-1;;;;;;32758:20:0;;;32789:34;32814:8;32789:24;:34::i;21455:718::-;21511:13;21562:14;21579:17;21590:5;21579:10;:17::i;:::-;21599:1;21579:21;21562:38;;21615:20;21649:6;21638:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21638:18:0;-1:-1:-1;21615:41:0;-1:-1:-1;21780:28:0;;;21796:2;21780:28;21837:290;-1:-1:-1;;21869:5:0;-1:-1:-1;;;22006:2:0;21995:14;;21990:32;21869:5;21977:46;22069:2;22060:11;;;-1:-1:-1;22090:21:0;21837:290;22090:21;-1:-1:-1;22148:6:0;21455:718;-1:-1:-1;;;21455:718:0:o;27065:132::-;26977:7;;;;27127:63;;;27163:15;;-1:-1:-1;;;27163:15:0;;;;;;;;;;;41732:1101;41853:4;41870:12;41885:10;:8;:10::i;:::-;-1:-1:-1;;;;;41936:15:0;;;41906:27;41936:15;;;:9;:15;;;;;;;;41994:13;;;;;;;;;42020:15;;;41870:25;;-1:-1:-1;41936:15:0;;41994:13;;42039:6;;41936:15;42020:25;42039:6;41936:15;42020:25;:::i;:::-;;;;-1:-1:-1;;;;;;;42083:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;42191:15;;;;;:9;:15;;;;;;42186:251;;-1:-1:-1;;;;;42297:15:0;;42223:22;42297:15;;;:9;:15;;;;;;:22;;42315:4;;42297:22;:::i;:::-;42249:26;42271:4;42249:19;:26;:::i;:::-;42248:72;;;;:::i;:::-;42223:97;;42340:9;42335:91;42359:14;42355:1;:18;42335:91;;;42399:11;42405:4;42399:5;:11::i;:::-;42375:3;;42335:91;;;;42208:229;42186:251;-1:-1:-1;;;;;42513:13:0;;;;;;:9;:13;;;;;;;;42508:247;;42543:22;42611:28;42635:4;42611:21;:28;:::i;:::-;-1:-1:-1;;;;;42569:13:0;;;;;;:9;:13;;;;;;:20;;42585:4;;42569:20;:::i;:::-;42568:72;;;;:::i;:::-;42543:97;;42660:9;42655:89;42679:14;42675:1;:18;42655:89;;;42719:9;42725:2;42719:5;:9::i;:::-;42695:3;;42655:89;;;;42528:227;42508:247;42792:2;-1:-1:-1;;;;;42772:31:0;42786:4;-1:-1:-1;;;;;42772:31:0;;42796:6;42772:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;42772:31:0;;;;;;;;-1:-1:-1;42821:4:0;;41732:1101;-1:-1:-1;;;;;;41732:1101:0:o;30917:191::-;30991:16;31010:6;;-1:-1:-1;;;;;31027:17:0;;;-1:-1:-1;;;;;;31027:17:0;;;;;;31060:40;;31010:6;;;;;;;31060:40;;30991:16;31060:40;30980:128;30917:191;:::o;17859:948::-;17912:7;;-1:-1:-1;;;17990:17:0;;17986:106;;-1:-1:-1;;;18028:17:0;;;-1:-1:-1;18074:2:0;18064:12;17986:106;18119:8;18110:5;:17;18106:106;;18157:8;18148:17;;;-1:-1:-1;18194:2:0;18184:12;18106:106;18239:8;18230:5;:17;18226:106;;18277:8;18268:17;;;-1:-1:-1;18314:2:0;18304:12;18226:106;18359:7;18350:5;:16;18346:103;;18396:7;18387:16;;;-1:-1:-1;18432:1:0;18422:11;18346:103;18476:7;18467:5;:16;18463:103;;18513:7;18504:16;;;-1:-1:-1;18549:1:0;18539:11;18463:103;18593:7;18584:5;:16;18580:103;;18630:7;18621:16;;;-1:-1:-1;18666:1:0;18656:11;18580:103;18710:7;18701:5;:16;18697:68;;18748:1;18738:11;18793:6;17859:948;-1:-1:-1;;17859:948:0:o;43454:373::-;-1:-1:-1;;;;;43515:18:0;;43511:73;;43557:15;;-1:-1:-1;;;43557:15:0;;;;;;;;;;;43511:73;-1:-1:-1;;;;;43609:12:0;;43596:10;43609:12;;;:6;:12;;;;;43622:19;;:23;;43644:1;;43622:23;:::i;:::-;43609:37;;;;;;;;:::i;:::-;;;;;;;;;43596:50;;43657:6;:12;43664:4;-1:-1:-1;;;;;43657:12:0;-1:-1:-1;;;;;43657:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;43657:18:0;;;;;;;;;;;;43693:15;;;:11;:15;;;;;;43686:22;;;43726:8;:12;;;;;43719:19;;-1:-1:-1;;;;;;43719:19:0;;;;;;43756:11;:15;;;;;;43749:22;;;;;;;;43789:30;43705:2;;43657:18;-1:-1:-1;;;;;43789:30:0;;;;;43657:18;;43789:30;43500:327;43454:373;:::o;45023:115::-;26511:19;:17;:19::i;:::-;45115:15:::1;45127:2;-1:-1:-1::0;;;;;43031:16:0;;43027:74;;43071:18;;-1:-1:-1;;;43071:18:0;;;;;;;;;;;43027:74;43138:6;:8;;;;;;;;:6;43206:12;;;:8;:12;;;;;;-1:-1:-1;;;;;43206:12:0;:26;43202:81;;43256:15;;-1:-1:-1;;;43256:15:0;;;;;;;;;;;43202:81;43295:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;43295:17:0;-1:-1:-1;;;;;43295:17:0;;;;;;;;43323:10;;;:6;:10;;;;;:19;;-1:-1:-1;43323:19:0;;;;;;;;;;;;;;;43371:10;;:17;;:21;;-1:-1:-1;43371:21:0;:::i;:::-;43353:15;;;;:11;:15;;;;;;:39;;;;43410:28;;43365:2;;-1:-1:-1;;;;;43410:28:0;;;;;43353:15;;43410:28;43016:430;42972:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:248::-;1942:6;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;-1:-1:-1;;2042:23:1;;;2112:2;2097:18;;;2084:32;;-1:-1:-1;1874:248:1:o;2127:328::-;2204:6;2212;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2312:29;2331:9;2312:29;:::i;:::-;2302:39;;2360:38;2394:2;2383:9;2379:18;2360:38;:::i;:::-;2350:48;;2445:2;2434:9;2430:18;2417:32;2407:42;;2127:328;;;;;:::o;2649:127::-;2710:10;2705:3;2701:20;2698:1;2691:31;2741:4;2738:1;2731:15;2765:4;2762:1;2755:15;2781:719;2824:5;2877:3;2870:4;2862:6;2858:17;2854:27;2844:55;;2895:1;2892;2885:12;2844:55;2931:6;2918:20;2957:18;2994:2;2990;2987:10;2984:36;;;3000:18;;:::i;:::-;3075:2;3069:9;3043:2;3129:13;;-1:-1:-1;;3125:22:1;;;3149:2;3121:31;3117:40;3105:53;;;3173:18;;;3193:22;;;3170:46;3167:72;;;3219:18;;:::i;:::-;3259:10;3255:2;3248:22;3294:2;3286:6;3279:18;3340:3;3333:4;3328:2;3320:6;3316:15;3312:26;3309:35;3306:55;;;3357:1;3354;3347:12;3306:55;3421:2;3414:4;3406:6;3402:17;3395:4;3387:6;3383:17;3370:54;3468:1;3461:4;3456:2;3448:6;3444:15;3440:26;3433:37;3488:6;3479:15;;;;;;2781:719;;;;:::o;3505:543::-;3593:6;3601;3654:2;3642:9;3633:7;3629:23;3625:32;3622:52;;;3670:1;3667;3660:12;3622:52;3710:9;3697:23;3739:18;3780:2;3772:6;3769:14;3766:34;;;3796:1;3793;3786:12;3766:34;3819:50;3861:7;3852:6;3841:9;3837:22;3819:50;:::i;:::-;3809:60;;3922:2;3911:9;3907:18;3894:32;3878:48;;3951:2;3941:8;3938:16;3935:36;;;3967:1;3964;3957:12;3935:36;;3990:52;4034:7;4023:8;4012:9;4008:24;3990:52;:::i;:::-;3980:62;;;3505:543;;;;;:::o;4053:347::-;4118:6;4126;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4218:29;4237:9;4218:29;:::i;:::-;4208:39;;4297:2;4286:9;4282:18;4269:32;4344:5;4337:13;4330:21;4323:5;4320:32;4310:60;;4366:1;4363;4356:12;4310:60;4389:5;4379:15;;;4053:347;;;;;:::o;4405:186::-;4464:6;4517:2;4505:9;4496:7;4492:23;4488:32;4485:52;;;4533:1;4530;4523:12;4485:52;4556:29;4575:9;4556:29;:::i;4596:808::-;4693:6;4701;4709;4717;4725;4778:3;4766:9;4757:7;4753:23;4749:33;4746:53;;;4795:1;4792;4785:12;4746:53;4818:29;4837:9;4818:29;:::i;:::-;4808:39;;4866:38;4900:2;4889:9;4885:18;4866:38;:::i;:::-;4856:48;;4951:2;4940:9;4936:18;4923:32;4913:42;;5006:2;4995:9;4991:18;4978:32;5029:18;5070:2;5062:6;5059:14;5056:34;;;5086:1;5083;5076:12;5056:34;5124:6;5113:9;5109:22;5099:32;;5169:7;5162:4;5158:2;5154:13;5150:27;5140:55;;5191:1;5188;5181:12;5140:55;5231:2;5218:16;5257:2;5249:6;5246:14;5243:34;;;5273:1;5270;5263:12;5243:34;5318:7;5313:2;5304:6;5300:2;5296:15;5292:24;5289:37;5286:57;;;5339:1;5336;5329:12;5286:57;4596:808;;;;-1:-1:-1;4596:808:1;;-1:-1:-1;5370:2:1;5362:11;;5392:6;4596:808;-1:-1:-1;;;4596:808:1:o;5409:260::-;5477:6;5485;5538:2;5526:9;5517:7;5513:23;5509:32;5506:52;;;5554:1;5551;5544:12;5506:52;5577:29;5596:9;5577:29;:::i;:::-;5567:39;;5625:38;5659:2;5648:9;5644:18;5625:38;:::i;:::-;5615:48;;5409:260;;;;;:::o;5674:322::-;5743:6;5796:2;5784:9;5775:7;5771:23;5767:32;5764:52;;;5812:1;5809;5802:12;5764:52;5852:9;5839:23;5885:18;5877:6;5874:30;5871:50;;;5917:1;5914;5907:12;5871:50;5940;5982:7;5973:6;5962:9;5958:22;5940:50;:::i;6001:380::-;6080:1;6076:12;;;;6123;;;6144:61;;6198:4;6190:6;6186:17;6176:27;;6144:61;6251:2;6243:6;6240:14;6220:18;6217:38;6214:161;;6297:10;6292:3;6288:20;6285:1;6278:31;6332:4;6329:1;6322:15;6360:4;6357:1;6350:15;6214:161;;6001:380;;;:::o;6386:127::-;6447:10;6442:3;6438:20;6435:1;6428:31;6478:4;6475:1;6468:15;6502:4;6499:1;6492:15;6518:128;6585:9;;;6606:11;;;6603:37;;;6620:18;;:::i;6651:127::-;6712:10;6707:3;6703:20;6700:1;6693:31;6743:4;6740:1;6733:15;6767:4;6764:1;6757:15;6783:127;6844:10;6839:3;6835:20;6832:1;6825:31;6875:4;6872:1;6865:15;6899:4;6896:1;6889:15;7475:290;7544:6;7597:2;7585:9;7576:7;7572:23;7568:32;7565:52;;;7613:1;7610;7603:12;7565:52;7639:16;;-1:-1:-1;;;;;;7684:32:1;;7674:43;;7664:71;;7731:1;7728;7721:12;7770:662;-1:-1:-1;;;;;8049:15:1;;;8031:34;;8101:15;;8096:2;8081:18;;8074:43;8148:2;8133:18;;8126:34;;;8196:3;8191:2;8176:18;;8169:31;;;8216:19;;8209:35;;;7974:4;8237:6;8287;8011:3;8266:19;;8253:49;8352:1;8346:3;8337:6;8326:9;8322:22;8318:32;8311:43;8422:3;8415:2;8411:7;8406:2;8398:6;8394:15;8390:29;8379:9;8375:45;8371:55;8363:63;;7770:662;;;;;;;;:::o;8563:1177::-;8829:3;8858:1;8891:6;8885:13;8921:36;8947:9;8921:36;:::i;:::-;8976:1;8993:17;;;9019:133;;;;9166:1;9161:358;;;;8986:533;;9019:133;-1:-1:-1;;9052:24:1;;9040:37;;9125:14;;9118:22;9106:35;;9097:45;;;-1:-1:-1;9019:133:1;;9161:358;9192:6;9189:1;9182:17;9222:4;9267;9264:1;9254:18;9294:1;9308:165;9322:6;9319:1;9316:13;9308:165;;;9400:14;;9387:11;;;9380:35;9443:16;;;;9337:10;;9308:165;;;9312:3;;;9502:6;9497:3;9493:16;9486:23;;8986:533;;;;;9550:6;9544:13;9566:68;9625:8;9620:3;9613:4;9605:6;9601:17;9566:68;:::i;:::-;-1:-1:-1;;;9656:18:1;;9683:22;;;9732:1;9721:13;;8563:1177;-1:-1:-1;;;;8563:1177:1:o;9745:518::-;9847:2;9842:3;9839:11;9836:421;;;9883:5;9880:1;9873:16;9927:4;9924:1;9914:18;9997:2;9985:10;9981:19;9978:1;9974:27;9968:4;9964:38;10033:4;10021:10;10018:20;10015:47;;;-1:-1:-1;10056:4:1;10015:47;10111:2;10106:3;10102:12;10099:1;10095:20;10089:4;10085:31;10075:41;;10166:81;10184:2;10177:5;10174:13;10166:81;;;10243:1;10229:16;;10210:1;10199:13;10166:81;;10439:1345;10565:3;10559:10;10592:18;10584:6;10581:30;10578:56;;;10614:18;;:::i;:::-;10643:97;10733:6;10693:38;10725:4;10719:11;10693:38;:::i;:::-;10687:4;10643:97;:::i;:::-;10795:4;;10852:2;10841:14;;10869:1;10864:663;;;;11571:1;11588:6;11585:89;;;-1:-1:-1;11640:19:1;;;11634:26;11585:89;-1:-1:-1;;10396:1:1;10392:11;;;10388:24;10384:29;10374:40;10420:1;10416:11;;;10371:57;11687:81;;10834:944;;10864:663;8510:1;8503:14;;;8547:4;8534:18;;-1:-1:-1;;10900:20:1;;;11018:236;11032:7;11029:1;11026:14;11018:236;;;11121:19;;;11115:26;11100:42;;11213:27;;;;11181:1;11169:14;;;;11048:19;;11018:236;;;11022:3;11282:6;11273:7;11270:19;11267:201;;;11343:19;;;11337:26;-1:-1:-1;;11426:1:1;11422:14;;;11438:3;11418:24;11414:37;11410:42;11395:58;11380:74;;11267:201;;;11514:1;11505:6;11502:1;11498:14;11494:22;11488:4;11481:36;10834:944;;;;;10439:1345;;:::o;11789:416::-;11878:1;11915:5;11878:1;11929:270;11950:7;11940:8;11937:21;11929:270;;;12009:4;12005:1;12001:6;11997:17;11991:4;11988:27;11985:53;;;12018:18;;:::i;:::-;12068:7;12058:8;12054:22;12051:55;;;12088:16;;;;12051:55;12167:22;;;;12127:15;;;;11929:270;;;11933:3;11789:416;;;;;:::o;12210:806::-;12259:5;12289:8;12279:80;;-1:-1:-1;12330:1:1;12344:5;;12279:80;12378:4;12368:76;;-1:-1:-1;12415:1:1;12429:5;;12368:76;12460:4;12478:1;12473:59;;;;12546:1;12541:130;;;;12453:218;;12473:59;12503:1;12494:10;;12517:5;;;12541:130;12578:3;12568:8;12565:17;12562:43;;;12585:18;;:::i;:::-;-1:-1:-1;;12641:1:1;12627:16;;12656:5;;12453:218;;12755:2;12745:8;12742:16;12736:3;12730:4;12727:13;12723:36;12717:2;12707:8;12704:16;12699:2;12693:4;12690:12;12686:35;12683:77;12680:159;;;-1:-1:-1;12792:19:1;;;12824:5;;12680:159;12871:34;12896:8;12890:4;12871:34;:::i;:::-;12941:6;12937:1;12933:6;12929:19;12920:7;12917:32;12914:58;;;12952:18;;:::i;:::-;12990:20;;12210:806;-1:-1:-1;;;12210:806:1:o;13021:140::-;13079:5;13108:47;13149:4;13139:8;13135:19;13129:4;13108:47;:::i;13510:125::-;13575:9;;;13596:10;;;13593:36;;;13609:18;;:::i;14483:217::-;14523:1;14549;14539:132;;14593:10;14588:3;14584:20;14581:1;14574:31;14628:4;14625:1;14618:15;14656:4;14653:1;14646:15;14539:132;-1:-1:-1;14685:9:1;;14483:217::o
Swarm Source
ipfs://fb974e82a3e34013358f0175cd67d21e32261033ab96b55b1e4e0d7a617cc5cf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 25 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.