More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 48 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 16867436 | 683 days ago | IN | 0 ETH | 0.00094427 | ||||
Withdraw | 16866224 | 683 days ago | IN | 0 ETH | 0.00206553 | ||||
Withdraw | 16865202 | 683 days ago | IN | 0 ETH | 0.00213751 | ||||
Withdraw | 16863412 | 684 days ago | IN | 0 ETH | 0.00431274 | ||||
Withdraw | 16863408 | 684 days ago | IN | 0 ETH | 0.00570691 | ||||
Emergency Reward... | 16863362 | 684 days ago | IN | 0 ETH | 0.00533572 | ||||
Emergency Reward... | 16863353 | 684 days ago | IN | 0 ETH | 0.00105794 | ||||
Emergency Reward... | 16863340 | 684 days ago | IN | 0 ETH | 0.00152346 | ||||
Withdraw | 16862878 | 684 days ago | IN | 0 ETH | 0.00766726 | ||||
Withdraw | 16862687 | 684 days ago | IN | 0 ETH | 0.00195035 | ||||
Withdraw | 16862653 | 684 days ago | IN | 0 ETH | 0.00216039 | ||||
Withdraw | 16862344 | 684 days ago | IN | 0 ETH | 0.00147695 | ||||
Withdraw | 16862285 | 684 days ago | IN | 0 ETH | 0.00165988 | ||||
Update Exit Pena... | 16862152 | 684 days ago | IN | 0 ETH | 0.00035713 | ||||
Deposit | 16862052 | 684 days ago | IN | 0 ETH | 0.00108188 | ||||
Withdraw | 16862051 | 684 days ago | IN | 0 ETH | 0.0014033 | ||||
Withdraw | 16862050 | 684 days ago | IN | 0 ETH | 0.00142802 | ||||
Compound | 16808975 | 691 days ago | IN | 0 ETH | 0.00124792 | ||||
Compound | 16791624 | 694 days ago | IN | 0 ETH | 0.00157217 | ||||
Deposit | 16790290 | 694 days ago | IN | 0 ETH | 0.00745578 | ||||
Compound | 16730157 | 702 days ago | IN | 0 ETH | 0.0012809 | ||||
Deposit | 16715739 | 704 days ago | IN | 0 ETH | 0.00428246 | ||||
Withdraw | 16715735 | 704 days ago | IN | 0 ETH | 0.00311262 | ||||
Compound | 16715729 | 704 days ago | IN | 0 ETH | 0.00144469 | ||||
Compound | 16710790 | 705 days ago | IN | 0 ETH | 0.00120338 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
pKINA
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-01 */ //SPDX-License-Identifier: MIT pragma solidity 0.8.16; //import "@nomiclabs/buidler/console.sol"; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() {} function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view 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 Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } /** * @title SafeBEP20 * @dev Wrappers around BEP20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeBEP20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeBEP20: decreased allowance below zero' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IBEP20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed'); } } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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); } } } } abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract pKINA is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeBEP20 for IBEP20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } // Info of each pool. struct PoolInfo { IBEP20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. Tokens to distribute per block. uint256 lastRewardTimestamp; // Last block number that Tokens distribution occurs. uint256 accTokensPerShare; // Accumulated Tokens per share, times 1e12. See below. } IBEP20 public immutable stakingToken; IBEP20 public immutable rewardToken; mapping (address => uint256) public holderUnlockTime; uint256 public totalStaked; uint256 public apr; uint256 public lockDuration; uint256 public exitPenaltyPerc; bool public canCompoundOrStakeMore; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping (address => UserInfo) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 private totalAllocPoint = 0; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event Compound(address indexed user); event EmergencyWithdraw(address indexed user, uint256 amount); constructor(address _tokenAddress, uint256 _apr, uint256 _lockDurationInDays, uint256 _exitPenaltyPerc, bool _canCompoundOrStakeMore) { stakingToken = IBEP20(_tokenAddress); rewardToken = IBEP20(_tokenAddress); canCompoundOrStakeMore = _canCompoundOrStakeMore; apr = _apr; lockDuration = _lockDurationInDays * 1 days; exitPenaltyPerc = _exitPenaltyPerc; // staking pool poolInfo.push(PoolInfo({ lpToken: stakingToken, allocPoint: 1000, lastRewardTimestamp: 99999999999, accTokensPerShare: 0 })); totalAllocPoint = 1000; } function stopReward() external onlyOwner { updatePool(0); apr = 0; } function startReward() external onlyOwner { require(poolInfo[0].lastRewardTimestamp == 99999999999, "Can only start rewards once"); poolInfo[0].lastRewardTimestamp = block.timestamp; } // View function to see pending Reward on frontend. function pendingReward(address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[_user]; if(pool.lastRewardTimestamp == 99999999999){ return 0; } uint256 accTokensPerShare = pool.accTokensPerShare; uint256 lpSupply = totalStaked; if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) { uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint); accTokensPerShare = accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accTokensPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lpSupply = totalStaked; if (lpSupply == 0) { pool.lastRewardTimestamp = block.timestamp; return; } uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint); pool.accTokensPerShare = pool.accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply)); pool.lastRewardTimestamp = block.timestamp; } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public onlyOwner { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Stake primary tokens function deposit(uint256 _amount) external nonReentrant { if(holderUnlockTime[msg.sender] == 0){ holderUnlockTime[msg.sender] = block.timestamp + lockDuration; } PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; if(!canCompoundOrStakeMore && _amount > 0){ require(user.amount == 0, "Cannot stake more"); } updatePool(0); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); rewardToken.safeTransfer(address(msg.sender), pending); } } uint256 amountTransferred = 0; if(_amount > 0) { uint256 initialBalance = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); amountTransferred = pool.lpToken.balanceOf(address(this)) - initialBalance; user.amount = user.amount.add(amountTransferred); totalStaked += amountTransferred; } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); emit Deposit(msg.sender, _amount); } function compound() external nonReentrant { require(canCompoundOrStakeMore, "Cannot compound"); PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; updatePool(0); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); user.amount += pending; totalStaked += pending; } } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); emit Compound(msg.sender); } // Withdraw primary tokens from STAKING. function withdraw() external nonReentrant { require(holderUnlockTime[msg.sender] <= block.timestamp, "May not do normal withdraw early"); PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; uint256 _amount = user.amount; updatePool(0); uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0){ require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); rewardToken.safeTransfer(address(msg.sender), pending); } if(_amount > 0) { user.amount = 0; totalStaked -= _amount; pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); if(user.amount > 0){ holderUnlockTime[msg.sender] = block.timestamp + lockDuration; } else { holderUnlockTime[msg.sender] = 0; } emit Withdraw(msg.sender, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw() external nonReentrant { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; uint256 _amount = user.amount; totalStaked -= _amount; // exit penalty for early unstakers, penalty held on contract as rewards. if(holderUnlockTime[msg.sender] >= block.timestamp){ _amount -= _amount * exitPenaltyPerc / 100; } holderUnlockTime[msg.sender] = 0; pool.lpToken.safeTransfer(address(msg.sender), _amount); user.amount = 0; user.rewardDebt = 0; emit EmergencyWithdraw(msg.sender, _amount); } // Withdraw reward. EMERGENCY ONLY. This allows the owner to migrate rewards to a new staking pool since we are not minting new tokens. function emergencyRewardWithdraw(uint256 _amount) external onlyOwner { require(_amount <= rewardToken.balanceOf(address(this)) - totalStaked, 'not enough tokens to take out'); rewardToken.safeTransfer(address(msg.sender), _amount); } function calculateNewRewards() public view returns (uint256) { PoolInfo storage pool = poolInfo[0]; if(pool.lastRewardTimestamp > block.timestamp){ return 0; } return (((block.timestamp - pool.lastRewardTimestamp) * totalStaked) * apr / 100 / 365 days); } function rewardsRemaining() public view returns (uint256){ if(rewardToken == stakingToken){ return rewardToken.balanceOf(address(this)) - totalStaked; } else { return rewardToken.balanceOf(address(this)); } } function updateApr(uint256 newApr) external onlyOwner { require(newApr <= 10000, "APR must be below 10000%"); updatePool(0); apr = newApr; } function updateLockDuration(uint256 daysForLock) external onlyOwner { require(daysForLock <= 365, "Lock must be 365 days or less."); lockDuration = daysForLock * 1 days; } function updateExitPenalty(uint256 newPenaltyPerc) external onlyOwner { require(newPenaltyPerc <= 20, "May not set higher than 20%"); exitPenaltyPerc = newPenaltyPerc; } function updateCanCompoundOrStakeMore(bool compoundEnabled) external onlyOwner { canCompoundOrStakeMore = compoundEnabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_apr","type":"uint256"},{"internalType":"uint256","name":"_lockDurationInDays","type":"uint256"},{"internalType":"uint256","name":"_exitPenaltyPerc","type":"uint256"},{"internalType":"bool","name":"_canCompoundOrStakeMore","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateNewRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canCompoundOrStakeMore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitPenaltyPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accTokensPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newApr","type":"uint256"}],"name":"updateApr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"compoundEnabled","type":"bool"}],"name":"updateCanCompoundOrStakeMore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPenaltyPerc","type":"uint256"}],"name":"updateExitPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"daysForLock","type":"uint256"}],"name":"updateLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000600a553480156200001657600080fd5b5060405162001fdc38038062001fdc8339810160408190526200003991620001ba565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b038516608081905260a0526007805460ff19168215151790556004849055620000b2836201518062000226565b6005555060065550506040805160808082018352516001600160a01b0390811682526103e86020830181815264174876e7ff94840194855260006060850181815260088054600181018255925294517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600490920291820180546001600160a01b0319169190951617909355517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015592517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee690910155600a555062000254565b600080600080600060a08688031215620001d357600080fd5b85516001600160a01b0381168114620001eb57600080fd5b80955050602086015193506040860151925060608601519150608086015180151581146200021857600080fd5b809150509295509295909350565b60008160001904831182151516156200024f57634e487b7160e01b600052601160045260246000fd5b500290565b60805160a051611d2a620002b2600039600081816103ed015281816104db015281816105b40152818161071f015281816109de01528181610a2301528181610aba0152610e640152600081816102c901526109b40152611d2a6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806380dc0672116100f9578063b6b55f2511610097578063f2fde38b11610071578063f2fde38b146103ba578063f40f0f52146103cd578063f69e2046146103e0578063f7c618c1146103e857600080fd5b8063b6b55f251461038c578063d477edf41461039f578063db2e21bc146103b257600080fd5b80638da5cb5b116100d35780638da5cb5b146103405780638e0b019814610351578063999e2f7514610364578063a913a5f71461036c57600080fd5b806380dc06721461031c578063817b1cd2146103245780638552bf901461032d57600080fd5b8063630b5ba11161016657806372f702f31161014057806372f702f3146102c4578063746c8ae11461030357806378c196f31461030b5780637b280def1461031357600080fd5b8063630b5ba11461029757806368365d031461029f578063715018a6146102bc57600080fd5b80631959a002116101a25780631959a002146102375780633279beab146102735780633ccfd60b1461028657806357ded9c91461028e57600080fd5b806304554443146101c95780630698260f146101e55780631526fe27146101fa575b600080fd5b6101d260055481565b6040519081526020015b60405180910390f35b6101f86101f3366004611a76565b61040f565b005b61020d610208366004611a93565b610455565b604080516001600160a01b03909516855260208501939093529183015260608201526080016101dc565b61025e610245366004611aac565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016101dc565b6101f8610281366004611a93565b610499565b6101f86105de565b6101d260045481565b6101f8610818565b6007546102ac9060ff1681565b60405190151581526020016101dc565b6101f861086d565b6102eb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101dc565b6101f86108e1565b6101d26109b0565b6101d260065481565b6101f8610b2d565b6101d260035481565b6101f861033b366004611a93565b610b68565b6000546001600160a01b03166102eb565b6101f861035f366004611a93565b610bf3565b6101d2610c73565b6101d261037a366004611aac565b60026020526000908152604090205481565b6101f861039a366004611a93565b610cf9565b6101f86103ad366004611a93565b61100f565b6101f861109e565b6101f86103c8366004611aac565b6111c9565b6101d26103db366004611aac565b6111fc565b6101f86112eb565b6102eb7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146104425760405162461bcd60e51b815260040161043990611ad5565b60405180910390fd5b6007805460ff1916911515919091179055565b6008818154811061046557600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6000546001600160a01b031633146104c35760405162461bcd60e51b815260040161043990611ad5565b6003546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e9190611b0a565b6105589190611b39565b8111156105a75760405162461bcd60e51b815260206004820152601d60248201527f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f75740000006044820152606401610439565b6105db6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611480565b50565b6002600154036106005760405162461bcd60e51b815260040161043990611b4c565b6002600181905533600090815260209190915260409020544210156106675760405162461bcd60e51b815260206004820181905260248201527f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c796044820152606401610439565b6000600860008154811061067d5761067d611b83565b60009182526020808320338452600990915260408320805460049093029091019350916106a9906114e8565b60006106e383600101546106dd64e8d4a510006106d78860030154886000015461157f90919063ffffffff16565b9061160a565b9061164c565b90508015610746576106f36109b0565b8111156107125760405162461bcd60e51b815260040161043990611b99565b6107466001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611480565b811561077e57600080845560038054849290610763908490611b39565b9091555050835461077e906001600160a01b03163384611480565b600384015483546107999164e8d4a51000916106d79161157f565b60018401558254156107c7576005546107b29042611bf7565b336000908152600260205260409020556107d8565b336000908152600260205260408120555b60405182815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906020015b60405180910390a25050600180555050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260040161043990611ad5565b60085460005b8181101561086957610859816114e8565b61086281611c0a565b9050610848565b5050565b6000546001600160a01b031633146108975760405162461bcd60e51b815260040161043990611ad5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461090b5760405162461bcd60e51b815260040161043990611ad5565b600860008154811061091f5761091f611b83565b90600052602060002090600402016002015464174876e7ff146109845760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c792073746172742072657761726473206f6e636500000000006044820152606401610439565b42600860008154811061099957610999611b83565b906000526020600020906004020160020181905550565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603610aa5576003546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a969190611b0a565b610aa09190611b39565b905090565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190611b0a565b6000546001600160a01b03163314610b575760405162461bcd60e51b815260040161043990611ad5565b610b6160006114e8565b6000600455565b6000546001600160a01b03163314610b925760405162461bcd60e51b815260040161043990611ad5565b612710811115610be45760405162461bcd60e51b815260206004820152601860248201527f415052206d7573742062652062656c6f772031303030302500000000000000006044820152606401610439565b610bee60006114e8565b600455565b6000546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161043990611ad5565b6014811115610c6e5760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f742073657420686967686572207468616e2032302500000000006044820152606401610439565b600655565b6000806008600081548110610c8a57610c8a611b83565b906000526020600020906004020190504281600201541115610cae57600091505090565b6301e133806064600454600354846002015442610ccb9190611b39565b610cd59190611c23565b610cdf9190611c23565b610ce99190611c42565b610cf39190611c42565b91505090565b600260015403610d1b5760405162461bcd60e51b815260040161043990611b4c565b6002600181905533600090815260209190915260408120549003610d5757600554610d469042611bf7565b336000908152600260205260409020555b60006008600081548110610d6d57610d6d611b83565b60009182526020808320338452600990915260409092206007546004909202909201925060ff16158015610da15750600083115b15610de957805415610de95760405162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65206d6f726560781b6044820152606401610439565b610df360006114e8565b805415610e8d576000610e2882600101546106dd64e8d4a510006106d78760030154876000015461157f90919063ffffffff16565b90508015610e8b57610e386109b0565b811115610e575760405162461bcd60e51b815260040161043990611b99565b610e8b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383611480565b505b60008315610fbd5782546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190611b0a565b8454909150610f1b906001600160a01b031633308861168e565b83546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190611b0a565b610f909190611b39565b8354909250610f9f90836116cc565b835560038054839190600090610fb6908490611bf7565b9091555050505b60038301548254610fd89164e8d4a51000916106d79161157f565b600183015560405184815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c90602001610806565b6000546001600160a01b031633146110395760405162461bcd60e51b815260040161043990611ad5565b61016d81111561108b5760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b206d757374206265203336352064617973206f72206c6573732e00006044820152606401610439565b6110988162015180611c23565b60055550565b6002600154036110c05760405162461bcd60e51b815260040161043990611b4c565b6002600181905550600060086000815481106110de576110de611b83565b60009182526020808320338452600990915260408320805460038054600490950290930195509093909283929190611117908490611b39565b9091555050336000908152600260205260409020544211611159576064600654826111429190611c23565b61114c9190611c42565b6111569082611b39565b90505b336000818152600260205260408120558354611181916001600160a01b039091169083611480565b6000808355600183015560405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200160405180910390a250506001805550565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161043990611ad5565b6105db8161172b565b600080600860008154811061121357611213611b83565b600091825260208083206001600160a01b038716845260099091526040909220600260049092029092019081015490925064174876e7ff03611259575060009392505050565b600380830154905460028401544211801561127357508015155b156112b9576000611296600a546106d78760010154611290610c73565b9061157f565b90506112b56112ae836106d78464e8d4a5100061157f565b84906116cc565b9250505b6112e183600101546106dd64e8d4a510006106d786886000015461157f90919063ffffffff16565b9695505050505050565b60026001540361130d5760405162461bcd60e51b815260040161043990611b4c565b600260015560075460ff166113565760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd0818dbdb5c1bdd5b99608a1b6044820152606401610439565b6000600860008154811061136c5761136c611b83565b60009182526020808320338452600990915260408320600490920201925090611394906114e8565b80541561142d5760006113c982600101546106dd64e8d4a510006106d78760030154876000015461157f90919063ffffffff16565b9050801561142b576113d96109b0565b8111156113f85760405162461bcd60e51b815260040161043990611b99565b8082600001600082825461140c9190611bf7565b9250508190555080600360008282546114259190611bf7565b90915550505b505b600382015481546114489164e8d4a51000916106d79161157f565b600182015560405133907fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa190600090a2505060018055565b6040516001600160a01b0383166024820152604481018290526114e390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117eb565b505050565b6000600882815481106114fd576114fd611b83565b906000526020600020906004020190508060020154421161151c575050565b600354600081900361153357504260029091015550565b600061154b600a546106d78560010154611290610c73565b905061156e611563836106d78464e8d4a5100061157f565b6003850154906116cc565b600384015550504260029091015550565b60008260000361159157506000611604565b600061159d8385611c23565b9050826115aa8583611c42565b146116015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610439565b90505b92915050565b600061160183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118bd565b600061160183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f4565b6040516001600160a01b03808516602483015283166044820152606481018290526116c69085906323b872dd60e01b906084016114ac565b50505050565b6000806116d98385611bf7565b9050838110156116015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610439565b6001600160a01b0381166117905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610439565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611840826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119259092919063ffffffff16565b8051909150156114e3578080602001905181019061185e9190611c64565b6114e35760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610439565b600081836118de5760405162461bcd60e51b81526004016104399190611ca5565b5060006118eb8486611c42565b95945050505050565b600081848411156119185760405162461bcd60e51b81526004016104399190611ca5565b5060006118eb8486611b39565b6060611934848460008561193c565b949350505050565b606061194785611a2f565b6119935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610439565b600080866001600160a01b031685876040516119af9190611cd8565b60006040518083038185875af1925050503d80600081146119ec576040519150601f19603f3d011682016040523d82523d6000602084013e6119f1565b606091505b50915091508115611a055791506119349050565b805115611a155780518082602001fd5b8360405162461bcd60e51b81526004016104399190611ca5565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611934575050151592915050565b80151581146105db57600080fd5b600060208284031215611a8857600080fd5b813561160181611a68565b600060208284031215611aa557600080fd5b5035919050565b600060208284031215611abe57600080fd5b81356001600160a01b038116811461160157600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b1c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561160457611604611b23565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b602080825260409082018190527f43616e6e6f74207769746864726177206f746865722070656f706c6527732073908201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e606082015260800190565b8082018082111561160457611604611b23565b600060018201611c1c57611c1c611b23565b5060010190565b6000816000190483118215151615611c3d57611c3d611b23565b500290565b600082611c5f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611c7657600080fd5b815161160181611a68565b60005b83811015611c9c578181015183820152602001611c84565b50506000910152565b6020815260008251806020840152611cc4816040850160208701611c81565b601f01601f19169190910160400192915050565b60008251611cea818460208701611c81565b919091019291505056fea264697066735822122045e32abf7b89dceebe7370b4d297952aeab0b1a9355d225f2b739e727a65e67c64736f6c6343000810003300000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806380dc0672116100f9578063b6b55f2511610097578063f2fde38b11610071578063f2fde38b146103ba578063f40f0f52146103cd578063f69e2046146103e0578063f7c618c1146103e857600080fd5b8063b6b55f251461038c578063d477edf41461039f578063db2e21bc146103b257600080fd5b80638da5cb5b116100d35780638da5cb5b146103405780638e0b019814610351578063999e2f7514610364578063a913a5f71461036c57600080fd5b806380dc06721461031c578063817b1cd2146103245780638552bf901461032d57600080fd5b8063630b5ba11161016657806372f702f31161014057806372f702f3146102c4578063746c8ae11461030357806378c196f31461030b5780637b280def1461031357600080fd5b8063630b5ba11461029757806368365d031461029f578063715018a6146102bc57600080fd5b80631959a002116101a25780631959a002146102375780633279beab146102735780633ccfd60b1461028657806357ded9c91461028e57600080fd5b806304554443146101c95780630698260f146101e55780631526fe27146101fa575b600080fd5b6101d260055481565b6040519081526020015b60405180910390f35b6101f86101f3366004611a76565b61040f565b005b61020d610208366004611a93565b610455565b604080516001600160a01b03909516855260208501939093529183015260608201526080016101dc565b61025e610245366004611aac565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016101dc565b6101f8610281366004611a93565b610499565b6101f86105de565b6101d260045481565b6101f8610818565b6007546102ac9060ff1681565b60405190151581526020016101dc565b6101f861086d565b6102eb7f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa81565b6040516001600160a01b0390911681526020016101dc565b6101f86108e1565b6101d26109b0565b6101d260065481565b6101f8610b2d565b6101d260035481565b6101f861033b366004611a93565b610b68565b6000546001600160a01b03166102eb565b6101f861035f366004611a93565b610bf3565b6101d2610c73565b6101d261037a366004611aac565b60026020526000908152604090205481565b6101f861039a366004611a93565b610cf9565b6101f86103ad366004611a93565b61100f565b6101f861109e565b6101f86103c8366004611aac565b6111c9565b6101d26103db366004611aac565b6111fc565b6101f86112eb565b6102eb7f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa81565b6000546001600160a01b031633146104425760405162461bcd60e51b815260040161043990611ad5565b60405180910390fd5b6007805460ff1916911515919091179055565b6008818154811061046557600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6000546001600160a01b031633146104c35760405162461bcd60e51b815260040161043990611ad5565b6003546040516370a0823160e01b81523060048201527f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa6001600160a01b0316906370a0823190602401602060405180830381865afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e9190611b0a565b6105589190611b39565b8111156105a75760405162461bcd60e51b815260206004820152601d60248201527f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f75740000006044820152606401610439565b6105db6001600160a01b037f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa163383611480565b50565b6002600154036106005760405162461bcd60e51b815260040161043990611b4c565b6002600181905533600090815260209190915260409020544210156106675760405162461bcd60e51b815260206004820181905260248201527f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c796044820152606401610439565b6000600860008154811061067d5761067d611b83565b60009182526020808320338452600990915260408320805460049093029091019350916106a9906114e8565b60006106e383600101546106dd64e8d4a510006106d78860030154886000015461157f90919063ffffffff16565b9061160a565b9061164c565b90508015610746576106f36109b0565b8111156107125760405162461bcd60e51b815260040161043990611b99565b6107466001600160a01b037f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa163383611480565b811561077e57600080845560038054849290610763908490611b39565b9091555050835461077e906001600160a01b03163384611480565b600384015483546107999164e8d4a51000916106d79161157f565b60018401558254156107c7576005546107b29042611bf7565b336000908152600260205260409020556107d8565b336000908152600260205260408120555b60405182815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906020015b60405180910390a25050600180555050565b6000546001600160a01b031633146108425760405162461bcd60e51b815260040161043990611ad5565b60085460005b8181101561086957610859816114e8565b61086281611c0a565b9050610848565b5050565b6000546001600160a01b031633146108975760405162461bcd60e51b815260040161043990611ad5565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461090b5760405162461bcd60e51b815260040161043990611ad5565b600860008154811061091f5761091f611b83565b90600052602060002090600402016002015464174876e7ff146109845760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c792073746172742072657761726473206f6e636500000000006044820152606401610439565b42600860008154811061099957610999611b83565b906000526020600020906004020160020181905550565b60007f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa6001600160a01b03167f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa6001600160a01b031603610aa5576003546040516370a0823160e01b81523060048201527f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa6001600160a01b0316906370a0823190602401602060405180830381865afa158015610a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a969190611b0a565b610aa09190611b39565b905090565b6040516370a0823160e01b81523060048201527f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa6001600160a01b0316906370a0823190602401602060405180830381865afa158015610b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190611b0a565b6000546001600160a01b03163314610b575760405162461bcd60e51b815260040161043990611ad5565b610b6160006114e8565b6000600455565b6000546001600160a01b03163314610b925760405162461bcd60e51b815260040161043990611ad5565b612710811115610be45760405162461bcd60e51b815260206004820152601860248201527f415052206d7573742062652062656c6f772031303030302500000000000000006044820152606401610439565b610bee60006114e8565b600455565b6000546001600160a01b03163314610c1d5760405162461bcd60e51b815260040161043990611ad5565b6014811115610c6e5760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f742073657420686967686572207468616e2032302500000000006044820152606401610439565b600655565b6000806008600081548110610c8a57610c8a611b83565b906000526020600020906004020190504281600201541115610cae57600091505090565b6301e133806064600454600354846002015442610ccb9190611b39565b610cd59190611c23565b610cdf9190611c23565b610ce99190611c42565b610cf39190611c42565b91505090565b600260015403610d1b5760405162461bcd60e51b815260040161043990611b4c565b6002600181905533600090815260209190915260408120549003610d5757600554610d469042611bf7565b336000908152600260205260409020555b60006008600081548110610d6d57610d6d611b83565b60009182526020808320338452600990915260409092206007546004909202909201925060ff16158015610da15750600083115b15610de957805415610de95760405162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65206d6f726560781b6044820152606401610439565b610df360006114e8565b805415610e8d576000610e2882600101546106dd64e8d4a510006106d78760030154876000015461157f90919063ffffffff16565b90508015610e8b57610e386109b0565b811115610e575760405162461bcd60e51b815260040161043990611b99565b610e8b6001600160a01b037f00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa163383611480565b505b60008315610fbd5782546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190611b0a565b8454909150610f1b906001600160a01b031633308861168e565b83546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f869190611b0a565b610f909190611b39565b8354909250610f9f90836116cc565b835560038054839190600090610fb6908490611bf7565b9091555050505b60038301548254610fd89164e8d4a51000916106d79161157f565b600183015560405184815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c90602001610806565b6000546001600160a01b031633146110395760405162461bcd60e51b815260040161043990611ad5565b61016d81111561108b5760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b206d757374206265203336352064617973206f72206c6573732e00006044820152606401610439565b6110988162015180611c23565b60055550565b6002600154036110c05760405162461bcd60e51b815260040161043990611b4c565b6002600181905550600060086000815481106110de576110de611b83565b60009182526020808320338452600990915260408320805460038054600490950290930195509093909283929190611117908490611b39565b9091555050336000908152600260205260409020544211611159576064600654826111429190611c23565b61114c9190611c42565b6111569082611b39565b90505b336000818152600260205260408120558354611181916001600160a01b039091169083611480565b6000808355600183015560405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200160405180910390a250506001805550565b6000546001600160a01b031633146111f35760405162461bcd60e51b815260040161043990611ad5565b6105db8161172b565b600080600860008154811061121357611213611b83565b600091825260208083206001600160a01b038716845260099091526040909220600260049092029092019081015490925064174876e7ff03611259575060009392505050565b600380830154905460028401544211801561127357508015155b156112b9576000611296600a546106d78760010154611290610c73565b9061157f565b90506112b56112ae836106d78464e8d4a5100061157f565b84906116cc565b9250505b6112e183600101546106dd64e8d4a510006106d786886000015461157f90919063ffffffff16565b9695505050505050565b60026001540361130d5760405162461bcd60e51b815260040161043990611b4c565b600260015560075460ff166113565760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd0818dbdb5c1bdd5b99608a1b6044820152606401610439565b6000600860008154811061136c5761136c611b83565b60009182526020808320338452600990915260408320600490920201925090611394906114e8565b80541561142d5760006113c982600101546106dd64e8d4a510006106d78760030154876000015461157f90919063ffffffff16565b9050801561142b576113d96109b0565b8111156113f85760405162461bcd60e51b815260040161043990611b99565b8082600001600082825461140c9190611bf7565b9250508190555080600360008282546114259190611bf7565b90915550505b505b600382015481546114489164e8d4a51000916106d79161157f565b600182015560405133907fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa190600090a2505060018055565b6040516001600160a01b0383166024820152604481018290526114e390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526117eb565b505050565b6000600882815481106114fd576114fd611b83565b906000526020600020906004020190508060020154421161151c575050565b600354600081900361153357504260029091015550565b600061154b600a546106d78560010154611290610c73565b905061156e611563836106d78464e8d4a5100061157f565b6003850154906116cc565b600384015550504260029091015550565b60008260000361159157506000611604565b600061159d8385611c23565b9050826115aa8583611c42565b146116015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610439565b90505b92915050565b600061160183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118bd565b600061160183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118f4565b6040516001600160a01b03808516602483015283166044820152606481018290526116c69085906323b872dd60e01b906084016114ac565b50505050565b6000806116d98385611bf7565b9050838110156116015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610439565b6001600160a01b0381166117905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610439565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611840826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119259092919063ffffffff16565b8051909150156114e3578080602001905181019061185e9190611c64565b6114e35760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610439565b600081836118de5760405162461bcd60e51b81526004016104399190611ca5565b5060006118eb8486611c42565b95945050505050565b600081848411156119185760405162461bcd60e51b81526004016104399190611ca5565b5060006118eb8486611b39565b6060611934848460008561193c565b949350505050565b606061194785611a2f565b6119935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610439565b600080866001600160a01b031685876040516119af9190611cd8565b60006040518083038185875af1925050503d80600081146119ec576040519150601f19603f3d011682016040523d82523d6000602084013e6119f1565b606091505b50915091508115611a055791506119349050565b805115611a155780518082602001fd5b8360405162461bcd60e51b81526004016104399190611ca5565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611934575050151592915050565b80151581146105db57600080fd5b600060208284031215611a8857600080fd5b813561160181611a68565b600060208284031215611aa557600080fd5b5035919050565b600060208284031215611abe57600080fd5b81356001600160a01b038116811461160157600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611b1c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561160457611604611b23565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b602080825260409082018190527f43616e6e6f74207769746864726177206f746865722070656f706c6527732073908201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e606082015260800190565b8082018082111561160457611604611b23565b600060018201611c1c57611c1c611b23565b5060010190565b6000816000190483118215151615611c3d57611c3d611b23565b500290565b600082611c5f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611c7657600080fd5b815161160181611a68565b60005b83811015611c9c578181015183820152602001611c84565b50506000910152565b6020815260008251806020840152611cc4816040850160208701611c81565b601f01601f19169190910160400192915050565b60008251611cea818460208701611c81565b919091019291505056fea264697066735822122045e32abf7b89dceebe7370b4d297952aeab0b1a9355d225f2b739e727a65e67c64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x30Ca670a606042C39Fb3791525D92B9aa040C0FA
Arg [1] : _apr (uint256): 100
Arg [2] : _lockDurationInDays (uint256): 21
Arg [3] : _exitPenaltyPerc (uint256): 20
Arg [4] : _canCompoundOrStakeMore (bool): True
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000030ca670a606042c39fb3791525d92b9aa040c0fa
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
24689:10210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25644:27;;;;;;;;;160:25:1;;;148:2;133:18;25644:27:0;;;;;;;;34758:138;;;;;;:::i;:::-;;:::i;:::-;;25791:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1013:32:1;;;995:51;;1077:2;1062:18;;1055:34;;;;1105:18;;;1098:34;1163:2;1148:18;;1141:34;982:3;967:19;25791:26:0;750:431:1;25873:45:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1651:25:1;;;1707:2;1692:18;;1685:34;;;;1624:18;25873:45:0;1477:248:1;33321:256:0;;;;;;:::i;:::-;;:::i;31282:1154::-;;;:::i;25619:18::-;;;;;;28828:190;;;:::i;25721:34::-;;;;;;;;;;;;1895:14:1;;1888:22;1870:41;;1858:2;1843:18;25721:34:0;1730:187:1;2810:140:0;;;:::i;25440:36::-;;;;;;;;-1:-1:-1;;;;;2100:32:1;;;2082:51;;2070:2;2055:18;25440:36:0;1922:217:1;27070:207:0;;;:::i;33902:266::-;;;:::i;25678:30::-;;;;;;26971:91;;;:::i;25586:26::-;;;;;;34176:172;;;;;;:::i;:::-;;:::i;2168:79::-;2206:7;2233:6;-1:-1:-1;;;;;2233:6:0;2168:79;;34558:192;;;;;;:::i;:::-;;:::i;33585:309::-;;;:::i;25525:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;29055:1410;;;;;;:::i;:::-;;:::i;34356:194::-;;;;;;:::i;:::-;;:::i;32507:665::-;;;:::i;3105:109::-;;;;;;:::i;:::-;;:::i;27342:727::-;;;;;;:::i;:::-;;:::i;30473:753::-;;;:::i;25483:35::-;;;;;34758:138;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;;;;;;;;;34848:22:::1;:40:::0;;-1:-1:-1;;34848:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34758:138::o;25791:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25791:26:0;;;;-1:-1:-1;25791:26:0;;;:::o;33321:256::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;33459:11:::1;::::0;33420:36:::1;::::0;-1:-1:-1;;;33420:36:0;;33450:4:::1;33420:36;::::0;::::1;2082:51:1::0;33420:11:0::1;-1:-1:-1::0;;;;;33420:21:0::1;::::0;::::1;::::0;2055:18:1;;33420:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;33409:7;:61;;33401:103;;;::::0;-1:-1:-1;;;33401:103:0;;3369:2:1;33401:103:0::1;::::0;::::1;3351:21:1::0;3408:2;3388:18;;;3381:30;3447:31;3427:18;;;3420:59;3496:18;;33401:103:0::1;3167:353:1::0;33401:103:0::1;33515:54;-1:-1:-1::0;;;;;33515:11:0::1;:24;33548:10;33561:7:::0;33515:24:::1;:54::i;:::-;33321:256:::0;:::o;31282:1154::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;31362:10:::1;31345:28;::::0;;;::::1;::::0;;;;;;;;31377:15:::1;-1:-1:-1::0;31345:47:0::1;31337:92;;;::::0;-1:-1:-1;;;31337:92:0;;4087:2:1;31337:92:0::1;::::0;::::1;4069:21:1::0;;;4106:18;;;4099:30;4165:34;4145:18;;;4138:62;4217:18;;31337:92:0::1;3885:356:1::0;31337:92:0::1;31450:21;31474:8;31483:1;31474:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31529:10:::1;31520:20:::0;;:8:::1;:20:::0;;;;;;31571:11;;31474::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31520:20:0;31593:13:::1;::::0;:10:::1;:13::i;:::-;31617:15;31635:70;31689:4;:15;;;31635:49;31679:4;31635:39;31651:4;:22;;;31635:4;:11;;;:15;;:39;;;;:::i;:::-;:43:::0;::::1;:49::i;:::-;:53:::0;::::1;:70::i;:::-;31617:88:::0;-1:-1:-1;31719:11:0;;31716:217:::1;;31765:18;:16;:18::i;:::-;31754:7;:29;;31746:106;;;;-1:-1:-1::0;;;31746:106:0::1;;;;;;;:::i;:::-;31867:54;-1:-1:-1::0;;;;;31867:11:0::1;:24;31900:10;31913:7:::0;31867:24:::1;:54::i;:::-;31948:11:::0;;31945:165:::1;;31990:1;31976:15:::0;;;32006:11:::1;:22:::0;;32021:7;;31990:1;32006:22:::1;::::0;32021:7;;32006:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;32043:12:0;;:55:::1;::::0;-1:-1:-1;;;;;32043:12:0::1;32077:10;32090:7:::0;32043:25:::1;:55::i;:::-;32156:22;::::0;::::1;::::0;32140:11;;:49:::1;::::0;32184:4:::1;::::0;32140:39:::1;::::0;:15:::1;:39::i;:49::-;32122:15;::::0;::::1;:67:::0;32213:11;;:15;32210:172:::1;;32293:12;::::0;32275:30:::1;::::0;:15:::1;:30;:::i;:::-;32261:10;32244:28;::::0;;;:16:::1;:28;::::0;;;;:61;32210:172:::1;;;32355:10;32369:1;32338:28:::0;;;:16:::1;:28;::::0;;;;:32;32210:172:::1;32399:29;::::0;160:25:1;;;32408:10:0::1;::::0;32399:29:::1;::::0;148:2:1;133:18;32399:29:0::1;;;;;;;;-1:-1:-1::0;;23698:1:0;24652:22;;-1:-1:-1;;31282:1154:0:o;28828:190::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;28900:8:::1;:15:::0;28883:14:::1;28926:85;28954:6;28948:3;:12;28926:85;;;28984:15;28995:3;28984:10;:15::i;:::-;28962:5;::::0;::::1;:::i;:::-;;;28926:85;;;;28872:146;28828:190::o:0;2810:140::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;2909:1:::1;2893:6:::0;;2872:40:::1;::::0;-1:-1:-1;;;;;2893:6:0;;::::1;::::0;2872:40:::1;::::0;2909:1;;2872:40:::1;2940:1;2923:19:::0;;-1:-1:-1;;;;;;2923:19:0::1;::::0;;2810:140::o;27070:207::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;27131:8:::1;27140:1;27131:11;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27166:11;27131:46;27123:86;;;::::0;-1:-1:-1;;;27123:86:0;;5283:2:1;27123:86:0::1;::::0;::::1;5265:21:1::0;5322:2;5302:18;;;5295:30;5361:29;5341:18;;;5334:57;5408:18;;27123:86:0::1;5081:351:1::0;27123:86:0::1;27254:15;27220:8;27229:1;27220:11;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:49;;;;27070:207::o:0;33902:266::-;33951:7;33988:12;-1:-1:-1;;;;;33973:27:0;:11;-1:-1:-1;;;;;33973:27:0;;33970:191;;34062:11;;34023:36;;-1:-1:-1;;;34023:36:0;;34053:4;34023:36;;;2082:51:1;34023:11:0;-1:-1:-1;;;;;34023:21:0;;;;2055:18:1;;34023:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;34016:57;;33902:266;:::o;33970:191::-;34113:36;;-1:-1:-1;;;34113:36:0;;34143:4;34113:36;;;2082:51:1;34113:11:0;-1:-1:-1;;;;;34113:21:0;;;;2055:18:1;;34113:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26971:91::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;27023:13:::1;27034:1;27023:10;:13::i;:::-;27053:1;27047:3;:7:::0;26971:91::o;34176:172::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;34259:5:::1;34249:6;:15;;34241:52;;;::::0;-1:-1:-1;;;34241:52:0;;5639:2:1;34241:52:0::1;::::0;::::1;5621:21:1::0;5678:2;5658:18;;;5651:30;5717:26;5697:18;;;5690:54;5761:18;;34241:52:0::1;5437:348:1::0;34241:52:0::1;34304:13;34315:1;34304:10;:13::i;:::-;34328:3;:12:::0;34176:172::o;34558:192::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;34665:2:::1;34647:14;:20;;34639:60;;;::::0;-1:-1:-1;;;34639:60:0;;5992:2:1;34639:60:0::1;::::0;::::1;5974:21:1::0;6031:2;6011:18;;;6004:30;6070:29;6050:18;;;6043:57;6117:18;;34639:60:0::1;5790:351:1::0;34639:60:0::1;34710:15;:32:::0;34558:192::o;33585:309::-;33637:7;33657:21;33681:8;33690:1;33681:11;;;;;;;;:::i;:::-;;;;;;;;;;;33657:35;;33733:15;33706:4;:24;;;:42;33703:81;;;33771:1;33764:8;;;33585:309;:::o;33703:81::-;33877:8;33871:3;33865;;33850:11;;33822:4;:24;;;33804:15;:42;;;;:::i;:::-;33803:58;;;;:::i;:::-;33802:66;;;;:::i;:::-;:72;;;;:::i;:::-;:83;;;;:::i;:::-;33794:92;;;33585:309;:::o;29055:1410::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;29142:10:::1;29125:28;::::0;;;::::1;::::0;;;;;;;;:33;;29122:125:::1;;29223:12;::::0;29205:30:::1;::::0;:15:::1;:30;:::i;:::-;29191:10;29174:28;::::0;;;:16:::1;:28;::::0;;;;:61;29122:125:::1;29257:21;29281:8;29290:1;29281:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29336:10:::1;29327:20:::0;;:8:::1;:20:::0;;;;;;;29364:22:::1;::::0;29281:11:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;29364:22:0::1;;29363:23;:38:::0;::::1;;;;29400:1;29390:7;:11;29363:38;29360:115;;;29425:11:::0;;:16;29417:46:::1;;;::::0;-1:-1:-1;;;29417:46:0;;6743:2:1;29417:46:0::1;::::0;::::1;6725:21:1::0;6782:2;6762:18;;;6755:30;-1:-1:-1;;;6801:18:1;;;6794:47;6858:18;;29417:46:0::1;6541:341:1::0;29417:46:0::1;29487:13;29498:1;29487:10;:13::i;:::-;29515:11:::0;;:15;29511:380:::1;;29547:15;29565:70;29619:4;:15;;;29565:49;29609:4;29565:39;29581:4;:22;;;29565:4;:11;;;:15;;:39;;;;:::i;:70::-;29547:88:::0;-1:-1:-1;29653:11:0;;29650:230:::1;;29704:18;:16;:18::i;:::-;29693:7;:29;;29685:106;;;;-1:-1:-1::0;;;29685:106:0::1;;;;;;;:::i;:::-;29810:54;-1:-1:-1::0;;;;;29810:11:0::1;:24;29843:10;29856:7:::0;29810:24:::1;:54::i;:::-;29532:359;29511:380;29901:25;29944:11:::0;;29941:393:::1;;29997:12:::0;;:37:::1;::::0;-1:-1:-1;;;29997:37:0;;30028:4:::1;29997:37;::::0;::::1;2082:51:1::0;29972:22:0::1;::::0;-1:-1:-1;;;;;29997:12:0::1;::::0;:22:::1;::::0;2055:18:1;;29997:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30049:12:::0;;29972:62;;-1:-1:-1;30049:74:0::1;::::0;-1:-1:-1;;;;;30049:12:0::1;30087:10;30108:4;30115:7:::0;30049:29:::1;:74::i;:::-;30158:12:::0;;:37:::1;::::0;-1:-1:-1;;;30158:37:0;;30189:4:::1;30158:37;::::0;::::1;2082:51:1::0;30198:14:0;;-1:-1:-1;;;;;30158:12:0::1;::::0;:22:::1;::::0;2055:18:1;;30158:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;30241:11:::0;;30138:74;;-1:-1:-1;30241:34:0::1;::::0;30138:74;30241:15:::1;:34::i;:::-;30227:48:::0;;30290:11:::1;:32:::0;;30305:17;;30290:11;30227::::1;::::0;30290:32:::1;::::0;30305:17;;30290:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;;29941:393:0::1;30378:22;::::0;::::1;::::0;30362:11;;:49:::1;::::0;30406:4:::1;::::0;30362:39:::1;::::0;:15:::1;:39::i;:49::-;30344:15;::::0;::::1;:67:::0;30429:28:::1;::::0;160:25:1;;;30437:10:0::1;::::0;30429:28:::1;::::0;148:2:1;133:18;30429:28:0::1;14:177:1::0;34356:194:0;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;34458:3:::1;34443:11;:18;;34435:61;;;::::0;-1:-1:-1;;;34435:61:0;;7089:2:1;34435:61:0::1;::::0;::::1;7071:21:1::0;7128:2;7108:18;;;7101:30;7167:32;7147:18;;;7140:60;7217:18;;34435:61:0::1;6887:354:1::0;34435:61:0::1;34522:20;:11:::0;34536:6:::1;34522:20;:::i;:::-;34507:12;:35:::0;-1:-1:-1;34356:194:0:o;32507:665::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;;32569:21:::1;32593:8;32602:1;32593:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;32648:10:::1;32639:20:::0;;:8:::1;:20:::0;;;;;;32688:11;;32710::::1;:22:::0;;32593:11:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;32639:20:0;;32688:11;;;;32710;32593;32710:22:::1;::::0;32688:11;;32710:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;32846:10:0::1;32829:28;::::0;;;:16:::1;:28;::::0;;;;;32861:15:::1;-1:-1:-1::0;32826:120:0::1;;32931:3;32913:15;;32903:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;32892:42;::::0;;::::1;:::i;:::-;;;32826:120;32973:10;32987:1;32956:28:::0;;;:16:::1;:28;::::0;;;;:32;32999:12;;:55:::1;::::0;-1:-1:-1;;;;;32999:12:0;;::::1;::::0;33046:7;32999:25:::1;:55::i;:::-;33079:1;33065:15:::0;;;33091::::1;::::0;::::1;:19:::0;33126:38:::1;::::0;160:25:1;;;33144:10:0::1;::::0;33126:38:::1;::::0;148:2:1;133:18;33126:38:0::1;;;;;;;-1:-1:-1::0;;23698:1:0;24652:22;;-1:-1:-1;32507:665:0:o;3105:109::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;3178:28:::1;3197:8;3178:18;:28::i;27342:727::-:0;27403:7;27423:21;27447:8;27456:1;27447:11;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27493:15:0;;;;:8;:15;;;;;;;27522:24;27447:11;;;;;;;27522:24;;;;27447:11;;-1:-1:-1;27550:11:0;27522:39;27519:78;;-1:-1:-1;27584:1:0;;27342:727;-1:-1:-1;;;27342:727:0:o;27519:78::-;27635:22;;;;;27687:11;;27731:24;;;;27713:15;:42;:59;;;;-1:-1:-1;27759:13:0;;;27713:59;27709:270;;;27789:19;27811:63;27858:15;;27811:42;27837:4;:15;;;27811:21;:19;:21::i;:::-;:25;;:42::i;:63::-;27789:85;-1:-1:-1;27909:58:0;27931:35;27957:8;27931:21;27789:85;27947:4;27931:15;:21::i;:35::-;27909:17;;:21;:58::i;:::-;27889:78;;27774:205;27709:270;27996:65;28045:4;:15;;;27996:44;28035:4;27996:34;28012:17;27996:4;:11;;;:15;;:34;;;;:::i;:65::-;27989:72;27342:727;-1:-1:-1;;;;;;27342:727:0:o;30473:753::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;30534:22:::1;::::0;::::1;;30526:50;;;::::0;-1:-1:-1;;;30526:50:0;;7448:2:1;30526:50:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;-1:-1:-1;;;7506:18:1;;;7499:45;7561:18;;30526:50:0::1;7246:339:1::0;30526:50:0::1;30587:21;30611:8;30620:1;30611:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;30666:10:::1;30657:20:::0;;:8:::1;:20:::0;;;;;;30611:11:::1;::::0;;::::1;;::::0;-1:-1:-1;30657:20:0;30690:13:::1;::::0;:10:::1;:13::i;:::-;30718:11:::0;;:15;30714:389:::1;;30750:15;30768:70;30822:4;:15;;;30768:49;30812:4;30768:39;30784:4;:22;;;30768:4;:11;;;:15;;:39;;;;:::i;:70::-;30750:88:::0;-1:-1:-1;30856:11:0;;30853:239:::1;;30907:18;:16;:18::i;:::-;30896:7;:29;;30888:106;;;;-1:-1:-1::0;;;30888:106:0::1;;;;;;;:::i;:::-;31028:7;31013:4;:11;;;:22;;;;;;;:::i;:::-;;;;;;;;31069:7;31054:11;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30853:239:0::1;30735:368;30714:389;31149:22;::::0;::::1;::::0;31133:11;;:49:::1;::::0;31177:4:::1;::::0;31133:39:::1;::::0;:15:::1;:39::i;:49::-;31115:15;::::0;::::1;:67:::0;31198:20:::1;::::0;31207:10:::1;::::0;31198:20:::1;::::0;;;::::1;-1:-1:-1::0;;23698:1:0;24652:22;;30473:753::o;13209:211::-;13353:58;;-1:-1:-1;;;;;7782:32:1;;13353:58:0;;;7764:51:1;7831:18;;;7824:34;;;13326:86:0;;13346:5;;-1:-1:-1;;;13376:23:0;7737:18:1;;13353:58:0;;;;-1:-1:-1;;13353:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13353:58:0;-1:-1:-1;;;;;;13353:58:0;;;;;;;;;;13326:19;:86::i;:::-;13209:211;;;:::o;28145:600::-;28199:21;28223:8;28232:4;28223:14;;;;;;;;:::i;:::-;;;;;;;;;;;28199:38;;28271:4;:24;;;28252:15;:43;28248:82;;28312:7;28145:600;:::o;28248:82::-;28359:11;;28340:16;28385:13;;;28381:109;;-1:-1:-1;28442:15:0;28415:24;;;;:42;-1:-1:-1;28145:600:0:o;28381:109::-;28500:19;28522:63;28569:15;;28522:42;28548:4;:15;;;28522:21;:19;:21::i;:63::-;28500:85;-1:-1:-1;28621:63:0;28648:35;28674:8;28648:21;28500:85;28664:4;28648:15;:21::i;:35::-;28621:22;;;;;:26;:63::i;:::-;28596:22;;;:88;-1:-1:-1;;28722:15:0;28695:24;;;;:42;-1:-1:-1;28145:600:0:o;5784:471::-;5842:7;6087:1;6092;6087:6;6083:47;;-1:-1:-1;6117:1:0;6110:8;;6083:47;6142:9;6154:5;6158:1;6154;:5;:::i;:::-;6142:17;-1:-1:-1;6187:1:0;6178:5;6182:1;6142:17;6178:5;:::i;:::-;:10;6170:56;;;;-1:-1:-1;;;6170:56:0;;8071:2:1;6170:56:0;;;8053:21:1;8110:2;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;-1:-1:-1;;;8200:18:1;;;8193:31;8241:19;;6170:56:0;7869:397:1;6170:56:0;6246:1;-1:-1:-1;5784:471:0;;;;;:::o;6731:132::-;6789:7;6816:39;6820:1;6823;6816:39;;;;;;;;;;;;;;;;;:3;:39::i;4860:136::-;4918:7;4945:43;4949:1;4952;4945:43;;;;;;;;;;;;;;;;;:3;:43::i;13428:248::-;13599:68;;-1:-1:-1;;;;;8529:15:1;;;13599:68:0;;;8511:34:1;8581:15;;8561:18;;;8554:43;8613:18;;;8606:34;;;13572:96:0;;13592:5;;-1:-1:-1;;;13622:27:0;8446:18:1;;13599:68:0;8271:375:1;13572:96:0;13428:248;;;;:::o;4396:181::-;4454:7;;4486:5;4490:1;4486;:5;:::i;:::-;4474:17;;4515:1;4510;:6;;4502:46;;;;-1:-1:-1;;;4502:46:0;;8853:2:1;4502:46:0;;;8835:21:1;8892:2;8872:18;;;8865:30;8931:29;8911:18;;;8904:57;8978:18;;4502:46:0;8651:351:1;3320:229:0;-1:-1:-1;;;;;3394:22:0;;3386:73;;;;-1:-1:-1;;;3386:73:0;;9209:2:1;3386:73:0;;;9191:21:1;9248:2;9228:18;;;9221:30;9287:34;9267:18;;;9260:62;-1:-1:-1;;;9338:18:1;;;9331:36;9384:19;;3386:73:0;9007:402:1;3386:73:0;3496:6;;;3475:38;;-1:-1:-1;;;;;3475:38:0;;;;3496:6;;;3475:38;;;3524:6;:17;;-1:-1:-1;;;;;;3524:17:0;-1:-1:-1;;;;;3524:17:0;;;;;;;;;;3320:229::o;15744:774::-;16168:23;16194:69;16222:4;16194:69;;;;;;;;;;;;;;;;;16202:5;-1:-1:-1;;;;;16194:27:0;;;:69;;;;;:::i;:::-;16278:17;;16168:95;;-1:-1:-1;16278:21:0;16274:237;;16433:10;16422:30;;;;;;;;;;;;:::i;:::-;16414:85;;;;-1:-1:-1;;;16414:85:0;;9866:2:1;16414:85:0;;;9848:21:1;9905:2;9885:18;;;9878:30;9944:34;9924:18;;;9917:62;-1:-1:-1;;;9995:18:1;;;9988:40;10045:19;;16414:85:0;9664:406:1;7359:312:0;7479:7;7514:12;7507:5;7499:28;;;;-1:-1:-1;;;7499:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7538:9:0;7550:5;7554:1;7550;:5;:::i;:::-;7538:17;7359:312;-1:-1:-1;;;;;7359:312:0:o;5299:226::-;5419:7;5455:12;5447:6;;;;5439:29;;;;-1:-1:-1;;;5439:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5479:9:0;5491:5;5495:1;5491;:5;:::i;20343:230::-;20480:12;20512:53;20535:6;20543:4;20549:1;20552:12;20512:22;:53::i;:::-;20505:60;20343:230;-1:-1:-1;;;;20343:230:0:o;21831:1020::-;22004:12;22037:18;22048:6;22037:10;:18::i;:::-;22029:60;;;;-1:-1:-1;;;22029:60:0;;10933:2:1;22029:60:0;;;10915:21:1;10972:2;10952:18;;;10945:30;11011:31;10991:18;;;10984:59;11060:18;;22029:60:0;10731:353:1;22029:60:0;22163:12;22177:23;22204:6;-1:-1:-1;;;;;22204:11:0;22223:8;22233:4;22204:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22162:76;;;;22253:7;22249:595;;;22284:10;-1:-1:-1;22277:17:0;;-1:-1:-1;22277:17:0;22249:595;22398:17;;:21;22394:439;;22661:10;22655:17;22722:15;22709:10;22705:2;22701:19;22694:44;22394:439;22804:12;22797:20;;-1:-1:-1;;;22797:20:0;;;;;;;;:::i;17206:641::-;17266:4;17747:20;;17577:66;17796:23;;;;;;:42;;-1:-1:-1;;17823:15:0;;;17788:51;-1:-1:-1;;17206:641:0:o;196:118:1:-;282:5;275:13;268:21;261:5;258:32;248:60;;304:1;301;294:12;319:241;375:6;428:2;416:9;407:7;403:23;399:32;396:52;;;444:1;441;434:12;396:52;483:9;470:23;502:28;524:5;502:28;:::i;565:180::-;624:6;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;-1:-1:-1;716:23:1;;565:180;-1:-1:-1;565:180:1:o;1186:286::-;1245:6;1298:2;1286:9;1277:7;1273:23;1269:32;1266:52;;;1314:1;1311;1304:12;1266:52;1340:23;;-1:-1:-1;;;;;1392:31:1;;1382:42;;1372:70;;1438:1;1435;1428:12;2352:356;2554:2;2536:21;;;2573:18;;;2566:30;2632:34;2627:2;2612:18;;2605:62;2699:2;2684:18;;2352:356::o;2713:184::-;2783:6;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;-1:-1:-1;2875:16:1;;2713:184;-1:-1:-1;2713:184:1:o;2902:127::-;2963:10;2958:3;2954:20;2951:1;2944:31;2994:4;2991:1;2984:15;3018:4;3015:1;3008:15;3034:128;3101:9;;;3122:11;;;3119:37;;;3136:18;;:::i;3525:355::-;3727:2;3709:21;;;3766:2;3746:18;;;3739:30;3805:33;3800:2;3785:18;;3778:61;3871:2;3856:18;;3525:355::o;4246:127::-;4307:10;4302:3;4298:20;4295:1;4288:31;4338:4;4335:1;4328:15;4362:4;4359:1;4352:15;4378:428;4580:2;4562:21;;;4619:2;4599:18;;;4592:30;;;4658:34;4638:18;;;4631:62;4729:34;4724:2;4709:18;;4702:62;4796:3;4781:19;;4378:428::o;4811:125::-;4876:9;;;4897:10;;;4894:36;;;4910:18;;:::i;4941:135::-;4980:3;5001:17;;;4998:43;;5021:18;;:::i;:::-;-1:-1:-1;5068:1:1;5057:13;;4941:135::o;6146:168::-;6186:7;6252:1;6248;6244:6;6240:14;6237:1;6234:21;6229:1;6222:9;6215:17;6211:45;6208:71;;;6259:18;;:::i;:::-;-1:-1:-1;6299:9:1;;6146:168::o;6319:217::-;6359:1;6385;6375:132;;6429:10;6424:3;6420:20;6417:1;6410:31;6464:4;6461:1;6454:15;6492:4;6489:1;6482:15;6375:132;-1:-1:-1;6521:9:1;;6319:217::o;9414:245::-;9481:6;9534:2;9522:9;9513:7;9509:23;9505:32;9502:52;;;9550:1;9547;9540:12;9502:52;9582:9;9576:16;9601:28;9623:5;9601:28;:::i;10075:250::-;10160:1;10170:113;10184:6;10181:1;10178:13;10170:113;;;10260:11;;;10254:18;10241:11;;;10234:39;10206:2;10199:10;10170:113;;;-1:-1:-1;;10317:1:1;10299:16;;10292:27;10075:250::o;10330:396::-;10479:2;10468:9;10461:21;10442:4;10511:6;10505:13;10554:6;10549:2;10538:9;10534:18;10527:34;10570:79;10642:6;10637:2;10626:9;10622:18;10617:2;10609:6;10605:15;10570:79;:::i;:::-;10710:2;10689:15;-1:-1:-1;;10685:29:1;10670:45;;;;10717:2;10666:54;;10330:396;-1:-1:-1;;10330:396:1:o;11089:287::-;11218:3;11256:6;11250:13;11272:66;11331:6;11326:3;11319:4;11311:6;11307:17;11272:66;:::i;:::-;11354:16;;;;;11089:287;-1:-1:-1;;11089:287:1:o
Swarm Source
ipfs://45e32abf7b89dceebe7370b4d297952aeab0b1a9355d225f2b739e727a65e67c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.