More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,641 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15353803 | 873 days ago | IN | 0 ETH | 0.00114061 | ||||
Withdraw | 14113540 | 1070 days ago | IN | 0 ETH | 0.00720763 | ||||
Claim Divs | 14113533 | 1070 days ago | IN | 0 ETH | 0.0039479 | ||||
Claim Divs | 14113515 | 1070 days ago | IN | 0 ETH | 0.00785667 | ||||
Withdraw | 13965542 | 1093 days ago | IN | 0 ETH | 0.0087379 | ||||
Withdraw | 13888399 | 1105 days ago | IN | 0 ETH | 0.01510546 | ||||
Withdraw | 13818986 | 1116 days ago | IN | 0 ETH | 0.01498299 | ||||
Withdraw | 13763789 | 1124 days ago | IN | 0 ETH | 0.00487436 | ||||
Withdraw | 13672743 | 1139 days ago | IN | 0 ETH | 0.01253642 | ||||
Withdraw | 13670660 | 1139 days ago | IN | 0 ETH | 0.01933119 | ||||
Withdraw | 13632666 | 1145 days ago | IN | 0 ETH | 0.01253064 | ||||
Withdraw | 13620708 | 1147 days ago | IN | 0 ETH | 0.01537463 | ||||
Withdraw | 13607795 | 1149 days ago | IN | 0 ETH | 0.0098877 | ||||
Withdraw | 13593322 | 1151 days ago | IN | 0 ETH | 0.00827178 | ||||
Withdraw | 13582412 | 1153 days ago | IN | 0 ETH | 0.01636715 | ||||
Withdraw | 13580891 | 1153 days ago | IN | 0 ETH | 0.01331526 | ||||
Withdraw | 13577836 | 1154 days ago | IN | 0 ETH | 0.01638213 | ||||
Withdraw | 13577356 | 1154 days ago | IN | 0 ETH | 0.013935 | ||||
Withdraw | 13571833 | 1155 days ago | IN | 0 ETH | 0.01031211 | ||||
Withdraw | 13571595 | 1155 days ago | IN | 0 ETH | 0.01148288 | ||||
Withdraw | 13552813 | 1158 days ago | IN | 0 ETH | 0.0163455 | ||||
Withdraw | 13543045 | 1159 days ago | IN | 0 ETH | 0.01284805 | ||||
Withdraw | 13540169 | 1160 days ago | IN | 0 ETH | 0.01743822 | ||||
Withdraw | 13527466 | 1162 days ago | IN | 0 ETH | 0.01203769 | ||||
Withdraw | 13525011 | 1162 days ago | IN | 0 ETH | 0.0187287 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DEFISocialStaking
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-11 */ pragma solidity >=0.7.0; // SPDX-License-Identifier: BSD-3-Clause /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ 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; } /** * @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(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; } } /** * @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(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; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. 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] = toDeleteIndex + 1; // All indexes are 1-based // 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; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // 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(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(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(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); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { 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(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); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface Token { function transferFrom(address, address, uint) external returns (bool); function transfer(address, uint) external returns (bool); } contract DEFISocialStaking is Ownable { using SafeMath for uint; using EnumerableSet for EnumerableSet.AddressSet; event RewardsTransferred(address holder, uint amount); // DEFISocial token contract address address public constant tokenAddress = 0x54ee01beB60E745329E6a8711Ad2D6cb213e38d7; // reward rate 72.00% per year uint public rewardRate = 7200; uint public constant rewardInterval = 365 days; // staking fee 1 percent uint public constant stakingFeeRate = 100; // unstaking fee 0.50 percent uint public constant unstakingFeeRate = 50; // unstaking possible after 12 hours //uint public constant cliffTime = 12 hours; uint public totalClaimedRewards = 0; EnumerableSet.AddressSet private holders; mapping (address => uint) public depositedTokens; mapping (address => uint) public stakingTime; mapping (address => uint) public lastClaimedTime; mapping (address => uint) public totalEarnedTokens; function updateAccount(address account) private { uint pendingDivs = getPendingDivs(account); if (pendingDivs > 0) { require(Token(tokenAddress).transfer(account, pendingDivs), "Could not transfer tokens."); totalEarnedTokens[account] = totalEarnedTokens[account].add(pendingDivs); totalClaimedRewards = totalClaimedRewards.add(pendingDivs); emit RewardsTransferred(account, pendingDivs); } lastClaimedTime[account] = block.timestamp; } function getPendingDivs(address _holder) public view returns (uint) { if (!holders.contains(_holder)) return 0; if (depositedTokens[_holder] == 0) return 0; uint timeDiff = block.timestamp.sub(lastClaimedTime[_holder]); uint stakedAmount = depositedTokens[_holder]; //IBA POOL +API //uint numHolders = getNumberOfHolders(); //uint rewardRateFinal = numHolders.mul(1e2); uint pendingDivs = stakedAmount .mul(rewardRate) .mul(timeDiff) .div(rewardInterval) .div(1e4); return pendingDivs; } function getNumberOfHolders() public view returns (uint) { return holders.length(); } function deposit(uint amountToStake) public { require(amountToStake > 0, "Cannot deposit 0 Tokens"); require(Token(tokenAddress).transferFrom(msg.sender, address(this), amountToStake), "Insufficient Token Allowance"); updateAccount(msg.sender); uint fee = amountToStake.mul(stakingFeeRate).div(1e4); uint amountAfterFee = amountToStake.sub(fee); require(Token(tokenAddress).transfer(owner, fee), "Could not transfer deposit fee."); depositedTokens[msg.sender] = depositedTokens[msg.sender].add(amountAfterFee); if (!holders.contains(msg.sender)) { holders.add(msg.sender); stakingTime[msg.sender] = block.timestamp; }else{ } } function withdraw(uint amountToWithdraw) public { require(depositedTokens[msg.sender] >= amountToWithdraw, "Invalid amount to withdraw"); //require(block.timestamp.sub(stakingTime[msg.sender]) > cliffTime, "You recently staked, please wait before withdrawing."); updateAccount(msg.sender); uint fee = amountToWithdraw.mul(unstakingFeeRate).div(1e4); uint amountAfterFee = amountToWithdraw.sub(fee); require(Token(tokenAddress).transfer(owner, fee), "Could not transfer withdraw fee."); require(Token(tokenAddress).transfer(msg.sender, amountAfterFee), "Could not transfer tokens."); depositedTokens[msg.sender] = depositedTokens[msg.sender].sub(amountToWithdraw); if (holders.contains(msg.sender) && depositedTokens[msg.sender] == 0) { holders.remove(msg.sender); } } function claimDivs() public { updateAccount(msg.sender); } function getStakersList(uint startIndex, uint endIndex) public view returns (address[] memory stakers, uint[] memory stakingTimestamps, uint[] memory lastClaimedTimeStamps, uint[] memory stakedTokens) { require (startIndex < endIndex); uint length = endIndex.sub(startIndex); address[] memory _stakers = new address[](length); uint[] memory _stakingTimestamps = new uint[](length); uint[] memory _lastClaimedTimeStamps = new uint[](length); uint[] memory _stakedTokens = new uint[](length); for (uint i = startIndex; i < endIndex; i = i.add(1)) { address staker = holders.at(i); uint listIndex = i.sub(startIndex); _stakers[listIndex] = staker; _stakingTimestamps[listIndex] = stakingTime[staker]; _lastClaimedTimeStamps[listIndex] = lastClaimedTime[staker]; _stakedTokens[listIndex] = depositedTokens[staker]; } return (_stakers, _stakingTimestamps, _lastClaimedTimeStamps, _stakedTokens); } uint private constant stakingAndDaoTokens = 5000e18; function getStakingAndDaoAmount() public view returns (uint) { if (totalClaimedRewards >= stakingAndDaoTokens) { return 0; } uint remaining = stakingAndDaoTokens.sub(totalClaimedRewards); return remaining; } // function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) // Admin cannot transfer out YF-DAI from this smart contract function transferAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { require (_tokenAddr != tokenAddress, "Cannot Transfer Out DFSocial"); Token(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsTransferred","type":"event"},{"inputs":[],"name":"claimDivs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToStake","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"getPendingDivs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"endIndex","type":"uint256"}],"name":"getStakersList","outputs":[{"internalType":"address[]","name":"stakers","type":"address[]"},{"internalType":"uint256[]","name":"stakingTimestamps","type":"uint256[]"},{"internalType":"uint256[]","name":"lastClaimedTimeStamps","type":"uint256[]"},{"internalType":"uint256[]","name":"stakedTokens","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingAndDaoAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalEarnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakingFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611c20600155600060025534801561001b57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e9b8061006b6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063c326bf4f11610071578063c326bf4f14610570578063d578ceab146105c8578063d816c7d5146105e6578063f2fde38b14610604578063f3f91fa0146106485761012c565b80638da5cb5b1461046457806398896d10146104985780639d76ea58146104f0578063b6b55f2514610524578063bec4de3f146105525761012c565b8063583d42fd116100f4578063583d42fd1461030a5780635ef057be146103625780636270cd18146103805780636a395ccb146103d85780637b0a47ee146104465761012c565b80631911cf4a1461013157806319aa70e714610296578063268cab49146102a05780632e1a7d4d146102be578063308feec3146102ec575b600080fd5b6101676004803603604081101561014757600080fd5b8101908080359060200190929190803590602001909291905050506106a0565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156101b657808201518184015260208101905061019b565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156101f85780820151818401526020810190506101dd565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561023a57808201518184015260208101905061021f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561027c578082015181840152602081019050610261565b505050509050019850505050505050505060405180910390f35b61029e6109b9565b005b6102a86109c4565b6040518082815260200191505060405180910390f35b6102ea600480360360208110156102d457600080fd5b8101908080359060200190929190505050610a0d565b005b6102f4610ea6565b6040518082815260200191505060405180910390f35b61034c6004803603602081101561032057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb7565b6040518082815260200191505060405180910390f35b61036a610ecf565b6040518082815260200191505060405180910390f35b6103c26004803603602081101561039657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b6040518082815260200191505060405180910390f35b610444600480360360608110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eec565b005b61044e6110ac565b6040518082815260200191505060405180910390f35b61046c6110b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104da600480360360208110156104ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110d6565b6040518082815260200191505060405180910390f35b6104f8611245565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105506004803603602081101561053a57600080fd5b810190808035906020019092919050505061125d565b005b61055a6116d2565b6040518082815260200191505060405180910390f35b6105b26004803603602081101561058657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116da565b6040518082815260200191505060405180910390f35b6105d06116f2565b6040518082815260200191505060405180910390f35b6105ee6116f8565b6040518082815260200191505060405180910390f35b6106466004803603602081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fd565b005b61068a6004803603602081101561065e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184c565b6040518082815260200191505060405180910390f35b6060806060808486106106b257600080fd5b60006106c7878761186490919063ffffffff16565b905060608167ffffffffffffffff811180156106e257600080fd5b506040519080825280602002602001820160405280156107115781602001602082028036833780820191505090505b50905060608267ffffffffffffffff8111801561072d57600080fd5b5060405190808252806020026020018201604052801561075c5781602001602082028036833780820191505090505b50905060608367ffffffffffffffff8111801561077857600080fd5b506040519080825280602002602001820160405280156107a75781602001602082028036833780820191505090505b50905060608467ffffffffffffffff811180156107c357600080fd5b506040519080825280602002602001820160405280156107f25781602001602082028036833780820191505090505b50905060008b90505b8a81101561099e57600061081982600361187b90919063ffffffff16565b905060006108308e8461186490919063ffffffff16565b90508187828151811061083f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548682815181106108c557fe5b602002602001018181525050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485828151811061091d57fe5b602002602001018181525050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484828151811061097557fe5b602002602001018181525050505061099760018261189590919063ffffffff16565b90506107fb565b50838383839850985098509850505050505092959194509250565b6109c2336118b1565b565b600069010f0cf064dd59200000600254106109e25760009050610a0a565b6000610a0360025469010f0cf064dd5920000061186490919063ffffffff16565b9050809150505b90565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610acb336118b1565b6000610af5612710610ae7603285611b4790919063ffffffff16565b611b7690919063ffffffff16565b90506000610b0c828461186490919063ffffffff16565b90507354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610bb357600080fd5b505af1158015610bc7573d6000803e3d6000fd5b505050506040513d6020811015610bdd57600080fd5b8101908080519060200190929190505050610c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b8101908080519060200190929190505050610d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610de483600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186490919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e3b336003611b8f90919063ffffffff16565b8015610e8657506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15610ea157610e9f336003611bbf90919063ffffffff16565b505b505050565b6000610eb26003611bef565b905090565b60066020528060005260406000206000915090505481565b606481565b60086020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4457600080fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f74205472616e73666572204f7574204446536f6369616c0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b810190808051906020019092919050505050505050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110ec826003611b8f90919063ffffffff16565b6110f95760009050611240565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561114a5760009050611240565b600061119e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261186490919063ffffffff16565b90506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006112376127106112296301e1338061121b8761120d60015489611b4790919063ffffffff16565b611b4790919063ffffffff16565b611b7690919063ffffffff16565b611b7690919063ffffffff16565b90508093505050505b919050565b7354ee01beb60e745329e6a8711ad2d6cb213e38d781565b600081116112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050506040513d60208110156113a057600080fd5b8101908080519060200190929190505050611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b61142c336118b1565b6000611456612710611448606485611b4790919063ffffffff16565b611b7690919063ffffffff16565b9050600061146d828461186490919063ffffffff16565b90507354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151457600080fd5b505af1158015611528573d6000803e3d6000fd5b505050506040513d602081101561153e57600080fd5b81019080805190602001909291905050506115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f74207472616e73666572206465706f736974206665652e0081525060200191505060405180910390fd5b61161381600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461189590919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061166a336003611b8f90919063ffffffff16565b6116cc57611682336003611c0490919063ffffffff16565b5042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116cd565b5b505050565b6301e1338081565b60056020528060005260406000206000915090505481565b60025481565b603281565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561178f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915090505481565b60008282111561187057fe5b818303905092915050565b600061188a8360000183611c34565b60001c905092915050565b6000808284019050838110156118a757fe5b8091505092915050565b60006118bc826110d6565b90506000811115611aff577354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505050506040513d602081101561197657600080fd5b81019080805190602001909291905050506119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b611a4b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461189590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611aa38160025461189590919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008082840290506000841480611b66575082848281611b6357fe5b04145b611b6c57fe5b8091505092915050565b600080828481611b8257fe5b0490508091505092915050565b6000611bb7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611cb7565b905092915050565b6000611be7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611cda565b905092915050565b6000611bfd82600001611dc2565b9050919050565b6000611c2c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611dd3565b905092915050565b600081836000018054905011611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611e446022913960400191505060405180910390fd5b826000018281548110611ca457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114611db65760006001820390506000600186600001805490500390506000866000018281548110611d2557fe5b9060005260206000200154905080876000018481548110611d4257fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480611d7a57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611dbc565b60009150505b92915050565b600081600001805490509050919050565b6000611ddf8383611cb7565b611e38578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611e3d565b600090505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473a26469706673582212205e693950e9d159c9b554de6abd13108c45e5f9473dba5f67859f97ce2f6bc3d964736f6c63430007050033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80638da5cb5b116100ad578063c326bf4f11610071578063c326bf4f14610570578063d578ceab146105c8578063d816c7d5146105e6578063f2fde38b14610604578063f3f91fa0146106485761012c565b80638da5cb5b1461046457806398896d10146104985780639d76ea58146104f0578063b6b55f2514610524578063bec4de3f146105525761012c565b8063583d42fd116100f4578063583d42fd1461030a5780635ef057be146103625780636270cd18146103805780636a395ccb146103d85780637b0a47ee146104465761012c565b80631911cf4a1461013157806319aa70e714610296578063268cab49146102a05780632e1a7d4d146102be578063308feec3146102ec575b600080fd5b6101676004803603604081101561014757600080fd5b8101908080359060200190929190803590602001909291905050506106a0565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156101b657808201518184015260208101905061019b565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156101f85780820151818401526020810190506101dd565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561023a57808201518184015260208101905061021f565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561027c578082015181840152602081019050610261565b505050509050019850505050505050505060405180910390f35b61029e6109b9565b005b6102a86109c4565b6040518082815260200191505060405180910390f35b6102ea600480360360208110156102d457600080fd5b8101908080359060200190929190505050610a0d565b005b6102f4610ea6565b6040518082815260200191505060405180910390f35b61034c6004803603602081101561032057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb7565b6040518082815260200191505060405180910390f35b61036a610ecf565b6040518082815260200191505060405180910390f35b6103c26004803603602081101561039657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b6040518082815260200191505060405180910390f35b610444600480360360608110156103ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eec565b005b61044e6110ac565b6040518082815260200191505060405180910390f35b61046c6110b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104da600480360360208110156104ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110d6565b6040518082815260200191505060405180910390f35b6104f8611245565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105506004803603602081101561053a57600080fd5b810190808035906020019092919050505061125d565b005b61055a6116d2565b6040518082815260200191505060405180910390f35b6105b26004803603602081101561058657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116da565b6040518082815260200191505060405180910390f35b6105d06116f2565b6040518082815260200191505060405180910390f35b6105ee6116f8565b6040518082815260200191505060405180910390f35b6106466004803603602081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116fd565b005b61068a6004803603602081101561065e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184c565b6040518082815260200191505060405180910390f35b6060806060808486106106b257600080fd5b60006106c7878761186490919063ffffffff16565b905060608167ffffffffffffffff811180156106e257600080fd5b506040519080825280602002602001820160405280156107115781602001602082028036833780820191505090505b50905060608267ffffffffffffffff8111801561072d57600080fd5b5060405190808252806020026020018201604052801561075c5781602001602082028036833780820191505090505b50905060608367ffffffffffffffff8111801561077857600080fd5b506040519080825280602002602001820160405280156107a75781602001602082028036833780820191505090505b50905060608467ffffffffffffffff811180156107c357600080fd5b506040519080825280602002602001820160405280156107f25781602001602082028036833780820191505090505b50905060008b90505b8a81101561099e57600061081982600361187b90919063ffffffff16565b905060006108308e8461186490919063ffffffff16565b90508187828151811061083f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548682815181106108c557fe5b602002602001018181525050600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485828151811061091d57fe5b602002602001018181525050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484828151811061097557fe5b602002602001018181525050505061099760018261189590919063ffffffff16565b90506107fb565b50838383839850985098509850505050505092959194509250565b6109c2336118b1565b565b600069010f0cf064dd59200000600254106109e25760009050610a0a565b6000610a0360025469010f0cf064dd5920000061186490919063ffffffff16565b9050809150505b90565b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496e76616c696420616d6f756e7420746f20776974686472617700000000000081525060200191505060405180910390fd5b610acb336118b1565b6000610af5612710610ae7603285611b4790919063ffffffff16565b611b7690919063ffffffff16565b90506000610b0c828461186490919063ffffffff16565b90507354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610bb357600080fd5b505af1158015610bc7573d6000803e3d6000fd5b505050506040513d6020811015610bdd57600080fd5b8101908080519060200190929190505050610c60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f756c64206e6f74207472616e73666572207769746864726177206665652e81525060200191505060405180910390fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b505050506040513d6020811015610d0f57600080fd5b8101908080519060200190929190505050610d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b610de483600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461186490919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e3b336003611b8f90919063ffffffff16565b8015610e8657506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15610ea157610e9f336003611bbf90919063ffffffff16565b505b505050565b6000610eb26003611bef565b905090565b60066020528060005260406000206000915090505481565b606481565b60086020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4457600080fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f43616e6e6f74205472616e73666572204f7574204446536f6369616c0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b810190808051906020019092919050505050505050565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006110ec826003611b8f90919063ffffffff16565b6110f95760009050611240565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561114a5760009050611240565b600061119e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261186490919063ffffffff16565b90506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006112376127106112296301e1338061121b8761120d60015489611b4790919063ffffffff16565b611b4790919063ffffffff16565b611b7690919063ffffffff16565b611b7690919063ffffffff16565b90508093505050505b919050565b7354ee01beb60e745329e6a8711ad2d6cb213e38d781565b600081116112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f74206465706f736974203020546f6b656e7300000000000000000081525060200191505060405180910390fd5b7354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050506040513d60208110156113a057600080fd5b8101908080519060200190929190505050611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e7420546f6b656e20416c6c6f77616e63650000000081525060200191505060405180910390fd5b61142c336118b1565b6000611456612710611448606485611b4790919063ffffffff16565b611b7690919063ffffffff16565b9050600061146d828461186490919063ffffffff16565b90507354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151457600080fd5b505af1158015611528573d6000803e3d6000fd5b505050506040513d602081101561153e57600080fd5b81019080805190602001909291905050506115c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f756c64206e6f74207472616e73666572206465706f736974206665652e0081525060200191505060405180910390fd5b61161381600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461189590919063ffffffff16565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061166a336003611b8f90919063ffffffff16565b6116cc57611682336003611c0490919063ffffffff16565b5042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116cd565b5b505050565b6301e1338081565b60056020528060005260406000206000915090505481565b60025481565b603281565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561178f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915090505481565b60008282111561187057fe5b818303905092915050565b600061188a8360000183611c34565b60001c905092915050565b6000808284019050838110156118a757fe5b8091505092915050565b60006118bc826110d6565b90506000811115611aff577354ee01beb60e745329e6a8711ad2d6cb213e38d773ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561194c57600080fd5b505af1158015611960573d6000803e3d6000fd5b505050506040513d602081101561197657600080fd5b81019080805190602001909291905050506119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f436f756c64206e6f74207472616e7366657220746f6b656e732e00000000000081525060200191505060405180910390fd5b611a4b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461189590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611aa38160025461189590919063ffffffff16565b6002819055507f586b2e63a21a7a4e1402e36f48ce10cb1ec94684fea254c186b76d1f98ecf1308282604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b42600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008082840290506000841480611b66575082848281611b6357fe5b04145b611b6c57fe5b8091505092915050565b600080828481611b8257fe5b0490508091505092915050565b6000611bb7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611cb7565b905092915050565b6000611be7836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611cda565b905092915050565b6000611bfd82600001611dc2565b9050919050565b6000611c2c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611dd3565b905092915050565b600081836000018054905011611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611e446022913960400191505060405180910390fd5b826000018281548110611ca457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114611db65760006001820390506000600186600001805490500390506000866000018281548110611d2557fe5b9060005260206000200154905080876000018481548110611d4257fe5b9060005260206000200181905550600183018760010160008381526020019081526020016000208190555086600001805480611d7a57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611dbc565b60009150505b92915050565b600081600001805490509050919050565b6000611ddf8383611cb7565b611e38578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611e3d565b600090505b9291505056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473a26469706673582212205e693950e9d159c9b554de6abd13108c45e5f9473dba5f67859f97ce2f6bc3d964736f6c63430007050033
Deployed Bytecode Sourcemap
10026:6225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14339:1157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14255:72;;;:::i;:::-;;15578:261;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13308:935;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12378:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10924:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10526:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11030:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16014:234;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10400:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9063:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11640:726;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10270:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12495:801;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10437:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10869:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10768:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10615:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9676:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10975:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14339:1157;14446:24;14486:31;14533:35;14583:26;14644:8;14631:10;:21;14622:31;;;;;;14674:11;14688:24;14701:10;14688:8;:12;;:24;;;;:::i;:::-;14674:38;;14723:25;14765:6;14751:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14723:49;;14783:32;14829:6;14818:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14783:53;;14847:36;14897:6;14886:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14847:57;;14915:27;14956:6;14945:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14915:48;;14989:6;14998:10;14989:19;;14984:408;15014:8;15010:1;:12;14984:408;;;15053:14;15070:13;15081:1;15070:7;:10;;:13;;;;:::i;:::-;15053:30;;15098:14;15115:17;15121:10;15115:1;:5;;:17;;;;:::i;:::-;15098:34;;15169:6;15147:8;15156:9;15147:19;;;;;;;;;;;;;:28;;;;;;;;;;;15222:11;:19;15234:6;15222:19;;;;;;;;;;;;;;;;15190:18;15209:9;15190:29;;;;;;;;;;;;;:51;;;;;15292:15;:23;15308:6;15292:23;;;;;;;;;;;;;;;;15256:22;15279:9;15256:33;;;;;;;;;;;;;:59;;;;;15357:15;:23;15373:6;15357:23;;;;;;;;;;;;;;;;15330:13;15344:9;15330:24;;;;;;;;;;;;;:50;;;;;14984:408;;15028:8;15034:1;15028;:5;;:8;;;;:::i;:::-;15024:12;;14984:408;;;;15420:8;15430:18;15450:22;15474:13;15412:76;;;;;;;;;;;;;14339:1157;;;;;;;:::o;14255:72::-;14294:25;14308:10;14294:13;:25::i;:::-;14255:72::o;15578:261::-;15633:4;15558:7;15654:19;;:42;15650:83;;15720:1;15713:8;;;;15650:83;15743:14;15760:44;15784:19;;15558:7;15760:23;;:44;;;;:::i;:::-;15743:61;;15822:9;15815:16;;;15578:261;;:::o;13308:935::-;13406:16;13375:15;:27;13391:10;13375:27;;;;;;;;;;;;;;;;:47;;13367:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13618:25;13632:10;13618:13;:25::i;:::-;13664:8;13675:47;13718:3;13675:38;10655:2;13675:16;:20;;:38;;;;:::i;:::-;:42;;:47;;;;:::i;:::-;13664:58;;13733:19;13755:25;13776:3;13755:16;:20;;:25;;;;:::i;:::-;13733:47;;10309:42;13809:28;;;13838:5;;;;;;;;;;13845:3;13809:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13801:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10309:42;13905:28;;;13934:10;13946:14;13905:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13897:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14043:49;14075:16;14043:15;:27;14059:10;14043:27;;;;;;;;;;;;;;;;:31;;:49;;;;:::i;:::-;14013:15;:27;14029:10;14013:27;;;;;;;;;;;;;;;:79;;;;14117:28;14134:10;14117:7;:16;;:28;;;;:::i;:::-;:64;;;;;14180:1;14149:15;:27;14165:10;14149:27;;;;;;;;;;;;;;;;:32;14117:64;14113:123;;;14198:26;14213:10;14198:7;:14;;:26;;;;:::i;:::-;;14113:123;13308:935;;;:::o;12378:99::-;12429:4;12453:16;:7;:14;:16::i;:::-;12446:23;;12378:99;:::o;10924:44::-;;;;;;;;;;;;;;;;;:::o;10526:41::-;10564:3;10526:41;:::o;11030:50::-;;;;;;;;;;;;;;;;;:::o;16014:234::-;9487:5;;;;;;;;;;9473:19;;:10;:19;;;9465:28;;;;;;10309:42:::1;16130:26;;:10;:26;;;;16121:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16206:10;16200:26;;;16227:3;16232:7;16200:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;16014:234:::0;;;:::o;10400:30::-;;;;:::o;9063:20::-;;;;;;;;;;;;:::o;11640:726::-;11702:4;11724:25;11741:7;11724;:16;;:25;;;;:::i;:::-;11719:40;;11758:1;11751:8;;;;11719:40;11802:1;11774:15;:24;11790:7;11774:24;;;;;;;;;;;;;;;;:29;11770:43;;;11812:1;11805:8;;;;11770:43;11826:13;11842:45;11862:15;:24;11878:7;11862:24;;;;;;;;;;;;;;;;11842:15;:19;;:45;;;;:::i;:::-;11826:61;;11898:17;11918:15;:24;11934:7;11918:24;;;;;;;;;;;;;;;;11898:44;;12104:16;12123:192;12311:3;12123:153;10475:8;12123:103;12217:8;12123:58;12170:10;;12123:12;:46;;:58;;;;:::i;:::-;:93;;:103;;;;:::i;:::-;:137;;:153;;;;:::i;:::-;:187;;:192;;;;:::i;:::-;12104:211;;12347:11;12340:18;;;;;11640:726;;;;:::o;10270:81::-;10309:42;10270:81;:::o;12495:801::-;12574:1;12558:13;:17;12550:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10309:42;12622:32;;;12655:10;12675:4;12682:13;12622:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12614:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12750:25;12764:10;12750:13;:25::i;:::-;12796:8;12807:42;12845:3;12807:33;10564:3;12807:13;:17;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;12796:53;;12860:19;12882:22;12900:3;12882:13;:17;;:22;;;;:::i;:::-;12860:44;;10309:42;12923:28;;;12952:5;;;;;;;;;;12959:3;12923:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12915:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13050:47;13082:14;13050:15;:27;13066:10;13050:27;;;;;;;;;;;;;;;;:31;;:47;;;;:::i;:::-;13020:15;:27;13036:10;13020:27;;;;;;;;;;;;;;;:77;;;;13123:28;13140:10;13123:7;:16;;:28;;;;:::i;:::-;13118:171;;13168:23;13180:10;13168:7;:11;;:23;;;;:::i;:::-;;13232:15;13206:11;:23;13218:10;13206:23;;;;;;;;;;;;;;;:41;;;;13118:171;;;;12495:801;;;:::o;10437:46::-;10475:8;10437:46;:::o;10869:48::-;;;;;;;;;;;;;;;;;:::o;10768:35::-;;;;:::o;10615:42::-;10655:2;10615:42;:::o;9676:178::-;9487:5;;;;;;;;;;9473:19;;:10;:19;;;9465:28;;;;;;9773:1:::1;9753:22;;:8;:22;;;;9745:31;;;::::0;::::1;;9816:8;9788:37;;9809:5;::::0;::::1;;;;;;;;9788:37;;;;;;;;;;;;9840:8;9832:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;9676:178:::0;:::o;10975:48::-;;;;;;;;;;;;;;;;;:::o;617:113::-;675:7;703:1;698;:6;;691:14;;;;723:1;719;:5;712:12;;617:113;;;;:::o;7083:149::-;7157:7;7200:22;7204:3;:10;;7216:5;7200:3;:22::i;:::-;7192:31;;7177:47;;7083:149;;;;:::o;736:133::-;794:7;810:9;826:1;822;:5;810:17;;846:1;841;:6;;834:14;;;;862:1;855:8;;;736:133;;;;:::o;11099:529::-;11158:16;11177:23;11192:7;11177:14;:23::i;:::-;11158:42;;11229:1;11215:11;:15;11211:357;;;10309:42;11255:28;;;11284:7;11293:11;11255:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11247:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11380:43;11411:11;11380:17;:26;11398:7;11380:26;;;;;;;;;;;;;;;;:30;;:43;;;;:::i;:::-;11351:17;:26;11369:7;11351:26;;;;;;;;;;;;;;;:72;;;;11460:36;11484:11;11460:19;;:23;;:36;;;;:::i;:::-;11438:19;:58;;;;11516:40;11535:7;11544:11;11516:40;;;;;;;;;;;;;;;;;;;;;;;;;;11211:357;11605:15;11578;:24;11594:7;11578:24;;;;;;;;;;;;;;;:42;;;;11099:529;;:::o;188:147::-;246:7;262:9;278:1;274;:5;262:17;;298:1;293;:6;:20;;;;312:1;307;303;:5;;;;;;:10;293:20;286:28;;;;328:1;321:8;;;188:147;;;;:::o;341:270::-;399:7;490:9;506:1;502;:5;;;;;;490:17;;604:1;597:8;;;341:270;;;;:::o;6378:158::-;6458:4;6482:46;6492:3;:10;;6520:5;6512:14;;6504:23;;6482:9;:46::i;:::-;6475:53;;6378:158;;;;:::o;6143:149::-;6216:4;6240:44;6248:3;:10;;6276:5;6268:14;;6260:23;;6240:7;:44::i;:::-;6233:51;;6143:149;;;;:::o;6622:117::-;6685:7;6712:19;6720:3;:10;;6712:7;:19::i;:::-;6705:26;;6622:117;;;:::o;5824:143::-;5894:4;5918:41;5923:3;:10;;5951:5;5943:14;;5935:23;;5918:4;:41::i;:::-;5911:48;;5824:143;;;;:::o;5366:204::-;5433:7;5482:5;5461:3;:11;;:18;;;;:26;5453:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5544:3;:11;;5556:5;5544:18;;;;;;;;;;;;;;;;5537:25;;5366:204;;;;:::o;4698:129::-;4771:4;4818:1;4795:3;:12;;:19;4808:5;4795:19;;;;;;;;;;;;:24;;4788:31;;4698:129;;;;:::o;3068:1544::-;3134:4;3252:18;3273:3;:12;;:19;3286:5;3273:19;;;;;;;;;;;;3252:40;;3323:1;3309:10;:15;3305:1300;;3671:21;3708:1;3695:10;:14;3671:38;;3724:17;3765:1;3744:3;:11;;:18;;;;:22;3724:42;;4011:17;4031:3;:11;;4043:9;4031:22;;;;;;;;;;;;;;;;4011:42;;4177:9;4148:3;:11;;4160:13;4148:26;;;;;;;;;;;;;;;:38;;;;4296:1;4280:13;:17;4254:3;:12;;:23;4267:9;4254:23;;;;;;;;;;;:43;;;;4406:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;4501:3;:12;;:19;4514:5;4501:19;;;;;;;;;;;4494:26;;;4544:4;4537:11;;;;;;;;3305:1300;4588:5;4581:12;;;3068:1544;;;;;:::o;4913:109::-;4969:7;4996:3;:11;;:18;;;;4989:25;;4913:109;;;:::o;2478:414::-;2541:4;2563:21;2573:3;2578:5;2563:9;:21::i;:::-;2558:327;;2601:3;:11;;2618:5;2601:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2784:3;:11;;:18;;;;2762:3;:12;;:19;2775:5;2762:19;;;;;;;;;;;:40;;;;2824:4;2817:11;;;;2558:327;2868:5;2861:12;;2478:414;;;;;:::o
Swarm Source
ipfs://5e693950e9d159c9b554de6abd13108c45e5f9473dba5f67859f97ce2f6bc3d9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2.25 | 316.5699 | $713.07 |
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.