More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
YFIECFarm
Compiler Version
v0.7.1+commit.f4a555be
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-31 */ // SPDX-License-Identifier: MIT pragma solidity ^0.7.1; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ 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"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /* @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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"); _; } /** * @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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract YFIECFarm is Ownable { using SafeMath for uint256; uint256 public rewardDuration = 691200; uint256 public rewardRate = 9e11; uint256 public allocation; uint256 public unclaimedReward; uint256 public stakingDecimals; IERC20 public rewardsToken; IERC20 public stakingToken; struct Stake { uint256 createdOn; uint256 amount; uint256 withdrawn; } mapping(address => Stake) stakes; constructor() { allocation = 3e10; unclaimedReward = allocation; stakingDecimals = 1e18; stakingToken = IERC20(0xa9Bf3179D44dfFbA8Ab6E9d1430928c3360b0b42); rewardsToken = IERC20(0x2E6E152d29053B6337E434bc9bE17504170f8a5B); } function createdDate(address _stake) external view returns(uint256) { return stakes[_stake].createdOn; } function withdrawn(address _stake) external view returns(uint256) { return stakes[_stake].withdrawn; } function stakedAmount(address _stake) external view returns(uint256) { return stakes[_stake].amount; } function newStake(uint256 _amount) public { require(_amount > 0, "Cannot stake zero"); uint256 prevAmount = stakes[_msgSender()].amount; if (prevAmount > 0) { withdraw(); } _amount = _amount.add(prevAmount); uint256 estimate = estimateReward(_amount); require(unclaimedReward >= estimate, "Allocation exhausted"); require(stakingToken.transferFrom(_msgSender(), address(this), _amount), "Could not transfer token"); unclaimedReward = unclaimedReward.sub(estimate); stakes[_msgSender()] = Stake({createdOn: block.timestamp, amount: _amount, withdrawn: 0}); emit NewStake(_msgSender(), _amount); } function unstake() public { Stake memory stake = stakes[_msgSender()]; uint256 amount = stake.amount; uint256 thisReward = _earning(stake); uint256 offset = estimateReward(amount).sub(thisReward); uint256 finalReward = thisReward.sub(stake.withdrawn); unclaimedReward = unclaimedReward.add(offset); require(rewardsToken.transfer(_msgSender(), finalReward), "Could not transfer reward token"); require(stakingToken.transfer(_msgSender(), amount), "Could not transfer staked token"); delete stakes[_msgSender()]; emit Unstake(_msgSender(), amount); } function withdraw() public { Stake storage stake = stakes[_msgSender()]; if (stake.amount > 0) { uint256 thisReward = _earning(stake).sub(stake.withdrawn); stake.withdrawn = stake.withdrawn.add(thisReward); require(rewardsToken.transfer(_msgSender(), thisReward), "Could not transfer token"); emit Withdrawal(_msgSender(), thisReward); } } function withrawUnclaimed(uint256 _amount) public onlyOwner { require(_amount <= unclaimedReward, "Not enough balance"); require(rewardsToken.balanceOf(address(this)) >= _amount, "Balance is less than amount"); require(rewardsToken.transfer(owner(), _amount), "Token transfer failed"); emit Withdrawal(owner(), _amount); unclaimedReward = unclaimedReward.sub(_amount); } function updateRewardRate(uint256 _rate) public onlyOwner { rewardRate = _rate; } function earning(address _stake) public view returns(uint256) { Stake memory stake = stakes[_stake]; return _earning(stake); } function _earning(Stake memory _stake) internal view returns(uint256) { uint256 duration = block.timestamp.sub(_stake.createdOn); if (duration > rewardDuration) { duration = rewardDuration; } return duration.mul(_stake.amount).mul(rewardRate).div(86400).div(stakingDecimals); } function estimateReward(uint256 _amount) public view returns(uint256) { return _amount.mul(rewardDuration).mul(rewardRate).div(86400).div(stakingDecimals); } event NewStake(address indexed staker, uint256 amount); event Unstake(address indexed staker, uint256 amount); event Withdrawal(address indexed staker, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewStake","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":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"allocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"createdDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"earning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"estimateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"newStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardDuration","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":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"stakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"withdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withrawUnclaimed","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052620a8c0060015564d18c2e280060025534801561002057600080fd5b50600061002b6100dc565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506406fc23ac006003819055600455670de0b6b3a7640000600555600780546001600160a01b031990811673a9bf3179d44dffba8ab6e9d1430928c3360b0b421790915560068054909116732e6e152d29053b6337e434bc9be17504170f8a5b1790556100e0565b3390565b611272806100ef6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80639ef3a261116100ad578063f2fde38b11610071578063f2fde38b14610241578063f4c0fab414610267578063f520e7e51461028d578063f993185514610295578063fb64884e146102bb57610121565b80639ef3a261146101ef578063c11f53441461020c578063cee83cee14610214578063d1af0c7d1461021c578063d2e875611461022457610121565b80636ef61092116100f45780636ef610921461018d57806372f702f3146101b35780637b0a47ee146101d757806388a17bde146101df5780638da5cb5b146101e757610121565b80630f1af35d146101265780631ec932ff146101455780632def66201461017d5780633ccfd60b14610185575b600080fd5b6101436004803603602081101561013c57600080fd5b50356102d8565b005b61016b6004803603602081101561015b57600080fd5b50356001600160a01b0316610587565b60408051918252519081900360200190f35b6101436105a2565b610143610887565b61016b600480360360208110156101a357600080fd5b50356001600160a01b0316610a2a565b6101bb610a48565b604080516001600160a01b039092168252519081900360200190f35b61016b610a57565b61016b610a5d565b6101bb610a63565b6101436004803603602081101561020557600080fd5b5035610a72565b61016b610ae1565b61016b610ae7565b6101bb610aed565b61016b6004803603602081101561023a57600080fd5b5035610afc565b6101436004803603602081101561025757600080fd5b50356001600160a01b0316610b38565b61016b6004803603602081101561027d57600080fd5b50356001600160a01b0316610c42565b61016b610c9c565b61016b600480360360208110156102ab57600080fd5b50356001600160a01b0316610ca2565b610143600480360360208110156102d157600080fd5b5035610cc0565b6102e0610f50565b6000546001600160a01b03908116911614610342576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60045481111561038e576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b600654604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b50511015610457576040805162461bcd60e51b815260206004820152601b60248201527f42616c616e6365206973206c657373207468616e20616d6f756e740000000000604482015290519081900360640190fd5b6006546001600160a01b031663a9059cbb610470610a63565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d60208110156104e157600080fd5b505161052c576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015290519081900360640190fd5b610534610a63565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a26004546105819082610f54565b60045550565b6001600160a01b031660009081526008602052604090205490565b6105aa6111d4565b600860006105b6610f50565b6001600160a01b031681526020808201929092526040908101600090812082516060810184528154815260018201549481018590526002909101549281019290925290925061060483610f96565b9050600061061b8261061585610afc565b90610f54565b90506000610636856040015184610f5490919063ffffffff16565b6004549091506106469083610fe3565b6004556006546001600160a01b031663a9059cbb610662610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b505050506040513d60208110156106d357600080fd5b5051610726576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e736665722072657761726420746f6b656e00604482015290519081900360640190fd5b6007546001600160a01b031663a9059cbb61073f610f50565b866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561078657600080fd5b505af115801561079a573d6000803e3d6000fd5b505050506040513d60208110156107b057600080fd5b5051610803576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572207374616b656420746f6b656e00604482015290519081900360640190fd5b6008600061080f610f50565b6001600160a01b03168152602081019190915260400160009081208181556001810182905560020155610840610f50565b6001600160a01b03167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd856040518082815260200191505060405180910390a25050505050565b600060086000610895610f50565b6001600160a01b031681526020810191909152604001600020600181015490915015610a275760028101546040805160608101825283548152600184015460208201529081018290526000916108ee9161061590610f96565b60028301549091506109009082610fe3565b60028301556006546001600160a01b031663a9059cbb61091e610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561096557600080fd5b505af1158015610979573d6000803e3d6000fd5b505050506040513d602081101561098f57600080fd5b50516109dd576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b6109e5610f50565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2505b50565b6001600160a01b031660009081526008602052604090206002015490565b6007546001600160a01b031681565b60025481565b60035481565b6000546001600160a01b031690565b610a7a610f50565b6000546001600160a01b03908116911614610adc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600255565b60055481565b60045481565b6006546001600160a01b031681565b6000610b32600554610b2c62015180610b2c600254610b266001548961103d90919063ffffffff16565b9061103d565b90611096565b92915050565b610b40610f50565b6000546001600160a01b03908116911614610ba2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610be75760405162461bcd60e51b81526004018080602001828103825260268152602001806111f66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4c6111d4565b506001600160a01b0382166000908152600860209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610c9581610f96565b9392505050565b60015481565b6001600160a01b031660009081526008602052604090206001015490565b60008111610d09576040805162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65207a65726f60781b604482015290519081900360640190fd5b600060086000610d17610f50565b6001600160a01b0316815260208101919091526040016000206001015490508015610d4457610d44610887565b610d4e8282610fe3565b91506000610d5b83610afc565b9050806004541015610dab576040805162461bcd60e51b8152602060048201526014602482015273105b1b1bd8d85d1a5bdb88195e1a185d5cdd195960621b604482015290519081900360640190fd5b6007546001600160a01b03166323b872dd610dc4610f50565b30866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6020811015610e4657600080fd5b5051610e94576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b600454610ea19082610f54565b6004819055506040518060600160405280428152602001848152602001600081525060086000610ecf610f50565b6001600160a01b031681526020808201929092526040908101600020835181559183015160018301559190910151600290910155610f0b610f50565b6001600160a01b03167f42e99fbad9601d25ee3bb515eeee966f97c3c383adadbe5720f651df8c18989d846040518082815260200191505060405180910390a2505050565b3390565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d8565b80516000908190610fa8904290610f54565b9050600154811115610fb957506001545b610c95600554610b2c62015180610b2c600254610b2689602001518861103d90919063ffffffff16565b600082820183811015610c95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261104c57506000610b32565b8282028284828161105957fe5b0414610c955760405162461bcd60e51b815260040180806020018281038252602181526020018061121c6021913960400191505060405180910390fd5b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061116f565b600081848411156111675760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112c578181015183820152602001611114565b50505050905090810190601f1680156111595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836111be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561112c578181015183820152602001611114565b5060008385816111ca57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122062aec3fa9d38a66e323dc39099aa5058f54615b1a7f7b6137afeb9868bc1baa864736f6c63430007010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80639ef3a261116100ad578063f2fde38b11610071578063f2fde38b14610241578063f4c0fab414610267578063f520e7e51461028d578063f993185514610295578063fb64884e146102bb57610121565b80639ef3a261146101ef578063c11f53441461020c578063cee83cee14610214578063d1af0c7d1461021c578063d2e875611461022457610121565b80636ef61092116100f45780636ef610921461018d57806372f702f3146101b35780637b0a47ee146101d757806388a17bde146101df5780638da5cb5b146101e757610121565b80630f1af35d146101265780631ec932ff146101455780632def66201461017d5780633ccfd60b14610185575b600080fd5b6101436004803603602081101561013c57600080fd5b50356102d8565b005b61016b6004803603602081101561015b57600080fd5b50356001600160a01b0316610587565b60408051918252519081900360200190f35b6101436105a2565b610143610887565b61016b600480360360208110156101a357600080fd5b50356001600160a01b0316610a2a565b6101bb610a48565b604080516001600160a01b039092168252519081900360200190f35b61016b610a57565b61016b610a5d565b6101bb610a63565b6101436004803603602081101561020557600080fd5b5035610a72565b61016b610ae1565b61016b610ae7565b6101bb610aed565b61016b6004803603602081101561023a57600080fd5b5035610afc565b6101436004803603602081101561025757600080fd5b50356001600160a01b0316610b38565b61016b6004803603602081101561027d57600080fd5b50356001600160a01b0316610c42565b61016b610c9c565b61016b600480360360208110156102ab57600080fd5b50356001600160a01b0316610ca2565b610143600480360360208110156102d157600080fd5b5035610cc0565b6102e0610f50565b6000546001600160a01b03908116911614610342576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60045481111561038e576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b600654604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b50511015610457576040805162461bcd60e51b815260206004820152601b60248201527f42616c616e6365206973206c657373207468616e20616d6f756e740000000000604482015290519081900360640190fd5b6006546001600160a01b031663a9059cbb610470610a63565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d60208110156104e157600080fd5b505161052c576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015290519081900360640190fd5b610534610a63565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a26004546105819082610f54565b60045550565b6001600160a01b031660009081526008602052604090205490565b6105aa6111d4565b600860006105b6610f50565b6001600160a01b031681526020808201929092526040908101600090812082516060810184528154815260018201549481018590526002909101549281019290925290925061060483610f96565b9050600061061b8261061585610afc565b90610f54565b90506000610636856040015184610f5490919063ffffffff16565b6004549091506106469083610fe3565b6004556006546001600160a01b031663a9059cbb610662610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b505050506040513d60208110156106d357600080fd5b5051610726576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e736665722072657761726420746f6b656e00604482015290519081900360640190fd5b6007546001600160a01b031663a9059cbb61073f610f50565b866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561078657600080fd5b505af115801561079a573d6000803e3d6000fd5b505050506040513d60208110156107b057600080fd5b5051610803576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572207374616b656420746f6b656e00604482015290519081900360640190fd5b6008600061080f610f50565b6001600160a01b03168152602081019190915260400160009081208181556001810182905560020155610840610f50565b6001600160a01b03167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd856040518082815260200191505060405180910390a25050505050565b600060086000610895610f50565b6001600160a01b031681526020810191909152604001600020600181015490915015610a275760028101546040805160608101825283548152600184015460208201529081018290526000916108ee9161061590610f96565b60028301549091506109009082610fe3565b60028301556006546001600160a01b031663a9059cbb61091e610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561096557600080fd5b505af1158015610979573d6000803e3d6000fd5b505050506040513d602081101561098f57600080fd5b50516109dd576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b6109e5610f50565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2505b50565b6001600160a01b031660009081526008602052604090206002015490565b6007546001600160a01b031681565b60025481565b60035481565b6000546001600160a01b031690565b610a7a610f50565b6000546001600160a01b03908116911614610adc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600255565b60055481565b60045481565b6006546001600160a01b031681565b6000610b32600554610b2c62015180610b2c600254610b266001548961103d90919063ffffffff16565b9061103d565b90611096565b92915050565b610b40610f50565b6000546001600160a01b03908116911614610ba2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610be75760405162461bcd60e51b81526004018080602001828103825260268152602001806111f66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4c6111d4565b506001600160a01b0382166000908152600860209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610c9581610f96565b9392505050565b60015481565b6001600160a01b031660009081526008602052604090206001015490565b60008111610d09576040805162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65207a65726f60781b604482015290519081900360640190fd5b600060086000610d17610f50565b6001600160a01b0316815260208101919091526040016000206001015490508015610d4457610d44610887565b610d4e8282610fe3565b91506000610d5b83610afc565b9050806004541015610dab576040805162461bcd60e51b8152602060048201526014602482015273105b1b1bd8d85d1a5bdb88195e1a185d5cdd195960621b604482015290519081900360640190fd5b6007546001600160a01b03166323b872dd610dc4610f50565b30866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6020811015610e4657600080fd5b5051610e94576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b600454610ea19082610f54565b6004819055506040518060600160405280428152602001848152602001600081525060086000610ecf610f50565b6001600160a01b031681526020808201929092526040908101600020835181559183015160018301559190910151600290910155610f0b610f50565b6001600160a01b03167f42e99fbad9601d25ee3bb515eeee966f97c3c383adadbe5720f651df8c18989d846040518082815260200191505060405180910390a2505050565b3390565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d8565b80516000908190610fa8904290610f54565b9050600154811115610fb957506001545b610c95600554610b2c62015180610b2c600254610b2689602001518861103d90919063ffffffff16565b600082820183811015610c95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261104c57506000610b32565b8282028284828161105957fe5b0414610c955760405162461bcd60e51b815260040180806020018281038252602181526020018061121c6021913960400191505060405180910390fd5b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061116f565b600081848411156111675760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112c578181015183820152602001611114565b50505050905090810190601f1680156111595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836111be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561112c578181015183820152602001611114565b5060008385816111ca57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122062aec3fa9d38a66e323dc39099aa5058f54615b1a7f7b6137afeb9868bc1baa864736f6c63430007010033
Deployed Bytecode Sourcemap
16630:4419:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19636:420;;;;;;;;;;;;;;;;-1:-1:-1;19636:420:0;;:::i;:::-;;17413:118;;;;;;;;;;;;;;;;-1:-1:-1;17413:118:0;-1:-1:-1;;;;;17413:118:0;;:::i;:::-;;;;;;;;;;;;;;;;18533:653;;;:::i;19198:426::-;;;:::i;17543:116::-;;;;;;;;;;;;;;;;-1:-1:-1;17543:116:0;-1:-1:-1;;;;;17543:116:0;;:::i;16929:26::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16929:26:0;;;;;;;;;;;;;;16751:32;;;:::i;16790:25::-;;;:::i;15933:79::-;;;:::i;20068:95::-;;;;;;;;;;;;;;;;-1:-1:-1;20068:95:0;;:::i;16859:30::-;;;:::i;16822:::-;;;:::i;16896:26::-;;;:::i;20685:171::-;;;;;;;;;;;;;;;;-1:-1:-1;20685:171:0;;:::i;16379:244::-;;;;;;;;;;;;;;;;-1:-1:-1;16379:244:0;-1:-1:-1;;;;;16379:244:0;;:::i;20175:149::-;;;;;;;;;;;;;;;;-1:-1:-1;20175:149:0;-1:-1:-1;;;;;20175:149:0;;:::i;16706:38::-;;;:::i;17671:116::-;;;;;;;;;;;;;;;;-1:-1:-1;17671:116:0;-1:-1:-1;;;;;17671:116:0;;:::i;17799:722::-;;;;;;;;;;;;;;;;-1:-1:-1;17799:722:0;;:::i;19636:420::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19726:15:::1;;19715:7;:26;;19707:57;;;::::0;;-1:-1:-1;;;19707:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19707:57:0;;;;;;;;;;;;;::::1;;19783:12;::::0;:37:::1;::::0;;-1:-1:-1;;;19783:37:0;;19814:4:::1;19783:37;::::0;::::1;::::0;;;19824:7;;-1:-1:-1;;;;;19783:12:0::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:12;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19783:37:0;:48:::1;;19775:88;;;::::0;;-1:-1:-1;;;19775:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19882:12;::::0;-1:-1:-1;;;;;19882:12:0::1;:21;19904:7;:5;:7::i;:::-;19913;19882:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;19882:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19882:39:0;19874:73:::1;;;::::0;;-1:-1:-1;;;19874:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19874:73:0;;;;;;;;;;;;;::::1;;19974:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;19963:28:0::1;;19983:7;19963:28;;;;;;;;;;;;;;;;;;20020:15;::::0;:28:::1;::::0;20040:7;20020:19:::1;:28::i;:::-;20002:15;:46:::0;-1:-1:-1;19636:420:0:o;17413:118::-;-1:-1:-1;;;;;17499:14:0;17472:7;17499:14;;;:6;:14;;;;;:24;;17413:118::o;18533:653::-;18570:18;;:::i;:::-;18591:6;:20;18598:12;:10;:12::i;:::-;-1:-1:-1;;;;;18591:20:0;;;;;;;;;;;;;;;-1:-1:-1;18591:20:0;;;18570:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18683:15:0;18570:41;18683:8;:15::i;:::-;18662:36;;18709:14;18726:38;18753:10;18726:22;18741:6;18726:14;:22::i;:::-;:26;;:38::i;:::-;18709:55;;18775:19;18797:31;18812:5;:15;;;18797:10;:14;;:31;;;;:::i;:::-;18857:15;;18775:53;;-1:-1:-1;18857:27:0;;18877:6;18857:19;:27::i;:::-;18839:15;:45;18903:12;;-1:-1:-1;;;;;18903:12:0;:21;18925:12;:10;:12::i;:::-;18939:11;18903:48;;;;;;;;;;;;;-1:-1:-1;;;;;18903:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18903:48:0;18895:92;;;;;-1:-1:-1;;;18895:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19006:12;;-1:-1:-1;;;;;19006:12:0;:21;19028:12;:10;:12::i;:::-;19042:6;19006:43;;;;;;;;;;;;;-1:-1:-1;;;;;19006:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19006:43:0;18998:87;;;;;-1:-1:-1;;;18998:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19113:6;:20;19120:12;:10;:12::i;:::-;-1:-1:-1;;;;;19113:20:0;;;;;;;;;;;;-1:-1:-1;19113:20:0;;;19106:27;;;;;;;;;;;;19157:12;:10;:12::i;:::-;-1:-1:-1;;;;;19149:29:0;;19171:6;19149:29;;;;;;;;;;;;;;;;;;18533:653;;;;;:::o;19198:426::-;19236:19;19258:6;:20;19265:12;:10;:12::i;:::-;-1:-1:-1;;;;;19258:20:0;;;;;;;;;;;;-1:-1:-1;19258:20:0;19293:12;;;;19258:20;;-1:-1:-1;19293:16:0;19289:328;;19367:15;;;;19347;;;;;;;;;;;;;;;;;;;;;;;;;;19326:18;;19347:36;;:15;;:8;:15::i;:36::-;19416:15;;;;19326:57;;-1:-1:-1;19416:31:0;;19326:57;19416:19;:31::i;:::-;19398:15;;;:49;19470:12;;-1:-1:-1;;;;;19470:12:0;:21;19492:12;:10;:12::i;:::-;19506:10;19470:47;;;;;;;;;;;;;-1:-1:-1;;;;;19470:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19470:47:0;19462:84;;;;;-1:-1:-1;;;19462:84:0;;;;;;;;;;;;-1:-1:-1;;;19462:84:0;;;;;;;;;;;;;;;19577:12;:10;:12::i;:::-;-1:-1:-1;;;;;19566:36:0;;19591:10;19566:36;;;;;;;;;;;;;;;;;;19289:328;;19198:426;:::o;17543:116::-;-1:-1:-1;;;;;17627:14:0;17600:7;17627:14;;;:6;:14;;;;;:24;;;;17543:116::o;16929:26::-;;;-1:-1:-1;;;;;16929:26:0;;:::o;16751:32::-;;;;:::o;16790:25::-;;;;:::o;15933:79::-;15971:7;15998:6;-1:-1:-1;;;;;15998:6:0;15933:79;:::o;20068:95::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20137:10:::1;:18:::0;20068:95::o;16859:30::-;;;;:::o;16822:::-;;;;:::o;16896:26::-;;;-1:-1:-1;;;;;16896:26:0;;:::o;20685:171::-;20746:7;20773:75;20832:15;;20773:54;20821:5;20773:43;20805:10;;20773:27;20785:14;;20773:7;:11;;:27;;;;:::i;:::-;:31;;:43::i;:::-;:47;;:54::i;:75::-;20766:82;20685:171;-1:-1:-1;;20685:171:0:o;16379:244::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16468:22:0;::::1;16460:73;;;;-1:-1:-1::0;;;16460:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16570:6;::::0;;16549:38:::1;::::0;-1:-1:-1;;;;;16549:38:0;;::::1;::::0;16570:6;::::1;::::0;16549:38:::1;::::0;::::1;16598:6;:17:::0;;-1:-1:-1;;;;;;16598:17:0::1;-1:-1:-1::0;;;;;16598:17:0;;;::::1;::::0;;;::::1;::::0;;16379:244::o;20175:149::-;20228:7;20248:18;;:::i;:::-;-1:-1:-1;;;;;;20269:14:0;;;;;;:6;:14;;;;;;;;;20248:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20301:15;20248:35;20301:8;:15::i;:::-;20294:22;20175:149;-1:-1:-1;;;20175:149:0:o;16706:38::-;;;;:::o;17671:116::-;-1:-1:-1;;;;;17758:14:0;17731:7;17758:14;;;:6;:14;;;;;:21;;;;17671:116::o;17799:722::-;17870:1;17860:7;:11;17852:41;;;;;-1:-1:-1;;;17852:41:0;;;;;;;;;;;;-1:-1:-1;;;17852:41:0;;;;;;;;;;;;;;;17904:18;17925:6;:20;17932:12;:10;:12::i;:::-;-1:-1:-1;;;;;17925:20:0;;;;;;;;;;;;-1:-1:-1;17925:20:0;:27;;;;-1:-1:-1;17977:14:0;;17973:57;;18008:10;:8;:10::i;:::-;18050:23;:7;18062:10;18050:11;:23::i;:::-;18040:33;;18084:16;18103:23;18118:7;18103:14;:23::i;:::-;18084:42;;18164:8;18145:15;;:27;;18137:60;;;;;-1:-1:-1;;;18137:60:0;;;;;;;;;;;;-1:-1:-1;;;18137:60:0;;;;;;;;;;;;;;;18216:12;;-1:-1:-1;;;;;18216:12:0;:25;18242:12;:10;:12::i;:::-;18264:4;18271:7;18216:63;;;;;;;;;;;;;-1:-1:-1;;;;;18216:63:0;;;;;;-1:-1:-1;;;;;18216:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18216:63:0;18208:100;;;;;-1:-1:-1;;;18208:100:0;;;;;;;;;;;;-1:-1:-1;;;18208:100:0;;;;;;;;;;;;;;;18337:15;;:29;;18357:8;18337:19;:29::i;:::-;18319:15;:47;;;;18400:66;;;;;;;;18418:15;18400:66;;;;18443:7;18400:66;;;;18463:1;18400:66;;;18377:6;:20;18384:12;:10;:12::i;:::-;-1:-1:-1;;;;;18377:20:0;;;;;;;;;;;;;;;-1:-1:-1;18377:20:0;:89;;;;;;;;;;;;;;;;;;;;;;18491:12;:10;:12::i;:::-;-1:-1:-1;;;;;18482:31:0;;18505:7;18482:31;;;;;;;;;;;;;;;;;;17799:722;;;:::o;14582:106::-;14670:10;14582:106;:::o;1364:136::-;1422:7;1449:43;1453:1;1456;1449:43;;;;;;;;;;;;;;;;;:3;:43::i;20342:331::-;20462:16;;20403:7;;;;20442:37;;:15;;:19;:37::i;:::-;20423:56;;20505:14;;20494:8;:25;20490:83;;;-1:-1:-1;20547:14:0;;20490:83;20590:75;20649:15;;20590:54;20638:5;20590:43;20622:10;;20590:27;20603:6;:13;;;20590:8;:12;;:27;;;;:::i;900:181::-;958:7;990:5;;;1014:6;;;;1006:46;;;;;-1:-1:-1;;;1006:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:471;2312:7;2557:6;2553:47;;-1:-1:-1;2587:1:0;2580:8;;2553:47;2624:5;;;2628:1;2624;:5;:1;2648:5;;;;;:10;2640:56;;;;-1:-1:-1;;;2640:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3201:132;3259:7;3286:39;3290:1;3293;3286:39;;;;;;;;;;;;;;;;;:3;:39::i;1803:192::-;1889:7;1925:12;1917:6;;;;1909:29;;;;-1:-1:-1;;;1909:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1961:5:0;;;1803:192::o;3829:278::-;3915:7;3950:12;3943:5;3935:28;;;;-1:-1:-1;;;3935:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3974:9;3990:1;3986;:5;;;;;;;3829:278;-1:-1:-1;;;;;3829:278:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://62aec3fa9d38a66e323dc39099aa5058f54615b1a7f7b6137afeb9868bc1baa8
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.