More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,144 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Rewards | 21293201 | 25 days ago | IN | 0 ETH | 0.00349523 | ||||
Withdraw Rewards | 20495789 | 136 days ago | IN | 0 ETH | 0.00017537 | ||||
Withdraw Rewards | 20137594 | 186 days ago | IN | 0 ETH | 0.00105105 | ||||
Withdraw Both | 20137463 | 186 days ago | IN | 0 ETH | 0.0006593 | ||||
Withdraw Both | 20066440 | 196 days ago | IN | 0 ETH | 0.0050347 | ||||
Withdraw Rewards | 19147526 | 325 days ago | IN | 0 ETH | 0.00299511 | ||||
Withdraw Both | 19147498 | 325 days ago | IN | 0 ETH | 0.00462603 | ||||
Withdraw Rewards | 19104003 | 331 days ago | IN | 0 ETH | 0.00295633 | ||||
Withdraw Both | 19100745 | 331 days ago | IN | 0 ETH | 0.0019395 | ||||
Withdraw | 19088134 | 333 days ago | IN | 0 ETH | 0.0026776 | ||||
Withdraw Rewards | 19088132 | 333 days ago | IN | 0 ETH | 0.00384096 | ||||
Withdraw | 19080606 | 334 days ago | IN | 0 ETH | 0.0018131 | ||||
Withdraw | 19079937 | 334 days ago | IN | 0 ETH | 0.00064668 | ||||
Withdraw | 19079935 | 334 days ago | IN | 0 ETH | 0.00209735 | ||||
Withdraw Rewards | 18753769 | 380 days ago | IN | 0 ETH | 0.00577617 | ||||
Withdraw | 18717666 | 385 days ago | IN | 0 ETH | 0.00797138 | ||||
Withdraw Both | 18490969 | 417 days ago | IN | 0 ETH | 0.00905102 | ||||
Withdraw | 18449917 | 422 days ago | IN | 0 ETH | 0.00714153 | ||||
Withdraw Rewards | 18449910 | 422 days ago | IN | 0 ETH | 0.01499741 | ||||
Withdraw | 17979789 | 488 days ago | IN | 0 ETH | 0.00317549 | ||||
Withdraw Rewards | 17979786 | 488 days ago | IN | 0 ETH | 0.00658267 | ||||
Withdraw | 17898249 | 500 days ago | IN | 0 ETH | 0.00397366 | ||||
Withdraw Rewards | 17829766 | 509 days ago | IN | 0 ETH | 0.00659973 | ||||
Withdraw Both | 17747248 | 521 days ago | IN | 0 ETH | 0.00436373 | ||||
Withdraw | 17704471 | 527 days ago | IN | 0 ETH | 0.00181025 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DOGIUMExtraction
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /* Telegram Portal: https://t.me/ShibaDoge_Portal Website: https://realshibadoge.com & https://warzone.realshibadoge.com/operation-dogium-extraction Twitter: https://twitter.com/RealShibaDoge Medium: https://realshibadoge.medium.com Discord: https://discord.gg/realshibadoge ██████╗ ██████╗ ██████╗ ██╗██╗ ██╗███╗ ███╗ ██╔══██╗██╔═══██╗██╔════╝ ██║██║ ██║████╗ ████║ ██║ ██║██║ ██║██║ ███╗██║██║ ██║██╔████╔██║ ██║ ██║██║ ██║██║ ██║██║██║ ██║██║╚██╔╝██║ ██████╔╝╚██████╔╝╚██████╔╝██║╚██████╔╝██║ ╚═╝ ██║ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ███████╗██╗ ██╗████████╗██████╗ █████╗ ██████╗████████╗██╗ ██████╗ ███╗ ██╗ ██╔════╝╚██╗██╔╝╚══██╔══╝██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██║██╔═══██╗████╗ ██║ █████╗ ╚███╔╝ ██║ ██████╔╝███████║██║ ██║ ██║██║ ██║██╔██╗ ██║ ██╔══╝ ██╔██╗ ██║ ██╔══██╗██╔══██║██║ ██║ ██║██║ ██║██║╚██╗██║ ███████╗██╔╝ ██╗ ██║ ██║ ██║██║ ██║╚██████╗ ██║ ██║╚██████╔╝██║ ╚████║ ╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ */ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; pragma solidity ^0.8.13; contract DOGIUMExtraction is Ownable, Pausable, ReentrancyGuard { IERC721 public DOGE_NFT; IERC721 public SHIBA_NFT; IERC20 public ShibaDoge; IERC20 public Burn; address public treasury; address public signerAddress; bool public stakingLaunched; uint256 public stakingEndTime; bool public depositPaused; bool public isWithdrawPaused; struct Staker { uint256 currentYield; uint256 accumulatedAmount; uint256 lastCheckpoint; uint256[] stakedDOGE; uint256[] stakedSHIBA; } uint256 rewardMultiplier = 10 ** 3; enum ContractTypes { DOGE, SHIBA } mapping(address => uint256) public _baseRates; mapping(address => Staker) private _stakers; mapping(address => mapping(uint256 => address)) private _ownerOfToken; mapping(address => ContractTypes) private _contractTypes; mapping(address => mapping(uint256 => uint256)) private _nftYield; mapping(address => uint256) public spentAmount; event Deposit(address indexed staker,address contractAddress,uint256 tokensAmount); event Withdraw(address indexed staker,address contractAddress,uint256 tokensAmount); event WithdrawStuckERC721(address indexed receiver, address indexed tokenAddress, uint256 indexed tokenId); event WithdrawRewards(address indexed staker, uint256 tokens); constructor( address _DOGE, address _SHIBA, address _SHIBDOGE_TOKEN, address _BURN_TOKEN, address _treasury, uint256 _baserate ) { DOGE_NFT = IERC721(_DOGE); _contractTypes[_DOGE] = ContractTypes.DOGE; _baseRates[_DOGE] = _baserate; SHIBA_NFT = IERC721(_SHIBA); _contractTypes[_SHIBA] = ContractTypes.SHIBA; _baseRates[_SHIBA] = _baserate; ShibaDoge = IERC20(_SHIBDOGE_TOKEN); Burn = IERC20(_BURN_TOKEN); signerAddress = 0x5aBEF98fdD9a83B1c8C90224F86673959C19C701; // frontend signing address treasury = _treasury; } /** * @dev Function allows admin to pause reward withdraw. */ function pauseWithdraw( bool _pause) external onlyOwner { isWithdrawPaused = _pause; } function depositBoth( uint256[] memory dogeIds, uint256[] memory dogeTraits, bytes calldata dogeSignature, uint256[] memory shibaIds, uint256[] memory shibaTraits, bytes calldata shibaSignature) external { deposit(address(DOGE_NFT), dogeIds, dogeTraits, dogeSignature); deposit(address(SHIBA_NFT), shibaIds, shibaTraits, shibaSignature); } function deposit( address contractAddress, uint256[] memory tokenIds, uint256[] memory tokenTraits, bytes calldata signature ) public nonReentrant { require(!depositPaused, "Deposit paused"); require(stakingLaunched, "Staking is not launched yet"); require(block.timestamp < stakingEndTime, "Staking has ended"); require( contractAddress == address(DOGE_NFT) || contractAddress == address(SHIBA_NFT), "Unknown contract" ); ContractTypes contractType = _contractTypes[contractAddress]; if (tokenTraits.length > 0) { require(_validateSignature( signature, contractAddress, tokenIds, tokenTraits ), "Invalid data provided"); _setTokensValues(contractAddress, tokenIds, tokenTraits); } Staker storage user = _stakers[_msgSender()]; uint256 newYield = user.currentYield; for (uint256 i; i < tokenIds.length; i++) { require(IERC721(contractAddress).ownerOf(tokenIds[i]) == _msgSender(), "Not the owner"); IERC721(contractAddress).safeTransferFrom(_msgSender(), address(this), tokenIds[i]); _ownerOfToken[contractAddress][tokenIds[i]] = _msgSender(); newYield += getTokenYield(contractAddress, tokenIds[i]); if (contractType == ContractTypes.DOGE) { user.stakedDOGE.push(tokenIds[i]); } if (contractType == ContractTypes.SHIBA) { user.stakedSHIBA.push(tokenIds[i]); } } accumulate(_msgSender()); user.currentYield = newYield; emit Deposit(_msgSender(), contractAddress, tokenIds.length); } function withdrawBoth( uint256[] memory dogeIds, uint256[] memory shibaIds) external { withdraw(address(DOGE_NFT), dogeIds); withdraw(address(SHIBA_NFT), shibaIds); } function withdraw( address contractAddress, uint256[] memory tokenIds ) public nonReentrant { require( contractAddress == address(DOGE_NFT) || contractAddress == address(SHIBA_NFT), "Unknown contract" ); ContractTypes contractType = _contractTypes[contractAddress]; Staker storage user = _stakers[_msgSender()]; uint256 newYield = user.currentYield; for (uint256 i; i < tokenIds.length; i++) { require(IERC721(contractAddress).ownerOf(tokenIds[i]) == address(this), "Not the owner"); _ownerOfToken[contractAddress][tokenIds[i]] = address(0); if (user.currentYield != 0) { uint256 tokenYield = getTokenYield(contractAddress, tokenIds[i]); newYield -= tokenYield; } if (contractType == ContractTypes.DOGE) { user.stakedDOGE = _moveTokenInTheList(user.stakedDOGE, tokenIds[i]); user.stakedDOGE.pop(); } if (contractType == ContractTypes.SHIBA) { user.stakedSHIBA = _moveTokenInTheList(user.stakedSHIBA, tokenIds[i]); user.stakedSHIBA.pop(); } IERC721(contractAddress).safeTransferFrom(address(this), _msgSender(), tokenIds[i]); } if (user.stakedDOGE.length == 0 && user.stakedSHIBA.length == 0) { newYield = 0; } accumulate(_msgSender()); user.currentYield = newYield; emit Withdraw(_msgSender(), contractAddress, tokenIds.length); } function getTokenYield(address contractAddress, uint256 tokenId) public view returns (uint256) { uint256 tokenYield = _nftYield[contractAddress][tokenId]; if (tokenYield == 0) { tokenYield = _baseRates[contractAddress]; } return tokenYield; } function getStakerYield(address staker) public view returns (uint256) { return _stakers[staker].currentYield; } function getStakerTokens(address staker) public view returns (uint256[] memory, uint256[] memory) { return (_stakers[staker].stakedDOGE, _stakers[staker].stakedSHIBA); } function isTokenYieldSet(address contractAddress, uint256 tokenId) public view returns (bool) { return _nftYield[contractAddress][tokenId] > 0; } function _moveTokenInTheList(uint256[] memory list, uint256 tokenId) internal pure returns (uint256[] memory) { uint256 tokenIndex = 0; uint256 lastTokenIndex = list.length - 1; uint256 length = list.length; for(uint256 i = 0; i < length; i++) { if (list[i] == tokenId) { tokenIndex = i + 1; break; } } require(tokenIndex != 0, "msg.sender is not the owner"); tokenIndex -= 1; if (tokenIndex != lastTokenIndex) { list[tokenIndex] = list[lastTokenIndex]; list[lastTokenIndex] = tokenId; } return list; } function _validateSignature( bytes calldata signature, address contractAddress, uint256[] memory tokenIds, uint256[] memory tokenTraits ) internal view returns (bool) { bytes32 dataHash = keccak256(abi.encodePacked(contractAddress, tokenIds, tokenTraits)); bytes32 message = ECDSA.toEthSignedMessageHash(dataHash); address receivedAddress = ECDSA.recover(message, signature); return (receivedAddress != address(0) && receivedAddress == signerAddress); } function _setTokensValues( address contractAddress, uint256[] memory tokenIds, uint256[] memory tokenTraits ) internal { require(tokenIds.length == tokenTraits.length, "Wrong arrays provided"); for (uint256 i; i < tokenIds.length; i++) { if (tokenTraits[i] != 0) { _nftYield[contractAddress][tokenIds[i]] = tokenTraits[i]; } } } function getCurrentReward(address staker) public view returns (uint256) { Staker memory user = _stakers[staker]; if (user.lastCheckpoint == 0) { return 0; } return (Math.min(block.timestamp, stakingEndTime) - user.lastCheckpoint) * user.currentYield / 1 days; } function accumulate(address staker) internal { _stakers[staker].accumulatedAmount += getCurrentReward(staker); _stakers[staker].lastCheckpoint = Math.min(block.timestamp, stakingEndTime); } /** * @dev Returns token owner address (returns address(0) if token is not inside the gateway) */ function ownerOf(address contractAddress, uint256 tokenId) public view returns (address) { return _ownerOfToken[contractAddress][tokenId]; } /** * @dev Function allows admin withdraw ERC721 in case of emergency. */ function emergencyWithdraw(address tokenAddress, uint256[] memory tokenIds) public onlyOwner { require(tokenIds.length <= 50, "50 is max per tx"); pauseDeposit(true); for (uint256 i; i < tokenIds.length; i++) { address receiver = _ownerOfToken[tokenAddress][tokenIds[i]]; if (receiver != address(0) && IERC721(tokenAddress).ownerOf(tokenIds[i]) == address(this)) { IERC721(tokenAddress).safeTransferFrom(address(this), receiver, tokenIds[i]); emit WithdrawStuckERC721(receiver, tokenAddress, tokenIds[i]); } } } /** * @dev Function allows to pause deposits if needed. Withdraw remains active. */ function pauseDeposit(bool _pause) public onlyOwner { depositPaused = _pause; } function updateSignerAddress(address _signer) public onlyOwner { signerAddress = _signer; } function updateTreasuryAddress(address _treasury) public onlyOwner { treasury = _treasury; } function launchStaking() public onlyOwner { require(!stakingLaunched, "Staking has been launched already"); stakingLaunched = true; stakingEndTime = block.timestamp + 120 days; } function updateBaseYield(address _contract, uint256 _yield) public onlyOwner { _baseRates[_contract] = _yield; } function setStakingEndTime(uint256 endTime) external onlyOwner { require(endTime > stakingEndTime); stakingEndTime = endTime; } function onERC721Received(address, address, uint256, bytes calldata) external pure returns(bytes4){ return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")); } /** * @dev Function to withdraw staked rewards */ function withdrawRewards() public nonReentrant whenNotPaused { require(!isWithdrawPaused, "Withdraw Paused"); uint256 amount = getUserBalance(_msgSender()); require(amount > 0, "Insufficient balance"); spentAmount[_msgSender()] += amount; ShibaDoge.transferFrom(treasury, _msgSender(), amount * rewardMultiplier); Burn.transferFrom(treasury, _msgSender(), amount); emit WithdrawRewards( _msgSender(), amount ); } /** * @dev user's lifetime earnings */ function getAccumulatedAmount(address staker) public view returns (uint256) { return _stakers[staker].accumulatedAmount + getCurrentReward(staker); } /** * @dev Returns current withdrawable balance of a specific user. */ function getUserBalance(address user) public view returns (uint256) { return (getAccumulatedAmount(user) - spentAmount[user]); } // Safety functions /** * @dev Allows owner to withdraw any ERC20 Token sent directly to the contract */ function rescueTokens(address _stuckToken) external onlyOwner { uint256 balance = IERC20(_stuckToken).balanceOf(address(this)); IERC20(_stuckToken).transfer(msg.sender, balance); } /** * @dev Allows owner to withdraw any ERC721 Token sent directly to the contract */ function rescueNFT(address _stuckToken, uint256 id) external onlyOwner { if(_stuckToken == address(DOGE_NFT) || _stuckToken == address(SHIBA_NFT)) { require( _ownerOfToken[_stuckToken][id] == address(0)); } IERC721(_stuckToken).safeTransferFrom(address(this), msg.sender, id); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. It 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)`. // We also know that `k`, the position of the most significant bit, is such that `msb(a) = 2**k`. // This gives `2**k < a <= 2**(k+1)` → `2**(k/2) <= sqrt(a) < 2 ** (k/2+1)`. // Using an algorithm similar to the msb conmputation, we are able to compute `result = 2**(k/2)` which is a // good first aproximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1; uint256 x = a; if (x >> 128 > 0) { x >>= 128; result <<= 64; } if (x >> 64 > 0) { x >>= 64; result <<= 32; } if (x >> 32 > 0) { x >>= 32; result <<= 16; } if (x >> 16 > 0) { x >>= 16; result <<= 8; } if (x >> 8 > 0) { x >>= 8; result <<= 4; } if (x >> 4 > 0) { x >>= 4; result <<= 2; } if (x >> 2 > 0) { result <<= 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) { uint256 result = sqrt(a); if (rounding == Rounding.Up && result * result < a) { result += 1; } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_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) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_DOGE","type":"address"},{"internalType":"address","name":"_SHIBA","type":"address"},{"internalType":"address","name":"_SHIBDOGE_TOKEN","type":"address"},{"internalType":"address","name":"_BURN_TOKEN","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_baserate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensAmount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"WithdrawRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"WithdrawStuckERC721","type":"event"},{"inputs":[],"name":"Burn","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOGE_NFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHIBA_NFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ShibaDoge","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_baseRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenTraits","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"dogeIds","type":"uint256[]"},{"internalType":"uint256[]","name":"dogeTraits","type":"uint256[]"},{"internalType":"bytes","name":"dogeSignature","type":"bytes"},{"internalType":"uint256[]","name":"shibaIds","type":"uint256[]"},{"internalType":"uint256[]","name":"shibaTraits","type":"uint256[]"},{"internalType":"bytes","name":"shibaSignature","type":"bytes"}],"name":"depositBoth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getAccumulatedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getCurrentReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTokenYieldSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWithdrawPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stuckToken","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"rescueNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stuckToken","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setStakingEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"spentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_yield","type":"uint256"}],"name":"updateBaseYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"updateSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"updateTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"dogeIds","type":"uint256[]"},{"internalType":"uint256[]","name":"shibaIds","type":"uint256[]"}],"name":"withdrawBoth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawRewards","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526103e8600a553480156200001757600080fd5b50604051620051073803806200510783398181016040528101906200003d9190620004f3565b6200005d620000516200038260201b60201c565b6200038a60201b60201c565b60008060146101000a81548160ff0219169083151502179055506001808190555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360018111156200012557620001246200058f565b5b021790555080600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360018111156200021557620002146200058f565b5b021790555080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735abef98fdd9a83b1c8c90224f86673959c19c701600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505050620005be565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004808262000453565b9050919050565b620004928162000473565b81146200049e57600080fd5b50565b600081519050620004b28162000487565b92915050565b6000819050919050565b620004cd81620004b8565b8114620004d957600080fd5b50565b600081519050620004ed81620004c2565b92915050565b60008060008060008060c087890312156200051357620005126200044e565b5b60006200052389828a01620004a1565b96505060206200053689828a01620004a1565b95505060406200054989828a01620004a1565b94505060606200055c89828a01620004a1565b93505060806200056f89828a01620004a1565b92505060a06200058289828a01620004dc565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b614b3980620005ce6000396000f3fe608060405234801561001057600080fd5b50600436106102475760003560e01c806361499ab91161013b5780638fa2a9f0116100b8578063c7b8981c1161007c578063c7b8981c146106ef578063dfeaa74c146106f9578063e1af569814610715578063ebd462cb14610733578063f2fde38b1461074f57610247565b80638fa2a9f01461067357806396eae2911461068f5780639f5cf2b6146106ab578063a30a2474146106c9578063c68e5161146106d357610247565b80637af61775116100ff5780637af61775146105e35780638293744b146105ff578063841e45611461061b5780638ac33487146106375780638da5cb5b1461065557610247565b806361499ab91461053d57806361d027b31461056d57806367800b5f1461058b5780636d031d0a146105a9578063715018a6146105d957610247565b80632ed3b83b116101c95780634bee21d41161018d5780634bee21d4146104855780634d307e3f146104b55780635a0b3045146104e55780635b7633d0146105015780635c975abb1461051f57610247565b80632ed3b83b146103e157806338a55f0e146103ff578063396ed0ab1461041b578063415855d614610439578063477348921461045557610247565b806317636b861161021057806317636b861461031657806319647af5146103345780631f29d2dc146103505780632161a2b61461038057806323101e27146103b157610247565b8062ae3bf81461024c57806302befd241461026857806304129667146102865780630bac0e2f146102b6578063150b7a02146102e6575b600080fd5b61026660048036038101906102619190613394565b61076b565b005b610270610874565b60405161027d91906133dc565b60405180910390f35b6102a0600480360381019061029b9190613394565b610887565b6040516102ad9190613410565b60405180910390f35b6102d060048036038101906102cb9190613457565b6108e6565b6040516102dd91906133dc565b60405180910390f35b61030060048036038101906102fb91906134fc565b610943565b60405161030d91906135bf565b60405180910390f35b61031e610971565b60405161032b9190613639565b60405180910390f35b61034e600480360381019061034991906137a3565b610997565b005b61036a60048036038101906103659190613457565b6109f3565b604051610377919061382a565b60405180910390f35b61039a60048036038101906103959190613394565b610a6e565b6040516103a8929190613903565b60405180910390f35b6103cb60048036038101906103c69190613394565b610ba2565b6040516103d89190613410565b60405180910390f35b6103e9610bba565b6040516103f6919061395b565b60405180910390f35b61041960048036038101906104149190613457565b610be0565b005b610423610db3565b604051610430919061395b565b60405180910390f35b610453600480360381019061044e91906139a2565b610dd9565b005b61046f600480360381019061046a9190613394565b610dfe565b60405161047c9190613410565b60405180910390f35b61049f600480360381019061049a9190613394565b610e5a565b6040516104ac9190613410565b60405180910390f35b6104cf60048036038101906104ca9190613394565b610ea6565b6040516104dc9190613410565b60405180910390f35b6104ff60048036038101906104fa91906139cf565b61101a565b005b61050961103a565b604051610516919061382a565b60405180910390f35b610527611060565b60405161053491906133dc565b60405180910390f35b61055760048036038101906105529190613457565b611076565b6040516105649190613410565b60405180910390f35b610575611121565b604051610582919061382a565b60405180910390f35b610593611147565b6040516105a091906133dc565b60405180910390f35b6105c360048036038101906105be9190613394565b61115a565b6040516105d09190613410565b60405180910390f35b6105e1611172565b005b6105fd60048036038101906105f891906139fc565b611186565b005b61061960048036038101906106149190613abc565b6118a2565b005b61063560048036038101906106309190613394565b611f8a565b005b61063f611fd6565b60405161064c9190613410565b60405180910390f35b61065d611fdc565b60405161066a919061382a565b60405180910390f35b61068d60048036038101906106889190613394565b612005565b005b6106a960048036038101906106a49190613b18565b612051565b005b6106b36120b9565b6040516106c09190613639565b60405180910390f35b6106d16120df565b005b6106ed60048036038101906106e89190613457565b612169565b005b6106f76121b9565b005b610713600480360381019061070e9190613abc565b612516565b005b61071d612820565b60405161072a91906133dc565b60405180910390f35b61074d600480360381019061074891906139a2565b612833565b005b61076960048036038101906107649190613394565b612858565b005b6107736128db565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107ae919061382a565b602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190613c6c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161082c929190613c99565b6020604051808303816000875af115801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190613cd7565b505050565b600960009054906101000a900460ff1681565b600061089282610ea6565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546108df9190613d33565b9050919050565b600080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205411905092915050565b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109c3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836118a2565b6109ef600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826118a2565b5050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b606080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181805480602002602001604051908101604052809291908181526020018280548015610b4057602002820191906000526020600020905b815481526020019060010190808311610b2c575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610b9257602002820191906000526020600020905b815481526020019060010190808311610b7e575b5050505050905091509150915091565b600b6020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610be86128db565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610c915750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610d4057600073ffffffffffffffffffffffffffffffffffffffff16600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f57600080fd5b5b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401610d7d93929190613d89565b600060405180830381600087803b158015610d9757600080fd5b505af1158015610dab573d6000803e3d6000fd5b505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610de16128db565b80600960006101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4983610887565b610e539190613dc0565b9050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6057602002820191906000526020600020905b815481526020019060010190808311610f4c575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610fb857602002820191906000526020600020905b815481526020019060010190808311610fa4575b50505050508152505090506000816040015103610fd9576000915050611015565b6201518081600001518260400151610ff342600854612959565b610ffd9190613dc0565b6110079190613df4565b6110119190613e7d565b9150505b919050565b6110226128db565b600854811161103057600080fd5b8060088190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060149054906101000a900460ff16905090565b600080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205490506000810361111757600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b8091505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960019054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b61117a6128db565b6111846000612972565b565b6002600154036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613f0b565b60405180910390fd5b6002600181905550600960009054906101000a900460ff1615611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613f77565b60405180910390fd5b600760149054906101000a900460ff16611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613fe3565b60405180910390fd5b60085442106112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061404f565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061135f5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b61139e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611395906140bb565b60405180910390fd5b6000600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600084511115611451576114068383888888612a36565b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614127565b60405180910390fd5b611450868686612b5d565b5b6000600c600061145f612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905060005b875181101561181f576114b8612c72565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16636352211e8a84815181106114fd576114fc614147565b5b60200260200101516040518263ffffffff1660e01b81526004016115219190613410565b602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611562919061418b565b73ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614204565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff166342842e0e6115dc612c72565b308b85815181106115f0576115ef614147565b5b60200260200101516040518463ffffffff1660e01b815260040161161693929190613d89565b600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50505050611650612c72565b600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a84815181106116a4576116a3614147565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061171c8989838151811061170f5761170e614147565b5b6020026020010151611076565b826117279190613d33565b91506000600181111561173d5761173c614224565b5b8460018111156117505761174f614224565b5b0361179b578260030188828151811061176c5761176b614147565b5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150555b6001808111156117ae576117ad614224565b5b8460018111156117c1576117c0614224565b5b0361180c57826004018882815181106117dd576117dc614147565b5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150555b808061181790614253565b9150506114a7565b5061183061182b612c72565b612c7a565b808260000181905550611841612c72565b73ffffffffffffffffffffffffffffffffffffffff167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62898951604051611889929190613c99565b60405180910390a2505050600180819055505050505050565b6002600154036118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613f0b565b60405180910390fd5b6002600181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806119985750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906140bb565b60405180910390fd5b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600c6000611a36612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905060005b8451811015611ee2573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611acd57611acc614147565b5b60200260200101516040518263ffffffff1660e01b8152600401611af19190613410565b602060405180830381865afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b32919061418b565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90614204565b60405180910390fd5b6000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878481518110611bde57611bdd614147565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000836000015414611c76576000611c6487878481518110611c5757611c56614147565b5b6020026020010151611076565b90508083611c729190613dc0565b9250505b60006001811115611c8a57611c89614224565b5b846001811115611c9d57611c9c614224565b5b03611d5b57611d1883600301805480602002602001604051908101604052809291908181526020018280548015611cf357602002820191906000526020600020905b815481526020019060010190808311611cdf575b5050505050868381518110611d0b57611d0a614147565b5b6020026020010151612d30565b836003019080519060200190611d2f9291906132b8565b5082600301805480611d4457611d4361429b565b5b600190038181906000526020600020016000905590555b600180811115611d6e57611d6d614224565b5b846001811115611d8157611d80614224565b5b03611e3f57611dfc83600401805480602002602001604051908101604052809291908181526020018280548015611dd757602002820191906000526020600020905b815481526020019060010190808311611dc3575b5050505050868381518110611def57611dee614147565b5b6020026020010151612d30565b836004019080519060200190611e139291906132b8565b5082600401805480611e2857611e2761429b565b5b600190038181906000526020600020016000905590555b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e30611e64612c72565b888581518110611e7757611e76614147565b5b60200260200101516040518463ffffffff1660e01b8152600401611e9d93929190613d89565b600060405180830381600087803b158015611eb757600080fd5b505af1158015611ecb573d6000803e3d6000fd5b505050508080611eda90614253565b915050611a7e565b5060008260030180549050148015611f01575060008260040180549050145b15611f0b57600090505b611f1b611f16612c72565b612c7a565b808260000181905550611f2c612c72565b73ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb868651604051611f74929190613c99565b60405180910390a2505050600180819055505050565b611f926128db565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61200d6128db565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689898989611186565b6120af600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685858585611186565b5050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120e76128db565b600760149054906101000a900460ff1615612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e9061433c565b60405180910390fd5b6001600760146101000a81548160ff021916908315150217905550629e3400426121619190613d33565b600881905550565b6121716128db565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6002600154036121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590613f0b565b60405180910390fd5b600260018190555061220e612e5f565b600960019054906101000a900460ff161561225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612255906143a8565b60405180910390fd5b600061227061226b612c72565b610dfe565b9050600081116122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614414565b60405180910390fd5b80601060006122c2612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230b9190613d33565b92505081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661237b612c72565b600a54856123899190613df4565b6040518463ffffffff1660e01b81526004016123a793929190613d89565b6020604051808303816000875af11580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea9190613cd7565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612454612c72565b846040518463ffffffff1660e01b815260040161247393929190613d89565b6020604051808303816000875af1158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190613cd7565b506124bf612c72565b73ffffffffffffffffffffffffffffffffffffffff167faa1377f7ec93c239e959efa811f7b8554c036fd7a706c23e58024626a8f3db96826040516125049190613410565b60405180910390a25060018081905550565b61251e6128db565b603281511115612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90614480565b60405180910390fd5b61256d6001610dd9565b60005b815181101561281b576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008484815181106125cf576125ce614147565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561270357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e85858151811061268657612685614147565b5b60200260200101516040518263ffffffff1660e01b81526004016126aa9190613410565b602060405180830381865afa1580156126c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126eb919061418b565b73ffffffffffffffffffffffffffffffffffffffff16145b15612807578373ffffffffffffffffffffffffffffffffffffffff166342842e0e308386868151811061273957612738614147565b5b60200260200101516040518463ffffffff1660e01b815260040161275f93929190613d89565b600060405180830381600087803b15801561277957600080fd5b505af115801561278d573d6000803e3d6000fd5b505050508282815181106127a4576127a3614147565b5b60200260200101518473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffefe036cac4ee3a4aca074a81cbcc4376e1484693289078dbec149c890101d5b60405160405180910390a45b50808061281390614253565b915050612570565b505050565b600760149054906101000a900460ff1681565b61283b6128db565b80600960016101000a81548160ff02191690831515021790555050565b6128606128db565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690614512565b60405180910390fd5b6128d881612972565b50565b6128e3612c72565b73ffffffffffffffffffffffffffffffffffffffff16612901611fdc565b73ffffffffffffffffffffffffffffffffffffffff1614612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e9061457e565b60405180910390fd5b565b6000818310612968578161296a565b825b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080848484604051602001612a4e93929190614676565b6040516020818303038152906040528051906020012090506000612a7182612ea9565b90506000612ac3828a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b4f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b935050505095945050505050565b8051825114612ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b98906146f7565b60405180910390fd5b60005b8251811015612c6c576000828281518110612bc257612bc1614147565b5b602002602001015114612c5957818181518110612be257612be1614147565b5b6020026020010151600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858481518110612c3e57612c3d614147565b5b60200260200101518152602001908152602001600020819055505b8080612c6490614253565b915050612ba4565b50505050565b600033905090565b612c8381610ea6565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254612cd49190613d33565b92505081905550612ce742600854612959565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555050565b606060008060018551612d439190613dc0565b905060008551905060005b81811015612d9e5785878281518110612d6a57612d69614147565b5b602002602001015103612d8b57600181612d849190613d33565b9350612d9e565b8080612d9690614253565b915050612d4e565b5060008303612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd990614763565b60405180910390fd5b600183612def9190613dc0565b9250818314612e5357858281518110612e0b57612e0a614147565b5b6020026020010151868481518110612e2657612e25614147565b5b60200260200101818152505084868381518110612e4657612e45614147565b5b6020026020010181815250505b85935050505092915050565b612e67611060565b15612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e906147cf565b60405180910390fd5b565b600081604051602001612ebc9190614871565b604051602081830303815290604052805190602001209050919050565b6000806000612ee88585612f00565b91509150612ef581612f81565b819250505092915050565b6000806041835103612f415760008060006020860151925060408601519150606086015160001a9050612f358782858561314d565b94509450505050612f7a565b6040835103612f71576000806020850151915060408501519050612f66868383613259565b935093505050612f7a565b60006002915091505b9250929050565b60006004811115612f9557612f94614224565b5b816004811115612fa857612fa7614224565b5b031561314a5760016004811115612fc257612fc1614224565b5b816004811115612fd557612fd4614224565b5b03613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c906148e3565b60405180910390fd5b6002600481111561302957613028614224565b5b81600481111561303c5761303b614224565b5b0361307c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130739061494f565b60405180910390fd5b600360048111156130905761308f614224565b5b8160048111156130a3576130a2614224565b5b036130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da906149e1565b60405180910390fd5b6004808111156130f6576130f5614224565b5b81600481111561310957613108614224565b5b03613149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314090614a73565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613188576000600391509150613250565b601b8560ff16141580156131a05750601c8560ff1614155b156131b2576000600491509150613250565b6000600187878787604051600081526020016040526040516131d79493929190614abe565b6020604051602081039080840390855afa1580156131f9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361324757600060019250925050613250565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c61329c9190613d33565b90506132aa8782888561314d565b935093505050935093915050565b8280548282559060005260206000209081019282156132f4579160200282015b828111156132f35782518255916020019190600101906132d8565b5b5090506133019190613305565b5090565b5b8082111561331e576000816000905550600101613306565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061336182613336565b9050919050565b61337181613356565b811461337c57600080fd5b50565b60008135905061338e81613368565b92915050565b6000602082840312156133aa576133a961332c565b5b60006133b88482850161337f565b91505092915050565b60008115159050919050565b6133d6816133c1565b82525050565b60006020820190506133f160008301846133cd565b92915050565b6000819050919050565b61340a816133f7565b82525050565b60006020820190506134256000830184613401565b92915050565b613434816133f7565b811461343f57600080fd5b50565b6000813590506134518161342b565b92915050565b6000806040838503121561346e5761346d61332c565b5b600061347c8582860161337f565b925050602061348d85828601613442565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134bc576134bb613497565b5b8235905067ffffffffffffffff8111156134d9576134d861349c565b5b6020830191508360018202830111156134f5576134f46134a1565b5b9250929050565b6000806000806000608086880312156135185761351761332c565b5b60006135268882890161337f565b95505060206135378882890161337f565b945050604061354888828901613442565b935050606086013567ffffffffffffffff81111561356957613568613331565b5b613575888289016134a6565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135b981613584565b82525050565b60006020820190506135d460008301846135b0565b92915050565b6000819050919050565b60006135ff6135fa6135f584613336565b6135da565b613336565b9050919050565b6000613611826135e4565b9050919050565b600061362382613606565b9050919050565b61363381613618565b82525050565b600060208201905061364e600083018461362a565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369d82613654565b810181811067ffffffffffffffff821117156136bc576136bb613665565b5b80604052505050565b60006136cf613322565b90506136db8282613694565b919050565b600067ffffffffffffffff8211156136fb576136fa613665565b5b602082029050602081019050919050565b600061371f61371a846136e0565b6136c5565b90508083825260208201905060208402830185811115613742576137416134a1565b5b835b8181101561376b57806137578882613442565b845260208401935050602081019050613744565b5050509392505050565b600082601f83011261378a57613789613497565b5b813561379a84826020860161370c565b91505092915050565b600080604083850312156137ba576137b961332c565b5b600083013567ffffffffffffffff8111156137d8576137d7613331565b5b6137e485828601613775565b925050602083013567ffffffffffffffff81111561380557613804613331565b5b61381185828601613775565b9150509250929050565b61382481613356565b82525050565b600060208201905061383f600083018461381b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61387a816133f7565b82525050565b600061388c8383613871565b60208301905092915050565b6000602082019050919050565b60006138b082613845565b6138ba8185613850565b93506138c583613861565b8060005b838110156138f65781516138dd8882613880565b97506138e883613898565b9250506001810190506138c9565b5085935050505092915050565b6000604082019050818103600083015261391d81856138a5565b9050818103602083015261393181846138a5565b90509392505050565b600061394582613606565b9050919050565b6139558161393a565b82525050565b6000602082019050613970600083018461394c565b92915050565b61397f816133c1565b811461398a57600080fd5b50565b60008135905061399c81613976565b92915050565b6000602082840312156139b8576139b761332c565b5b60006139c68482850161398d565b91505092915050565b6000602082840312156139e5576139e461332c565b5b60006139f384828501613442565b91505092915050565b600080600080600060808688031215613a1857613a1761332c565b5b6000613a268882890161337f565b955050602086013567ffffffffffffffff811115613a4757613a46613331565b5b613a5388828901613775565b945050604086013567ffffffffffffffff811115613a7457613a73613331565b5b613a8088828901613775565b935050606086013567ffffffffffffffff811115613aa157613aa0613331565b5b613aad888289016134a6565b92509250509295509295909350565b60008060408385031215613ad357613ad261332c565b5b6000613ae18582860161337f565b925050602083013567ffffffffffffffff811115613b0257613b01613331565b5b613b0e85828601613775565b9150509250929050565b60008060008060008060008060c0898b031215613b3857613b3761332c565b5b600089013567ffffffffffffffff811115613b5657613b55613331565b5b613b628b828c01613775565b985050602089013567ffffffffffffffff811115613b8357613b82613331565b5b613b8f8b828c01613775565b975050604089013567ffffffffffffffff811115613bb057613baf613331565b5b613bbc8b828c016134a6565b9650965050606089013567ffffffffffffffff811115613bdf57613bde613331565b5b613beb8b828c01613775565b945050608089013567ffffffffffffffff811115613c0c57613c0b613331565b5b613c188b828c01613775565b93505060a089013567ffffffffffffffff811115613c3957613c38613331565b5b613c458b828c016134a6565b92509250509295985092959890939650565b600081519050613c668161342b565b92915050565b600060208284031215613c8257613c8161332c565b5b6000613c9084828501613c57565b91505092915050565b6000604082019050613cae600083018561381b565b613cbb6020830184613401565b9392505050565b600081519050613cd181613976565b92915050565b600060208284031215613ced57613cec61332c565b5b6000613cfb84828501613cc2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d3e826133f7565b9150613d49836133f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7e57613d7d613d04565b5b828201905092915050565b6000606082019050613d9e600083018661381b565b613dab602083018561381b565b613db86040830184613401565b949350505050565b6000613dcb826133f7565b9150613dd6836133f7565b925082821015613de957613de8613d04565b5b828203905092915050565b6000613dff826133f7565b9150613e0a836133f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4357613e42613d04565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e88826133f7565b9150613e93836133f7565b925082613ea357613ea2613e4e565b5b828204905092915050565b600082825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613ef5601f83613eae565b9150613f0082613ebf565b602082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f4465706f73697420706175736564000000000000000000000000000000000000600082015250565b6000613f61600e83613eae565b9150613f6c82613f2b565b602082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f5374616b696e67206973206e6f74206c61756e63686564207965740000000000600082015250565b6000613fcd601b83613eae565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b7f5374616b696e672068617320656e646564000000000000000000000000000000600082015250565b6000614039601183613eae565b915061404482614003565b602082019050919050565b600060208201905081810360008301526140688161402c565b9050919050565b7f556e6b6e6f776e20636f6e747261637400000000000000000000000000000000600082015250565b60006140a5601083613eae565b91506140b08261406f565b602082019050919050565b600060208201905081810360008301526140d481614098565b9050919050565b7f496e76616c696420646174612070726f76696465640000000000000000000000600082015250565b6000614111601583613eae565b915061411c826140db565b602082019050919050565b6000602082019050818103600083015261414081614104565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061418581613368565b92915050565b6000602082840312156141a1576141a061332c565b5b60006141af84828501614176565b91505092915050565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b60006141ee600d83613eae565b91506141f9826141b8565b602082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600061425e826133f7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142905761428f613d04565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f5374616b696e6720686173206265656e206c61756e6368656420616c7265616460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000614326602183613eae565b9150614331826142ca565b604082019050919050565b6000602082019050818103600083015261435581614319565b9050919050565b7f5769746864726177205061757365640000000000000000000000000000000000600082015250565b6000614392600f83613eae565b915061439d8261435c565b602082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006143fe601483613eae565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f3530206973206d61782070657220747800000000000000000000000000000000600082015250565b600061446a601083613eae565b915061447582614434565b602082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144fc602683613eae565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614568602083613eae565b915061457382614532565b602082019050919050565b600060208201905081810360008301526145978161455b565b9050919050565b60008160601b9050919050565b60006145b68261459e565b9050919050565b60006145c8826145ab565b9050919050565b6145e06145db82613356565b6145bd565b82525050565b600081905092915050565b6145fa816133f7565b82525050565b600061460c83836145f1565b60208301905092915050565b600061462382613845565b61462d81856145e6565b935061463883613861565b8060005b838110156146695781516146508882614600565b975061465b83613898565b92505060018101905061463c565b5085935050505092915050565b600061468282866145cf565b6014820191506146928285614618565b915061469e8284614618565b9150819050949350505050565b7f57726f6e67206172726179732070726f76696465640000000000000000000000600082015250565b60006146e1601583613eae565b91506146ec826146ab565b602082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f6d73672e73656e646572206973206e6f7420746865206f776e65720000000000600082015250565b600061474d601b83613eae565b915061475882614717565b602082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147b9601083613eae565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614830601c836147ef565b915061483b826147fa565b601c82019050919050565b6000819050919050565b6000819050919050565b61486b61486682614846565b614850565b82525050565b600061487c82614823565b9150614888828461485a565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006148cd601883613eae565b91506148d882614897565b602082019050919050565b600060208201905081810360008301526148fc816148c0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614939601f83613eae565b915061494482614903565b602082019050919050565b600060208201905081810360008301526149688161492c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006149cb602283613eae565b91506149d68261496f565b604082019050919050565b600060208201905081810360008301526149fa816149be565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5d602283613eae565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b614a9c81614846565b82525050565b600060ff82169050919050565b614ab881614aa2565b82525050565b6000608082019050614ad36000830187614a93565b614ae06020830186614aaf565b614aed6040830185614a93565b614afa6060830184614a93565b9594505050505056fea26469706673582212209a28021cba5a4e49894085c6e77e3f8b03ec5a8995ee3a138548f76f633b784b64736f6c634300080d003300000000000000000000000021177c97be40b52b002fbee000a03212708bcf470000000000000000000000000e043e39e1f9382e4b3cb9b859a1452a93993be70000000000000000000000006adb2e268de2aa1abf6578e4a8119b960e02928f000000000000000000000000a2fe5e51729be71261bcf42854012827bc44c0440000000000000000000000005b875e4bd3025a5158986f5e509e405190813a7d000000000000000000000000000000000000000000000000000000e8d4a51000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102475760003560e01c806361499ab91161013b5780638fa2a9f0116100b8578063c7b8981c1161007c578063c7b8981c146106ef578063dfeaa74c146106f9578063e1af569814610715578063ebd462cb14610733578063f2fde38b1461074f57610247565b80638fa2a9f01461067357806396eae2911461068f5780639f5cf2b6146106ab578063a30a2474146106c9578063c68e5161146106d357610247565b80637af61775116100ff5780637af61775146105e35780638293744b146105ff578063841e45611461061b5780638ac33487146106375780638da5cb5b1461065557610247565b806361499ab91461053d57806361d027b31461056d57806367800b5f1461058b5780636d031d0a146105a9578063715018a6146105d957610247565b80632ed3b83b116101c95780634bee21d41161018d5780634bee21d4146104855780634d307e3f146104b55780635a0b3045146104e55780635b7633d0146105015780635c975abb1461051f57610247565b80632ed3b83b146103e157806338a55f0e146103ff578063396ed0ab1461041b578063415855d614610439578063477348921461045557610247565b806317636b861161021057806317636b861461031657806319647af5146103345780631f29d2dc146103505780632161a2b61461038057806323101e27146103b157610247565b8062ae3bf81461024c57806302befd241461026857806304129667146102865780630bac0e2f146102b6578063150b7a02146102e6575b600080fd5b61026660048036038101906102619190613394565b61076b565b005b610270610874565b60405161027d91906133dc565b60405180910390f35b6102a0600480360381019061029b9190613394565b610887565b6040516102ad9190613410565b60405180910390f35b6102d060048036038101906102cb9190613457565b6108e6565b6040516102dd91906133dc565b60405180910390f35b61030060048036038101906102fb91906134fc565b610943565b60405161030d91906135bf565b60405180910390f35b61031e610971565b60405161032b9190613639565b60405180910390f35b61034e600480360381019061034991906137a3565b610997565b005b61036a60048036038101906103659190613457565b6109f3565b604051610377919061382a565b60405180910390f35b61039a60048036038101906103959190613394565b610a6e565b6040516103a8929190613903565b60405180910390f35b6103cb60048036038101906103c69190613394565b610ba2565b6040516103d89190613410565b60405180910390f35b6103e9610bba565b6040516103f6919061395b565b60405180910390f35b61041960048036038101906104149190613457565b610be0565b005b610423610db3565b604051610430919061395b565b60405180910390f35b610453600480360381019061044e91906139a2565b610dd9565b005b61046f600480360381019061046a9190613394565b610dfe565b60405161047c9190613410565b60405180910390f35b61049f600480360381019061049a9190613394565b610e5a565b6040516104ac9190613410565b60405180910390f35b6104cf60048036038101906104ca9190613394565b610ea6565b6040516104dc9190613410565b60405180910390f35b6104ff60048036038101906104fa91906139cf565b61101a565b005b61050961103a565b604051610516919061382a565b60405180910390f35b610527611060565b60405161053491906133dc565b60405180910390f35b61055760048036038101906105529190613457565b611076565b6040516105649190613410565b60405180910390f35b610575611121565b604051610582919061382a565b60405180910390f35b610593611147565b6040516105a091906133dc565b60405180910390f35b6105c360048036038101906105be9190613394565b61115a565b6040516105d09190613410565b60405180910390f35b6105e1611172565b005b6105fd60048036038101906105f891906139fc565b611186565b005b61061960048036038101906106149190613abc565b6118a2565b005b61063560048036038101906106309190613394565b611f8a565b005b61063f611fd6565b60405161064c9190613410565b60405180910390f35b61065d611fdc565b60405161066a919061382a565b60405180910390f35b61068d60048036038101906106889190613394565b612005565b005b6106a960048036038101906106a49190613b18565b612051565b005b6106b36120b9565b6040516106c09190613639565b60405180910390f35b6106d16120df565b005b6106ed60048036038101906106e89190613457565b612169565b005b6106f76121b9565b005b610713600480360381019061070e9190613abc565b612516565b005b61071d612820565b60405161072a91906133dc565b60405180910390f35b61074d600480360381019061074891906139a2565b612833565b005b61076960048036038101906107649190613394565b612858565b005b6107736128db565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107ae919061382a565b602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef9190613c6c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161082c929190613c99565b6020604051808303816000875af115801561084b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086f9190613cd7565b505050565b600960009054906101000a900460ff1681565b600061089282610ea6565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546108df9190613d33565b9050919050565b600080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205411905092915050565b60007f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f905095945050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109c3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836118a2565b6109ef600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826118a2565b5050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b606080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181805480602002602001604051908101604052809291908181526020018280548015610b4057602002820191906000526020600020905b815481526020019060010190808311610b2c575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610b9257602002820191906000526020600020905b815481526020019060010190808311610b7e575b5050505050905091509150915091565b600b6020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610be86128db565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610c915750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610d4057600073ffffffffffffffffffffffffffffffffffffffff16600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3f57600080fd5b5b8173ffffffffffffffffffffffffffffffffffffffff166342842e0e3033846040518463ffffffff1660e01b8152600401610d7d93929190613d89565b600060405180830381600087803b158015610d9757600080fd5b505af1158015610dab573d6000803e3d6000fd5b505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610de16128db565b80600960006101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4983610887565b610e539190613dc0565b9050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201805480602002602001604051908101604052809291908181526020018280548015610f6057602002820191906000526020600020905b815481526020019060010190808311610f4c575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610fb857602002820191906000526020600020905b815481526020019060010190808311610fa4575b50505050508152505090506000816040015103610fd9576000915050611015565b6201518081600001518260400151610ff342600854612959565b610ffd9190613dc0565b6110079190613df4565b6110119190613e7d565b9150505b919050565b6110226128db565b600854811161103057600080fd5b8060088190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060149054906101000a900460ff16905090565b600080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205490506000810361111757600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b8091505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960019054906101000a900460ff1681565b60106020528060005260406000206000915090505481565b61117a6128db565b6111846000612972565b565b6002600154036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613f0b565b60405180910390fd5b6002600181905550600960009054906101000a900460ff1615611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121a90613f77565b60405180910390fd5b600760149054906101000a900460ff16611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613fe3565b60405180910390fd5b60085442106112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad9061404f565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061135f5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b61139e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611395906140bb565b60405180910390fd5b6000600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600084511115611451576114068383888888612a36565b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614127565b60405180910390fd5b611450868686612b5d565b5b6000600c600061145f612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905060005b875181101561181f576114b8612c72565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16636352211e8a84815181106114fd576114fc614147565b5b60200260200101516040518263ffffffff1660e01b81526004016115219190613410565b602060405180830381865afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611562919061418b565b73ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90614204565b60405180910390fd5b8873ffffffffffffffffffffffffffffffffffffffff166342842e0e6115dc612c72565b308b85815181106115f0576115ef614147565b5b60200260200101516040518463ffffffff1660e01b815260040161161693929190613d89565b600060405180830381600087803b15801561163057600080fd5b505af1158015611644573d6000803e3d6000fd5b50505050611650612c72565b600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a84815181106116a4576116a3614147565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061171c8989838151811061170f5761170e614147565b5b6020026020010151611076565b826117279190613d33565b91506000600181111561173d5761173c614224565b5b8460018111156117505761174f614224565b5b0361179b578260030188828151811061176c5761176b614147565b5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150555b6001808111156117ae576117ad614224565b5b8460018111156117c1576117c0614224565b5b0361180c57826004018882815181106117dd576117dc614147565b5b602002602001015190806001815401808255809150506001900390600052602060002001600090919091909150555b808061181790614253565b9150506114a7565b5061183061182b612c72565b612c7a565b808260000181905550611841612c72565b73ffffffffffffffffffffffffffffffffffffffff167f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62898951604051611889929190613c99565b60405180910390a2505050600180819055505050505050565b6002600154036118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613f0b565b60405180910390fd5b6002600181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806119985750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906140bb565b60405180910390fd5b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600c6000611a36612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154905060005b8451811015611ee2573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16636352211e878481518110611acd57611acc614147565b5b60200260200101516040518263ffffffff1660e01b8152600401611af19190613410565b602060405180830381865afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b32919061418b565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90614204565b60405180910390fd5b6000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878481518110611bde57611bdd614147565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000836000015414611c76576000611c6487878481518110611c5757611c56614147565b5b6020026020010151611076565b90508083611c729190613dc0565b9250505b60006001811115611c8a57611c89614224565b5b846001811115611c9d57611c9c614224565b5b03611d5b57611d1883600301805480602002602001604051908101604052809291908181526020018280548015611cf357602002820191906000526020600020905b815481526020019060010190808311611cdf575b5050505050868381518110611d0b57611d0a614147565b5b6020026020010151612d30565b836003019080519060200190611d2f9291906132b8565b5082600301805480611d4457611d4361429b565b5b600190038181906000526020600020016000905590555b600180811115611d6e57611d6d614224565b5b846001811115611d8157611d80614224565b5b03611e3f57611dfc83600401805480602002602001604051908101604052809291908181526020018280548015611dd757602002820191906000526020600020905b815481526020019060010190808311611dc3575b5050505050868381518110611def57611dee614147565b5b6020026020010151612d30565b836004019080519060200190611e139291906132b8565b5082600401805480611e2857611e2761429b565b5b600190038181906000526020600020016000905590555b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e30611e64612c72565b888581518110611e7757611e76614147565b5b60200260200101516040518463ffffffff1660e01b8152600401611e9d93929190613d89565b600060405180830381600087803b158015611eb757600080fd5b505af1158015611ecb573d6000803e3d6000fd5b505050508080611eda90614253565b915050611a7e565b5060008260030180549050148015611f01575060008260040180549050145b15611f0b57600090505b611f1b611f16612c72565b612c7a565b808260000181905550611f2c612c72565b73ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb868651604051611f74929190613c99565b60405180910390a2505050600180819055505050565b611f926128db565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61200d6128db565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689898989611186565b6120af600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685858585611186565b5050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120e76128db565b600760149054906101000a900460ff1615612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e9061433c565b60405180910390fd5b6001600760146101000a81548160ff021916908315150217905550629e3400426121619190613d33565b600881905550565b6121716128db565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6002600154036121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590613f0b565b60405180910390fd5b600260018190555061220e612e5f565b600960019054906101000a900460ff161561225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612255906143a8565b60405180910390fd5b600061227061226b612c72565b610dfe565b9050600081116122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac90614414565b60405180910390fd5b80601060006122c2612c72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230b9190613d33565b92505081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661237b612c72565b600a54856123899190613df4565b6040518463ffffffff1660e01b81526004016123a793929190613d89565b6020604051808303816000875af11580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea9190613cd7565b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612454612c72565b846040518463ffffffff1660e01b815260040161247393929190613d89565b6020604051808303816000875af1158015612492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b69190613cd7565b506124bf612c72565b73ffffffffffffffffffffffffffffffffffffffff167faa1377f7ec93c239e959efa811f7b8554c036fd7a706c23e58024626a8f3db96826040516125049190613410565b60405180910390a25060018081905550565b61251e6128db565b603281511115612563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255a90614480565b60405180910390fd5b61256d6001610dd9565b60005b815181101561281b576000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008484815181106125cf576125ce614147565b5b6020026020010151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561270357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e85858151811061268657612685614147565b5b60200260200101516040518263ffffffff1660e01b81526004016126aa9190613410565b602060405180830381865afa1580156126c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126eb919061418b565b73ffffffffffffffffffffffffffffffffffffffff16145b15612807578373ffffffffffffffffffffffffffffffffffffffff166342842e0e308386868151811061273957612738614147565b5b60200260200101516040518463ffffffff1660e01b815260040161275f93929190613d89565b600060405180830381600087803b15801561277957600080fd5b505af115801561278d573d6000803e3d6000fd5b505050508282815181106127a4576127a3614147565b5b60200260200101518473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffefe036cac4ee3a4aca074a81cbcc4376e1484693289078dbec149c890101d5b60405160405180910390a45b50808061281390614253565b915050612570565b505050565b600760149054906101000a900460ff1681565b61283b6128db565b80600960016101000a81548160ff02191690831515021790555050565b6128606128db565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c690614512565b60405180910390fd5b6128d881612972565b50565b6128e3612c72565b73ffffffffffffffffffffffffffffffffffffffff16612901611fdc565b73ffffffffffffffffffffffffffffffffffffffff1614612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e9061457e565b60405180910390fd5b565b6000818310612968578161296a565b825b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080848484604051602001612a4e93929190614676565b6040516020818303038152906040528051906020012090506000612a7182612ea9565b90506000612ac3828a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b4f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b935050505095945050505050565b8051825114612ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b98906146f7565b60405180910390fd5b60005b8251811015612c6c576000828281518110612bc257612bc1614147565b5b602002602001015114612c5957818181518110612be257612be1614147565b5b6020026020010151600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858481518110612c3e57612c3d614147565b5b60200260200101518152602001908152602001600020819055505b8080612c6490614253565b915050612ba4565b50505050565b600033905090565b612c8381610ea6565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254612cd49190613d33565b92505081905550612ce742600854612959565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555050565b606060008060018551612d439190613dc0565b905060008551905060005b81811015612d9e5785878281518110612d6a57612d69614147565b5b602002602001015103612d8b57600181612d849190613d33565b9350612d9e565b8080612d9690614253565b915050612d4e565b5060008303612de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd990614763565b60405180910390fd5b600183612def9190613dc0565b9250818314612e5357858281518110612e0b57612e0a614147565b5b6020026020010151868481518110612e2657612e25614147565b5b60200260200101818152505084868381518110612e4657612e45614147565b5b6020026020010181815250505b85935050505092915050565b612e67611060565b15612ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9e906147cf565b60405180910390fd5b565b600081604051602001612ebc9190614871565b604051602081830303815290604052805190602001209050919050565b6000806000612ee88585612f00565b91509150612ef581612f81565b819250505092915050565b6000806041835103612f415760008060006020860151925060408601519150606086015160001a9050612f358782858561314d565b94509450505050612f7a565b6040835103612f71576000806020850151915060408501519050612f66868383613259565b935093505050612f7a565b60006002915091505b9250929050565b60006004811115612f9557612f94614224565b5b816004811115612fa857612fa7614224565b5b031561314a5760016004811115612fc257612fc1614224565b5b816004811115612fd557612fd4614224565b5b03613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c906148e3565b60405180910390fd5b6002600481111561302957613028614224565b5b81600481111561303c5761303b614224565b5b0361307c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130739061494f565b60405180910390fd5b600360048111156130905761308f614224565b5b8160048111156130a3576130a2614224565b5b036130e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130da906149e1565b60405180910390fd5b6004808111156130f6576130f5614224565b5b81600481111561310957613108614224565b5b03613149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314090614a73565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613188576000600391509150613250565b601b8560ff16141580156131a05750601c8560ff1614155b156131b2576000600491509150613250565b6000600187878787604051600081526020016040526040516131d79493929190614abe565b6020604051602081039080840390855afa1580156131f9573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361324757600060019250925050613250565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c61329c9190613d33565b90506132aa8782888561314d565b935093505050935093915050565b8280548282559060005260206000209081019282156132f4579160200282015b828111156132f35782518255916020019190600101906132d8565b5b5090506133019190613305565b5090565b5b8082111561331e576000816000905550600101613306565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061336182613336565b9050919050565b61337181613356565b811461337c57600080fd5b50565b60008135905061338e81613368565b92915050565b6000602082840312156133aa576133a961332c565b5b60006133b88482850161337f565b91505092915050565b60008115159050919050565b6133d6816133c1565b82525050565b60006020820190506133f160008301846133cd565b92915050565b6000819050919050565b61340a816133f7565b82525050565b60006020820190506134256000830184613401565b92915050565b613434816133f7565b811461343f57600080fd5b50565b6000813590506134518161342b565b92915050565b6000806040838503121561346e5761346d61332c565b5b600061347c8582860161337f565b925050602061348d85828601613442565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134bc576134bb613497565b5b8235905067ffffffffffffffff8111156134d9576134d861349c565b5b6020830191508360018202830111156134f5576134f46134a1565b5b9250929050565b6000806000806000608086880312156135185761351761332c565b5b60006135268882890161337f565b95505060206135378882890161337f565b945050604061354888828901613442565b935050606086013567ffffffffffffffff81111561356957613568613331565b5b613575888289016134a6565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135b981613584565b82525050565b60006020820190506135d460008301846135b0565b92915050565b6000819050919050565b60006135ff6135fa6135f584613336565b6135da565b613336565b9050919050565b6000613611826135e4565b9050919050565b600061362382613606565b9050919050565b61363381613618565b82525050565b600060208201905061364e600083018461362a565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369d82613654565b810181811067ffffffffffffffff821117156136bc576136bb613665565b5b80604052505050565b60006136cf613322565b90506136db8282613694565b919050565b600067ffffffffffffffff8211156136fb576136fa613665565b5b602082029050602081019050919050565b600061371f61371a846136e0565b6136c5565b90508083825260208201905060208402830185811115613742576137416134a1565b5b835b8181101561376b57806137578882613442565b845260208401935050602081019050613744565b5050509392505050565b600082601f83011261378a57613789613497565b5b813561379a84826020860161370c565b91505092915050565b600080604083850312156137ba576137b961332c565b5b600083013567ffffffffffffffff8111156137d8576137d7613331565b5b6137e485828601613775565b925050602083013567ffffffffffffffff81111561380557613804613331565b5b61381185828601613775565b9150509250929050565b61382481613356565b82525050565b600060208201905061383f600083018461381b565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61387a816133f7565b82525050565b600061388c8383613871565b60208301905092915050565b6000602082019050919050565b60006138b082613845565b6138ba8185613850565b93506138c583613861565b8060005b838110156138f65781516138dd8882613880565b97506138e883613898565b9250506001810190506138c9565b5085935050505092915050565b6000604082019050818103600083015261391d81856138a5565b9050818103602083015261393181846138a5565b90509392505050565b600061394582613606565b9050919050565b6139558161393a565b82525050565b6000602082019050613970600083018461394c565b92915050565b61397f816133c1565b811461398a57600080fd5b50565b60008135905061399c81613976565b92915050565b6000602082840312156139b8576139b761332c565b5b60006139c68482850161398d565b91505092915050565b6000602082840312156139e5576139e461332c565b5b60006139f384828501613442565b91505092915050565b600080600080600060808688031215613a1857613a1761332c565b5b6000613a268882890161337f565b955050602086013567ffffffffffffffff811115613a4757613a46613331565b5b613a5388828901613775565b945050604086013567ffffffffffffffff811115613a7457613a73613331565b5b613a8088828901613775565b935050606086013567ffffffffffffffff811115613aa157613aa0613331565b5b613aad888289016134a6565b92509250509295509295909350565b60008060408385031215613ad357613ad261332c565b5b6000613ae18582860161337f565b925050602083013567ffffffffffffffff811115613b0257613b01613331565b5b613b0e85828601613775565b9150509250929050565b60008060008060008060008060c0898b031215613b3857613b3761332c565b5b600089013567ffffffffffffffff811115613b5657613b55613331565b5b613b628b828c01613775565b985050602089013567ffffffffffffffff811115613b8357613b82613331565b5b613b8f8b828c01613775565b975050604089013567ffffffffffffffff811115613bb057613baf613331565b5b613bbc8b828c016134a6565b9650965050606089013567ffffffffffffffff811115613bdf57613bde613331565b5b613beb8b828c01613775565b945050608089013567ffffffffffffffff811115613c0c57613c0b613331565b5b613c188b828c01613775565b93505060a089013567ffffffffffffffff811115613c3957613c38613331565b5b613c458b828c016134a6565b92509250509295985092959890939650565b600081519050613c668161342b565b92915050565b600060208284031215613c8257613c8161332c565b5b6000613c9084828501613c57565b91505092915050565b6000604082019050613cae600083018561381b565b613cbb6020830184613401565b9392505050565b600081519050613cd181613976565b92915050565b600060208284031215613ced57613cec61332c565b5b6000613cfb84828501613cc2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d3e826133f7565b9150613d49836133f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7e57613d7d613d04565b5b828201905092915050565b6000606082019050613d9e600083018661381b565b613dab602083018561381b565b613db86040830184613401565b949350505050565b6000613dcb826133f7565b9150613dd6836133f7565b925082821015613de957613de8613d04565b5b828203905092915050565b6000613dff826133f7565b9150613e0a836133f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e4357613e42613d04565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e88826133f7565b9150613e93836133f7565b925082613ea357613ea2613e4e565b5b828204905092915050565b600082825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613ef5601f83613eae565b9150613f0082613ebf565b602082019050919050565b60006020820190508181036000830152613f2481613ee8565b9050919050565b7f4465706f73697420706175736564000000000000000000000000000000000000600082015250565b6000613f61600e83613eae565b9150613f6c82613f2b565b602082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f5374616b696e67206973206e6f74206c61756e63686564207965740000000000600082015250565b6000613fcd601b83613eae565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b7f5374616b696e672068617320656e646564000000000000000000000000000000600082015250565b6000614039601183613eae565b915061404482614003565b602082019050919050565b600060208201905081810360008301526140688161402c565b9050919050565b7f556e6b6e6f776e20636f6e747261637400000000000000000000000000000000600082015250565b60006140a5601083613eae565b91506140b08261406f565b602082019050919050565b600060208201905081810360008301526140d481614098565b9050919050565b7f496e76616c696420646174612070726f76696465640000000000000000000000600082015250565b6000614111601583613eae565b915061411c826140db565b602082019050919050565b6000602082019050818103600083015261414081614104565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061418581613368565b92915050565b6000602082840312156141a1576141a061332c565b5b60006141af84828501614176565b91505092915050565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b60006141ee600d83613eae565b91506141f9826141b8565b602082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600061425e826133f7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142905761428f613d04565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f5374616b696e6720686173206265656e206c61756e6368656420616c7265616460008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000614326602183613eae565b9150614331826142ca565b604082019050919050565b6000602082019050818103600083015261435581614319565b9050919050565b7f5769746864726177205061757365640000000000000000000000000000000000600082015250565b6000614392600f83613eae565b915061439d8261435c565b602082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006143fe601483613eae565b9150614409826143c8565b602082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f3530206973206d61782070657220747800000000000000000000000000000000600082015250565b600061446a601083613eae565b915061447582614434565b602082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144fc602683613eae565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614568602083613eae565b915061457382614532565b602082019050919050565b600060208201905081810360008301526145978161455b565b9050919050565b60008160601b9050919050565b60006145b68261459e565b9050919050565b60006145c8826145ab565b9050919050565b6145e06145db82613356565b6145bd565b82525050565b600081905092915050565b6145fa816133f7565b82525050565b600061460c83836145f1565b60208301905092915050565b600061462382613845565b61462d81856145e6565b935061463883613861565b8060005b838110156146695781516146508882614600565b975061465b83613898565b92505060018101905061463c565b5085935050505092915050565b600061468282866145cf565b6014820191506146928285614618565b915061469e8284614618565b9150819050949350505050565b7f57726f6e67206172726179732070726f76696465640000000000000000000000600082015250565b60006146e1601583613eae565b91506146ec826146ab565b602082019050919050565b60006020820190508181036000830152614710816146d4565b9050919050565b7f6d73672e73656e646572206973206e6f7420746865206f776e65720000000000600082015250565b600061474d601b83613eae565b915061475882614717565b602082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147b9601083613eae565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000614830601c836147ef565b915061483b826147fa565b601c82019050919050565b6000819050919050565b6000819050919050565b61486b61486682614846565b614850565b82525050565b600061487c82614823565b9150614888828461485a565b60208201915081905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006148cd601883613eae565b91506148d882614897565b602082019050919050565b600060208201905081810360008301526148fc816148c0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614939601f83613eae565b915061494482614903565b602082019050919050565b600060208201905081810360008301526149688161492c565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006149cb602283613eae565b91506149d68261496f565b604082019050919050565b600060208201905081810360008301526149fa816149be565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a5d602283613eae565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b614a9c81614846565b82525050565b600060ff82169050919050565b614ab881614aa2565b82525050565b6000608082019050614ad36000830187614a93565b614ae06020830186614aaf565b614aed6040830185614a93565b614afa6060830184614a93565b9594505050505056fea26469706673582212209a28021cba5a4e49894085c6e77e3f8b03ec5a8995ee3a138548f76f633b784b64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000021177c97be40b52b002fbee000a03212708bcf470000000000000000000000000e043e39e1f9382e4b3cb9b859a1452a93993be70000000000000000000000006adb2e268de2aa1abf6578e4a8119b960e02928f000000000000000000000000a2fe5e51729be71261bcf42854012827bc44c0440000000000000000000000005b875e4bd3025a5158986f5e509e405190813a7d000000000000000000000000000000000000000000000000000000e8d4a51000
-----Decoded View---------------
Arg [0] : _DOGE (address): 0x21177C97Be40b52b002fbeE000a03212708BCf47
Arg [1] : _SHIBA (address): 0x0e043e39E1F9382E4b3cB9B859a1452A93993bE7
Arg [2] : _SHIBDOGE_TOKEN (address): 0x6ADb2E268de2aA1aBF6578E4a8119b960E02928F
Arg [3] : _BURN_TOKEN (address): 0xA2fe5E51729BE71261BcF42854012827BC44c044
Arg [4] : _treasury (address): 0x5B875E4Bd3025a5158986f5e509E405190813A7D
Arg [5] : _baserate (uint256): 1000000000000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000021177c97be40b52b002fbee000a03212708bcf47
Arg [1] : 0000000000000000000000000e043e39e1f9382e4b3cb9b859a1452a93993be7
Arg [2] : 0000000000000000000000006adb2e268de2aa1abf6578e4a8119b960e02928f
Arg [3] : 000000000000000000000000a2fe5e51729be71261bcf42854012827bc44c044
Arg [4] : 0000000000000000000000005b875e4bd3025a5158986f5e509e405190813a7d
Arg [5] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.