More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AaveAllocator
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-10 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; /** * @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 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, 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 Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } 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; } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 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 * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 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), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 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(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: 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(IERC20 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, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /** * @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); } interface IOwnable { function policy() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function policy() public view override returns (address) { return _owner; } modifier onlyPolicy() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyPolicy() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyPolicy() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } interface ILendingPool { function deposit( address asset, uint256 amount, address onBehalfOf, uint16 referralCode ) external; function withdraw( address asset, uint256 amount, address to ) external returns (uint256); } interface IStakedTokenIncentivesController { function claimRewards( address[] memory assets, uint256 amount, address to ) external; function claimRewardsOnBehalf(address[] memory assets, uint256 amount, address user, address to) external; function getRewardsBalance(address[] memory assets, address user) external view returns (uint256); function getClaimer(address user) external view returns (address); } interface ITreasury { function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ); function manage( address _token, uint _amount ) external; function valueOf( address _token, uint _amount ) external view returns ( uint value_ ); } /** * Contract deploys reserves from treasury into the Aave lending pool, * earning interest and $stkAAVE. */ contract AaveAllocator is Ownable { /* ======== DEPENDENCIES ======== */ using SafeERC20 for IERC20; using SafeMath for uint; /* ======== STATE VARIABLES ======== */ IStakedTokenIncentivesController immutable incentives; // stkAave incentive controller ILendingPool immutable lendingPool; // Aave Lending Pool ITreasury immutable treasury; // Olympus Treasury address[] public aTokens; // all relevant aTokens mapping( address => address ) public aTokenRegistry; // corresponding aTokens for tokens uint public totalValueDeployed; // total RFV deployed into lending pool mapping( address => uint ) public deployedFor; // amount of token deployed into pool mapping( address => uint ) public deployLimitFor; // max token can be deployed into pool uint public immutable timelockInBlocks; // timelock to raise deployment limit mapping( address => uint ) public raiseLimitTimelockEnd; // block when new max can be set mapping( address => uint ) public newLimit; // pending new deployment limits for tokens uint16 public referralCode; // rebates portion of lending pool fees // deposit aDAI into treasury or hold in allocator. bool public depositToTreasury; // contigent on claimOnBehalfOf permission /* ======== CONSTRUCTOR ======== */ constructor ( address _treasury, address _lendingPool, address _incentives, uint _timelockInBlocks, uint16 _referralCode ) { require( _treasury != address(0) ); treasury = ITreasury( _treasury ); require( _lendingPool != address(0) ); lendingPool = ILendingPool( _lendingPool ); require( _incentives != address(0) ); incentives = IStakedTokenIncentivesController( _incentives ); timelockInBlocks = _timelockInBlocks; referralCode = _referralCode; } /* ======== OPEN FUNCTIONS ======== */ /** * @notice claims accrued stkAave rewards for all added aTokens in treasury */ function harvest() public { address _treasury = address( treasury ); if( depositToTreasury ) { incentives.claimRewardsOnBehalf( aTokens, rewardsPending( _treasury ), _treasury, _treasury ); } else { incentives.claimRewards( aTokens, rewardsPending( address( this ) ), _treasury ); } } /** * @notice claims accrued stkAave rewards for given aTokens in treasury * @param tokens address[] memory */ function harvestFor( address[] calldata tokens ) external { address _treasury = address( treasury ); if( depositToTreasury ) { incentives.claimRewardsOnBehalf( tokens, rewardsPending( _treasury ), _treasury, _treasury ); } else { incentives.claimRewards( tokens, rewardsPending( address( this ) ), _treasury ); } } /* ======== POLICY FUNCTIONS ======== */ /** * @notice withdraws asset from treasury, deposits asset into lending pool, then deposits aToken into treasury * @param token address * @param amount uint */ function deposit( address token, uint amount ) public onlyPolicy() { require( !exceedsLimit( token, amount ) ); // ensure deposit is within bounds treasury.manage( token, amount ); // retrieve amount of asset from treasury IERC20( token ).approve( address( lendingPool ), amount ); // approve to deposit into lending pool lendingPool.deposit( token, amount, address(this), referralCode ); // deposit, returning aToken uint value = treasury.valueOf( token, amount ); // treasury RFV calculator accountingFor( token, amount, value, true ); // account for deposit if ( depositToTreasury ) { // if aTokens are being deposited into treasury address aToken = aTokenRegistry[ token ]; // address of aToken uint aBalance = IERC20( aToken ).balanceOf( address(this) ); // balance of aToken received IERC20( aToken ).approve( address( treasury ), aBalance ); // approve to deposit aToken into treasury treasury.deposit( aBalance, aToken, value ); // deposit using value as profit so no OHM is minted } } /** * @notice withdraws aToken from treasury, withdraws from lending pool, and deposits asset into treasury * @param token address * @param amount uint */ function withdraw( address token, uint amount ) public onlyPolicy() { address aToken = aTokenRegistry[ token ]; // aToken to withdraw if ( depositToTreasury ) { // if aTokens are being deposited into treasury treasury.manage( aToken, amount ); // retrieve aToken from treasury } IERC20( aToken ).approve( address( lendingPool ), amount ); // approve to withdraw from lending pool lendingPool.withdraw( aToken, amount, address(this) ); // withdraw from lending pool, returning asset uint balance = IERC20( token ).balanceOf( address(this) ); // balance of asset received from lending pool uint value = treasury.valueOf( token, balance ); // treasury RFV calculator accountingFor( token, balance, value, false ); // account for withdrawal IERC20( token ).approve( address( treasury ), balance ); // approve to deposit asset into treasury treasury.deposit( balance, token, value ); // deposit using value as profit so no OHM is minted } /** * @notice adds asset and corresponding aToken to mapping * @param token address * @param aToken address */ function addToken( address token, address aToken, uint max ) external onlyPolicy() { require( token != address(0) ); require( aToken != address(0) ); require( aTokenRegistry[ token ] == address(0) ); // cannot add token twice aTokenRegistry[ token ] = aToken; aTokens.push( aToken ); deployLimitFor[ token ] = max; } /** * @notice lowers max can be deployed for asset (no timelock) * @param token address * @param newMax uint */ function lowerLimit( address token, uint newMax ) external onlyPolicy() { require( newMax < deployLimitFor[ token ] ); require( newMax > deployedFor[ token ] ); deployLimitFor[ token ] = newMax; } /** * @notice starts timelock to raise max allocation for asset * @param token address * @param newMax uint */ function queueRaiseLimit( address token, uint newMax ) external onlyPolicy() { raiseLimitTimelockEnd[ token ] = block.number.add( timelockInBlocks ); newLimit[ token ] = newMax; } /** * @notice changes max allocation for asset when timelock elapsed * @param token address */ function raiseLimit( address token ) external onlyPolicy() { require( block.number >= raiseLimitTimelockEnd[ token ], "Timelock not expired" ); deployLimitFor[ token ] = newLimit[ token ]; newLimit[ token ] = 0; raiseLimitTimelockEnd[ token ] = 0; } /** * @notice set referral code for rebate on fees * @param code uint16 */ function setReferralCode( uint16 code ) external onlyPolicy() { referralCode = code; } /** * @notice deposit aTokens into treasury and begin claiming rewards on behalf of */ function enableDepositToTreasury() external onlyPolicy() { require( incentives.getClaimer( address( treasury ) ) == address(this), "Contract not approved to claim rewards" ); require( !depositToTreasury, "Already enabled" ); harvest(); for ( uint i = 0; i < aTokens.length; i++ ) { address aToken = aTokens[i]; uint balance = IERC20( aToken ).balanceOf( address(this) ); if ( balance > 0 ) { uint value = treasury.valueOf( aToken, balance ); IERC20( aToken ).approve( address( treasury ), balance ); // approve to deposit asset into treasury treasury.deposit( balance, aToken, value ); // deposit using value as profit so no OHM is minted } } depositToTreasury = true; } /** * @notice revert enabling aToken treasury deposits */ function revertDepositToTreasury() external onlyPolicy() { depositToTreasury = false; } /* ======== INTERNAL FUNCTIONS ======== */ /** * @notice accounting of deposits/withdrawals of assets * @param token address * @param amount uint * @param value uint * @param add bool */ function accountingFor( address token, uint amount, uint value, bool add ) internal { if( add ) { deployedFor[ token ] = deployedFor[ token ].add( amount ); // track amount allocated into pool totalValueDeployed = totalValueDeployed.add( value ); // track total value allocated into pools } else { // track amount allocated into pool if ( amount < deployedFor[ token ] ) { deployedFor[ token ] = deployedFor[ token ].sub( amount ); } else { deployedFor[ token ] = 0; } // track total value allocated into pools if ( value < totalValueDeployed ) { totalValueDeployed = totalValueDeployed.sub( value ); } else { totalValueDeployed = 0; } } } /* ======== VIEW FUNCTIONS ======== */ /** * @notice query all pending rewards * @return uint */ function rewardsPending( address user ) public view returns ( uint ) { return incentives.getRewardsBalance( aTokens, user ); } /** * @notice query pending rewards for provided aTokens * @param tokens address[] * @return uint */ function rewardsPendingFor( address[] calldata tokens, address user ) public view returns ( uint ) { return incentives.getRewardsBalance( tokens, user ); } /** * @notice checks to ensure deposit does not exceed max allocation for asset * @param token address * @param amount uint */ function exceedsLimit( address token, uint amount ) public view returns ( bool ) { uint alreadyDeployed = deployedFor[ token ]; uint willBeDeployed = alreadyDeployed.add( amount ); return ( willBeDeployed > deployLimitFor[ token ] ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_lendingPool","type":"address"},{"internalType":"address","name":"_incentives","type":"address"},{"internalType":"uint256","name":"_timelockInBlocks","type":"uint256"},{"internalType":"uint16","name":"_referralCode","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"aTokenRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"aTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"aToken","type":"address"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deployLimitFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deployedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositToTreasury","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableDepositToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"exceedsLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"harvestFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"lowerLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"newLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"queueRaiseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"raiseLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"raiseLimitTimelockEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCode","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertDepositToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"rewardsPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"rewardsPendingFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"code","type":"uint16"}],"name":"setReferralCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelockInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalValueDeployed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61010060405234801561001157600080fd5b50604051612589380380612589833981810160405260a081101561003457600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166100b057600080fd5b6001600160601b0319606086901b1660c0526001600160a01b0384166100d557600080fd5b6001600160601b0319606085901b1660a0526001600160a01b0383166100fa57600080fd5b6001600160601b031960609390931b9290921660805260e0526009805461ffff90921661ffff19909216919091179055505060805160601c60a05160601c60c05160601c60e0516123ac6101dd600039806108d0528061177f5250806109215280610c895280610e5c5280610fb652806110705280611358528061152452806115db5280611695528061197e5280611bf35280611e6f5280611f045280611fc6525080610d275280610df65280611c925280611d535250806106f452806107ce52806109515280610a4f528061132952806119ae5280611a9252506123ac6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636daa9850116100f9578063c901761d11610097578063e8bb5d3411610071578063e8bb5d341461053e578063f3fef3a314610564578063f8ff9a4914610590578063fa43b69c146105bc576101c4565b8063c901761d146104a7578063d710951a146104af578063d8b6d2521461051f576101c4565b8063895a0293116100d3578063895a02931461040357806398c606121461042f578063a1fadad01461045b578063c087cdf414610481576101c4565b80636daa9850146103a9578063718b2058146103df57806388136d5e146103fb576101c4565b80632f15f45e1161016657806346f68ee91161014057806346f68ee91461032957806347e7ef241461034f57806349a259e41461037b5780635a96ac0a146103a1576101c4565b80632f15f45e146102fc578063324e4b57146103045780634641257d14610321576101c4565b806312b16726116101a257806312b16726146101ff5780631b0b820a146102375780631c3859f9146102b057806324cf7600146102d6576101c4565b80630253dad0146101c95780630505c8c9146101d3578063089208d8146101f7575b600080fd5b6101d16105dd565b005b6101db610638565b604080516001600160a01b039092168252519081900360200190f35b6101d1610647565b6102256004803603602081101561021557600080fd5b50356001600160a01b03166106de565b60408051918252519081900360200190f35b6102256004803603604081101561024d57600080fd5b81019060208101813564010000000081111561026857600080fd5b82018360208201111561027a57600080fd5b8035906020019184602083028401116401000000008311171561029c57600080fd5b9193509150356001600160a01b03166106f0565b610225600480360360208110156102c657600080fd5b50356001600160a01b03166107ca565b610225600480360360208110156102ec57600080fd5b50356001600160a01b03166108bc565b6102256108ce565b6101db6004803603602081101561031a57600080fd5b50356108f2565b6101d161091c565b6101d16004803603602081101561033f57600080fd5b50356001600160a01b0316610b39565b6101d16004803603604081101561036557600080fd5b506001600160a01b038135169060200135610c26565b6101db6004803603602081101561039157600080fd5b50356001600160a01b03166110ef565b6101d161110a565b6101d1600480360360608110156103bf57600080fd5b506001600160a01b038135811691602081013590911690604001356111b4565b6103e76112c1565b604080519115158252519081900360200190f35b6101d16112d0565b6101d16004803603604081101561041957600080fd5b506001600160a01b03813516906020013561172c565b6101d16004803603604081101561044557600080fd5b506001600160a01b0381351690602001356117ce565b6102256004803603602081101561047157600080fd5b50356001600160a01b031661187f565b6101d16004803603602081101561049757600080fd5b50356001600160a01b0316611891565b610225611973565b6101d1600480360360208110156104c557600080fd5b8101906020810181356401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184602083028401116401000000008311171561051457600080fd5b509092509050611979565b610527611b5a565b6040805161ffff9092168252519081900360200190f35b6102256004803603602081101561055457600080fd5b50356001600160a01b0316611b64565b6101d16004803603604081101561057a57600080fd5b506001600160a01b038135169060200135611b76565b6103e7600480360360408110156105a657600080fd5b506001600160a01b038135169060200135612011565b6101d1600480360360208110156105d257600080fd5b503561ffff16612059565b6000546001600160a01b0316331461062a576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6009805462ff000019169055565b6000546001600160a01b031690565b6000546001600160a01b03163314610694576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b60076020526000908152604090205481565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638b599f268585856040518463ffffffff1660e01b81526004018080602001836001600160a01b031681526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561079657600080fd5b505afa1580156107aa573d6000803e3d6000fd5b505050506040513d60208110156107c057600080fd5b5051949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638b599f266002846040518363ffffffff1660e01b81526004018080602001836001600160a01b03168152602001828103825284818154815260200191508054801561086b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161084d575b5050935050505060206040518083038186803b15801561088a57600080fd5b505afa15801561089e573d6000803e3d6000fd5b505050506040513d60208110156108b457600080fd5b505192915050565b60056020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002818154811061090257600080fd5b6000918252602090912001546001600160a01b0316905081565b6009547f00000000000000000000000000000000000000000000000000000000000000009062010000900460ff1615610a4d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636d34b96e6002610989846107ca565b84856040518563ffffffff1660e01b81526004018080602001858152602001846001600160a01b03168152602001836001600160a01b031681526020018281038252868181548152602001915080548015610a0d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109ef575b505095505050505050600060405180830381600087803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b50505050610b36565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633111e7b36002610a87306107ca565b846040518463ffffffff1660e01b81526004018080602001848152602001836001600160a01b031681526020018281038252858181548152602001915080548015610afb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610add575b5050945050505050600060405180830381600087803b158015610b1d57600080fd5b505af1158015610b31573d6000803e3d6000fd5b505050505b50565b6000546001600160a01b03163314610b86576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038116610bcb5760405162461bcd60e51b81526004018080602001828103825260268152602001806122e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c73576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b610c7d8282612011565b15610c8757600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630b0eee3083836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610cfe57600080fd5b505af1158015610d12573d6000803e3d6000fd5b50505050816001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b50506009546040805163e8eda9df60e01b81526001600160a01b0385811660048301526024820185905230604483015261ffff909316606482015290517f00000000000000000000000000000000000000000000000000000000000000009092169163e8eda9df9160848082019260009290919082900301818387803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631eec5a9a84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015610ecf57600080fd5b505afa158015610ee3573d6000803e3d6000fd5b505050506040513d6020811015610ef957600080fd5b50519050610f0a83838360016120be565b60095462010000900460ff16156110ea576001600160a01b0380841660009081526003602090815260408083205481516370a0823160e01b8152306004820152915194169384926370a082319260248082019391829003018186803b158015610f7257600080fd5b505afa158015610f86573d6000803e3d6000fd5b505050506040513d6020811015610f9c57600080fd5b50516040805163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519293509084169163095ea7b3916044808201926020929091908290030181600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050506040513d602081101561103e57600080fd5b50506040805163bc157ac160e01b8152600481018390526001600160a01b0384811660248301526044820186905291517f00000000000000000000000000000000000000000000000000000000000000009092169163bc157ac1916064808201926020929091908290030181600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b505050506040513d60208110156110e557600080fd5b505050505b505050565b6003602052600090815260409020546001600160a01b031681565b6001546001600160a01b031633146111535760405162461bcd60e51b815260040180806020018281038252602281526020018061230f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b03163314611201576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b03831661121457600080fd5b6001600160a01b03821661122757600080fd5b6001600160a01b03838116600090815260036020526040902054161561124c57600080fd5b6001600160a01b03928316600090815260036020908152604080832080546001600160a01b031990811696909716958617905560028054600181019091557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180549096169094179094556006909352912055565b60095462010000900460ff1681565b6000546001600160a01b0316331461131d576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b306001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166374d945ec7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113b457600080fd5b505afa1580156113c8573d6000803e3d6000fd5b505050506040513d60208110156113de57600080fd5b50516001600160a01b0316146114255760405162461bcd60e51b81526004018080602001828103825260268152602001806123316026913960400191505060405180910390fd5b60095462010000900460ff1615611475576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b604482015290519081900360640190fd5b61147d61091c565b60005b6002548110156117185760006002828154811061149957fe5b6000918252602080832090910154604080516370a0823160e01b815230600482015290516001600160a01b03909216945084926370a0823192602480840193829003018186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d602081101561151657600080fd5b50519050801561170e5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631eec5a9a84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d60208110156115c157600080fd5b50516040805163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820186905291519293509085169163095ea7b3916044808201926020929091908290030181600087803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b505050506040513d602081101561166357600080fd5b50506040805163bc157ac160e01b8152600481018490526001600160a01b0385811660248301526044820184905291517f00000000000000000000000000000000000000000000000000000000000000009092169163bc157ac1916064808201926020929091908290030181600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505050506040513d602081101561170a57600080fd5b5050505b5050600101611480565b506009805462ff0000191662010000179055565b6000546001600160a01b03163314611779576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6117a3437f00000000000000000000000000000000000000000000000000000000000000006121b3565b6001600160a01b03909216600090815260076020908152604080832094909455600890529190912055565b6000546001600160a01b0316331461181b576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260066020526040902054811061183f57600080fd5b6001600160a01b038216600090815260056020526040902054811161186357600080fd5b6001600160a01b03909116600090815260066020526040902055565b60066020526000908152604090205481565b6000546001600160a01b031633146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260076020526040902054431015611942576040805162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b604482015290519081900360640190fd5b6001600160a01b03166000908152600860209081526040808320805460068452828520558390556007909152812055565b60045481565b6009547f00000000000000000000000000000000000000000000000000000000000000009062010000900460ff1615611a90577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636d34b96e84846119e6856107ca565b85866040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b03168152602001836001600160a01b031681526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015611a7357600080fd5b505af1158015611a87573d6000803e3d6000fd5b505050506110ea565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633111e7b38484611aca306107ca565b856040518563ffffffff1660e01b81526004018080602001848152602001836001600160a01b031681526020018281038252868682818152602001925060200280828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b4657600080fd5b505af11580156110e5573d6000803e3d6000fd5b60095461ffff1681565b60086020526000908152604090205481565b6000546001600160a01b03163314611bc3576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b0382811660009081526003602052604090205460095491169062010000900460ff1615611c81577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630b0eee3082846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050505b806001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b505050506040513d6020811015611d2257600080fd5b505060408051631a4ca37b60e21b81526001600160a01b0383811660048301526024820185905230604483015291517f0000000000000000000000000000000000000000000000000000000000000000909216916369328dec916064808201926020929091908290030181600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611e1457600080fd5b505afa158015611e28573d6000803e3d6000fd5b505050506040513d6020811015611e3e57600080fd5b505160408051630f762d4d60e11b81526001600160a01b0387811660048301526024820184905291519293506000927f000000000000000000000000000000000000000000000000000000000000000090921691631eec5a9a91604480820192602092909190829003018186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50519050611ef385838360006120be565b846001600160a01b031663095ea7b37f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f6a57600080fd5b505af1158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b50506040805163bc157ac160e01b8152600481018490526001600160a01b0387811660248301526044820184905291517f00000000000000000000000000000000000000000000000000000000000000009092169163bc157ac1916064808201926020929091908290030181600087803b1580156110bb57600080fd5b6001600160a01b0382166000908152600560205260408120548161203582856121b3565b6001600160a01b038616600090815260066020526040902054109250505092915050565b6000546001600160a01b031633146120a6576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6009805461ffff191661ffff92909216919091179055565b8015612115576001600160a01b0384166000908152600560205260409020546120e790846121b3565b6001600160a01b03851660009081526005602052604090205560045461210d90836121b3565b6004556121ad565b6001600160a01b038416600090815260056020526040902054831015612176576001600160a01b0384166000908152600560205260409020546121589084612214565b6001600160a01b038516600090815260056020526040902055612190565b6001600160a01b0384166000908152600560205260408120555b6004548210156121a75760045461210d9083612214565b60006004555b50505050565b60008282018381101561220d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061220d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156122e05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122a557818101518382015260200161228d565b50505050905090810190601f1680156122d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c436f6e7472616374206e6f7420617070726f76656420746f20636c61696d20726577617264734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220120c1628feea49332e5b9f09537b06dbff32116342c0ecad06e68fa80c36688e64736f6c63430007050033000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed200000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80636daa9850116100f9578063c901761d11610097578063e8bb5d3411610071578063e8bb5d341461053e578063f3fef3a314610564578063f8ff9a4914610590578063fa43b69c146105bc576101c4565b8063c901761d146104a7578063d710951a146104af578063d8b6d2521461051f576101c4565b8063895a0293116100d3578063895a02931461040357806398c606121461042f578063a1fadad01461045b578063c087cdf414610481576101c4565b80636daa9850146103a9578063718b2058146103df57806388136d5e146103fb576101c4565b80632f15f45e1161016657806346f68ee91161014057806346f68ee91461032957806347e7ef241461034f57806349a259e41461037b5780635a96ac0a146103a1576101c4565b80632f15f45e146102fc578063324e4b57146103045780634641257d14610321576101c4565b806312b16726116101a257806312b16726146101ff5780631b0b820a146102375780631c3859f9146102b057806324cf7600146102d6576101c4565b80630253dad0146101c95780630505c8c9146101d3578063089208d8146101f7575b600080fd5b6101d16105dd565b005b6101db610638565b604080516001600160a01b039092168252519081900360200190f35b6101d1610647565b6102256004803603602081101561021557600080fd5b50356001600160a01b03166106de565b60408051918252519081900360200190f35b6102256004803603604081101561024d57600080fd5b81019060208101813564010000000081111561026857600080fd5b82018360208201111561027a57600080fd5b8035906020019184602083028401116401000000008311171561029c57600080fd5b9193509150356001600160a01b03166106f0565b610225600480360360208110156102c657600080fd5b50356001600160a01b03166107ca565b610225600480360360208110156102ec57600080fd5b50356001600160a01b03166108bc565b6102256108ce565b6101db6004803603602081101561031a57600080fd5b50356108f2565b6101d161091c565b6101d16004803603602081101561033f57600080fd5b50356001600160a01b0316610b39565b6101d16004803603604081101561036557600080fd5b506001600160a01b038135169060200135610c26565b6101db6004803603602081101561039157600080fd5b50356001600160a01b03166110ef565b6101d161110a565b6101d1600480360360608110156103bf57600080fd5b506001600160a01b038135811691602081013590911690604001356111b4565b6103e76112c1565b604080519115158252519081900360200190f35b6101d16112d0565b6101d16004803603604081101561041957600080fd5b506001600160a01b03813516906020013561172c565b6101d16004803603604081101561044557600080fd5b506001600160a01b0381351690602001356117ce565b6102256004803603602081101561047157600080fd5b50356001600160a01b031661187f565b6101d16004803603602081101561049757600080fd5b50356001600160a01b0316611891565b610225611973565b6101d1600480360360208110156104c557600080fd5b8101906020810181356401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184602083028401116401000000008311171561051457600080fd5b509092509050611979565b610527611b5a565b6040805161ffff9092168252519081900360200190f35b6102256004803603602081101561055457600080fd5b50356001600160a01b0316611b64565b6101d16004803603604081101561057a57600080fd5b506001600160a01b038135169060200135611b76565b6103e7600480360360408110156105a657600080fd5b506001600160a01b038135169060200135612011565b6101d1600480360360208110156105d257600080fd5b503561ffff16612059565b6000546001600160a01b0316331461062a576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6009805462ff000019169055565b6000546001600160a01b031690565b6000546001600160a01b03163314610694576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b60076020526000908152604090205481565b60007f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316638b599f268585856040518463ffffffff1660e01b81526004018080602001836001600160a01b031681526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561079657600080fd5b505afa1580156107aa573d6000803e3d6000fd5b505050506040513d60208110156107c057600080fd5b5051949350505050565b60007f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316638b599f266002846040518363ffffffff1660e01b81526004018080602001836001600160a01b03168152602001828103825284818154815260200191508054801561086b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161084d575b5050935050505060206040518083038186803b15801561088a57600080fd5b505afa15801561089e573d6000803e3d6000fd5b505050506040513d60208110156108b457600080fd5b505192915050565b60056020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000181565b6002818154811061090257600080fd5b6000918252602090912001546001600160a01b0316905081565b6009547f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed209062010000900460ff1615610a4d577f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316636d34b96e6002610989846107ca565b84856040518563ffffffff1660e01b81526004018080602001858152602001846001600160a01b03168152602001836001600160a01b031681526020018281038252868181548152602001915080548015610a0d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109ef575b505095505050505050600060405180830381600087803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b50505050610b36565b7f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316633111e7b36002610a87306107ca565b846040518463ffffffff1660e01b81526004018080602001848152602001836001600160a01b031681526020018281038252858181548152602001915080548015610afb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610add575b5050945050505050600060405180830381600087803b158015610b1d57600080fd5b505af1158015610b31573d6000803e3d6000fd5b505050505b50565b6000546001600160a01b03163314610b86576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038116610bcb5760405162461bcd60e51b81526004018080602001828103825260268152602001806122e96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c73576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b610c7d8282612011565b15610c8757600080fd5b7f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed206001600160a01b0316630b0eee3083836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610cfe57600080fd5b505af1158015610d12573d6000803e3d6000fd5b50505050816001600160a01b031663095ea7b37f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b50506009546040805163e8eda9df60e01b81526001600160a01b0385811660048301526024820185905230604483015261ffff909316606482015290517f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a99092169163e8eda9df9160848082019260009290919082900301818387803b158015610e4057600080fd5b505af1158015610e54573d6000803e3d6000fd5b5050505060007f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed206001600160a01b0316631eec5a9a84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015610ecf57600080fd5b505afa158015610ee3573d6000803e3d6000fd5b505050506040513d6020811015610ef957600080fd5b50519050610f0a83838360016120be565b60095462010000900460ff16156110ea576001600160a01b0380841660009081526003602090815260408083205481516370a0823160e01b8152306004820152915194169384926370a082319260248082019391829003018186803b158015610f7257600080fd5b505afa158015610f86573d6000803e3d6000fd5b505050506040513d6020811015610f9c57600080fd5b50516040805163095ea7b360e01b81526001600160a01b037f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed20811660048301526024820184905291519293509084169163095ea7b3916044808201926020929091908290030181600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050506040513d602081101561103e57600080fd5b50506040805163bc157ac160e01b8152600481018390526001600160a01b0384811660248301526044820186905291517f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed209092169163bc157ac1916064808201926020929091908290030181600087803b1580156110bb57600080fd5b505af11580156110cf573d6000803e3d6000fd5b505050506040513d60208110156110e557600080fd5b505050505b505050565b6003602052600090815260409020546001600160a01b031681565b6001546001600160a01b031633146111535760405162461bcd60e51b815260040180806020018281038252602281526020018061230f6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b03163314611201576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b03831661121457600080fd5b6001600160a01b03821661122757600080fd5b6001600160a01b03838116600090815260036020526040902054161561124c57600080fd5b6001600160a01b03928316600090815260036020908152604080832080546001600160a01b031990811696909716958617905560028054600181019091557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180549096169094179094556006909352912055565b60095462010000900460ff1681565b6000546001600160a01b0316331461131d576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b306001600160a01b03167f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b03166374d945ec7f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed206040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113b457600080fd5b505afa1580156113c8573d6000803e3d6000fd5b505050506040513d60208110156113de57600080fd5b50516001600160a01b0316146114255760405162461bcd60e51b81526004018080602001828103825260268152602001806123316026913960400191505060405180910390fd5b60095462010000900460ff1615611475576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b604482015290519081900360640190fd5b61147d61091c565b60005b6002548110156117185760006002828154811061149957fe5b6000918252602080832090910154604080516370a0823160e01b815230600482015290516001600160a01b03909216945084926370a0823192602480840193829003018186803b1580156114ec57600080fd5b505afa158015611500573d6000803e3d6000fd5b505050506040513d602081101561151657600080fd5b50519050801561170e5760007f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed206001600160a01b0316631eec5a9a84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d60208110156115c157600080fd5b50516040805163095ea7b360e01b81526001600160a01b037f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed20811660048301526024820186905291519293509085169163095ea7b3916044808201926020929091908290030181600087803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b505050506040513d602081101561166357600080fd5b50506040805163bc157ac160e01b8152600481018490526001600160a01b0385811660248301526044820184905291517f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed209092169163bc157ac1916064808201926020929091908290030181600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505050506040513d602081101561170a57600080fd5b5050505b5050600101611480565b506009805462ff0000191662010000179055565b6000546001600160a01b03163314611779576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6117a3437f00000000000000000000000000000000000000000000000000000000000000016121b3565b6001600160a01b03909216600090815260076020908152604080832094909455600890529190912055565b6000546001600160a01b0316331461181b576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260066020526040902054811061183f57600080fd5b6001600160a01b038216600090815260056020526040902054811161186357600080fd5b6001600160a01b03909116600090815260066020526040902055565b60066020526000908152604090205481565b6000546001600160a01b031633146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260076020526040902054431015611942576040805162461bcd60e51b8152602060048201526014602482015273151a5b595b1bd8dac81b9bdd08195e1c1a5c995960621b604482015290519081900360640190fd5b6001600160a01b03166000908152600860209081526040808320805460068452828520558390556007909152812055565b60045481565b6009547f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed209062010000900460ff1615611a90577f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316636d34b96e84846119e6856107ca565b85866040518663ffffffff1660e01b81526004018080602001858152602001846001600160a01b03168152602001836001600160a01b031681526020018281038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015611a7357600080fd5b505af1158015611a87573d6000803e3d6000fd5b505050506110ea565b7f000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b56001600160a01b0316633111e7b38484611aca306107ca565b856040518563ffffffff1660e01b81526004018080602001848152602001836001600160a01b031681526020018281038252868682818152602001925060200280828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611b4657600080fd5b505af11580156110e5573d6000803e3d6000fd5b60095461ffff1681565b60086020526000908152604090205481565b6000546001600160a01b03163314611bc3576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6001600160a01b0382811660009081526003602052604090205460095491169062010000900460ff1615611c81577f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed206001600160a01b0316630b0eee3082846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611c6857600080fd5b505af1158015611c7c573d6000803e3d6000fd5b505050505b806001600160a01b031663095ea7b37f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611cf857600080fd5b505af1158015611d0c573d6000803e3d6000fd5b505050506040513d6020811015611d2257600080fd5b505060408051631a4ca37b60e21b81526001600160a01b0383811660048301526024820185905230604483015291517f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9909216916369328dec916064808201926020929091908290030181600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b505050506040513d6020811015611dc857600080fd5b5050604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611e1457600080fd5b505afa158015611e28573d6000803e3d6000fd5b505050506040513d6020811015611e3e57600080fd5b505160408051630f762d4d60e11b81526001600160a01b0387811660048301526024820184905291519293506000927f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed2090921691631eec5a9a91604480820192602092909190829003018186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d6020811015611ee257600080fd5b50519050611ef385838360006120be565b846001600160a01b031663095ea7b37f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed20846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f6a57600080fd5b505af1158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b50506040805163bc157ac160e01b8152600481018490526001600160a01b0387811660248301526044820184905291517f000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed209092169163bc157ac1916064808201926020929091908290030181600087803b1580156110bb57600080fd5b6001600160a01b0382166000908152600560205260408120548161203582856121b3565b6001600160a01b038616600090815260066020526040902054109250505092915050565b6000546001600160a01b031633146120a6576040805162461bcd60e51b81526020600482018190526024820152600080516020612357833981519152604482015290519081900360640190fd5b6009805461ffff191661ffff92909216919091179055565b8015612115576001600160a01b0384166000908152600560205260409020546120e790846121b3565b6001600160a01b03851660009081526005602052604090205560045461210d90836121b3565b6004556121ad565b6001600160a01b038416600090815260056020526040902054831015612176576001600160a01b0384166000908152600560205260409020546121589084612214565b6001600160a01b038516600090815260056020526040902055612190565b6001600160a01b0384166000908152600560205260408120555b6004548210156121a75760045461210d9083612214565b60006004555b50505050565b60008282018381101561220d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600061220d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250600081848411156122e05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156122a557818101518382015260200161228d565b50505050905090810190601f1680156122d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c436f6e7472616374206e6f7420617070726f76656420746f20636c61696d20726577617264734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220120c1628feea49332e5b9f09537b06dbff32116342c0ecad06e68fa80c36688e64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed200000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _treasury (address): 0xDb682fC2af3a1791081AC4efb60176c0A0c8eD20
Arg [1] : _lendingPool (address): 0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9
Arg [2] : _incentives (address): 0xd784927Ff2f95ba542BfC824c8a8a98F3495f6b5
Arg [3] : _timelockInBlocks (uint256): 1
Arg [4] : _referralCode (uint16): 0
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000db682fc2af3a1791081ac4efb60176c0a0c8ed20
Arg [1] : 0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9
Arg [2] : 000000000000000000000000d784927ff2f95ba542bfc824c8a8a98f3495f6b5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
23025:10856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31592:101;;;:::i;:::-;;21064:89;;;:::i;:::-;;;;-1:-1:-1;;;;;21064:89:0;;;;;;;;;;;;;;21289:158;;;:::i;23936:55::-;;;;;;;;;;;;;;;;-1:-1:-1;23936:55:0;-1:-1:-1;;;;;23936:55:0;;:::i;:::-;;;;;;;;;;;;;;;;33273:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33273:169:0;-1:-1:-1;33273:169:0;-1:-1:-1;;;;;33273:169:0;;:::i;32992:140::-;;;;;;;;;;;;;;;;-1:-1:-1;32992:140:0;-1:-1:-1;;;;;32992:140:0;;:::i;23667:45::-;;;;;;;;;;;;;;;;-1:-1:-1;23667:45:0;-1:-1:-1;;;;;23667:45:0;;:::i;23853:38::-;;;:::i;23439:24::-;;;;;;;;;;;;;;;;-1:-1:-1;23439:24:0;;:::i;25129:351::-;;;:::i;21455:260::-;;;;;;;;;;;;;;;;-1:-1:-1;21455:260:0;-1:-1:-1;;;;;21455:260:0;;:::i;26260:1140::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26260:1140:0;;;;;;;;:::i;23494:51::-;;;;;;;;;;;;;;;;-1:-1:-1;23494:51:0;-1:-1:-1;;;;;23494:51:0;;:::i;21727:221::-;;;:::i;28813:377::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28813:377:0;;;;;;;;;;;;;;;;;:::i;24262:29::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;30672:836;;;:::i;29725:202::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29725:202:0;;;;;;;;:::i;29342:228::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29342:228:0;;;;;;;;:::i;23757:48::-;;;;;;;;;;;;;;;;-1:-1:-1;23757:48:0;-1:-1:-1;;;;;23757:48:0;;:::i;30055:292::-;;;;;;;;;;;;;;;;-1:-1:-1;30055:292:0;-1:-1:-1;;;;;30055:292:0;;:::i;23590:30::-;;;:::i;25624:381::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25624:381:0;;-1:-1:-1;25624:381:0;-1:-1:-1;25624:381:0;:::i;24130:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24031:42;;;;;;;;;;;;;;;;-1:-1:-1;24031:42:0;-1:-1:-1;;;;;24031:42:0;;:::i;27595:1067::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27595:1067:0;;;;;;;;:::i;33609:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33609:269:0;;;;;;;;:::i;30459:100::-;;;;;;;;;;;;;;;;-1:-1:-1;30459:100:0;;;;:::i;31592:101::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;31660:17:::1;:25:::0;;-1:-1:-1;;31660:25:0::1;::::0;;31592:101::o;21064:89::-;21112:7;21139:6;-1:-1:-1;;;;;21139:6:0;21064:89;:::o;21289:158::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;21405:1:::1;21389:6:::0;;21372:37:::1;::::0;-1:-1:-1;;;;;21389:6:0;;::::1;::::0;21372:37:::1;::::0;21405:1;;21372:37:::1;21437:1;21420:19:::0;;-1:-1:-1;;;;;;21420:19:0::1;::::0;;21289:158::o;23936:55::-;;;;;;;;;;;;;:::o;33273:169::-;33365:4;33390:10;-1:-1:-1;;;;;33390:28:0;;33420:6;;33428:4;33390:44;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33390:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33390:44:0;;;;;-1:-1:-1;33390:44:0;;-1:-1:-1;33390:44:0;;-1:-1:-1;;;33390:44:0;;;;-1:-1:-1;33390:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33390:44:0;;33273:169;-1:-1:-1;;;;33273:169:0:o;32992:140::-;33054:4;33079:10;-1:-1:-1;;;;;33079:28:0;;33109:7;33118:4;33079:45;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33079:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33079:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33079:45:0;;32992:140;-1:-1:-1;;32992:140:0:o;23667:45::-;;;;;;;;;;;;;:::o;23853:38::-;;;:::o;23439:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23439:24:0;;-1:-1:-1;23439:24:0;:::o;25129:351::-;25220:17;;25195:8;;25220:17;;;;;25216:257;;;25255:10;-1:-1:-1;;;;;25255:31:0;;25288:7;25297:27;25313:9;25297:14;:27::i;:::-;25326:9;25337;25255:93;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25255:93:0;;;;;;-1:-1:-1;;;;;25255:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25255:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25216:257;;;25381:10;-1:-1:-1;;;;;25381:23:0;;25406:7;25415:33;25440:4;25415:14;:33::i;:::-;25450:9;25381:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25381:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25381:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25216:257;25129:351;:::o;21455:260::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21557:23:0;::::1;21548:75;;;;-1:-1:-1::0;;;21548:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21656:6;::::0;;21639:36:::1;::::0;-1:-1:-1;;;;;21639:36:0;;::::1;::::0;21656:6;::::1;::::0;21639:36:::1;::::0;::::1;21686:9;:21:::0;;-1:-1:-1;;;;;;21686:21:0::1;-1:-1:-1::0;;;;;21686:21:0;;;::::1;::::0;;;::::1;::::0;;21455:260::o;26260:1140::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;26348:29:::1;26362:5;26369:6;26348:12;:29::i;:::-;26347:30;26338:41;;;::::0;::::1;;26427:8;-1:-1:-1::0;;;;;26427:15:0::1;;26444:5;26451:6;26427:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;26427:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26522:5;-1:-1:-1::0;;;;;26514:23:0::1;;26548:11;26563:6;26514:57;;;;;;;;;;;;;-1:-1:-1::0;;;;;26514:57:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;26673:12:0::1;::::0;26622:65:::1;::::0;;-1:-1:-1;;;26622:65:0;;-1:-1:-1;;;;;26622:65:0;;::::1;;::::0;::::1;::::0;;;;;;;26666:4:::1;26622:65:::0;;;;26673:12:::1;::::0;;::::1;26622:65:::0;;;;;;:11:::1;:19:::0;;::::1;::::0;::::1;::::0;:65;;;;;-1:-1:-1;;26622:65:0;;;;;;;;-1:-1:-1;26622:19:0;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26729:10;26742:8;-1:-1:-1::0;;;;;26742:16:0::1;;26760:5;26767:6;26742:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;26742:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26742:33:0;;-1:-1:-1;26813:43:0::1;26828:5:::0;26835:6;26742:33;26850:4:::1;26813:13;:43::i;:::-;26905:17;::::0;;;::::1;;;26900:493;;;-1:-1:-1::0;;;;;27005:23:0;;::::1;26988:14;27005:23:::0;;;:14:::1;:23;::::0;;;;;;;;27080:43;;-1:-1:-1;;;27080:43:0;;27116:4:::1;27080:43;::::0;::::1;::::0;;;27005:23;::::1;::::0;;;27080:26:::1;::::0;:43;;;;;;;;;;;27005:23;27080:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27080:43:0;27170:57:::1;::::0;;-1:-1:-1;;;27170:57:0;;-1:-1:-1;;;;;27205:8:0::1;27170:57:::0;::::1;;::::0;::::1;::::0;;;;;;;;;27080:43;;-1:-1:-1;27170:24:0;;::::1;::::0;::::1;::::0;:57;;;;;27080:43:::1;::::0;27170:57;;;;;;;;-1:-1:-1;27170:24:0;:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;27285:43:0::1;::::0;;-1:-1:-1;;;27285:43:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;27285:43:0;;::::1;::::0;;;;;;;;;;;;:8:::1;:16:::0;;::::1;::::0;::::1;::::0;:43;;;;;27170:57:::1;::::0;27285:43;;;;;;;;-1:-1:-1;27285:16:0;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;26900:493:0::1;21272:1;26260:1140:::0;;:::o;23494:51::-;;;;;;;;;;;;-1:-1:-1;;;;;23494:51:0;;:::o;21727:221::-;21811:9;;-1:-1:-1;;;;;21811:9:0;21797:10;:23;21788:71;;;;-1:-1:-1;;;21788:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21900:9;;;21892:6;;21875:36;;-1:-1:-1;;;;;21900:9:0;;;;21892:6;;;;21875:36;;;21931:9;;;21922:18;;-1:-1:-1;;;;;;21922:18:0;-1:-1:-1;;;;;21931:9:0;;;21922:18;;;;;;21727:221::o;28813:377::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28916:19:0;::::1;28907:30;;;::::0;::::1;;-1:-1:-1::0;;;;;28957:20:0;::::1;28948:31;;;::::0;::::1;;-1:-1:-1::0;;;;;28999:23:0;;::::1;29034:1;28999:23:::0;;;:14:::1;:23;::::0;;;;;::::1;:37:::0;28990:48:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;29077:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;:32;;-1:-1:-1;;;;;;29077:32:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;29120:7:::1;:22:::0;;-1:-1:-1;29120:22:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;29153:14:::1;:23:::0;;;;;:29;28813:377::o;24262:29::-;;;;;;;;;:::o;30672:836::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;30805:4:::1;-1:-1:-1::0;;;;;30749:61:0::1;:10;-1:-1:-1::0;;;;;30749:21:0::1;;30781:8;30749:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;30749:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30749:44:0;-1:-1:-1;;;;;30749:61:0::1;;30740:114;;;;-1:-1:-1::0;;;30740:114:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30875:17;::::0;;;::::1;;;30874:18;30865:48;;;::::0;;-1:-1:-1;;;30865:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30865:48:0;;;;;;;;;;;;;::::1;;30926:9;:7;:9::i;:::-;30954:6;30948:518;30970:7;:14:::0;30966:18;::::1;30948:518;;;31007:14;31024:7;31032:1;31024:10;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;31064:43:::1;::::0;;-1:-1:-1;;;31064:43:0;;31100:4:::1;31064:43;::::0;::::1;::::0;;;-1:-1:-1;;;;;31024:10:0;;::::1;::::0;-1:-1:-1;31024:10:0;;31064:26:::1;::::0;:43;;;;;;;;;;31024:10;31064:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31064:43:0;;-1:-1:-1;31127:11:0;;31122:333:::1;;31160:10;31173:8;-1:-1:-1::0;;;;;31173:16:0::1;;31191:6;31199:7;31173:35;;;;;;;;;;;;;-1:-1:-1::0;;;;;31173:35:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31173:35:0;31227:56:::1;::::0;;-1:-1:-1;;;31227:56:0;;-1:-1:-1;;;;;31262:8:0::1;31227:56:::0;::::1;;::::0;::::1;::::0;;;;;;;;;31173:35;;-1:-1:-1;31227:24:0;;::::1;::::0;::::1;::::0;:56;;;;;31173:35:::1;::::0;31227:56;;;;;;;;-1:-1:-1;31227:24:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31344:42:0::1;::::0;;-1:-1:-1;;;31344:42:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;31344:42:0;;::::1;::::0;;;;;;;;;;;;:8:::1;:16:::0;;::::1;::::0;::::1;::::0;:42;;;;;31227:56:::1;::::0;31344:42;;;;;;;;-1:-1:-1;31344:16:0;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;31122:333:0::1;-1:-1:-1::0;;30986:3:0::1;;30948:518;;;-1:-1:-1::0;31476:17:0::1;:24:::0;;-1:-1:-1;;31476:24:0::1;::::0;::::1;::::0;;30672:836::o;29725:202::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;29846:36:::1;:12;29864:16;29846;:36::i;:::-;-1:-1:-1::0;;;;;29813:30:0;;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;:69;;;;29893:8:::1;:17:::0;;;;;;:26;29725:202::o;29342:228::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29443:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;29434:32;::::1;29425:43;;;::::0;::::1;;-1:-1:-1::0;;;;;29497:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;29488:29;::::1;29479:40;;;::::0;::::1;;-1:-1:-1::0;;;;;29530:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:32;29342:228::o;23757:48::-;;;;;;;;;;;;;:::o;30055:292::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30150:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;30134:12:::1;:46;;30125:81;;;::::0;;-1:-1:-1;;;30125:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30125:81:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30245:17:0::1;;::::0;;;:8:::1;:17;::::0;;;;;;;;;30219:14:::1;:23:::0;;;;;:43;30273:21;;;30305::::1;:30:::0;;;;;:34;30055:292::o;23590:30::-;;;;:::o;25624:381::-;25747:17;;25722:8;;25747:17;;;;;25743:255;;;25782:10;-1:-1:-1;;;;;25782:31:0;;25815:6;;25823:27;25839:9;25823:14;:27::i;:::-;25852:9;25863;25782:92;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25782:92:0;;;;;;-1:-1:-1;;;;;25782:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25743:255;;;25907:10;-1:-1:-1;;;;;25907:23:0;;25932:6;;25940:33;25965:4;25940:14;:33::i;:::-;25975:9;25907:79;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25907:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24130:26;;;;;;:::o;24031:42::-;;;;;;;;;;;;;:::o;27595:1067::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27691:23:0;;::::1;27674:14;27691:23:::0;;;:14:::1;:23;::::0;;;;;27754:17:::1;::::0;27691:23;::::1;::::0;27754:17;;::::1;;;27749:166;;;27837:8;-1:-1:-1::0;;;;;27837:15:0::1;;27854:6;27862;27837:33;;;;;;;;;;;;;-1:-1:-1::0;;;;;27837:33:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27749:166;27935:6;-1:-1:-1::0;;;;;27927:24:0::1;;27962:11;27977:6;27927:58;;;;;;;;;;;;;-1:-1:-1::0;;;;;27927:58:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;28037:53:0::1;::::0;;-1:-1:-1;;;28037:53:0;;-1:-1:-1;;;;;28037:53:0;;::::1;;::::0;::::1;::::0;;;;;;;28083:4:::1;28037:53:::0;;;;;;:11:::1;:20:::0;;::::1;::::0;::::1;::::0;:53;;;;;27927:58:::1;::::0;28037:53;;;;;;;;-1:-1:-1;28037:20:0;:53;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;28173:42:0::1;::::0;;-1:-1:-1;;;28173:42:0;;28208:4:::1;28173:42;::::0;::::1;::::0;;;28158:12:::1;::::0;-1:-1:-1;;;;;28173:25:0;::::1;::::0;::::1;::::0;:42;;;;;28037:53:::1;::::0;28173:42;;;;;;;;:25;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28173:42:0;28286:34:::1;::::0;;-1:-1:-1;;;28286:34:0;;-1:-1:-1;;;;;28286:34:0;;::::1;;::::0;::::1;::::0;;;;;;;;;28173:42;;-1:-1:-1;;;28286:8:0::1;:16:::0;;::::1;::::0;::::1;::::0;:34;;;;;28173:42:::1;::::0;28286:34;;;;;;;;:16;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28286:34:0;;-1:-1:-1;28368:45:0::1;28383:5:::0;28390:7;28286:34;28406:5:::1;28368:13;:45::i;:::-;28460:5;-1:-1:-1::0;;;;;28452:23:0::1;;28486:8;28498:7;28452:55;;;;;;;;;;;;;-1:-1:-1::0;;;;;28452:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;28560:41:0::1;::::0;;-1:-1:-1;;;28560:41:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;28560:41:0;;::::1;::::0;;;;;;;;;;;;:8:::1;:16:::0;;::::1;::::0;::::1;::::0;:41;;;;;28452:55:::1;::::0;28560:41;;;;;;;;-1:-1:-1;28560:16:0;:41;::::1;;::::0;::::1;;;;::::0;::::1;33609:269:::0;-1:-1:-1;;;;;33724:20:0;;33683:4;33724:20;;;:11;:20;;;;;;33683:4;33777:29;33724:20;33798:6;33777:19;:29::i;:::-;-1:-1:-1;;;;;33845:23:0;;;;;;:14;:23;;;;;;-1:-1:-1;33828:40:0;-1:-1:-1;;;33609:269:0;;;;:::o;30459:100::-;21203:6;;-1:-1:-1;;;;;21203:6:0;21213:10;21203:20;21194:67;;;;;-1:-1:-1;;;21194:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21194:67:0;;;;;;;;;;;;;;;30532:12:::1;:19:::0;;-1:-1:-1;;30532:19:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30459:100::o;31945:908::-;32044:3;32040:806;;;-1:-1:-1;;;;;32088:20:0;;;;;;:11;:20;;;;;;:34;;32114:6;32088:24;:34::i;:::-;-1:-1:-1;;;;;32065:20:0;;;;;;:11;:20;;;;;:57;32204:18;;:31;;32228:5;32204:22;:31::i;:::-;32183:18;:52;32040:806;;;-1:-1:-1;;;;;32387:20:0;;;;;;:11;:20;;;;;;32378:29;;32373:195;;;-1:-1:-1;;;;;32452:20:0;;;;;;:11;:20;;;;;;:34;;32478:6;32452:24;:34::i;:::-;-1:-1:-1;;;;;32429:20:0;;;;;;:11;:20;;;;;:57;32373:195;;;-1:-1:-1;;;;;32528:20:0;;32551:1;32528:20;;;:11;:20;;;;;:24;32373:195;32664:18;;32656:5;:26;32651:184;;;32725:18;;:31;;32749:5;32725:22;:31::i;32651:184::-;32818:1;32797:18;:22;32651:184;31945:908;;;;:::o;10106:181::-;10164:7;10196:5;;;10220:6;;;;10212:46;;;;;-1:-1:-1;;;10212:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10278:1;10106:181;-1:-1:-1;;;10106:181:0:o;10570:136::-;10628:7;10655:43;10659:1;10662;10655:43;;;;;;;;;;;;;;;;;11095:7;11131:12;11123:6;;;;11115:29;;;;-1:-1:-1;;;11115:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11167:5:0;;;11009:192::o
Swarm Source
ipfs://120c1628feea49332e5b9f09537b06dbff32116342c0ecad06e68fa80c36688e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1 | 1.1268 | $1.13 |
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.