ERC-20
Overview
Max Total Supply
404 MEME404
Holders
0
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CustomToken
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; import "./CustomERC404.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract CustomToken is CustomERC404 { string public baseTokenURI; event updateUri(string tokenUri); constructor( address _owner, string memory name, string memory symbol ) CustomERC404(name, symbol, 18, 404, _owner) { balanceOf[_owner] = 404 * 10 ** 18; } function setURI(string calldata _tokenUri) external onlyOwner { baseTokenURI = _tokenUri; emit updateUri(baseTokenURI); } function setNameSymbol( string memory _name, string memory _symbol ) external onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { return string.concat( baseTokenURI, string.concat(Strings.toString(id), ".json") ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // 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. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 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 + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @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); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; import "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(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) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() external virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } abstract contract ERC721Receiver { function onERC721Received( address, address, uint, 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 CustomERC404 is Ownable { // Events event ERC20Transfer(address indexed from, address indexed to, uint amount); event Approval(address indexed owner, address indexed spender, uint amount); event Transfer(address indexed from, address indexed to, uint indexed id); event ERC721Approval( address indexed owner, address indexed spender, uint indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error Insufficient(); error AlreadyExists(); error InvalidAddress(); error UnsafeRecipient(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Unit of fractionalized representation uint internal immutable unit; /// @dev Unit of fractionalized representation uint internal minted = 1; /// @dev Unit of fractionalized representation uint internal immutable totalNft; /// @dev Total supply in fractionalized representation uint public immutable totalSupply; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint)) public allowance; /// @dev Approval in native representaion mapping(uint => 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(uint => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint => uint) 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, uint _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; unchecked { unit = 10 ** decimals; totalNft = _totalNativeSupply; totalSupply = totalNft * unit; } balanceOf[_owner] = totalSupply; whitelist[_owner] = true; whitelist[address(this)] = true; } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist( address[] calldata targets, bool state ) external onlyOwner { for (uint i; i < targets.length; ++i) { whitelist[targets[i]] = state; } } /// @notice Function to find owner of a given native token function ownerOf(uint id) external view returns (address) { return _ownerOf[id]; } /// @notice tokenURI must be implemented by child contract function tokenURI(uint id) external 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, uint amountOrId) external returns (bool) { if (amountOrId <= totalNft && 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) external { 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, uint amountOrId) public { if (amountOrId <= totalNft) { if (from != _ownerOf[amountOrId] || to == address(0)) revert InvalidAddress(); if (balanceOf[from] < unit) revert Insufficient(); if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } unchecked { balanceOf[from] = balanceOf[from] - unit; balanceOf[to] = balanceOf[to] + unit; // update _owned for sender uint lastIndex = _owned[from].length - 1; uint idIndex = _ownedIndex[amountOrId]; if (idIndex != lastIndex) { uint updatedId = _owned[from][lastIndex]; _owned[from][idIndex] = updatedId; // update index for the moved id _ownedIndex[updatedId] = idIndex; } // pop if (lastIndex == 0) delete _owned[from]; else _owned[from].pop(); // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, unit); } else { if (from != msg.sender) allowance[from][msg.sender] = allowance[from][msg.sender] - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer(address to, uint amount) external returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom(address from, address to, uint id) external { transferFrom(from, to, id); if ( !whitelist[to] && 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, uint id, bytes calldata data ) external { transferFrom(from, to, id); if ( !whitelist[to] && 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, uint amount ) internal returns (bool) { if (from == address(0) || to == address(0)) revert InvalidAddress(); if (balanceOf[from] < amount) revert Insufficient(); unchecked { uint balanceBeforeSender = balanceOf[from]; uint balanceBeforeReceiver = balanceOf[to]; balanceOf[from] = balanceBeforeSender - amount; balanceOf[to] = balanceOf[to] + amount; // Skip burn for certain addresses to save gas uint tokens_to_burn; uint tokens_to_mint; if (!whitelist[from]) tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); // Skip minting for certain addresses to save gas if (!whitelist[to]) tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); if (tokens_to_burn != 0 && tokens_to_mint != 0) _multiTransfer(from, to, tokens_to_burn, tokens_to_mint); else if (tokens_to_burn != 0) _burn(from, tokens_to_burn); else if (tokens_to_mint != 0) _mint(to, tokens_to_mint); } emit ERC20Transfer(from, to, amount); return true; } function _multiTransfer( address from, address to, uint burnAmt, uint mintAmt ) internal { unchecked { uint toLen = _owned[to].length; uint fromLen = _owned[from].length; uint lowVal = burnAmt > mintAmt ? mintAmt : burnAmt; for (uint i = 1; i <= lowVal; ++i) { uint id = _owned[from][fromLen - i]; _owned[to].push(id); _ownedIndex[id] = toLen + i - 1; } if (burnAmt > mintAmt) { _burn(from, burnAmt - mintAmt); } else if (burnAmt < mintAmt) { _mint(to, mintAmt - burnAmt); } } } function _mint(address to, uint count) internal { unchecked { uint arrLen; uint i; if (minted < totalNft) { arrLen = _owned[to].length; for (i; i < count; ++i) { if (minted > totalNft) break; _ownerOf[minted] = to; _owned[to].push(minted); _ownedIndex[minted] = arrLen + i; ++minted; } count = count - i; } if (count > 0) { arrLen = _owned[address(this)].length; uint id; uint toLen = _owned[to].length; for (i = 1; i <= count; ++i) { id = _owned[address(this)][arrLen - i]; _owned[address(this)].pop(); _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = toLen + i - 1; } } } emit Transfer(address(0), to, count); } function _burn(address from, uint count) internal { unchecked { uint id; uint fromLen = _owned[from].length; for (uint i = 1; i <= count; ++i) { id = _owned[from][fromLen - i]; _owned[from].pop(); _owned[address(this)].push(id); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; } } emit Transfer(from, address(0), count); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"Insufficient","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidOwner","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":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tokenUri","type":"string"}],"name":"updateUri","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"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":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","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":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405260016003553480156200001757600080fd5b50604051620047d9380380620047d983398181016040528101906200003d9190620004ea565b818160126101948680600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ad576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600190816200015a9190620007cf565b5083600290816200016c9190620007cf565b508260ff1660808160ff168152505060805160ff16600a0a60a081815250508160c0818152505060a05160c0510260e0818152505060e051600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050506815e6a0538429d00000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050620008b6565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003338262000306565b9050919050565b620003458162000326565b81146200035157600080fd5b50565b60008151905062000365816200033a565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003c08262000375565b810181811067ffffffffffffffff82111715620003e257620003e162000386565b5b80604052505050565b6000620003f7620002f2565b9050620004058282620003b5565b919050565b600067ffffffffffffffff82111562000428576200042762000386565b5b620004338262000375565b9050602081019050919050565b60005b838110156200046057808201518184015260208101905062000443565b60008484015250505050565b6000620004836200047d846200040a565b620003eb565b905082815260208101848484011115620004a257620004a162000370565b5b620004af84828562000440565b509392505050565b600082601f830112620004cf57620004ce6200036b565b5b8151620004e18482602086016200046c565b91505092915050565b600080600060608486031215620005065762000505620002fc565b5b6000620005168682870162000354565b935050602084015167ffffffffffffffff8111156200053a576200053962000301565b5b6200054886828701620004b7565b925050604084015167ffffffffffffffff8111156200056c576200056b62000301565b5b6200057a86828701620004b7565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005d757607f821691505b602082108103620005ed57620005ec6200058f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000618565b62000663868362000618565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006b0620006aa620006a4846200067b565b62000685565b6200067b565b9050919050565b6000819050919050565b620006cc836200068f565b620006e4620006db82620006b7565b84845462000625565b825550505050565b600090565b620006fb620006ec565b62000708818484620006c1565b505050565b5b81811015620007305762000724600082620006f1565b6001810190506200070e565b5050565b601f8211156200077f576200074981620005f3565b620007548462000608565b8101602085101562000764578190505b6200077c620007738562000608565b8301826200070d565b50505b505050565b600082821c905092915050565b6000620007a46000198460080262000784565b1980831691505092915050565b6000620007bf838362000791565b9150826002028217905092915050565b620007da8262000584565b67ffffffffffffffff811115620007f657620007f562000386565b5b620008028254620005be565b6200080f82828562000734565b600060209050601f83116001811462000847576000841562000832578287015190505b6200083e8582620007b1565b865550620008ae565b601f1984166200085786620005f3565b60005b8281101562000881578489015182556001820191506020850194506020810190506200085a565b86831015620008a157848901516200089d601f89168262000791565b8355505b6001600288020188555050505b505050505050565b60805160a05160c05160e051613ea36200093660003960006109580152600081816106430152818161097c015281816128af0152612927015260008181610a7401528181610c7201528181610d17015281816111b40152818161210c0152818161217c015281816122020152612233015260006114600152613ea36000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103c5578063c87b56dd146103e1578063d547cfb714610411578063dd62ed3e1461042f578063e985e9c51461045f578063f2fde38b1461048f57610158565b806370a08231146102dd5780638da5cb5b1461030d57806395d89b411461032b5780639b19251a14610349578063a22cb46514610379578063a9059cbb1461039557610158565b80632b968958116101155780632b96895814610231578063313ce5671461023b5780633c271a051461025957806342842e0e14610275578063504334c2146102915780636352211e146102ad57610158565b806302fe53051461015d57806306fdde0314610179578063081812fc14610197578063095ea7b3146101c757806318160ddd146101f757806323b872dd14610215575b600080fd5b61017760048036038101906101729190612efd565b6104ab565b005b61018161057e565b60405161018e9190612fda565b60405180910390f35b6101b160048036038101906101ac9190613032565b61060c565b6040516101be91906130a0565b60405180910390f35b6101e160048036038101906101dc91906130e7565b61063f565b6040516101ee9190613142565b60405180910390f35b6101ff610956565b60405161020c919061316c565b60405180910390f35b61022f600480360381019061022a9190613187565b61097a565b005b61023961133b565b005b61024361145e565b60405161025091906131f6565b60405180910390f35b610273600480360381019061026e9190613293565b611482565b005b61028f600480360381019061028a9190613187565b6115aa565b005b6102ab60048036038101906102a69190613423565b611733565b005b6102c760048036038101906102c29190613032565b6117c6565b6040516102d491906130a0565b60405180910390f35b6102f760048036038101906102f2919061349b565b611803565b604051610304919061316c565b60405180910390f35b61031561181b565b60405161032291906130a0565b60405180910390f35b61033361183f565b6040516103409190612fda565b60405180910390f35b610363600480360381019061035e919061349b565b6118cd565b6040516103709190613142565b60405180910390f35b610393600480360381019061038e91906134c8565b6118ed565b005b6103af60048036038101906103aa91906130e7565b6119ea565b6040516103bc9190613142565b60405180910390f35b6103df60048036038101906103da919061355e565b6119ff565b005b6103fb60048036038101906103f69190613032565b611b8e565b6040516104089190612fda565b60405180910390f35b610419611be1565b6040516104269190612fda565b60405180910390f35b610449600480360381019061044491906135e6565b611c6f565b604051610456919061316c565b60405180910390f35b610479600480360381019061047491906135e6565b611c94565b6040516104869190613142565b60405180910390f35b6104a960048036038101906104a4919061349b565b611cc3565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610530576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600c918261054192919061383d565b507f570b3c6a18068f398a939ea017a7d2b728cbf11371f25e37e94377518bc03f0a600c6040516105729190613991565b60405180910390a15050565b6001805461058b90613660565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790613660565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f000000000000000000000000000000000000000000000000000000000000000082111580156106715750600082115b156108655760006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107715750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156107a8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610857919061316c565b60405180910390a35061094c565b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610943919061316c565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081116111ed576008600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610a3b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a72576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b0b576040517f1dc930eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610bce5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610c3957506006600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c70576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f0000000000000000000000000000000000000000000000000000000000000000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490500390506000600a6000848152602001908152602001600020549050818114610efd576000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610e7657610e756139b3565b5b9060005260206000200154905080600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610ed557610ed46139b3565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550505b60008203610f5557600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f509190612e46565b610fbb565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610fa457610fa36139e2565b5b600190038181906000526020600020016000905590555b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150556001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003600a6000858152602001908152602001600020819055505050816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314877f00000000000000000000000000000000000000000000000000000000000000006040516111e0919061316c565b60405180910390a3611336565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113295780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a89190613a40565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611334838383611e4b565b505b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611507576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b838390508110156115a45781600b600086868581811061152d5761152c6139b3565b5b9050602002016020810190611542919061349b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061159d90613a74565b905061150a565b50505050565b6115b583838361097a565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611627575060008273ffffffffffffffffffffffffffffffffffffffff163b14155b80156116f7575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161169293929190613af3565b6020604051808303816000875af11580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d59190613b95565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561172e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117c2828261236d565b5050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60046020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461184c90613660565b80601f016020809104026020016040519081016040528092919081815260200182805461187890613660565b80156118c55780601f1061189a576101008083540402835291602001916118c5565b820191906000526020600020905b8154815290600101906020018083116118a857829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900460ff1681565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119de9190613142565b60405180910390a35050565b60006119f7338484611e4b565b905092915050565b611a0a85858561097a565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a7c575060008473ffffffffffffffffffffffffffffffffffffffff163b14155b8015611b50575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611aeb959493929190613bef565b6020604051808303816000875af1158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190613b95565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611b87576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6060600c611b9b83612391565b604051602001611bab9190613c9f565b604051602081830303815290604052604051602001611bcb929190613d48565b6040516020818303038152906040529050919050565b600c8054611bee90613660565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1a90613660565b8015611c675780601f10611c3c57610100808354040283529160200191611c67565b820191906000526020600020905b815481529060010190602001808311611c4a57829003601f168201915b505050505081565b6005602052816000526040600020602052806000526040600020600091509150505481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dae576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eb35750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611eea576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f63576040517f1dc930eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838203600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121af577f0000000000000000000000000000000000000000000000000000000000000000600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161217957612178613d6c565b5b047f000000000000000000000000000000000000000000000000000000000000000085816121aa576121a9613d6c565b5b040391505b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122a5577f000000000000000000000000000000000000000000000000000000000000000083816122305761222f613d6c565b5b047f0000000000000000000000000000000000000000000000000000000000000000600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816122a05761229f613d6c565b5b040390505b600082141580156122b7575060008114155b156122cd576122c88888848461245f565b6122f9565b600082146122e4576122df8883612638565b6122f8565b600081146122f7576122f687826128aa565b5b5b5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878460405161235a919061316c565b60405180910390a3600190509392505050565b816001908161237c9190613d9b565b50806002908161238c9190613d9b565b505050565b6060600060016123a084612cf3565b01905060008167ffffffffffffffff8111156123bf576123be6132f8565b5b6040519080825280601f01601f1916602001820160405280156123f15781602001600182028036833780820191505090505b509050600082602001820190505b600115612454578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161244857612447613d6c565b5b049450600085036123ff575b819350505050919050565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008385116124fc57846124fe565b835b90506000600190505b8181116125ff576000600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082850381548110612563576125626139b3565b5b90600052602060002001549050600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600182860103600a60008381526020019081526020016000208190555050806001019050612507565b50838511156126195761261487858703612638565b61262f565b8385101561262e5761262d868686036128aa565b5b5b50505050505050565b600080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000600190505b83811161284757600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818303815481106126e1576126e06139b3565b5b90600052602060002001549250600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061273d5761273c6139e2565b5b60019003818190600052602060002001600090559055600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055600a6000848152602001908152602001600020600090556008600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055806001019050612687565b50505080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000807f00000000000000000000000000000000000000000000000000000000000000006003541015612a4757600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905091505b82811015612a41577f000000000000000000000000000000000000000000000000000000000000000060035411612a41578360086000600354815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003549080600181540180825580915050600190039060005260206000200160009091909190915055808201600a60006003548152602001908152602001600020819055506003600081546001019190508190555080600101905061291d565b80830392505b6000831115612c9157600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509150600080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600192505b848311612c8e57600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083850381548110612b3c57612b3b6139b3565b5b90600052602060002001549150600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612b9857612b976139e2565b5b60019003818190600052602060002001600090559055856008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055600183820103600a600084815260200190815260200160002081905550826001019250612ae2565b50505b5050808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d51577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612d4757612d46613d6c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d8e576d04ee2d6d415b85acef81000000008381612d8457612d83613d6c565b5b0492506020810190505b662386f26fc100008310612dbd57662386f26fc100008381612db357612db2613d6c565b5b0492506010810190505b6305f5e1008310612de6576305f5e1008381612ddc57612ddb613d6c565b5b0492506008810190505b6127108310612e0b576127108381612e0157612e00613d6c565b5b0492506004810190505b60648310612e2e5760648381612e2457612e23613d6c565b5b0492506002810190505b600a8310612e3d576001810190505b80915050919050565b5080546000825590600052602060002090810190612e649190612e67565b50565b5b80821115612e80576000816000905550600101612e68565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112612ebd57612ebc612e98565b5b8235905067ffffffffffffffff811115612eda57612ed9612e9d565b5b602083019150836001820283011115612ef657612ef5612ea2565b5b9250929050565b60008060208385031215612f1457612f13612e8e565b5b600083013567ffffffffffffffff811115612f3257612f31612e93565b5b612f3e85828601612ea7565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f84578082015181840152602081019050612f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fac82612f4a565b612fb68185612f55565b9350612fc6818560208601612f66565b612fcf81612f90565b840191505092915050565b60006020820190508181036000830152612ff48184612fa1565b905092915050565b6000819050919050565b61300f81612ffc565b811461301a57600080fd5b50565b60008135905061302c81613006565b92915050565b60006020828403121561304857613047612e8e565b5b60006130568482850161301d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061308a8261305f565b9050919050565b61309a8161307f565b82525050565b60006020820190506130b56000830184613091565b92915050565b6130c48161307f565b81146130cf57600080fd5b50565b6000813590506130e1816130bb565b92915050565b600080604083850312156130fe576130fd612e8e565b5b600061310c858286016130d2565b925050602061311d8582860161301d565b9150509250929050565b60008115159050919050565b61313c81613127565b82525050565b60006020820190506131576000830184613133565b92915050565b61316681612ffc565b82525050565b6000602082019050613181600083018461315d565b92915050565b6000806000606084860312156131a05761319f612e8e565b5b60006131ae868287016130d2565b93505060206131bf868287016130d2565b92505060406131d08682870161301d565b9150509250925092565b600060ff82169050919050565b6131f0816131da565b82525050565b600060208201905061320b60008301846131e7565b92915050565b60008083601f84011261322757613226612e98565b5b8235905067ffffffffffffffff81111561324457613243612e9d565b5b6020830191508360208202830111156132605761325f612ea2565b5b9250929050565b61327081613127565b811461327b57600080fd5b50565b60008135905061328d81613267565b92915050565b6000806000604084860312156132ac576132ab612e8e565b5b600084013567ffffffffffffffff8111156132ca576132c9612e93565b5b6132d686828701613211565b935093505060206132e98682870161327e565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61333082612f90565b810181811067ffffffffffffffff8211171561334f5761334e6132f8565b5b80604052505050565b6000613362612e84565b905061336e8282613327565b919050565b600067ffffffffffffffff82111561338e5761338d6132f8565b5b61339782612f90565b9050602081019050919050565b82818337600083830152505050565b60006133c66133c184613373565b613358565b9050828152602081018484840111156133e2576133e16132f3565b5b6133ed8482856133a4565b509392505050565b600082601f83011261340a57613409612e98565b5b813561341a8482602086016133b3565b91505092915050565b6000806040838503121561343a57613439612e8e565b5b600083013567ffffffffffffffff81111561345857613457612e93565b5b613464858286016133f5565b925050602083013567ffffffffffffffff81111561348557613484612e93565b5b613491858286016133f5565b9150509250929050565b6000602082840312156134b1576134b0612e8e565b5b60006134bf848285016130d2565b91505092915050565b600080604083850312156134df576134de612e8e565b5b60006134ed858286016130d2565b92505060206134fe8582860161327e565b9150509250929050565b60008083601f84011261351e5761351d612e98565b5b8235905067ffffffffffffffff81111561353b5761353a612e9d565b5b60208301915083600182028301111561355757613556612ea2565b5b9250929050565b60008060008060006080868803121561357a57613579612e8e565b5b6000613588888289016130d2565b9550506020613599888289016130d2565b94505060406135aa8882890161301d565b935050606086013567ffffffffffffffff8111156135cb576135ca612e93565b5b6135d788828901613508565b92509250509295509295909350565b600080604083850312156135fd576135fc612e8e565b5b600061360b858286016130d2565b925050602061361c858286016130d2565b9150509250929050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367857607f821691505b60208210810361368b5761368a613631565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136b6565b6136fd86836136b6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061373a61373561373084612ffc565b613715565b612ffc565b9050919050565b6000819050919050565b6137548361371f565b61376861376082613741565b8484546136c3565b825550505050565b600090565b61377d613770565b61378881848461374b565b505050565b5b818110156137ac576137a1600082613775565b60018101905061378e565b5050565b601f8211156137f1576137c281613691565b6137cb846136a6565b810160208510156137da578190505b6137ee6137e6856136a6565b83018261378d565b50505b505050565b600082821c905092915050565b6000613814600019846008026137f6565b1980831691505092915050565b600061382d8383613803565b9150826002028217905092915050565b6138478383613626565b67ffffffffffffffff8111156138605761385f6132f8565b5b61386a8254613660565b6138758282856137b0565b6000601f8311600181146138a45760008415613892578287013590505b61389c8582613821565b865550613904565b601f1984166138b286613691565b60005b828110156138da578489013582556001820191506020850194506020810190506138b5565b868310156138f757848901356138f3601f891682613803565b8355505b6001600288020188555050505b50505050505050565b6000815461391a81613660565b6139248186612f55565b9450600182166000811461393f576001811461395557613988565b60ff198316865281151560200286019350613988565b61395e85613691565b60005b8381101561398057815481890152600182019150602081019050613961565b808801955050505b50505092915050565b600060208201905081810360008301526139ab818461390d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a4b82612ffc565b9150613a5683612ffc565b9250828203905081811115613a6e57613a6d613a11565b5b92915050565b6000613a7f82612ffc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab157613ab0613a11565b5b600182019050919050565b600082825260208201905092915050565b50565b6000613add600083613abc565b9150613ae882613acd565b600082019050919050565b6000608082019050613b086000830186613091565b613b156020830185613091565b613b22604083018461315d565b8181036060830152613b3381613ad0565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b7281613b3d565b8114613b7d57600080fd5b50565b600081519050613b8f81613b69565b92915050565b600060208284031215613bab57613baa612e8e565b5b6000613bb984828501613b80565b91505092915050565b6000613bce8385613abc565b9350613bdb8385846133a4565b613be483612f90565b840190509392505050565b6000608082019050613c046000830188613091565b613c116020830187613091565b613c1e604083018661315d565b8181036060830152613c31818486613bc2565b90509695505050505050565b600081905092915050565b6000613c5382612f4a565b613c5d8185613c3d565b9350613c6d818560208601612f66565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b6000613cab8284613c48565b9150613cb682613c79565b60058201915081905092915050565b60008154613cd281613660565b613cdc8186613c3d565b94506001821660008114613cf75760018114613d0c57613d3f565b60ff1983168652811515820286019350613d3f565b613d1585613691565b60005b83811015613d3757815481890152600182019150602081019050613d18565b838801955050505b50505092915050565b6000613d548285613cc5565b9150613d608284613c48565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b613da482612f4a565b67ffffffffffffffff811115613dbd57613dbc6132f8565b5b613dc78254613660565b613dd28282856137b0565b600060209050601f831160018114613e055760008415613df3578287015190505b613dfd8582613821565b865550613e65565b601f198416613e1386613691565b60005b82811015613e3b57848901518255600182019150602085019450602081019050613e16565b86831015613e585784890151613e54601f891682613803565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220eeed5e71c6fff0db0c8202f7c5837ff6946cf19248acb533269ace9a94d8579964736f6c634300081300330000000000000000000000000715ab9c1b47c4289ba45f9a2febeecb9376cfbd000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000084d656d652034303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d454d4534303400000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103c5578063c87b56dd146103e1578063d547cfb714610411578063dd62ed3e1461042f578063e985e9c51461045f578063f2fde38b1461048f57610158565b806370a08231146102dd5780638da5cb5b1461030d57806395d89b411461032b5780639b19251a14610349578063a22cb46514610379578063a9059cbb1461039557610158565b80632b968958116101155780632b96895814610231578063313ce5671461023b5780633c271a051461025957806342842e0e14610275578063504334c2146102915780636352211e146102ad57610158565b806302fe53051461015d57806306fdde0314610179578063081812fc14610197578063095ea7b3146101c757806318160ddd146101f757806323b872dd14610215575b600080fd5b61017760048036038101906101729190612efd565b6104ab565b005b61018161057e565b60405161018e9190612fda565b60405180910390f35b6101b160048036038101906101ac9190613032565b61060c565b6040516101be91906130a0565b60405180910390f35b6101e160048036038101906101dc91906130e7565b61063f565b6040516101ee9190613142565b60405180910390f35b6101ff610956565b60405161020c919061316c565b60405180910390f35b61022f600480360381019061022a9190613187565b61097a565b005b61023961133b565b005b61024361145e565b60405161025091906131f6565b60405180910390f35b610273600480360381019061026e9190613293565b611482565b005b61028f600480360381019061028a9190613187565b6115aa565b005b6102ab60048036038101906102a69190613423565b611733565b005b6102c760048036038101906102c29190613032565b6117c6565b6040516102d491906130a0565b60405180910390f35b6102f760048036038101906102f2919061349b565b611803565b604051610304919061316c565b60405180910390f35b61031561181b565b60405161032291906130a0565b60405180910390f35b61033361183f565b6040516103409190612fda565b60405180910390f35b610363600480360381019061035e919061349b565b6118cd565b6040516103709190613142565b60405180910390f35b610393600480360381019061038e91906134c8565b6118ed565b005b6103af60048036038101906103aa91906130e7565b6119ea565b6040516103bc9190613142565b60405180910390f35b6103df60048036038101906103da919061355e565b6119ff565b005b6103fb60048036038101906103f69190613032565b611b8e565b6040516104089190612fda565b60405180910390f35b610419611be1565b6040516104269190612fda565b60405180910390f35b610449600480360381019061044491906135e6565b611c6f565b604051610456919061316c565b60405180910390f35b610479600480360381019061047491906135e6565b611c94565b6040516104869190613142565b60405180910390f35b6104a960048036038101906104a4919061349b565b611cc3565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610530576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600c918261054192919061383d565b507f570b3c6a18068f398a939ea017a7d2b728cbf11371f25e37e94377518bc03f0a600c6040516105729190613991565b60405180910390a15050565b6001805461058b90613660565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790613660565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f000000000000000000000000000000000000000000000000000000000000019482111580156106715750600082115b156108655760006008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107715750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156107a8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610857919061316c565b60405180910390a35061094c565b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610943919061316c565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000015e6a0538429d0000081565b7f000000000000000000000000000000000000000000000000000000000000019481116111ed576008600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580610a3b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610a72576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000de0b6b3a7640000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b0b576040517f1dc930eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610bce5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610c3957506006600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610c70576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000de0b6b3a7640000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f0000000000000000000000000000000000000000000000000de0b6b3a7640000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490500390506000600a6000848152602001908152602001600020549050818114610efd576000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610e7657610e756139b3565b5b9060005260206000200154905080600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610ed557610ed46139b3565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550505b60008203610f5557600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f509190612e46565b610fbb565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610fa457610fa36139e2565b5b600190038181906000526020600020016000905590555b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150556001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003600a6000858152602001908152602001600020819055505050816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314877f0000000000000000000000000000000000000000000000000de0b6b3a76400006040516111e0919061316c565b60405180910390a3611336565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113295780600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a89190613a40565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611334838383611e4b565b505b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000001281565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611507576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b838390508110156115a45781600b600086868581811061152d5761152c6139b3565b5b9050602002016020810190611542919061349b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061159d90613a74565b905061150a565b50505050565b6115b583838361097a565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611627575060008273ffffffffffffffffffffffffffffffffffffffff163b14155b80156116f7575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161169293929190613af3565b6020604051808303816000875af11580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d59190613b95565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561172e576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117b8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117c2828261236d565b5050565b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60046020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6002805461184c90613660565b80601f016020809104026020016040519081016040528092919081815260200182805461187890613660565b80156118c55780601f1061189a576101008083540402835291602001916118c5565b820191906000526020600020905b8154815290600101906020018083116118a857829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900460ff1681565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119de9190613142565b60405180910390a35050565b60006119f7338484611e4b565b905092915050565b611a0a85858561097a565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a7c575060008473ffffffffffffffffffffffffffffffffffffffff163b14155b8015611b50575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611aeb959493929190613bef565b6020604051808303816000875af1158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190613b95565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611b87576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6060600c611b9b83612391565b604051602001611bab9190613c9f565b604051602081830303815290604052604051602001611bcb929190613d48565b6040516020818303038152906040529050919050565b600c8054611bee90613660565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1a90613660565b8015611c675780601f10611c3c57610100808354040283529160200191611c67565b820191906000526020600020905b815481529060010190602001808311611c4a57829003601f168201915b505050505081565b6005602052816000526040600020602052806000526040600020600091509150505481565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d48576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dae576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eb35750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611eea576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611f63576040517f1dc930eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838203600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166121af577f0000000000000000000000000000000000000000000000000de0b6b3a7640000600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548161217957612178613d6c565b5b047f0000000000000000000000000000000000000000000000000de0b6b3a764000085816121aa576121a9613d6c565b5b040391505b600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122a5577f0000000000000000000000000000000000000000000000000de0b6b3a764000083816122305761222f613d6c565b5b047f0000000000000000000000000000000000000000000000000de0b6b3a7640000600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816122a05761229f613d6c565b5b040390505b600082141580156122b7575060008114155b156122cd576122c88888848461245f565b6122f9565b600082146122e4576122df8883612638565b6122f8565b600081146122f7576122f687826128aa565b5b5b5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878460405161235a919061316c565b60405180910390a3600190509392505050565b816001908161237c9190613d9b565b50806002908161238c9190613d9b565b505050565b6060600060016123a084612cf3565b01905060008167ffffffffffffffff8111156123bf576123be6132f8565b5b6040519080825280601f01601f1916602001820160405280156123f15781602001600182028036833780820191505090505b509050600082602001820190505b600115612454578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161244857612447613d6c565b5b049450600085036123ff575b819350505050919050565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008385116124fc57846124fe565b835b90506000600190505b8181116125ff576000600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082850381548110612563576125626139b3565b5b90600052602060002001549050600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600182860103600a60008381526020019081526020016000208190555050806001019050612507565b50838511156126195761261487858703612638565b61262f565b8385101561262e5761262d868686036128aa565b5b5b50505050505050565b600080600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000600190505b83811161284757600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818303815481106126e1576126e06139b3565b5b90600052602060002001549250600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061273d5761273c6139e2565b5b60019003818190600052602060002001600090559055600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055600a6000848152602001908152602001600020600090556008600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055806001019050612687565b50505080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000807f00000000000000000000000000000000000000000000000000000000000001946003541015612a4757600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905091505b82811015612a41577f000000000000000000000000000000000000000000000000000000000000019460035411612a41578360086000600354815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003549080600181540180825580915050600190039060005260206000200160009091909190915055808201600a60006003548152602001908152602001600020819055506003600081546001019190508190555080600101905061291d565b80830392505b6000831115612c9157600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509150600080600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050600192505b848311612c8e57600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083850381548110612b3c57612b3b6139b3565b5b90600052602060002001549150600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612b9857612b976139e2565b5b60019003818190600052602060002001600090559055856008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055600183820103600a600084815260200190815260200160002081905550826001019250612ae2565b50505b5050808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d51577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612d4757612d46613d6c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d8e576d04ee2d6d415b85acef81000000008381612d8457612d83613d6c565b5b0492506020810190505b662386f26fc100008310612dbd57662386f26fc100008381612db357612db2613d6c565b5b0492506010810190505b6305f5e1008310612de6576305f5e1008381612ddc57612ddb613d6c565b5b0492506008810190505b6127108310612e0b576127108381612e0157612e00613d6c565b5b0492506004810190505b60648310612e2e5760648381612e2457612e23613d6c565b5b0492506002810190505b600a8310612e3d576001810190505b80915050919050565b5080546000825590600052602060002090810190612e649190612e67565b50565b5b80821115612e80576000816000905550600101612e68565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112612ebd57612ebc612e98565b5b8235905067ffffffffffffffff811115612eda57612ed9612e9d565b5b602083019150836001820283011115612ef657612ef5612ea2565b5b9250929050565b60008060208385031215612f1457612f13612e8e565b5b600083013567ffffffffffffffff811115612f3257612f31612e93565b5b612f3e85828601612ea7565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f84578082015181840152602081019050612f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612fac82612f4a565b612fb68185612f55565b9350612fc6818560208601612f66565b612fcf81612f90565b840191505092915050565b60006020820190508181036000830152612ff48184612fa1565b905092915050565b6000819050919050565b61300f81612ffc565b811461301a57600080fd5b50565b60008135905061302c81613006565b92915050565b60006020828403121561304857613047612e8e565b5b60006130568482850161301d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061308a8261305f565b9050919050565b61309a8161307f565b82525050565b60006020820190506130b56000830184613091565b92915050565b6130c48161307f565b81146130cf57600080fd5b50565b6000813590506130e1816130bb565b92915050565b600080604083850312156130fe576130fd612e8e565b5b600061310c858286016130d2565b925050602061311d8582860161301d565b9150509250929050565b60008115159050919050565b61313c81613127565b82525050565b60006020820190506131576000830184613133565b92915050565b61316681612ffc565b82525050565b6000602082019050613181600083018461315d565b92915050565b6000806000606084860312156131a05761319f612e8e565b5b60006131ae868287016130d2565b93505060206131bf868287016130d2565b92505060406131d08682870161301d565b9150509250925092565b600060ff82169050919050565b6131f0816131da565b82525050565b600060208201905061320b60008301846131e7565b92915050565b60008083601f84011261322757613226612e98565b5b8235905067ffffffffffffffff81111561324457613243612e9d565b5b6020830191508360208202830111156132605761325f612ea2565b5b9250929050565b61327081613127565b811461327b57600080fd5b50565b60008135905061328d81613267565b92915050565b6000806000604084860312156132ac576132ab612e8e565b5b600084013567ffffffffffffffff8111156132ca576132c9612e93565b5b6132d686828701613211565b935093505060206132e98682870161327e565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61333082612f90565b810181811067ffffffffffffffff8211171561334f5761334e6132f8565b5b80604052505050565b6000613362612e84565b905061336e8282613327565b919050565b600067ffffffffffffffff82111561338e5761338d6132f8565b5b61339782612f90565b9050602081019050919050565b82818337600083830152505050565b60006133c66133c184613373565b613358565b9050828152602081018484840111156133e2576133e16132f3565b5b6133ed8482856133a4565b509392505050565b600082601f83011261340a57613409612e98565b5b813561341a8482602086016133b3565b91505092915050565b6000806040838503121561343a57613439612e8e565b5b600083013567ffffffffffffffff81111561345857613457612e93565b5b613464858286016133f5565b925050602083013567ffffffffffffffff81111561348557613484612e93565b5b613491858286016133f5565b9150509250929050565b6000602082840312156134b1576134b0612e8e565b5b60006134bf848285016130d2565b91505092915050565b600080604083850312156134df576134de612e8e565b5b60006134ed858286016130d2565b92505060206134fe8582860161327e565b9150509250929050565b60008083601f84011261351e5761351d612e98565b5b8235905067ffffffffffffffff81111561353b5761353a612e9d565b5b60208301915083600182028301111561355757613556612ea2565b5b9250929050565b60008060008060006080868803121561357a57613579612e8e565b5b6000613588888289016130d2565b9550506020613599888289016130d2565b94505060406135aa8882890161301d565b935050606086013567ffffffffffffffff8111156135cb576135ca612e93565b5b6135d788828901613508565b92509250509295509295909350565b600080604083850312156135fd576135fc612e8e565b5b600061360b858286016130d2565b925050602061361c858286016130d2565b9150509250929050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061367857607f821691505b60208210810361368b5761368a613631565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136b6565b6136fd86836136b6565b95508019841693508086168417925050509392505050565b6000819050919050565b600061373a61373561373084612ffc565b613715565b612ffc565b9050919050565b6000819050919050565b6137548361371f565b61376861376082613741565b8484546136c3565b825550505050565b600090565b61377d613770565b61378881848461374b565b505050565b5b818110156137ac576137a1600082613775565b60018101905061378e565b5050565b601f8211156137f1576137c281613691565b6137cb846136a6565b810160208510156137da578190505b6137ee6137e6856136a6565b83018261378d565b50505b505050565b600082821c905092915050565b6000613814600019846008026137f6565b1980831691505092915050565b600061382d8383613803565b9150826002028217905092915050565b6138478383613626565b67ffffffffffffffff8111156138605761385f6132f8565b5b61386a8254613660565b6138758282856137b0565b6000601f8311600181146138a45760008415613892578287013590505b61389c8582613821565b865550613904565b601f1984166138b286613691565b60005b828110156138da578489013582556001820191506020850194506020810190506138b5565b868310156138f757848901356138f3601f891682613803565b8355505b6001600288020188555050505b50505050505050565b6000815461391a81613660565b6139248186612f55565b9450600182166000811461393f576001811461395557613988565b60ff198316865281151560200286019350613988565b61395e85613691565b60005b8381101561398057815481890152600182019150602081019050613961565b808801955050505b50505092915050565b600060208201905081810360008301526139ab818461390d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a4b82612ffc565b9150613a5683612ffc565b9250828203905081811115613a6e57613a6d613a11565b5b92915050565b6000613a7f82612ffc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ab157613ab0613a11565b5b600182019050919050565b600082825260208201905092915050565b50565b6000613add600083613abc565b9150613ae882613acd565b600082019050919050565b6000608082019050613b086000830186613091565b613b156020830185613091565b613b22604083018461315d565b8181036060830152613b3381613ad0565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b7281613b3d565b8114613b7d57600080fd5b50565b600081519050613b8f81613b69565b92915050565b600060208284031215613bab57613baa612e8e565b5b6000613bb984828501613b80565b91505092915050565b6000613bce8385613abc565b9350613bdb8385846133a4565b613be483612f90565b840190509392505050565b6000608082019050613c046000830188613091565b613c116020830187613091565b613c1e604083018661315d565b8181036060830152613c31818486613bc2565b90509695505050505050565b600081905092915050565b6000613c5382612f4a565b613c5d8185613c3d565b9350613c6d818560208601612f66565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815250565b6000613cab8284613c48565b9150613cb682613c79565b60058201915081905092915050565b60008154613cd281613660565b613cdc8186613c3d565b94506001821660008114613cf75760018114613d0c57613d3f565b60ff1983168652811515820286019350613d3f565b613d1585613691565b60005b83811015613d3757815481890152600182019150602081019050613d18565b838801955050505b50505092915050565b6000613d548285613cc5565b9150613d608284613c48565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b613da482612f4a565b67ffffffffffffffff811115613dbd57613dbc6132f8565b5b613dc78254613660565b613dd28282856137b0565b600060209050601f831160018114613e055760008415613df3578287015190505b613dfd8582613821565b865550613e65565b601f198416613e1386613691565b60005b82811015613e3b57848901518255600182019150602085019450602081019050613e16565b86831015613e585784890151613e54601f891682613803565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220eeed5e71c6fff0db0c8202f7c5837ff6946cf19248acb533269ace9a94d8579964736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000715ab9c1b47c4289ba45f9a2febeecb9376cfbd000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000084d656d652034303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d454d4534303400000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _owner (address): 0x0715ab9C1B47C4289bA45f9A2FEbEeCB9376cFbD
Arg [1] : name (string): Meme 404
Arg [2] : symbol (string): MEME404
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000715ab9c1b47c4289ba45f9a2febeecb9376cfbd
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 4d656d6520343034000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 4d454d4534303400000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.