More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 337 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Claim Rewards | 20060806 | 24 days ago | IN | 0 ETH | 0.00119371 | ||||
Claim Rewards | 19949538 | 40 days ago | IN | 0 ETH | 0.00113748 | ||||
Claim Rewards | 19933810 | 42 days ago | IN | 0 ETH | 0.00214937 | ||||
Claim Rewards | 19808478 | 59 days ago | IN | 0 ETH | 0.00101995 | ||||
Stake | 19758198 | 66 days ago | IN | 0 ETH | 0.00161038 | ||||
Claim Rewards | 19750368 | 68 days ago | IN | 0 ETH | 0.00142953 | ||||
Stake | 19224043 | 141 days ago | IN | 0 ETH | 0.00707388 | ||||
Stake | 19209165 | 143 days ago | IN | 0 ETH | 0.01025989 | ||||
Claim Rewards | 19178155 | 148 days ago | IN | 0 ETH | 0.00801603 | ||||
Stake | 19151464 | 152 days ago | IN | 0 ETH | 0.00334902 | ||||
Stake | 19102587 | 158 days ago | IN | 0 ETH | 0.0030344 | ||||
Claim Rewards | 18937536 | 182 days ago | IN | 0 ETH | 0.0035444 | ||||
Stake | 18866557 | 191 days ago | IN | 0 ETH | 0.00427214 | ||||
Stake | 18848618 | 194 days ago | IN | 0 ETH | 0.00936707 | ||||
Claim Rewards | 18837791 | 196 days ago | IN | 0 ETH | 0.00465407 | ||||
Claim Rewards | 18618581 | 226 days ago | IN | 0 ETH | 0.00496131 | ||||
Stake | 18496200 | 243 days ago | IN | 0 ETH | 0.00335366 | ||||
Stake | 18474423 | 246 days ago | IN | 0 ETH | 0.00668369 | ||||
Stake | 18459700 | 248 days ago | IN | 0 ETH | 0.00211126 | ||||
Stake | 18443362 | 251 days ago | IN | 0 ETH | 0.00781081 | ||||
Stake | 18402229 | 257 days ago | IN | 0 ETH | 0.00201933 | ||||
Claim Rewards | 18395186 | 258 days ago | IN | 0 ETH | 0.00168958 | ||||
Claim Rewards | 18383748 | 259 days ago | IN | 0 ETH | 0.0014326 | ||||
Stake | 18358635 | 263 days ago | IN | 0 ETH | 0.00127258 | ||||
Stake | 18344816 | 265 days ago | IN | 0 ETH | 0.00172971 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Dogface2ndStaking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-10 */ /** *Submitted for verification at Etherscan.io on 2022-08-25 */ /** *Submitted for verification at BscScan.com on 2022-08-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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); } /** * @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); function safeTransferFrom( address from, address to, uint256 tokenId ) external; function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function getApproved(uint256 tokenId) external view returns (address operator); function setApprovalForAll(address operator, bool _approved) external; function isApprovedForAll(address owner, address operator) external view returns (bool); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } 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; } } /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @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 / b + (a % b == 0 ? 0 : 1); } } 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 Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); 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 Collection of functions related to the address type */ library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Dogface2ndStaking is Ownable, IERC721Receiver, ReentrancyGuard, Pausable { using EnumerableSet for EnumerableSet.UintSet; //variables address public stakingToken; // staking nft address address public rewardToken; // reward token address uint256 public rate = 0.001735 ether; // second reate / one nft uint256 public expiration; uint256 private dailyBonusTime ; // mappings mapping(address => EnumerableSet.UintSet) private _deposits; mapping(address => mapping(uint256 => uint256)) public _depositBlocks; mapping(address => StakingData) public _stakeData; mapping(address => bool) public _isMintbonus; uint256[] bounsRate = [350 ether , 900 ether , 1500 ether , 1900 ether, 2500 ether, 4000 ether]; //struct struct StakingData{ address owner; uint256 lastStakeTime; uint256 firstStakingTime; uint256 stakedCounts; uint256[] stakedTokenIds; uint256 totalRewards; } //event event UnStake(address owner, uint256[] tokenIds, uint256 time); event Stake(address owner, uint256[] tokenIds, uint256 time); event Claim(address owner, uint256 amount, uint256 time); constructor(address _stakingToken, address _rewardToken) { stakingToken = _stakingToken; rewardToken = _rewardToken; dailyBonusTime = block.timestamp; _pause(); } function setStakingToken(address _stakingToken) public onlyOwner() { stakingToken = _stakingToken; } function setRewardToken(address _rewardToken) public onlyOwner() { rewardToken = _rewardToken; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } // Set a multiplier for how many tokens to earn each time a block passes. function setRate(uint256 _rate) public onlyOwner() { rate = _rate; } // Set this to a block to disable the ability to continue accruing tokens past that block number. function setExpiration(uint256 _expiration) public onlyOwner() { expiration = block.number + _expiration; } function _removeItemFromArray(uint256[] storage arr, uint256 item) private { for (uint256 i = 0; i < arr.length; i++) { if (arr[i] == item) { for (uint256 j = i; j < arr.length - 1; j++) { arr[j] = arr[j+1]; } delete arr[arr.length - 1]; arr.pop(); break; } } } function isStakeable(uint256[] calldata tokenIds) private view returns(bool status) { status = true; for(uint i = 0; i < tokenIds.length; i++){ if(IERC721(stakingToken).ownerOf(tokenIds[i]) != msg.sender){ status = false; } } return status; } function indexOf(uint256[] memory arr, uint256 searchFor) private pure returns (bool) { for (uint256 i = 0; i < arr.length; i++) { if (arr[i] == searchFor) { return true; } } return false; } function isUnstakeable(uint256[] calldata tokenIds) private view returns(bool status) { status = true; for(uint i = 0; i < tokenIds.length; i++){ if(!indexOf(_stakeData[msg.sender].stakedTokenIds , tokenIds[i])){ status = false; } } return status; } //staking function. function stake(uint256[] calldata tokenIds) external whenNotPaused { require(msg.sender != stakingToken, "Staking token and sender is same."); require(tokenIds.length > 0, "Token number is not correct."); require(isStakeable(tokenIds) , "Token id is not correct."); if(_isMintbonus[msg.sender] != true){ IERC20(rewardToken).transfer(msg.sender , tokenIds.length * 1000 ether); } for (uint256 i = 0; i < tokenIds.length; i++) { IERC721(stakingToken).safeTransferFrom(msg.sender, address(this), tokenIds[i], ""); _stakeData[msg.sender].stakedTokenIds.push(tokenIds[i]); } uint256 _totalRewards = computeRewards() ; _isMintbonus[msg.sender] = true; _stakeData[msg.sender] = StakingData( msg.sender , _stakeData[msg.sender].firstStakingTime > 0 ? _stakeData[msg.sender].firstStakingTime : block.timestamp , block.timestamp , (_stakeData[msg.sender].stakedCounts + tokenIds.length), _stakeData[msg.sender].stakedTokenIds, _totalRewards ); emit Stake(msg.sender , tokenIds , block.timestamp); } // _isMintbonus[msg.sender] = true; function getStakeData(address account) public view returns(StakingData memory){ return _stakeData[account]; } //unstaking function. function unstake(uint256[] calldata tokenIds) external whenNotPaused { require(msg.sender != stakingToken, "Staking token and sender is same."); require(tokenIds.length > 0, "Token number is not correct."); require(isUnstakeable(tokenIds) , "Token id is not correct."); for (uint256 i = 0; i < tokenIds.length; i++) { IERC721(stakingToken).safeTransferFrom(address(this), msg.sender, tokenIds[i], ""); _removeItemFromArray(_stakeData[msg.sender].stakedTokenIds , tokenIds[i]); } uint256 _totalRewards = computeRewards(); _stakeData[msg.sender] = StakingData( msg.sender , _stakeData[msg.sender].firstStakingTime, block.timestamp , (_stakeData[msg.sender].stakedCounts - tokenIds.length), _stakeData[msg.sender].stakedTokenIds, _totalRewards ); emit UnStake(msg.sender , tokenIds , block.timestamp); } //unstaking function. function unstakeAll() external whenNotPaused { require(msg.sender != stakingToken, "Staking token and sender is same."); for (uint256 i = 0; i < _stakeData[msg.sender].stakedTokenIds.length; i++) { IERC721(stakingToken).safeTransferFrom(address(this), msg.sender, _stakeData[msg.sender].stakedTokenIds[i], ""); } uint256 _totalRewards = computeRewards(); uint256[] memory empty; _stakeData[msg.sender] = StakingData( msg.sender , _stakeData[msg.sender].firstStakingTime, block.timestamp , 0, empty, _totalRewards ); emit UnStake(msg.sender , _stakeData[msg.sender].stakedTokenIds , block.timestamp); } //compute reward amount function computeRewards() private view returns (uint256 rewards) { require(msg.sender != address(0), "Address is invalid"); StakingData memory stakeData = _stakeData[msg.sender]; if(stakeData.owner != address(0)){ uint256 _count = stakeData.stakedCounts; uint256 _bounsRate = _count >= 4 && _count <= 9 ? bounsRate[0] : _count >= 10 && _count <= 14? bounsRate[1] : _count >= 15 && _count <= 19 ? bounsRate[2] : _count >= 20 && _count <= 24 ? bounsRate[3] : _count >= 25 && _count <=29 ? bounsRate[4] : _count >= 30 ? bounsRate[5] : 0 ether; uint256 _bouns = (uint((block.timestamp - dailyBonusTime) / 86400) - uint((stakeData.lastStakeTime - dailyBonusTime) / 86400)) * _bounsRate; rewards = stakeData.totalRewards + stakeData.stakedCounts * rate * (block.timestamp - stakeData.lastStakeTime); return (rewards + _bouns); } else{ return 0; } } //reward amount calculate function calculateRewards(address account) public view returns (uint256 rewards) { require(account != address(0), "Address is invalid"); StakingData memory stakeData = _stakeData[account]; uint256 _count = stakeData.stakedCounts; uint256 _bounsRate = _count >= 4 && _count <= 9 ? bounsRate[0] : _count >= 10 && _count <= 14? bounsRate[1] : _count >= 15 && _count <= 19 ? bounsRate[2] : _count >= 20 && _count <= 24 ? bounsRate[3] : _count >= 25 && _count <=29 ? bounsRate[4] : _count >= 30 ? bounsRate[5] : 0 ether; uint256 _bouns = (uint((block.timestamp - dailyBonusTime) / 86400) - uint((stakeData.lastStakeTime - dailyBonusTime) / 86400)) * _bounsRate; rewards = stakeData.totalRewards + stakeData.stakedCounts * rate * (block.timestamp - stakeData.lastStakeTime); return rewards + _bouns; } //reward claim function function claimRewards() public whenNotPaused { require(msg.sender != address(0), "Address is invalid"); uint256 _totalRewards = computeRewards(); require(_totalRewards > 0, "You have no rewards."); if(_totalRewards > 0){ IERC20(rewardToken).transfer(msg.sender, _totalRewards); _stakeData[msg.sender].totalRewards = 0 ; _stakeData[msg.sender].lastStakeTime = block.timestamp; emit Claim(msg.sender , _totalRewards , block.timestamp); } } //reward amount function depositsOf(address account) external view returns (uint256[] memory) { EnumerableSet.UintSet storage depositSet = _deposits[account]; uint256[] memory tokenIds = new uint256[] (depositSet.length()); for (uint256 i; i < depositSet.length(); i++) { tokenIds[i] = depositSet.at(i); } return tokenIds; } //withdrawal function. function withdrawTokens() external onlyOwner { uint256 _totalTokens = IERC20(rewardToken).balanceOf(address(this)); IERC20(rewardToken).transfer(msg.sender, _totalTokens); } function onERC721Received(address,address,uint256,bytes calldata) external pure override returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Claim","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":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UnStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_depositBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isMintbonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_stakeData","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"lastStakeTime","type":"uint256"},{"internalType":"uint256","name":"firstStakingTime","type":"uint256"},{"internalType":"uint256","name":"stakedCounts","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"depositsOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStakeData","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"lastStakeTime","type":"uint256"},{"internalType":"uint256","name":"firstStakingTime","type":"uint256"},{"internalType":"uint256","name":"stakedCounts","type":"uint256"},{"internalType":"uint256[]","name":"stakedTokenIds","type":"uint256[]"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"internalType":"struct Dogface2ndStaking.StakingData","name":"","type":"tuple"}],"stateMutability":"view","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"setExpiration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"}],"name":"setStakingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
660629f92aaf70006004556101406040526812f939c99edab8000060809081526830ca024f987b90000060a052685150ae84a8cdf0000060c0526866ffcbfd5e5a30000060e05268878678326eac9000006101005268d8d726b7177a800000610120526200007290600b906006620001f4565b503480156200008057600080fd5b50604051620026bf380380620026bf833981016040819052620000a39162000283565b620000ae3362000106565b60018055600280546001600160a81b0319166101006001600160a01b038581169190910291909117909155600380546001600160a01b03191691831691909117905542600655620000fe62000156565b5050620002bb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615620001a15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620001d73390565b6040516001600160a01b03909116815260200160405180910390a1565b8280548282559060005260206000209081019282156200023d579160200282015b828111156200023d57825182906001600160481b031690559160200191906001019062000215565b506200024b9291506200024f565b5090565b5b808211156200024b576000815560010162000250565b80516001600160a01b03811681146200027e57600080fd5b919050565b600080604083850312156200029757600080fd5b620002a28362000266565b9150620002b26020840162000266565b90509250929050565b6123f480620002cb6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806372f702f3116100de578063b343ae1411610097578063e449f34111610071578063e449f3411461037a578063f2fde38b1461038d578063f7c618c1146103a0578063f862bdac146103b357600080fd5b8063b343ae141461030f578063da66d4dc1461033a578063e3a9db1a1461035a57600080fd5b806372f702f3146102885780638456cb59146102b85780638aee8127146102c05780638d8f2adb146102d35780638da5cb5b146102db57806394e6c9cc146102ec57600080fd5b8063372500ab1161014b578063515a20ba11610125578063515a20ba146102435780635c975abb1461025657806364ab86751461026d578063715018a61461028057600080fd5b8063372500ab1461022a5780633f4ba83a146102325780634665096d1461023a57600080fd5b80630fbf0a9314610193578063150b7a02146101a85780631e9b12ef146101e55780632c4e722e146101f857806334fcf4371461020f57806335322f3714610222575b600080fd5b6101a66101a1366004611f6e565b61042c565b005b6101c76101b6366004611ea3565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6101a66101f3366004611e69565b610885565b61020160045481565b6040519081526020016101dc565b6101a661021d366004612005565b6108d7565b6101a6610906565b6101a6610b29565b6101a6610ca9565b61020160055481565b6101a6610251366004612005565b610cdd565b60025460ff165b60405190151581526020016101dc565b61020161027b366004611e69565b610d17565b6101a6610fb0565b6002546102a09061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b6101a6610fe4565b6101a66102ce366004611e69565b611016565b6101a6611062565b6000546001600160a01b03166102a0565b61025d6102fa366004611e69565b600a6020526000908152604090205460ff1681565b61020161031d366004611f42565b600860209081526000928352604080842090915290825290205481565b61034d610348366004611e69565b611191565b6040516101dc9190612235565b61036d610368366004611e69565b611283565b6040516101dc9190612125565b6101a6610388366004611f6e565b61133f565b6101a661039b366004611e69565b611670565b6003546102a0906001600160a01b031681565b6103fa6103c1366004611e69565b600960205260009081526040902080546001820154600283015460038401546005909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016101dc565b60025460ff16156104585760405162461bcd60e51b815260040161044f90612169565b60405180910390fd5b60025461010090046001600160a01b03163314156104885760405162461bcd60e51b815260040161044f90612193565b806104d55760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e206e756d626572206973206e6f7420636f72726563742e00000000604482015260640161044f565b6104df8282611708565b6105265760405162461bcd60e51b81526020600482015260186024820152772a37b5b2b71034b21034b9903737ba1031b7b93932b1ba1760411b604482015260640161044f565b336000908152600a602052604090205460ff1615156001146105e7576003546001600160a01b031663a9059cbb3361056784683635c9adc5dea00000612300565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156105ad57600080fd5b505af11580156105c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e59190611fe3565b505b60005b818110156106cd5760025461010090046001600160a01b031663b88d4fde333086868681811061061c5761061c61237d565b905060200201356040518463ffffffff1660e01b815260040161064193929190612037565b600060405180830381600087803b15801561065b57600080fd5b505af115801561066f573d6000803e3d6000fd5b5050336000908152600960205260409020600401915084905083838181106106995761069961237d565b83546001810185556000948552602094859020919094029290920135919092015550806106c581612336565b9150506105ea565b5060006106d86117e1565b336000818152600a60209081526040808320805460ff19166001179055805160c08101825284815293835260098252909120600201549293509091908201906107215742610735565b336000908152600960205260409020600201545b8152426020808301919091523360009081526009909152604090819020600301549101906107649085906122c6565b81523360009081526009602090815260409182902060040180548351818402810184019094528084529382019390918301828280156107c257602002820191906000526020600020905b8154815260200190600101908083116107ae575b5050509183525050602090810183905233600090815260098252604090819020835181546001600160a01b0319166001600160a01b039091161781558383015160018201559083015160028201556060830151600382015560808301518051919261083592600485019290910190611e12565b5060a082015181600501559050507ffb8aecb8b23012599b556fb33ec46f8109af4272df44fda6106fd79601b9cb7e33848442604051610878949392919061206a565b60405180910390a1505050565b6000546001600160a01b031633146108af5760405162461bcd60e51b815260040161044f906121d4565b600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146109015760405162461bcd60e51b815260040161044f906121d4565b600455565b60025460ff16156109295760405162461bcd60e51b815260040161044f90612169565b60025461010090046001600160a01b03163314156109595760405162461bcd60e51b815260040161044f90612193565b60005b33600090815260096020526040902060040154811015610a255760025433600081815260096020526040902060040180546101009093046001600160a01b03169263b88d4fde9230929091869081106109b7576109b761237d565b90600052602060002001546040518463ffffffff1660e01b81526004016109e093929190612037565b600060405180830381600087803b1580156109fa57600080fd5b505af1158015610a0e573d6000803e3d6000fd5b505050508080610a1d90612336565b91505061095c565b506000610a306117e1565b6040805160c0810182523380825260008181526009602081815285832060028101805483880190815242988801988952606080890187815260808a0182815260a08b018d905298909752948452875183546001600160a01b0319166001600160a01b03909116178355516001830155965190965591516003860155915180519596509194929392610ac79260048501920190611e12565b5060a09190910151600590910155336000818152600960205260409081902090517f4e69cde710a03b7982b9c80505f370813de2d2c71d2d30342de5534d4a097bb592610b1d92909160049091019042906120c1565b60405180910390a15050565b60025460ff1615610b4c5760405162461bcd60e51b815260040161044f90612169565b33610b695760405162461bcd60e51b815260040161044f90612209565b6000610b736117e1565b905060008111610bbc5760405162461bcd60e51b81526020600482015260146024820152732cb7ba903430bb32903737903932bbb0b932399760611b604482015260640161044f565b8015610ca65760035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611fe3565b50336000818152600960209081526040808320600581019390935542600190930183905580519384529083018490528201527f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79060600160405180910390a15b50565b6000546001600160a01b03163314610cd35760405162461bcd60e51b815260040161044f906121d4565b610cdb611a87565b565b6000546001600160a01b03163314610d075760405162461bcd60e51b815260040161044f906121d4565b610d1181436122c6565b60055550565b60006001600160a01b038216610d3f5760405162461bcd60e51b815260040161044f90612209565b6001600160a01b038083166000908152600960209081526040808320815160c0810183528154909516855260018101548584015260028101548583015260038101546060860152600481018054835181860281018601909452808452949594919360808601939290830182828015610dd657602002820191906000526020600020905b815481526020019060010190808311610dc2575b505050505081526020016005820154815250509050600081606001519050600060048210158015610e08575060098211155b610ee857600a8210158015610e1e5750600e8211155b610ed457600f8210158015610e34575060138211155b610ec05760148210158015610e4a575060188211155b610eac5760198210158015610e605750601d8211155b610e9857601e821015610e74576000610f08565b600b600581548110610e8857610e8861237d565b9060005260206000200154610f08565b600b600481548110610e8857610e8861237d565b600b600381548110610e8857610e8861237d565b600b600281548110610e8857610e8861237d565b600b600181548110610e8857610e8861237d565b600b600081548110610efc57610efc61237d565b90600052602060002001545b9050600081620151806006548660200151610f23919061231f565b610f2d91906122de565b6201518060065442610f3f919061231f565b610f4991906122de565b610f53919061231f565b610f5d9190612300565b9050836020015142610f6f919061231f565b6004548560600151610f819190612300565b610f8b9190612300565b8460a00151610f9a91906122c6565b9450610fa681866122c6565b9695505050505050565b6000546001600160a01b03163314610fda5760405162461bcd60e51b815260040161044f906121d4565b610cdb6000611b1a565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260040161044f906121d4565b610cdb611b6a565b6000546001600160a01b031633146110405760405162461bcd60e51b815260040161044f906121d4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461108c5760405162461bcd60e51b815260040161044f906121d4565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611108919061201e565b60035460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190611fe3565b5050565b6111d36040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160608152602001600081525090565b6001600160a01b03808316600090815260096020908152604091829020825160c08101845281549094168452600181015484830152600281015484840152600381015460608501526004810180548451818502810185019095528085529193608086019390929083018282801561126957602002820191906000526020600020905b815481526020019060010190808311611255575b505050505081526020016005820154815250509050919050565b6001600160a01b03811660009081526007602052604081206060916112a782611bc2565b67ffffffffffffffff8111156112bf576112bf612393565b6040519080825280602002602001820160405280156112e8578160200160208202803683370190505b50905060005b6112f783611bc2565b811015611337576113088382611bcc565b82828151811061131a5761131a61237d565b60209081029190910101528061132f81612336565b9150506112ee565b509392505050565b60025460ff16156113625760405162461bcd60e51b815260040161044f90612169565b60025461010090046001600160a01b03163314156113925760405162461bcd60e51b815260040161044f90612193565b806113df5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e206e756d626572206973206e6f7420636f72726563742e00000000604482015260640161044f565b6113e98282611bdf565b6114305760405162461bcd60e51b81526020600482015260186024820152772a37b5b2b71034b21034b9903737ba1031b7b93932b1ba1760411b604482015260640161044f565b60005b818110156115035760025461010090046001600160a01b031663b88d4fde30338686868181106114655761146561237d565b905060200201356040518463ffffffff1660e01b815260040161148a93929190612037565b600060405180830381600087803b1580156114a457600080fd5b505af11580156114b8573d6000803e3d6000fd5b50503360009081526009602052604090206114f1925060040190508484848181106114e5576114e561237d565b90506020020135611c85565b806114fb81612336565b915050611433565b50600061150e6117e1565b6040805160c08101825233808252600081815260096020818152858320600281015482870152429686019690965292909152905260039091015491925090606082019061155c90859061231f565b81523360009081526009602090815260409182902060040180548351818402810184019094528084529382019390918301828280156115ba57602002820191906000526020600020905b8154815260200190600101908083116115a6575b5050509183525050602090810183905233600090815260098252604090819020835181546001600160a01b0319166001600160a01b039091161781558383015160018201559083015160028201556060830151600382015560808301518051919261162d92600485019290910190611e12565b5060a082015181600501559050507f4e69cde710a03b7982b9c80505f370813de2d2c71d2d30342de5534d4a097bb533848442604051610878949392919061206a565b6000546001600160a01b0316331461169a5760405162461bcd60e51b815260040161044f906121d4565b6001600160a01b0381166116ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044f565b610ca681611b1a565b600160005b828110156117d957600254339061010090046001600160a01b0316636352211e86868581811061173f5761173f61237d565b905060200201356040518263ffffffff1660e01b815260040161176491815260200190565b60206040518083038186803b15801561177c57600080fd5b505afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190611e86565b6001600160a01b0316146117c757600091505b806117d181612336565b91505061170d565b505b92915050565b6000336118005760405162461bcd60e51b815260040161044f90612209565b336000908152600960209081526040808320815160c08101835281546001600160a01b031681526001820154818501526002820154818401526003820154606082015260048201805484518187028101870190955280855291949293608086019390929083018282801561189357602002820191906000526020600020905b81548152602001906001019080831161187f575b50505091835250506005919091015460209091015280519091506001600160a01b031615611a7b5760608101516000600482108015906118d4575060098211155b6119b457600a82101580156118ea5750600e8211155b6119a057600f8210158015611900575060138211155b61198c5760148210158015611916575060188211155b611978576019821015801561192c5750601d8211155b61196457601e8210156119405760006119d4565b600b6005815481106119545761195461237d565b90600052602060002001546119d4565b600b6004815481106119545761195461237d565b600b6003815481106119545761195461237d565b600b6002815481106119545761195461237d565b600b6001815481106119545761195461237d565b600b6000815481106119c8576119c861237d565b90600052602060002001545b90506000816201518060065486602001516119ef919061231f565b6119f991906122de565b6201518060065442611a0b919061231f565b611a1591906122de565b611a1f919061231f565b611a299190612300565b9050836020015142611a3b919061231f565b6004548560600151611a4d9190612300565b611a579190612300565b8460a00151611a6691906122c6565b9450611a7281866122c6565b94505050505090565b600091505090565b5090565b60025460ff16611ad05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161044f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615611b8d5760405162461bcd60e51b815260040161044f90612169565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611afd3390565b60006117db825490565b6000611bd88383611d94565b9392505050565b600160005b828110156117d957336000908152600960209081526040918290206004018054835181840281018401909452808452611c6a9392830182828015611c4757602002820191906000526020600020905b815481526020019060010190808311611c33575b5050505050858584818110611c5e57611c5e61237d565b90506020020135611dbe565b611c7357600091505b80611c7d81612336565b915050611be4565b60005b8254811015611d8f5781838281548110611ca457611ca461237d565b90600052602060002001541415611d7d57805b8354611cc59060019061231f565b811015611d235783611cd88260016122c6565b81548110611ce857611ce861237d565b9060005260206000200154848281548110611d0557611d0561237d565b60009182526020909120015580611d1b81612336565b915050611cb7565b5082548390611d349060019061231f565b81548110611d4457611d4461237d565b906000526020600020016000905582805480611d6257611d62612367565b60019003818190600052602060002001600090559055505050565b80611d8781612336565b915050611c88565b505050565b6000826000018281548110611dab57611dab61237d565b9060005260206000200154905092915050565b6000805b8351811015611e085782848281518110611dde57611dde61237d565b60200260200101511415611df65760019150506117db565b80611e0081612336565b915050611dc2565b5060009392505050565b828054828255906000526020600020908101928215611e4d579160200282015b82811115611e4d578251825591602001919060010190611e32565b50611a839291505b80821115611a835760008155600101611e55565b600060208284031215611e7b57600080fd5b8135611bd8816123a9565b600060208284031215611e9857600080fd5b8151611bd8816123a9565b600080600080600060808688031215611ebb57600080fd5b8535611ec6816123a9565b94506020860135611ed6816123a9565b935060408601359250606086013567ffffffffffffffff80821115611efa57600080fd5b818801915088601f830112611f0e57600080fd5b813581811115611f1d57600080fd5b896020828501011115611f2f57600080fd5b9699959850939650602001949392505050565b60008060408385031215611f5557600080fd5b8235611f60816123a9565b946020939093013593505050565b60008060208385031215611f8157600080fd5b823567ffffffffffffffff80821115611f9957600080fd5b818501915085601f830112611fad57600080fd5b813581811115611fbc57600080fd5b8660208260051b8501011115611fd157600080fd5b60209290920196919550909350505050565b600060208284031215611ff557600080fd5b81518015158114611bd857600080fd5b60006020828403121561201757600080fd5b5035919050565b60006020828403121561203057600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b6001600160a01b0385168152606060208201819052810183905260006001600160fb1b0384111561209a57600080fd5b8360051b808660808501376000908301608001908152604090920192909252949350505050565b6001600160a01b0384168152606060208083018290528454918301829052600085815281812090929091906080850190845b8181101561210f578454835260019485019492840192016120f3565b5050809350505050826040830152949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561215d57835183529284019291840191600101612141565b50909695505050505050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526021908201527f5374616b696e6720746f6b656e20616e642073656e6465722069732073616d656040820152601760f91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601290820152711059191c995cdcc81a5cc81a5b9d985b1a5960721b604082015260600190565b6000602080835260e0830160018060a01b03855116828501528185015160408501526040850151606085015260608501516080850152608085015160c060a0860152818151808452610100870191508483019350600092505b808310156122ae578351825292840192600192909201919084019061228e565b5060a087015160c08701528094505050505092915050565b600082198211156122d9576122d9612351565b500190565b6000826122fb57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561231a5761231a612351565b500290565b60008282101561233157612331612351565b500390565b600060001982141561234a5761234a612351565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ca657600080fdfea2646970667358221220bdded2bb7d68485e79cdf77ed517ae845303b212715364e4addbc15814e9193764736f6c63430008070033000000000000000000000000c7cd1cc8e689bda3f51b5fabf9ca72c2671bc8d5000000000000000000000000689d6ec061a3ea9733c6ae349ee931d332645263
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806372f702f3116100de578063b343ae1411610097578063e449f34111610071578063e449f3411461037a578063f2fde38b1461038d578063f7c618c1146103a0578063f862bdac146103b357600080fd5b8063b343ae141461030f578063da66d4dc1461033a578063e3a9db1a1461035a57600080fd5b806372f702f3146102885780638456cb59146102b85780638aee8127146102c05780638d8f2adb146102d35780638da5cb5b146102db57806394e6c9cc146102ec57600080fd5b8063372500ab1161014b578063515a20ba11610125578063515a20ba146102435780635c975abb1461025657806364ab86751461026d578063715018a61461028057600080fd5b8063372500ab1461022a5780633f4ba83a146102325780634665096d1461023a57600080fd5b80630fbf0a9314610193578063150b7a02146101a85780631e9b12ef146101e55780632c4e722e146101f857806334fcf4371461020f57806335322f3714610222575b600080fd5b6101a66101a1366004611f6e565b61042c565b005b6101c76101b6366004611ea3565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6101a66101f3366004611e69565b610885565b61020160045481565b6040519081526020016101dc565b6101a661021d366004612005565b6108d7565b6101a6610906565b6101a6610b29565b6101a6610ca9565b61020160055481565b6101a6610251366004612005565b610cdd565b60025460ff165b60405190151581526020016101dc565b61020161027b366004611e69565b610d17565b6101a6610fb0565b6002546102a09061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b6101a6610fe4565b6101a66102ce366004611e69565b611016565b6101a6611062565b6000546001600160a01b03166102a0565b61025d6102fa366004611e69565b600a6020526000908152604090205460ff1681565b61020161031d366004611f42565b600860209081526000928352604080842090915290825290205481565b61034d610348366004611e69565b611191565b6040516101dc9190612235565b61036d610368366004611e69565b611283565b6040516101dc9190612125565b6101a6610388366004611f6e565b61133f565b6101a661039b366004611e69565b611670565b6003546102a0906001600160a01b031681565b6103fa6103c1366004611e69565b600960205260009081526040902080546001820154600283015460038401546005909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0016101dc565b60025460ff16156104585760405162461bcd60e51b815260040161044f90612169565b60405180910390fd5b60025461010090046001600160a01b03163314156104885760405162461bcd60e51b815260040161044f90612193565b806104d55760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e206e756d626572206973206e6f7420636f72726563742e00000000604482015260640161044f565b6104df8282611708565b6105265760405162461bcd60e51b81526020600482015260186024820152772a37b5b2b71034b21034b9903737ba1031b7b93932b1ba1760411b604482015260640161044f565b336000908152600a602052604090205460ff1615156001146105e7576003546001600160a01b031663a9059cbb3361056784683635c9adc5dea00000612300565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156105ad57600080fd5b505af11580156105c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e59190611fe3565b505b60005b818110156106cd5760025461010090046001600160a01b031663b88d4fde333086868681811061061c5761061c61237d565b905060200201356040518463ffffffff1660e01b815260040161064193929190612037565b600060405180830381600087803b15801561065b57600080fd5b505af115801561066f573d6000803e3d6000fd5b5050336000908152600960205260409020600401915084905083838181106106995761069961237d565b83546001810185556000948552602094859020919094029290920135919092015550806106c581612336565b9150506105ea565b5060006106d86117e1565b336000818152600a60209081526040808320805460ff19166001179055805160c08101825284815293835260098252909120600201549293509091908201906107215742610735565b336000908152600960205260409020600201545b8152426020808301919091523360009081526009909152604090819020600301549101906107649085906122c6565b81523360009081526009602090815260409182902060040180548351818402810184019094528084529382019390918301828280156107c257602002820191906000526020600020905b8154815260200190600101908083116107ae575b5050509183525050602090810183905233600090815260098252604090819020835181546001600160a01b0319166001600160a01b039091161781558383015160018201559083015160028201556060830151600382015560808301518051919261083592600485019290910190611e12565b5060a082015181600501559050507ffb8aecb8b23012599b556fb33ec46f8109af4272df44fda6106fd79601b9cb7e33848442604051610878949392919061206a565b60405180910390a1505050565b6000546001600160a01b031633146108af5760405162461bcd60e51b815260040161044f906121d4565b600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146109015760405162461bcd60e51b815260040161044f906121d4565b600455565b60025460ff16156109295760405162461bcd60e51b815260040161044f90612169565b60025461010090046001600160a01b03163314156109595760405162461bcd60e51b815260040161044f90612193565b60005b33600090815260096020526040902060040154811015610a255760025433600081815260096020526040902060040180546101009093046001600160a01b03169263b88d4fde9230929091869081106109b7576109b761237d565b90600052602060002001546040518463ffffffff1660e01b81526004016109e093929190612037565b600060405180830381600087803b1580156109fa57600080fd5b505af1158015610a0e573d6000803e3d6000fd5b505050508080610a1d90612336565b91505061095c565b506000610a306117e1565b6040805160c0810182523380825260008181526009602081815285832060028101805483880190815242988801988952606080890187815260808a0182815260a08b018d905298909752948452875183546001600160a01b0319166001600160a01b03909116178355516001830155965190965591516003860155915180519596509194929392610ac79260048501920190611e12565b5060a09190910151600590910155336000818152600960205260409081902090517f4e69cde710a03b7982b9c80505f370813de2d2c71d2d30342de5534d4a097bb592610b1d92909160049091019042906120c1565b60405180910390a15050565b60025460ff1615610b4c5760405162461bcd60e51b815260040161044f90612169565b33610b695760405162461bcd60e51b815260040161044f90612209565b6000610b736117e1565b905060008111610bbc5760405162461bcd60e51b81526020600482015260146024820152732cb7ba903430bb32903737903932bbb0b932399760611b604482015260640161044f565b8015610ca65760035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611fe3565b50336000818152600960209081526040808320600581019390935542600190930183905580519384529083018490528201527f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf79060600160405180910390a15b50565b6000546001600160a01b03163314610cd35760405162461bcd60e51b815260040161044f906121d4565b610cdb611a87565b565b6000546001600160a01b03163314610d075760405162461bcd60e51b815260040161044f906121d4565b610d1181436122c6565b60055550565b60006001600160a01b038216610d3f5760405162461bcd60e51b815260040161044f90612209565b6001600160a01b038083166000908152600960209081526040808320815160c0810183528154909516855260018101548584015260028101548583015260038101546060860152600481018054835181860281018601909452808452949594919360808601939290830182828015610dd657602002820191906000526020600020905b815481526020019060010190808311610dc2575b505050505081526020016005820154815250509050600081606001519050600060048210158015610e08575060098211155b610ee857600a8210158015610e1e5750600e8211155b610ed457600f8210158015610e34575060138211155b610ec05760148210158015610e4a575060188211155b610eac5760198210158015610e605750601d8211155b610e9857601e821015610e74576000610f08565b600b600581548110610e8857610e8861237d565b9060005260206000200154610f08565b600b600481548110610e8857610e8861237d565b600b600381548110610e8857610e8861237d565b600b600281548110610e8857610e8861237d565b600b600181548110610e8857610e8861237d565b600b600081548110610efc57610efc61237d565b90600052602060002001545b9050600081620151806006548660200151610f23919061231f565b610f2d91906122de565b6201518060065442610f3f919061231f565b610f4991906122de565b610f53919061231f565b610f5d9190612300565b9050836020015142610f6f919061231f565b6004548560600151610f819190612300565b610f8b9190612300565b8460a00151610f9a91906122c6565b9450610fa681866122c6565b9695505050505050565b6000546001600160a01b03163314610fda5760405162461bcd60e51b815260040161044f906121d4565b610cdb6000611b1a565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260040161044f906121d4565b610cdb611b6a565b6000546001600160a01b031633146110405760405162461bcd60e51b815260040161044f906121d4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461108c5760405162461bcd60e51b815260040161044f906121d4565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156110d057600080fd5b505afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611108919061201e565b60035460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb90604401602060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190611fe3565b5050565b6111d36040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160608152602001600081525090565b6001600160a01b03808316600090815260096020908152604091829020825160c08101845281549094168452600181015484830152600281015484840152600381015460608501526004810180548451818502810185019095528085529193608086019390929083018282801561126957602002820191906000526020600020905b815481526020019060010190808311611255575b505050505081526020016005820154815250509050919050565b6001600160a01b03811660009081526007602052604081206060916112a782611bc2565b67ffffffffffffffff8111156112bf576112bf612393565b6040519080825280602002602001820160405280156112e8578160200160208202803683370190505b50905060005b6112f783611bc2565b811015611337576113088382611bcc565b82828151811061131a5761131a61237d565b60209081029190910101528061132f81612336565b9150506112ee565b509392505050565b60025460ff16156113625760405162461bcd60e51b815260040161044f90612169565b60025461010090046001600160a01b03163314156113925760405162461bcd60e51b815260040161044f90612193565b806113df5760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e206e756d626572206973206e6f7420636f72726563742e00000000604482015260640161044f565b6113e98282611bdf565b6114305760405162461bcd60e51b81526020600482015260186024820152772a37b5b2b71034b21034b9903737ba1031b7b93932b1ba1760411b604482015260640161044f565b60005b818110156115035760025461010090046001600160a01b031663b88d4fde30338686868181106114655761146561237d565b905060200201356040518463ffffffff1660e01b815260040161148a93929190612037565b600060405180830381600087803b1580156114a457600080fd5b505af11580156114b8573d6000803e3d6000fd5b50503360009081526009602052604090206114f1925060040190508484848181106114e5576114e561237d565b90506020020135611c85565b806114fb81612336565b915050611433565b50600061150e6117e1565b6040805160c08101825233808252600081815260096020818152858320600281015482870152429686019690965292909152905260039091015491925090606082019061155c90859061231f565b81523360009081526009602090815260409182902060040180548351818402810184019094528084529382019390918301828280156115ba57602002820191906000526020600020905b8154815260200190600101908083116115a6575b5050509183525050602090810183905233600090815260098252604090819020835181546001600160a01b0319166001600160a01b039091161781558383015160018201559083015160028201556060830151600382015560808301518051919261162d92600485019290910190611e12565b5060a082015181600501559050507f4e69cde710a03b7982b9c80505f370813de2d2c71d2d30342de5534d4a097bb533848442604051610878949392919061206a565b6000546001600160a01b0316331461169a5760405162461bcd60e51b815260040161044f906121d4565b6001600160a01b0381166116ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044f565b610ca681611b1a565b600160005b828110156117d957600254339061010090046001600160a01b0316636352211e86868581811061173f5761173f61237d565b905060200201356040518263ffffffff1660e01b815260040161176491815260200190565b60206040518083038186803b15801561177c57600080fd5b505afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190611e86565b6001600160a01b0316146117c757600091505b806117d181612336565b91505061170d565b505b92915050565b6000336118005760405162461bcd60e51b815260040161044f90612209565b336000908152600960209081526040808320815160c08101835281546001600160a01b031681526001820154818501526002820154818401526003820154606082015260048201805484518187028101870190955280855291949293608086019390929083018282801561189357602002820191906000526020600020905b81548152602001906001019080831161187f575b50505091835250506005919091015460209091015280519091506001600160a01b031615611a7b5760608101516000600482108015906118d4575060098211155b6119b457600a82101580156118ea5750600e8211155b6119a057600f8210158015611900575060138211155b61198c5760148210158015611916575060188211155b611978576019821015801561192c5750601d8211155b61196457601e8210156119405760006119d4565b600b6005815481106119545761195461237d565b90600052602060002001546119d4565b600b6004815481106119545761195461237d565b600b6003815481106119545761195461237d565b600b6002815481106119545761195461237d565b600b6001815481106119545761195461237d565b600b6000815481106119c8576119c861237d565b90600052602060002001545b90506000816201518060065486602001516119ef919061231f565b6119f991906122de565b6201518060065442611a0b919061231f565b611a1591906122de565b611a1f919061231f565b611a299190612300565b9050836020015142611a3b919061231f565b6004548560600151611a4d9190612300565b611a579190612300565b8460a00151611a6691906122c6565b9450611a7281866122c6565b94505050505090565b600091505090565b5090565b60025460ff16611ad05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161044f565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615611b8d5760405162461bcd60e51b815260040161044f90612169565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611afd3390565b60006117db825490565b6000611bd88383611d94565b9392505050565b600160005b828110156117d957336000908152600960209081526040918290206004018054835181840281018401909452808452611c6a9392830182828015611c4757602002820191906000526020600020905b815481526020019060010190808311611c33575b5050505050858584818110611c5e57611c5e61237d565b90506020020135611dbe565b611c7357600091505b80611c7d81612336565b915050611be4565b60005b8254811015611d8f5781838281548110611ca457611ca461237d565b90600052602060002001541415611d7d57805b8354611cc59060019061231f565b811015611d235783611cd88260016122c6565b81548110611ce857611ce861237d565b9060005260206000200154848281548110611d0557611d0561237d565b60009182526020909120015580611d1b81612336565b915050611cb7565b5082548390611d349060019061231f565b81548110611d4457611d4461237d565b906000526020600020016000905582805480611d6257611d62612367565b60019003818190600052602060002001600090559055505050565b80611d8781612336565b915050611c88565b505050565b6000826000018281548110611dab57611dab61237d565b9060005260206000200154905092915050565b6000805b8351811015611e085782848281518110611dde57611dde61237d565b60200260200101511415611df65760019150506117db565b80611e0081612336565b915050611dc2565b5060009392505050565b828054828255906000526020600020908101928215611e4d579160200282015b82811115611e4d578251825591602001919060010190611e32565b50611a839291505b80821115611a835760008155600101611e55565b600060208284031215611e7b57600080fd5b8135611bd8816123a9565b600060208284031215611e9857600080fd5b8151611bd8816123a9565b600080600080600060808688031215611ebb57600080fd5b8535611ec6816123a9565b94506020860135611ed6816123a9565b935060408601359250606086013567ffffffffffffffff80821115611efa57600080fd5b818801915088601f830112611f0e57600080fd5b813581811115611f1d57600080fd5b896020828501011115611f2f57600080fd5b9699959850939650602001949392505050565b60008060408385031215611f5557600080fd5b8235611f60816123a9565b946020939093013593505050565b60008060208385031215611f8157600080fd5b823567ffffffffffffffff80821115611f9957600080fd5b818501915085601f830112611fad57600080fd5b813581811115611fbc57600080fd5b8660208260051b8501011115611fd157600080fd5b60209290920196919550909350505050565b600060208284031215611ff557600080fd5b81518015158114611bd857600080fd5b60006020828403121561201757600080fd5b5035919050565b60006020828403121561203057600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260806060820181905260009082015260a00190565b6001600160a01b0385168152606060208201819052810183905260006001600160fb1b0384111561209a57600080fd5b8360051b808660808501376000908301608001908152604090920192909252949350505050565b6001600160a01b0384168152606060208083018290528454918301829052600085815281812090929091906080850190845b8181101561210f578454835260019485019492840192016120f3565b5050809350505050826040830152949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561215d57835183529284019291840191600101612141565b50909695505050505050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526021908201527f5374616b696e6720746f6b656e20616e642073656e6465722069732073616d656040820152601760f91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601290820152711059191c995cdcc81a5cc81a5b9d985b1a5960721b604082015260600190565b6000602080835260e0830160018060a01b03855116828501528185015160408501526040850151606085015260608501516080850152608085015160c060a0860152818151808452610100870191508483019350600092505b808310156122ae578351825292840192600192909201919084019061228e565b5060a087015160c08701528094505050505092915050565b600082198211156122d9576122d9612351565b500190565b6000826122fb57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561231a5761231a612351565b500290565b60008282101561233157612331612351565b500390565b600060001982141561234a5761234a612351565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ca657600080fdfea2646970667358221220bdded2bb7d68485e79cdf77ed517ae845303b212715364e4addbc15814e9193764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c7cd1cc8e689bda3f51b5fabf9ca72c2671bc8d5000000000000000000000000689d6ec061a3ea9733c6ae349ee931d332645263
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0xc7cD1cC8e689bDA3f51B5FABf9ca72C2671bC8D5
Arg [1] : _rewardToken (address): 0x689d6EC061a3Ea9733c6AE349EE931D332645263
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c7cd1cc8e689bda3f51b5fabf9ca72c2671bc8d5
Arg [1] : 000000000000000000000000689d6ec061a3ea9733c6ae349ee931d332645263
Deployed Bytecode Sourcemap
24528:10205:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28169:1227;;;;;;:::i;:::-;;:::i;:::-;;34557:173;;;;;;:::i;:::-;-1:-1:-1;;;34557:173:0;;;;;;;;;;;-1:-1:-1;;;;;;7431:33:1;;;7413:52;;7401:2;7386:18;34557:173:0;;;;;;;;25984:114;;;;;;:::i;:::-;;:::i;24803:36::-;;;;;;;;;11961:25:1;;;11949:2;11934:18;24803:36:0;11815:177:1;26450:80:0;;;;;;:::i;:::-;;:::i;30647:784::-;;;:::i;33375:551::-;;;:::i;26297:65::-;;;:::i;24873:25::-;;;;;;26641:119;;;;;;:::i;:::-;;:::i;17958:86::-;18029:7;;;;17958:86;;;7242:14:1;;7235:22;7217:41;;7205:2;7190:18;17958:86:0;7077:187:1;32475:863:0;;;;;;:::i;:::-;;:::i;1159:94::-;;;:::i;24689:27::-;;;;;;;;-1:-1:-1;;;;;24689:27:0;;;;;;-1:-1:-1;;;;;3223:32:1;;;3205:51;;3193:2;3178:18;24689:27:0;3059:203:1;26228:61:0;;;:::i;26106:110::-;;;;;;:::i;:::-;;:::i;34353:196::-;;;:::i;851:87::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;851:87;;25163:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25031:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;29447:123;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33955:361::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29605:1007::-;;;;;;:::i;:::-;;:::i;1408:192::-;;;;;;:::i;:::-;;:::i;24746:26::-;;;;;-1:-1:-1;;;;;24746:26:0;;;25107:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25107:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6223:32:1;;;6205:51;;6287:2;6272:18;;6265:34;;;;6315:18;;;6308:34;;;;6373:2;6358:18;;6351:34;6416:3;6401:19;;6394:35;6192:3;6177:19;25107:49:0;5946:489:1;28169:1227:0;18029:7;;;;18096:9;18088:38;;;;-1:-1:-1;;;18088:38:0;;;;;;;:::i;:::-;;;;;;;;;28269:12:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;28269:12:0::1;28255:10;:26;;28247:72;;;;-1:-1:-1::0;;;28247:72:0::1;;;;;;;:::i;:::-;28338:19:::0;28330:60:::1;;;::::0;-1:-1:-1;;;28330:60:0;;9128:2:1;28330:60:0::1;::::0;::::1;9110:21:1::0;9167:2;9147:18;;;9140:30;9206;9186:18;;;9179:58;9254:18;;28330:60:0::1;8926:352:1::0;28330:60:0::1;28409:21;28421:8;;28409:11;:21::i;:::-;28401:59;;;::::0;-1:-1:-1;;;28401:59:0;;9887:2:1;28401:59:0::1;::::0;::::1;9869:21:1::0;9926:2;9906:18;;;9899:30;-1:-1:-1;;;9945:18:1;;;9938:54;10009:18;;28401:59:0::1;9685:348:1::0;28401:59:0::1;28489:10;28476:24;::::0;;;:12:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32:::1;28473:134;;28531:11;::::0;-1:-1:-1;;;;;28531:11:0::1;28524:28;28553:10;28566:28;:8:::0;28584:10:::1;28566:28;:::i;:::-;28524:71;::::0;-1:-1:-1;;;;;;28524:71:0::1;::::0;;;;;;-1:-1:-1;;;;;5509:32:1;;;28524:71:0::1;::::0;::::1;5491:51:1::0;5558:18;;;5551:34;5464:18;;28524:71:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28473:134;28624:9;28619:225;28639:19:::0;;::::1;28619:225;;;28688:12;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;28688:12:0::1;28680:38;28719:10;28739:4;28746:8:::0;;28755:1;28746:11;;::::1;;;;;:::i;:::-;;;;;;;28680:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28788:10:0::1;28777:22;::::0;;;:10:::1;:22;::::0;;;;:37:::1;;::::0;-1:-1:-1;28820:8:0;;-1:-1:-1;28820:8:0;28829:1;28820:11;;::::1;;;;;:::i;:::-;28777:55:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28777:55:0;;;28820:11:::1;28777:55:::0;;;;28820:11;;;::::1;::::0;;;::::1;;28777:55:::0;;;::::1;::::0;-1:-1:-1;28660:3:0;::::1;::::0;::::1;:::i;:::-;;;;28619:225;;;;28856:21;28880:16;:14;:16::i;:::-;28921:10;28908:24;::::0;;;:12:::1;:24;::::0;;;;;;;:31;;-1:-1:-1;;28908:31:0::1;28935:4;28908:31;::::0;;28975:349;;::::1;::::0;::::1;::::0;;;;;29027:22;;;:10:::1;:22:::0;;;;;:39:::1;;::::0;28856:40;;-1:-1:-1;28975:349:0;;;;::::1;::::0;29027:103:::1;;29115:15;29027:103;;;29084:10;29073:22;::::0;;;:10:::1;:22;::::0;;;;:39:::1;;::::0;29027:103:::1;28975:349:::0;;29146:15:::1;28975:349;::::0;;::::1;::::0;;;;29190:10:::1;-1:-1:-1::0;29179:22:0;;;:10:::1;:22:::0;;;28975:349;29179:22;;;;:35:::1;;::::0;28975:349;;;29179:53:::1;::::0;29217:8;;29179:53:::1;:::i;:::-;28975:349:::0;;29259:10:::1;29248:22;::::0;;;:10:::1;28975:349;29248:22:::0;;;;;;;;:37:::1;;28975:349:::0;;;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;29248:37;;28975:349;::::1;29248:37:::0;28975:349;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;28975:349:0;;;-1:-1:-1;;28975:349:0::1;::::0;;::::1;::::0;;;28961:10:::1;-1:-1:-1::0;28950:22:0;;;:10:::1;:22:::0;;;;;;;:374;;;;-1:-1:-1;;;;;;28950:374:0::1;-1:-1:-1::0;;;;;28950:374:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;28950:374:0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;:22;;:374:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;29342:46;29348:10;29361:8;;29372:15;29342:46;;;;;;;;;:::i;:::-;;;;;;;;28236:1160;28169:1227:::0;;:::o;25984:114::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26062:12:::1;:28:::0;;-1:-1:-1;;;;;26062:28:0;;::::1;;;-1:-1:-1::0;;;;;;26062:28:0;;::::1;::::0;;;::::1;::::0;;25984:114::o;26450:80::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26510:4:::1;:12:::0;26450:80::o;30647:784::-;18029:7;;;;18096:9;18088:38;;;;-1:-1:-1;;;18088:38:0;;;;;;;:::i;:::-;30725:12:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;30725:12:0::1;30711:10;:26;;30703:72;;;;-1:-1:-1::0;;;30703:72:0::1;;;;;;;:::i;:::-;30801:9;30796:213;30831:10;30820:22;::::0;;;:10:::1;:22;::::0;;;;:37:::1;;:44:::0;30816:48;::::1;30796:213;;;30894:12;::::0;30940:10:::1;30952:22;::::0;;;:10:::1;:22;::::0;;;;:37:::1;;:40:::0;;30894:12:::1;::::0;;::::1;-1:-1:-1::0;;;;;30894:12:0::1;::::0;30886:38:::1;::::0;30933:4:::1;::::0;30940:10;;30990:1;;30952:40;::::1;;;;;:::i;:::-;;;;;;;;;30886:111;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30866:3;;;;;:::i;:::-;;;;30796:213;;;;31021:21;31045:16;:14;:16::i;:::-;31130:198;::::0;;::::1;::::0;::::1;::::0;;31156:10:::1;31130:198:::0;;;-1:-1:-1;31182:22:0;;;:10:::1;31130:198;31182:22:::0;;;;;;:39:::1;::::0;::::1;::::0;;31130:198;;::::1;::::0;;;31236:15:::1;31130:198:::0;;;;;;31072:22:::1;31130:198:::0;;;;;;;;;;;;;;;;;;31105:22;;;;;;;:223;;;;-1:-1:-1;;;;;;31105:223:0::1;-1:-1:-1::0;;;;;31105:223:0;;::::1;;::::0;;;-1:-1:-1;31105:223:0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;31130:198;;-1:-1:-1;31072:22:0;;31130:198;;31182:22;31105:223:::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;31105:223:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;31354:10:::1;31367:22;::::0;;;:10:::1;:22;::::0;;;;;;31346:77;;::::1;::::0;::::1;::::0;31354:10;;31367:37:::1;::::0;;::::1;::::0;31407:15:::1;::::0;31346:77:::1;:::i;:::-;;;;;;;;30692:739;;30647:784::o:0;33375:551::-;18029:7;;;;18096:9;18088:38;;;;-1:-1:-1;;;18088:38:0;;;;;;;:::i;:::-;33439:10:::1;33431:55;;;;-1:-1:-1::0;;;33431:55:0::1;;;;;;;:::i;:::-;33497:21;33521:16;:14;:16::i;:::-;33497:40;;33572:1;33556:13;:17;33548:50;;;::::0;-1:-1:-1;;;33548:50:0;;8434:2:1;33548:50:0::1;::::0;::::1;8416:21:1::0;8473:2;8453:18;;;8446:30;-1:-1:-1;;;8492:18:1;;;8485:50;8552:18;;33548:50:0::1;8232:344:1::0;33548:50:0::1;33622:17:::0;;33619:300:::1;;33662:11;::::0;33655:55:::1;::::0;-1:-1:-1;;;33655:55:0;;33684:10:::1;33655:55;::::0;::::1;5491:51:1::0;5558:18;;;5551:34;;;-1:-1:-1;;;;;33662:11:0;;::::1;::::0;33655:28:::1;::::0;5464:18:1;;33655:55:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33736:10:0::1;33763:1;33725:22:::0;;;:10:::1;:22;::::0;;;;;;;:35:::1;::::0;::::1;:39:::0;;;;33819:15:::1;33780:36;::::0;;::::1;:54:::0;;;33856:51;;5798::1;;;5865:18;;;5858:34;;;5908:18;;5901:34;33856:51:0::1;::::0;5786:2:1;5771:18;33856:51:0::1;;;;;;;33619:300;33420:506;33375:551::o:0;26297:65::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26344:10:::1;:8;:10::i;:::-;26297:65::o:0;26641:119::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26726:26:::1;26741:11:::0;26726:12:::1;:26;:::i;:::-;26713:10;:39:::0;-1:-1:-1;26641:119:0:o;32475:863::-;32539:15;-1:-1:-1;;;;;32575:21:0;;32567:52;;;;-1:-1:-1;;;32567:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32661:19:0;;;32630:28;32661:19;;;:10;:19;;;;;;;;32630:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:28;;:50;32661:19;;32630:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32691:14;32708:9;:22;;;32691:39;;32741:18;32772:1;32762:6;:11;;:26;;;;;32787:1;32777:6;:11;;32762:26;:263;;32816:2;32806:6;:12;;:28;;;;;32832:2;32822:6;:12;;32806:28;:219;;32861:2;32851:6;:12;;:28;;;;;32877:2;32867:6;:12;;32851:28;:174;;32907:2;32897:6;:12;;:28;;;;;32923:2;32913:6;:12;;32897:28;:128;;32953:2;32943:6;:12;;:27;;;;;32968:2;32959:6;:11;;32943:27;:82;;32998:2;32988:6;:12;;:37;;33018:7;32762:263;;32988:37;33003:9;33013:1;33003:12;;;;;;;;:::i;:::-;;;;;;;;;32762:263;;32943:82;32973:9;32983:1;32973:12;;;;;;;;:::i;32897:128::-;32928:9;32938:1;32928:12;;;;;;;;:::i;32851:174::-;32882:9;32892:1;32882:12;;;;;;;;:::i;32806:219::-;32836:9;32846:1;32836:12;;;;;;;;:::i;32762:263::-;32791:9;32801:1;32791:12;;;;;;;;:::i;:::-;;;;;;;;;32762:263;32741:284;;33036:14;33165:10;33155:5;33137:14;;33111:9;:23;;;:40;;;;:::i;:::-;33110:50;;;;:::i;:::-;33096:5;33078:14;;33060:15;:32;;;;:::i;:::-;33059:42;;;;:::i;:::-;33054:107;;;;:::i;:::-;33053:122;;;;:::i;:::-;33036:139;;33272:9;:23;;;33254:15;:41;;;;:::i;:::-;33246:4;;33221:9;:22;;;:29;;;;:::i;:::-;:75;;;;:::i;:::-;33196:9;:22;;;:100;;;;:::i;:::-;33186:110;-1:-1:-1;33314:16:0;33324:6;33186:110;33314:16;:::i;:::-;33307:23;32475:863;-1:-1:-1;;;;;;32475:863:0:o;1159:94::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;1224:21:::1;1242:1;1224:9;:21::i;26228:61::-:0;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26273:8:::1;:6;:8::i;26106:110::-:0;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;26182:11:::1;:26:::0;;-1:-1:-1;;;;;;26182:26:0::1;-1:-1:-1::0;;;;;26182:26:0;;;::::1;::::0;;;::::1;::::0;;26106:110::o;34353:196::-;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;34439:11:::1;::::0;34432:44:::1;::::0;-1:-1:-1;;;34432:44:0;;34470:4:::1;34432:44;::::0;::::1;3205:51:1::0;34409:20:0::1;::::0;-1:-1:-1;;;;;34439:11:0::1;::::0;34432:29:::1;::::0;3178:18:1;;34432:44:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34494:11;::::0;34487:54:::1;::::0;-1:-1:-1;;;34487:54:0;;34516:10:::1;34487:54;::::0;::::1;5491:51:1::0;5558:18;;;5551:34;;;34409:67:0;;-1:-1:-1;;;;;;34494:11:0::1;::::0;34487:28:::1;::::0;5464:18:1;;34487:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34398:151;34353:196::o:0;29447:123::-;29506:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29506:18:0;-1:-1:-1;;;;;29543:19:0;;;;;;;:10;:19;;;;;;;;;29536:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29543:19;;29536:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29447:123;;;:::o;33955:361::-;-1:-1:-1;;;;;34085:18:0;;34042:40;34085:18;;;:9;:18;;;;;34015:16;;34155:19;34085:18;34155:17;:19::i;:::-;34140:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34140:35:0;;34112:63;;34191:9;34186:97;34206:19;:10;:17;:19::i;:::-;34202:1;:23;34186:97;;;34257:16;:10;34271:1;34257:13;:16::i;:::-;34243:8;34252:1;34243:11;;;;;;;;:::i;:::-;;;;;;;;;;:30;34227:3;;;;:::i;:::-;;;;34186:97;;;-1:-1:-1;34300:8:0;33955:361;-1:-1:-1;;;33955:361:0:o;29605:1007::-;18029:7;;;;18096:9;18088:38;;;;-1:-1:-1;;;18088:38:0;;;;;;;:::i;:::-;29707:12:::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;29707:12:0::1;29693:10;:26;;29685:72;;;;-1:-1:-1::0;;;29685:72:0::1;;;;;;;:::i;:::-;29776:19:::0;29768:60:::1;;;::::0;-1:-1:-1;;;29768:60:0;;9128:2:1;29768:60:0::1;::::0;::::1;9110:21:1::0;9167:2;9147:18;;;9140:30;9206;9186:18;;;9179:58;9254:18;;29768:60:0::1;8926:352:1::0;29768:60:0::1;29847:23;29861:8;;29847:13;:23::i;:::-;29839:61;;;::::0;-1:-1:-1;;;29839:61:0;;9887:2:1;29839:61:0::1;::::0;::::1;9869:21:1::0;9926:2;9906:18;;;9899:30;-1:-1:-1;;;9945:18:1;;;9938:54;10009:18;;29839:61:0::1;9685:348:1::0;29839:61:0::1;29926:9;29921:243;29941:19:::0;;::::1;29921:243;;;29990:12;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;29990:12:0::1;29982:38;30029:4;30036:10;30048:8:::0;;30057:1;30048:11;;::::1;;;;;:::i;:::-;;;;;;;29982:82;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30111:10:0::1;30100:22;::::0;;;:10:::1;:22;::::0;;;;30079:73:::1;::::0;-1:-1:-1;30100:37:0::1;;::::0;-1:-1:-1;30140:8:0;;30149:1;30140:11;;::::1;;;;;:::i;:::-;;;;;;;30079:20;:73::i;:::-;29962:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29921:243;;;;30176:21;30200:16;:14;:16::i;:::-;30254:284;::::0;;::::1;::::0;::::1;::::0;;30280:10:::1;30254:284:::0;;;-1:-1:-1;30306:22:0;;;:10:::1;30254:284;30306:22:::0;;;;;;:39:::1;::::0;::::1;::::0;30254:284;;::::1;::::0;30360:15:::1;30254:284:::0;;;;;;;30393:22;;;;;;:35:::1;::::0;;::::1;::::0;30176:40;;-1:-1:-1;30254:284:0;;;;;30393:53:::1;::::0;30431:8;;30393:53:::1;:::i;:::-;30254:284:::0;;30473:10:::1;30462:22;::::0;;;:10:::1;30254:284;30462:22:::0;;;;;;;;:37:::1;;30254:284:::0;;;;;;::::1;::::0;;;;;;;;;;;;::::1;::::0;30462:37;;30254:284;::::1;30462:37:::0;30254:284;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;30254:284:0;;;-1:-1:-1;;30254:284:0::1;::::0;;::::1;::::0;;;30240:10:::1;-1:-1:-1::0;30229:22:0;;;:10:::1;:22:::0;;;;;;;:309;;;;-1:-1:-1;;;;;;30229:309:0::1;-1:-1:-1::0;;;;;30229:309:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;30229:309:0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;:22;;:309:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;30556:48;30564:10;30577:8;;30588:15;30556:48;;;;;;;;;:::i;1408:192::-:0;897:7;924:6;-1:-1:-1;;;;;924:6:0;314:10;1071:23;1063:68;;;;-1:-1:-1;;;1063:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1497:22:0;::::1;1489:73;;;::::0;-1:-1:-1;;;1489:73:0;;8027:2:1;1489:73:0::1;::::0;::::1;8009:21:1::0;8066:2;8046:18;;;8039:30;8105:34;8085:18;;;8078:62;-1:-1:-1;;;8156:18:1;;;8149:36;8202:19;;1489:73:0::1;7825:402:1::0;1489:73:0::1;1573:19;1583:8;1573:9;:19::i;27196:326::-:0;27300:4;27267:11;27315:176;27331:19;;;27315:176;;;27382:12;;27420:10;;27382:12;;;-1:-1:-1;;;;;27382:12:0;27374:29;27404:8;;27413:1;27404:11;;;;;;;:::i;:::-;;;;;;;27374:42;;;;;;;;;;;;;11961:25:1;;11949:2;11934:18;;11815:177;27374:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27374:56:0;;27371:109;;27459:5;27450:14;;27371:109;27352:3;;;;:::i;:::-;;;;27315:176;;;;27196:326;;;;;:::o;31466:970::-;31514:15;31550:10;31542:55;;;;-1:-1:-1;;;31542:55:0;;;;;;;:::i;:::-;31650:10;31608:28;31639:22;;;:10;:22;;;;;;;;31608:53;;;;;;;;;-1:-1:-1;;;;;31608:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31639:22;;31608:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31608:53:0;;;-1:-1:-1;;31608:53:0;;;;;;;;;;;31675:15;;31608:53;;-1:-1:-1;;;;;;31675:29:0;;31672:757;;31737:22;;;;31720:14;31805:1;31795:11;;;;;:26;;;31820:1;31810:6;:11;;31795:26;:263;;31849:2;31839:6;:12;;:28;;;;;31865:2;31855:6;:12;;31839:28;:219;;31894:2;31884:6;:12;;:28;;;;;31910:2;31900:6;:12;;31884:28;:174;;31940:2;31930:6;:12;;:28;;;;;31956:2;31946:6;:12;;31930:28;:128;;31986:2;31976:6;:12;;:27;;;;;32001:2;31992:6;:11;;31976:27;:82;;32031:2;32021:6;:12;;:37;;32051:7;31795:263;;32021:37;32036:9;32046:1;32036:12;;;;;;;;:::i;:::-;;;;;;;;;31795:263;;31976:82;32006:9;32016:1;32006:12;;;;;;;;:::i;31930:128::-;31961:9;31971:1;31961:12;;;;;;;;:::i;31884:174::-;31915:9;31925:1;31915:12;;;;;;;;:::i;31839:219::-;31869:9;31879:1;31869:12;;;;;;;;:::i;31795:263::-;31824:9;31834:1;31824:12;;;;;;;;:::i;:::-;;;;;;;;;31795:263;31774:284;;32073:14;32202:10;32192:5;32174:14;;32148:9;:23;;;:40;;;;:::i;:::-;32147:50;;;;:::i;:::-;32133:5;32115:14;;32097:15;:32;;;;:::i;:::-;32096:42;;;;:::i;:::-;32091:107;;;;:::i;:::-;32090:122;;;;:::i;:::-;32073:139;;32313:9;:23;;;32295:15;:41;;;;:::i;:::-;32287:4;;32262:9;:22;;;:29;;;;:::i;:::-;:75;;;;:::i;:::-;32237:9;:22;;;:100;;;;:::i;:::-;32227:110;-1:-1:-1;32360:16:0;32370:6;32227:110;32360:16;:::i;:::-;32352:25;;;;;;31466:970;:::o;31672:757::-;32416:1;32409:8;;;31466:970;:::o;31672:757::-;31531:905;31466:970;:::o;18382:120::-;18029:7;;;;18187:41;;;;-1:-1:-1;;;18187:41:0;;7678:2:1;18187:41:0;;;7660:21:1;7717:2;7697:18;;;7690:30;-1:-1:-1;;;7736:18:1;;;7729:50;7796:18;;18187:41:0;7476:344:1;18187:41:0;18441:7:::1;:15:::0;;-1:-1:-1;;18441:15:0::1;::::0;;18472:22:::1;314:10:::0;18481:12:::1;18472:22;::::0;-1:-1:-1;;;;;3223:32:1;;;3205:51;;3193:2;3178:18;18472:22:0::1;;;;;;;18382:120::o:0;1608:173::-;1664:16;1683:6;;-1:-1:-1;;;;;1700:17:0;;;-1:-1:-1;;;;;;1700:17:0;;;;;;1733:40;;1683:6;;;;;;;1733:40;;1664:16;1733:40;1653:128;1608:173;:::o;18256:118::-;18029:7;;;;18096:9;18088:38;;;;-1:-1:-1;;;18088:38:0;;;;;;;:::i;:::-;18316:7:::1;:14:::0;;-1:-1:-1;;18316:14:0::1;18326:4;18316:14;::::0;;18346:20:::1;18353:12;314:10:::0;;234:98;15048:114;15108:7;15135:19;15143:3;10911:18;;10828:109;15170:137;15241:7;15276:22;15280:3;15292:5;15276:3;:22::i;:::-;15268:31;15170:137;-1:-1:-1;;;15170:137:0:o;27803:333::-;27909:4;27876:11;27924:181;27940:19;;;27924:181;;;28003:10;27992:22;;;;:10;:22;;;;;;;;;:37;;27984:60;;;;;;;;;;;;;;;;;;;;;;27992:37;27984:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28032:8;;28041:1;28032:11;;;;;;;:::i;:::-;;;;;;;27984:7;:60::i;:::-;27980:114;;28073:5;28064:14;;27980:114;27961:3;;;;:::i;:::-;;;;27924:181;;26768:420;26859:9;26854:327;26878:10;;26874:14;;26854:327;;;26924:4;26914:3;26918:1;26914:6;;;;;;;;:::i;:::-;;;;;;;;;:14;26910:260;;;26966:1;26949:105;26973:10;;:14;;26986:1;;26973:14;:::i;:::-;26969:1;:18;26949:105;;;27026:3;27030;:1;27032;27030:3;:::i;:::-;27026:8;;;;;;;;:::i;:::-;;;;;;;;;27017:3;27021:1;27017:6;;;;;;;;:::i;:::-;;;;;;;;;;:17;26989:3;;;;:::i;:::-;;;;26949:105;;;-1:-1:-1;27085:10:0;;27081:3;;27085:14;;27098:1;;27085:14;:::i;:::-;27081:19;;;;;;;;:::i;:::-;;;;;;;;27074:26;;;27119:3;:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;26854:327;26768:420;;:::o;26910:260::-;26890:3;;;;:::i;:::-;;;;26854:327;;;;26768:420;;:::o;10945:120::-;11012:7;11039:3;:11;;11051:5;11039:18;;;;;;;;:::i;:::-;;;;;;;;;11032:25;;10945:120;;;;:::o;27530:261::-;27610:4;;27627:134;27651:3;:10;27647:1;:14;27627:134;;;27697:9;27687:3;27691:1;27687:6;;;;;;;;:::i;:::-;;;;;;;:19;27683:67;;;27730:4;27723:11;;;;;27683:67;27663:3;;;;:::i;:::-;;;;27627:134;;;-1:-1:-1;27778:5:0;;27530:261;-1:-1:-1;;;27530:261:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:247:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:936::-;619:6;627;635;643;651;704:3;692:9;683:7;679:23;675:33;672:53;;;721:1;718;711:12;672:53;760:9;747:23;779:31;804:5;779:31;:::i;:::-;829:5;-1:-1:-1;886:2:1;871:18;;858:32;899:33;858:32;899:33;:::i;:::-;951:7;-1:-1:-1;1005:2:1;990:18;;977:32;;-1:-1:-1;1060:2:1;1045:18;;1032:32;1083:18;1113:14;;;1110:34;;;1140:1;1137;1130:12;1110:34;1178:6;1167:9;1163:22;1153:32;;1223:7;1216:4;1212:2;1208:13;1204:27;1194:55;;1245:1;1242;1235:12;1194:55;1285:2;1272:16;1311:2;1303:6;1300:14;1297:34;;;1327:1;1324;1317:12;1297:34;1372:7;1367:2;1358:6;1354:2;1350:15;1346:24;1343:37;1340:57;;;1393:1;1390;1383:12;1340:57;522:936;;;;-1:-1:-1;522:936:1;;-1:-1:-1;1424:2:1;1416:11;;1446:6;522:936;-1:-1:-1;;;522:936:1:o;1463:315::-;1531:6;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;1768:2;1753:18;;;;1740:32;;-1:-1:-1;;;1463:315:1:o;1783:615::-;1869:6;1877;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1986:9;1973:23;2015:18;2056:2;2048:6;2045:14;2042:34;;;2072:1;2069;2062:12;2042:34;2110:6;2099:9;2095:22;2085:32;;2155:7;2148:4;2144:2;2140:13;2136:27;2126:55;;2177:1;2174;2167:12;2126:55;2217:2;2204:16;2243:2;2235:6;2232:14;2229:34;;;2259:1;2256;2249:12;2229:34;2312:7;2307:2;2297:6;2294:1;2290:14;2286:2;2282:23;2278:32;2275:45;2272:65;;;2333:1;2330;2323:12;2272:65;2364:2;2356:11;;;;;2386:6;;-1:-1:-1;1783:615:1;;-1:-1:-1;;;;1783:615:1:o;2403:277::-;2470:6;2523:2;2511:9;2502:7;2498:23;2494:32;2491:52;;;2539:1;2536;2529:12;2491:52;2571:9;2565:16;2624:5;2617:13;2610:21;2603:5;2600:32;2590:60;;2646:1;2643;2636:12;2685:180;2744:6;2797:2;2785:9;2776:7;2772:23;2768:32;2765:52;;;2813:1;2810;2803:12;2765:52;-1:-1:-1;2836:23:1;;2685:180;-1:-1:-1;2685:180:1:o;2870:184::-;2940:6;2993:2;2981:9;2972:7;2968:23;2964:32;2961:52;;;3009:1;3006;2999:12;2961:52;-1:-1:-1;3032:16:1;;2870:184;-1:-1:-1;2870:184:1:o;3267:555::-;-1:-1:-1;;;;;3590:15:1;;;3572:34;;3642:15;;;;3637:2;3622:18;;3615:43;3689:2;3674:18;;3667:34;;;;3737:3;3732:2;3717:18;;3710:31;;;3515:4;3757:19;;;3750:30;3552:3;3797:19;;3267:555::o;3827:656::-;-1:-1:-1;;;;;4072:32:1;;4054:51;;4141:2;4136;4121:18;;4114:30;;;4160:18;;4153:34;;;-1:-1:-1;;;;;;4199:31:1;;4196:51;;;4243:1;4240;4233:12;4196:51;4277:6;4274:1;4270:14;4335:6;4327;4321:3;4310:9;4306:19;4293:49;4413:1;4365:22;;;4389:3;4361:32;4402:13;;;4465:2;4450:18;;;4443:34;;;;4361:32;3827:656;-1:-1:-1;;;;3827:656:1:o;4488:824::-;-1:-1:-1;;;;;4761:32:1;;4743:51;;4731:2;4813;4831:18;;;4824:30;;;4903:13;;4716:18;;;4925:22;;;4683:4;4991:17;;;5031:16;;;4683:4;;5031:16;;4813:2;4978:3;4963:19;;;4683:4;5075:168;5089:6;5086:1;5083:13;5075:168;;;5150:13;;5138:26;;5231:1;5219:14;;;;5184:12;;;;5104:9;5075:168;;;5079:3;;5260;5252:11;;;;;5299:6;5294:2;5283:9;5279:18;5272:34;4488:824;;;;;;:::o;6440:632::-;6611:2;6663:21;;;6733:13;;6636:18;;;6755:22;;;6582:4;;6611:2;6834:15;;;;6808:2;6793:18;;;6582:4;6877:169;6891:6;6888:1;6885:13;6877:169;;;6952:13;;6940:26;;7021:15;;;;6986:12;;;;6913:1;6906:9;6877:169;;;-1:-1:-1;7063:3:1;;6440:632;-1:-1:-1;;;;;;6440:632:1:o;8581:340::-;8783:2;8765:21;;;8822:2;8802:18;;;8795:30;-1:-1:-1;;;8856:2:1;8841:18;;8834:46;8912:2;8897:18;;8581:340::o;9283:397::-;9485:2;9467:21;;;9524:2;9504:18;;;9497:30;9563:34;9558:2;9543:18;;9536:62;-1:-1:-1;;;9629:2:1;9614:18;;9607:31;9670:3;9655:19;;9283:397::o;10038:356::-;10240:2;10222:21;;;10259:18;;;10252:30;10318:34;10313:2;10298:18;;10291:62;10385:2;10370:18;;10038:356::o;10399:342::-;10601:2;10583:21;;;10640:2;10620:18;;;10613:30;-1:-1:-1;;;10674:2:1;10659:18;;10652:48;10732:2;10717:18;;10399:342::o;10746:1064::-;10896:4;10925:2;10954;10943:9;10936:21;10995:3;10984:9;10980:19;11071:1;11067;11062:3;11058:11;11054:19;11045:6;11039:13;11035:39;11030:2;11019:9;11015:18;11008:67;11129:2;11121:6;11117:15;11111:22;11106:2;11095:9;11091:18;11084:50;11188:2;11180:6;11176:15;11170:22;11165:2;11154:9;11150:18;11143:50;11248:2;11240:6;11236:15;11230:22;11224:3;11213:9;11209:19;11202:51;11300:3;11292:6;11288:16;11282:23;11342:4;11336:3;11325:9;11321:19;11314:33;11367:6;11402:12;11396:19;11439:6;11431;11424:22;11477:3;11466:9;11462:19;11455:26;;11522:2;11508:12;11504:21;11490:35;;11543:1;11534:10;;11553:169;11567:6;11564:1;11561:13;11553:169;;;11628:13;;11616:26;;11697:15;;;;11589:1;11582:9;;;;;11662:12;;;;11553:169;;;11557:3;11778;11770:6;11766:16;11760:23;11753:4;11742:9;11738:20;11731:53;11801:3;11793:11;;;;;;10746:1064;;;;:::o;11997:128::-;12037:3;12068:1;12064:6;12061:1;12058:13;12055:39;;;12074:18;;:::i;:::-;-1:-1:-1;12110:9:1;;11997:128::o;12130:217::-;12170:1;12196;12186:132;;12240:10;12235:3;12231:20;12228:1;12221:31;12275:4;12272:1;12265:15;12303:4;12300:1;12293:15;12186:132;-1:-1:-1;12332:9:1;;12130:217::o;12352:168::-;12392:7;12458:1;12454;12450:6;12446:14;12443:1;12440:21;12435:1;12428:9;12421:17;12417:45;12414:71;;;12465:18;;:::i;:::-;-1:-1:-1;12505:9:1;;12352:168::o;12525:125::-;12565:4;12593:1;12590;12587:8;12584:34;;;12598:18;;:::i;:::-;-1:-1:-1;12635:9:1;;12525:125::o;12655:135::-;12694:3;-1:-1:-1;;12715:17:1;;12712:43;;;12735:18;;:::i;:::-;-1:-1:-1;12782:1:1;12771:13;;12655:135::o;12795:127::-;12856:10;12851:3;12847:20;12844:1;12837:31;12887:4;12884:1;12877:15;12911:4;12908:1;12901:15;12927:127;12988:10;12983:3;12979:20;12976:1;12969:31;13019:4;13016:1;13009:15;13043:4;13040:1;13033:15;13059:127;13120:10;13115:3;13111:20;13108:1;13101:31;13151:4;13148:1;13141:15;13175:4;13172:1;13165:15;13191:127;13252:10;13247:3;13243:20;13240:1;13233:31;13283:4;13280:1;13273:15;13307:4;13304:1;13297:15;13323:131;-1:-1:-1;;;;;13398:31:1;;13388:42;;13378:70;;13444:1;13441;13434:12
Swarm Source
ipfs://bdded2bb7d68485e79cdf77ed517ae845303b212715364e4addbc15814e91937
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.