Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,507 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Close Trade | 11733306 | 1426 days ago | IN | 0 ETH | 0.01350422 | ||||
Close Trade | 11732356 | 1426 days ago | IN | 0 ETH | 0.01350734 | ||||
Close Trade | 11732340 | 1426 days ago | IN | 0 ETH | 0.01561527 | ||||
Pause | 11732318 | 1426 days ago | IN | 0 ETH | 0.00282759 | ||||
Close Trade | 11732316 | 1426 days ago | IN | 0 ETH | 0.0024076 | ||||
Open Trade | 11732312 | 1426 days ago | IN | 0 ETH | 0.03900898 | ||||
Close Trade | 11732309 | 1426 days ago | IN | 0 ETH | 0.0122797 | ||||
Claim Gains | 11732306 | 1426 days ago | IN | 0 ETH | 0.0050134 | ||||
Open Trade | 11732299 | 1426 days ago | IN | 0 ETH | 0.0387951 | ||||
Close Trade | 11732291 | 1426 days ago | IN | 0 ETH | 0.0122794 | ||||
Open Trade | 11732260 | 1426 days ago | IN | 0 ETH | 0.04616759 | ||||
Close Trade | 11732254 | 1426 days ago | IN | 0 ETH | 0.01399885 | ||||
Open Trade | 11732239 | 1426 days ago | IN | 0 ETH | 0.04306256 | ||||
Close Trade | 11732174 | 1426 days ago | IN | 0 ETH | 0.01589328 | ||||
Open Trade | 11731966 | 1426 days ago | IN | 0 ETH | 0.05392685 | ||||
Open Trade | 11731946 | 1426 days ago | IN | 0 ETH | 0.04655556 | ||||
Close Trade | 11731944 | 1426 days ago | IN | 0 ETH | 0.0178272 | ||||
Open Trade | 11731928 | 1426 days ago | IN | 0 ETH | 0.04267461 | ||||
Close Trade | 11731924 | 1426 days ago | IN | 0 ETH | 0.01495872 | ||||
Open Trade | 11731916 | 1426 days ago | IN | 0 ETH | 0.04228665 | ||||
Close Trade | 11731899 | 1426 days ago | IN | 0 ETH | 0.01301616 | ||||
Close Trade | 11731871 | 1426 days ago | IN | 0 ETH | 0.0127764 | ||||
Open Trade | 11731868 | 1426 days ago | IN | 0 ETH | 0.03685648 | ||||
Liquidate | 11731860 | 1426 days ago | IN | 0 ETH | 0.00975137 | ||||
Close Trade | 11731851 | 1426 days ago | IN | 0 ETH | 0.01080587 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GFarmTrading
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-15 */ // File: contracts\GFarmTokenInterface.sol // SPDX-License-Identifier: MIT pragma solidity 0.7.5; interface GFarmTokenInterface{ function balanceOf(address account) external view returns (uint256); function transferFrom(address from, address to, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function burn(address from, uint256 amount) external; function mint(address to, uint256 amount) external; } // File: contracts\GFarmNFTInterface.sol pragma solidity 0.7.5; interface GFarmNFTInterface{ function balanceOf(address owner) external view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function leverageID(uint8 _leverage) external pure returns(uint8); function idToLeverage(uint id) external view returns(uint8); } // File: @openzeppelin\contracts\math\SafeMath.sol pragma solidity ^0.7.0; /** * @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; } } // File: @uniswap\v2-core\contracts\interfaces\IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: contracts\GFarmTrading.sol pragma solidity 0.7.5; contract GFarmTrading{ using SafeMath for uint; // VARIABLES & CONSTANTS // 1. Tokens GFarmTokenInterface public token; IUniswapV2Pair public lp; GFarmNFTInterface public nft; // 2. Trading uint constant PRECISION = 1e5; bool public TRADING_PAUSED; uint constant MAX_GAIN_P = 400; // 400% = 5x uint constant STOP_LOSS_P = 90; // -90% uint public MIN_POSITION_SIZE_ETH = 0; // 1e18 uint public MAX_POS_GFARM_LP_P = 200000; // (2%) PRECISION uint public MAX_ACTIVITY_PER_BLOCK = 10; uint constant MAX_GFARM_POS_MUL = 2; // 2x uint public TOTAL_GFARM_BURNED; uint public TOTAL_GFARM_MINTED; // 3. Important uniswap addresses / pairs address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IUniswapV2Pair constant ethPairDAI = IUniswapV2Pair(0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11); IUniswapV2Pair constant ethPairUSDT = IUniswapV2Pair(0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852); IUniswapV2Pair constant ethPairUSDC = IUniswapV2Pair(0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc); // 4. Governance & dev fund address public GOVERNANCE; address public immutable DEV_FUND; uint constant GOVERNANCE_P = 50000; // PRECISION uint constant DEV_FUND_P = 50000; // PRECISION // 6. Info on each trade struct Trade{ uint openBlock; address initiator; bool buy; uint openPrice; // PRECISION uint initialPositionSizeGFARM; // 1e18 uint positionSizeETH; // 1e18 uint16 leverage; } // 7. Info on each user's gains struct Gains{ uint valueGFARM; // 1e18 uint lastTradeClosed; // block } // 8. Mappings: each user mapping(address => Trade) public trades; mapping(address => Gains) public gains; mapping(address => uint) private addressTradeOpenID; // 9. General mapping(uint => uint) private tradesPerBlock; address[] public addressesTradeOpen; // 10. Events event TradeOpened( address indexed a, uint price, bool buy, uint positionSizeETH, uint positionSizeGFARM, uint leverage ); event TradeClosed( address indexed a, uint price, bool buy, uint positionSizeETH, uint positionSizeGFARM, uint leverage, int pnlGFARM, int pnlETH ); event TradeLiquidated( address indexed liquidator, address indexed trader, uint price, bool buy, uint positionSizeETH, uint positionSizeGFARM, uint leverage, uint rewardGFARM, uint rewardETH ); event GainsClaimed( address indexed a, uint amountGFARM, uint amountETH ); constructor(address _GOV, address _DEV){ GOVERNANCE = _GOV; DEV_FUND = _DEV; } // GOVERNANCE // 0. Modifier modifier onlyGov(){ require(msg.sender == GOVERNANCE, "Can only be called by governance."); _; } // 1. Update governance address function set_GOVERNANCE(address _gov) external onlyGov{ require(msg.sender == GOVERNANCE); GOVERNANCE = _gov; } // 2. Set token address function set_TOKEN(address _token) external onlyGov{ require(token == GFarmTokenInterface(0), "Token address already set"); token = GFarmTokenInterface(_token); } // 3. Set lp address function set_LP(address _lp) external onlyGov{ require(lp == IUniswapV2Pair(0), "LP address already set"); lp = IUniswapV2Pair(_lp); } // 4. Set token address function set_NFT(address _nft) external onlyGov{ require(nft == GFarmNFTInterface(0), "NFT address already set"); nft = GFarmNFTInterface(_nft); } // 5. Update max trading activity per blockx function set_MAX_ACTIVITY_PER_BLOCK(uint _maxTrades) external onlyGov{ require(_maxTrades < 15); MAX_ACTIVITY_PER_BLOCK = _maxTrades; } // 6. Update min position size in ETH to open a trade function set_MIN_POSITION_SIZE_ETH(uint _minPos) external onlyGov{ MIN_POSITION_SIZE_ETH = _minPos; } // 7. Update max GFARM position size based on GFARM liquidity function set_MAX_POS_GFARM_LP_P(uint _maxPosLp) external onlyGov{ MAX_POS_GFARM_LP_P = _maxPosLp; } // 8. Prevent the opening of new trades & gain claims function pause() external onlyGov{ TRADING_PAUSED = true; } // 9. Resume the opening of new trades & gain claims function restart() external onlyGov{ TRADING_PAUSED = false; } // PRICING // 1. ETH price from ETH/DAI pool and ETH reserve (PRECISION, 1e18) function pairInfoDAI() private view returns(uint, uint){ (uint112 reserves0, uint112 reserves1, ) = ethPairDAI.getReserves(); uint reserveDAI; uint reserveETH; if(WETH == ethPairDAI.token0()){ reserveETH = reserves0; reserveDAI = reserves1; }else{ reserveDAI = reserves0; reserveETH = reserves1; } // DAI: 18 decimals return (reserveDAI.mul(PRECISION).div(reserveETH), reserveETH); } // 2. ETH price from ETH/USDT pool and ETH reserve (PRECISION, 1e18) function pairInfoUSDT() private view returns(uint, uint){ (uint112 reserves0, uint112 reserves1, ) = ethPairUSDT.getReserves(); uint reserveUSDT; uint reserveETH; if(WETH == ethPairUSDT.token0()){ reserveETH = reserves0; reserveUSDT = reserves1; }else{ reserveUSDT = reserves0; reserveETH = reserves1; } // USDT: 6 decimals return (reserveUSDT.mul(1e12).mul(PRECISION).div(reserveETH), reserveETH); } // 3. ETH price from ETH/USDC pool and ETH reserve (PRECISION, 1e18) function pairInfoUSDC() private view returns(uint, uint){ (uint112 reserves0, uint112 reserves1, ) = ethPairUSDC.getReserves(); uint reserveUSDC; uint reserveETH; if(WETH == ethPairUSDC.token0()){ reserveETH = reserves0; reserveUSDC = reserves1; }else{ reserveUSDC = reserves0; reserveETH = reserves1; } // USDC: 6 decimals return (reserveUSDC.mul(1e12).mul(PRECISION).div(reserveETH), reserveETH); } // 4. ETH price: weighted average based on liquidity (PRECISION) function getEthPrice() public view returns(uint){ (uint priceEthDAI, uint reserveEthDAI) = pairInfoDAI(); (uint priceEthUSDT, uint reserveEthUSDT) = pairInfoUSDT(); (uint priceEthUSDC, uint reserveEthUSDC) = pairInfoUSDC(); uint reserveEth = reserveEthDAI.add(reserveEthUSDT).add(reserveEthUSDC); return ( priceEthDAI.mul(reserveEthDAI).add( priceEthUSDT.mul(reserveEthUSDT) ).add( priceEthUSDC.mul(reserveEthUSDC) ) ).div(reserveEth); } // 5. GFARM and ETH reserves on Uniswap (1e18, 1e18) function getReservesLP() private view returns(uint, uint){ (uint112 reserves0, uint112 reserves1, ) = lp.getReserves(); uint reserveETH; uint reserveGFARM; if(WETH == lp.token0()){ reserveETH = reserves0; reserveGFARM = reserves1; }else{ reserveGFARM = reserves0; reserveETH = reserves1; } return (reserveGFARM, reserveETH); } // 6. GFARM price in ETH (PRECISION) function getGFarmPriceEth() private view returns(uint){ (uint reserveGFARM, uint reserveETH) = getReservesLP(); return reserveETH.mul(PRECISION).div(reserveGFARM); } // MAX & MIN POSITION SIZE // Min position size in GFARM (1e18) function getMinPosGFARM() public view returns(uint){ return MIN_POSITION_SIZE_ETH.mul(PRECISION).div(getGFarmPriceEth()); } // Max position size in GFARM (1e18) // Lowest between: MAX_POS_GFARM_LP_P % of GFARM liquidity OR // value based on ETH liquidity & trade leverage function getMaxPosGFARM(uint _leverage) public view returns(uint){ (, uint reserveEthDAI) = pairInfoDAI(); (, uint reserveEthUSDT) = pairInfoUSDT(); (, uint reserveEthUSDC) = pairInfoUSDC(); uint totalReserveETH = reserveEthDAI.add(reserveEthUSDT).add(reserveEthUSDC); uint sqrt10 = 3162277660168379331; // 1e18 precision uint maxPosGFARM = (sqrt10.mul(totalReserveETH).sub(totalReserveETH.mul(1e18))) .div(_leverage.mul(3000)) .div(1e18/PRECISION).div(getGFarmPriceEth()); (uint reserveGFARM, ) = getReservesLP(); uint maxPosGFARM_lpBased = reserveGFARM.mul(MAX_POS_GFARM_LP_P).div(100*PRECISION); if(maxPosGFARM > maxPosGFARM_lpBased){ return maxPosGFARM_lpBased; } return maxPosGFARM; } // PRIVATE FUNCTIONS (called internally only) // 1. Percent difference between 2 prices of ETH (PRECISION) function percentDiff(uint a, uint b) private pure returns(int){ return (int(b) - int(a))*100*int(PRECISION)/int(a); } // 2. Trades % PnL based on price movement (PRECISION) function currentPercentProfit( uint _openPrice, uint _currentPrice, bool _buy, uint16 _leverage) private pure returns(int p){ if(_buy){ p = percentDiff(_openPrice, _currentPrice)*int(_leverage); }else{ p = percentDiff(_openPrice, _currentPrice)*(-1)*int(_leverage); } int maxLossPercentage = -100 * int(PRECISION); int maxGainPercentage = int(MAX_GAIN_P * PRECISION); if(p < maxLossPercentage){ p = maxLossPercentage; }else if(p > maxGainPercentage){ p = maxGainPercentage; } } // 3. Has the trade reached the SL function canLiquidatePure( uint _openPrice, uint _currentPrice, bool _buy, uint16 _leverage) private pure returns(bool){ if(_buy){ return currentPercentProfit(_openPrice, _currentPrice, _buy, _leverage) <= (-1)*int(STOP_LOSS_P*PRECISION); }else{ return currentPercentProfit(_openPrice, _currentPrice, _buy, _leverage) <= (-1)*int(STOP_LOSS_P*PRECISION); } } // 4. Remove trade from list of open trades function unregisterOpenTrade(address a) private{ delete trades[a]; if(addressesTradeOpen.length > 1){ addressesTradeOpen[addressTradeOpenID[a]] = addressesTradeOpen[addressesTradeOpen.length - 1]; addressTradeOpenID[ addressesTradeOpen[addressesTradeOpen.length - 1] ] = addressTradeOpenID[a]; } addressesTradeOpen.pop(); delete addressTradeOpenID[a]; } // PUBLIC FUNCTIONS (called internally and externally) // 1. Does an address have an open trade function hasOpenTrade(address a) public view returns(bool){ return trades[a].openBlock != 0; } // 2. Does an address have an open trade that can be liquidated function canLiquidate(address a) public view returns(bool){ require(hasOpenTrade(a), "This address has no open trade."); Trade memory t = trades[a]; return canLiquidatePure(t.openPrice, getEthPrice(), t.buy, t.leverage); } // 3. GFARM position size based on ETH position size & GFARM/ETH price (1e18) function positionSizeGFARM(address a) public view returns(uint posGFARM){ Trade memory t = trades[a]; posGFARM = t.positionSizeETH.mul(PRECISION).div(getGFarmPriceEth()); // Max 2x initial position size if GFARM/ETH goes down uint doubleInitialPos = t.initialPositionSizeGFARM.mul(2); if(posGFARM > doubleInitialPos){ posGFARM = doubleInitialPos; } } // 4. PnL of msg.sender if has an open trade (1e18) function myTokenPNL() public view returns(int){ if(!hasOpenTrade(msg.sender)){ return 0; } Trade memory t = trades[msg.sender]; return int(positionSizeGFARM(msg.sender)) * currentPercentProfit(t.openPrice, getEthPrice(), t.buy, t.leverage) / int(100*PRECISION); } // 5. Amount you get by liquidating the trade opened by an address (1e18) function liquidateAmountGFARM(address a) public view returns(uint){ return positionSizeGFARM(a).mul((100 - STOP_LOSS_P)).div(100); } // 6. NFTs count in msg.sender's wallet function myNftsCount() public view returns(uint){ return nft.balanceOf(msg.sender); } // EXTERNAL TRADING FUNCTIONS // 1. Open a new trade at current ETH price function openTrade(bool _buy, uint _positionSizeGFARM, uint16 _leverage) external{ require(tradesPerBlock[block.number] < MAX_ACTIVITY_PER_BLOCK, "Max trading activity per block reached."); require(TRADING_PAUSED == false, "Trading is paused, cannot open any new trade."); require(tx.origin == msg.sender, "Contracts not allowed."); require(!hasOpenTrade(msg.sender), "You can only have 1 trade open at a time."); require(_positionSizeGFARM > 0, "Opening a trade with 0 tokens."); uint maxPosGFARM = getMaxPosGFARM(_leverage); require(_positionSizeGFARM <= maxPosGFARM, "Your position size exceeds the max authorized position size."); require(_positionSizeGFARM >= getMinPosGFARM(), "Your position size must be bigger than the minimum position size."); uint ethPrice = getEthPrice(); if(_leverage != 10){ uint nftCount = myNftsCount(); require(nftCount > 0, "You don't own any GFarm NFT."); bool hasCorrespondingNFT = false; for(uint i = 0; i < nftCount; i++){ uint nftID = nft.tokenOfOwnerByIndex(msg.sender, i); uint correspondingLeverage = nft.idToLeverage(nftID); if(correspondingLeverage == _leverage){ hasCorrespondingNFT = true; break; } } require(hasCorrespondingNFT, "You don't own the corresponding NFT for this leverage."); } token.transferFrom(msg.sender, address(this), _positionSizeGFARM); token.burn(address(this), _positionSizeGFARM); TOTAL_GFARM_BURNED = TOTAL_GFARM_BURNED.add(_positionSizeGFARM); uint GOV_fee = _positionSizeGFARM.mul(GOVERNANCE_P).div(100*PRECISION); uint DEV_fee = _positionSizeGFARM.mul(DEV_FUND_P).div(100*PRECISION); uint positionSizeGFARM_minusFees = _positionSizeGFARM.sub(GOV_fee).sub(DEV_fee); uint positionSizeETH_minusFees = positionSizeGFARM_minusFees.mul(getGFarmPriceEth()) .div(PRECISION); token.mint(GOVERNANCE, GOV_fee); token.mint(DEV_FUND, DEV_fee); trades[msg.sender] = Trade( block.number, msg.sender, _buy, ethPrice, positionSizeGFARM_minusFees, positionSizeETH_minusFees, _leverage ); addressesTradeOpen.push(msg.sender); addressTradeOpenID[msg.sender] = addressesTradeOpen.length.sub(1); tradesPerBlock[block.number] = tradesPerBlock[block.number].add(1); emit TradeOpened( msg.sender, ethPrice, _buy, positionSizeETH_minusFees, positionSizeGFARM_minusFees, _leverage ); } // 2. Close open trade at current ETH price function closeTrade() external{ require(tradesPerBlock[block.number] < MAX_ACTIVITY_PER_BLOCK, "Max trading activity per block reached."); require(tx.origin == msg.sender, "Contracts not allowed."); require(hasOpenTrade(msg.sender), "You have no open trade."); Trade memory t = trades[msg.sender]; require(block.number >= t.openBlock.add(3), "Trade must be open for at least 3 blocks."); uint posGFARM = positionSizeGFARM(msg.sender); int pnlGFARM; int pnlETH; if(!canLiquidate(msg.sender)){ pnlGFARM = myTokenPNL(); uint tokensBack = posGFARM; // Gain if(pnlGFARM > 0){ Gains storage userGains = gains[msg.sender]; userGains.valueGFARM = userGains.valueGFARM .add(uint(pnlGFARM)); userGains.lastTradeClosed = block.number; // Loss }else if(pnlGFARM < 0){ tokensBack = tokensBack.sub(uint(pnlGFARM*(-1))); } token.mint(msg.sender, tokensBack); TOTAL_GFARM_MINTED = TOTAL_GFARM_MINTED.add(tokensBack); }else{ pnlGFARM = int(posGFARM) * (-1); } pnlETH = pnlGFARM * int(getGFarmPriceEth()) / int(PRECISION); emit TradeClosed( msg.sender, getEthPrice(), t.buy, t.positionSizeETH, posGFARM, t.leverage, pnlGFARM, pnlETH ); unregisterOpenTrade(msg.sender); tradesPerBlock[block.number] = tradesPerBlock[block.number].add(1); } // 3. Liquidate trade opened by an address function liquidate(address a) external{ require(tx.origin == msg.sender, "Contracts not allowed."); require(tradesPerBlock[block.number] < MAX_ACTIVITY_PER_BLOCK, "Max trading activity per block reached."); require(canLiquidate(a), "No trade to liquidate for this address."); require(myNftsCount() > 0 || msg.sender == GOVERNANCE, "You don't own any GFarm NFT."); Trade memory t = trades[a]; uint amountGFARM = liquidateAmountGFARM(a); uint amountETH = amountGFARM.mul(getGFarmPriceEth()).div(PRECISION); uint posGFARM = positionSizeGFARM(a); token.mint(msg.sender, amountGFARM); TOTAL_GFARM_MINTED = TOTAL_GFARM_MINTED.add(amountGFARM); unregisterOpenTrade(a); tradesPerBlock[block.number] = tradesPerBlock[block.number].add(1); emit TradeLiquidated( msg.sender, a, getEthPrice(), t.buy, t.positionSizeETH, posGFARM, t.leverage, amountGFARM, amountETH ); } // 4. Claim gains made with all trades function claimGains() external{ require(tx.origin == msg.sender, "Contracts not allowed."); require(TRADING_PAUSED == false, "Trading is paused, cannot open any new trade."); Gains storage userGains = gains[msg.sender]; require(block.number.sub(userGains.lastTradeClosed) >= 3, "You must wait 3 block after you close a trade."); uint gainsGFARM = userGains.valueGFARM; uint gainsETH = gainsGFARM.mul(getGFarmPriceEth()).div(PRECISION); token.mint(msg.sender, gainsGFARM); TOTAL_GFARM_MINTED = TOTAL_GFARM_MINTED.add(gainsGFARM); emit GainsClaimed( msg.sender, gainsGFARM, gainsETH ); userGains.valueGFARM = 0; } // UI VIEW FUNCTIONS (READ-ONLY) function myGains() external view returns(uint){ return gains[msg.sender].valueGFARM; } function canClaimGains() external view returns(bool){ return block.number.sub(gains[msg.sender].lastTradeClosed) >= 3 && gains[msg.sender].valueGFARM > 0; } function myPercentPNL() external view returns(int){ if(!hasOpenTrade(msg.sender)){ return 0; } Trade memory t = trades[msg.sender]; return currentPercentProfit(t.openPrice, getEthPrice(), t.buy, t.leverage); } function myOpenPrice() external view returns(uint){ return trades[msg.sender].openPrice; } function myPositionSizeETH() external view returns(uint){ return trades[msg.sender].positionSizeETH; } function myPositionSizeGFARM() external view returns(uint){ return positionSizeGFARM(msg.sender); } function myDirection() external view returns(string memory){ if(trades[msg.sender].buy){ return 'Buy'; } return 'Sell'; } function myLeverage() external view returns(uint){ return trades[msg.sender].leverage; } function tradeOpenSinceThreeBlocks() external view returns(bool){ Trade memory t = trades[msg.sender]; if(!hasOpenTrade(msg.sender) || block.number < t.openBlock){ return false; } return block.number.sub(t.openBlock) >= 3; } function getAddressesTradeOpen() external view returns(address[] memory){ return addressesTradeOpen; } function unlockedLeverages() external view returns(uint8[5] memory leverages){ for(uint i = 0; i < myNftsCount(); i++){ uint8 leverage = nft.idToLeverage( nft.tokenOfOwnerByIndex(msg.sender, i) ); uint8 id = nft.leverageID(leverage); leverages[id] = leverage; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_GOV","type":"address"},{"internalType":"address","name":"_DEV","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGFARM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"GainsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"positionSizeETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"positionSizeGFARM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leverage","type":"uint256"},{"indexed":false,"internalType":"int256","name":"pnlGFARM","type":"int256"},{"indexed":false,"internalType":"int256","name":"pnlETH","type":"int256"}],"name":"TradeClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"liquidator","type":"address"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"positionSizeETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"positionSizeGFARM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leverage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardGFARM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardETH","type":"uint256"}],"name":"TradeLiquidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"a","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"buy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"positionSizeETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"positionSizeGFARM","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"leverage","type":"uint256"}],"name":"TradeOpened","type":"event"},{"inputs":[],"name":"DEV_FUND","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ACTIVITY_PER_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_POS_GFARM_LP_P","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_POSITION_SIZE_ETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_GFARM_BURNED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_GFARM_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADING_PAUSED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressesTradeOpen","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canClaimGains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"canLiquidate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGains","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gains","outputs":[{"internalType":"uint256","name":"valueGFARM","type":"uint256"},{"internalType":"uint256","name":"lastTradeClosed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressesTradeOpen","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_leverage","type":"uint256"}],"name":"getMaxPosGFARM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinPosGFARM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"hasOpenTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"liquidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"liquidateAmountGFARM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lp","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myDirection","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myLeverage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myNftsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myOpenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myPercentPNL","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myPositionSizeETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myPositionSizeGFARM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"myTokenPNL","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract GFarmNFTInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_buy","type":"bool"},{"internalType":"uint256","name":"_positionSizeGFARM","type":"uint256"},{"internalType":"uint16","name":"_leverage","type":"uint16"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"positionSizeGFARM","outputs":[{"internalType":"uint256","name":"posGFARM","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"restart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"set_GOVERNANCE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lp","type":"address"}],"name":"set_LP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTrades","type":"uint256"}],"name":"set_MAX_ACTIVITY_PER_BLOCK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPosLp","type":"uint256"}],"name":"set_MAX_POS_GFARM_LP_P","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPos","type":"uint256"}],"name":"set_MIN_POSITION_SIZE_ETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"}],"name":"set_NFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"set_TOKEN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract GFarmTokenInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeOpenSinceThreeBlocks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trades","outputs":[{"internalType":"uint256","name":"openBlock","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"initialPositionSizeGFARM","type":"uint256"},{"internalType":"uint256","name":"positionSizeETH","type":"uint256"},{"internalType":"uint16","name":"leverage","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockedLeverages","outputs":[{"internalType":"uint8[5]","name":"leverages","type":"uint8[5]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052600060035562030d40600455600a60055534801561002157600080fd5b506040516135cb3803806135cb8339818101604052604081101561004457600080fd5b508051602090910151600880546001600160a01b0319166001600160a01b03938416179055606081901b6001600160601b03191660805216613533610098600039806113da528061247252506135336000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c806392570992116101a7578063ce63ec4f116100ee578063eca0793911610097578063fa0c43cd11610071578063fa0c43cd146107f2578063fc0c546a146107fa578063fcdb89ce1461080257610315565b8063eca07939146107a3578063f0a0ac7b146107e2578063f34184fa146107ea57610315565b8063d5e57486116100c8578063d5e5748614610776578063dc46351314610793578063e2eff5851461079b57610315565b8063ce63ec4f14610749578063cf1bc08214610766578063d1edf9451461076e57610315565b8063ab2dae9d11610150578063bc381dbc1161012a578063bc381dbc14610713578063c135916f1461071b578063c700079c1461074157610315565b8063ab2dae9d146106dd578063b4ea9881146106e5578063b9f4ff55146106ed57610315565b8063a5a887c711610181578063a5a887c7146105d0578063a7ae510b1461064d578063a9f752e51461067357610315565b8063925709921461057057806392634f42146105965780639ab69f99146105b357610315565b80634b07be6b1161026b578063722fb01611610214578063860661db116101ee578063860661db1461050b578063876f06d01461052857806390a5a5d01461053057610315565b8063722fb016146104f3578063804eb821146104fb5780638456cb591461050357610315565b8063532acf0611610245578063532acf061461048b57806367c9b017146104e35780636ee15c6b146104eb57610315565b80634b07be6b1461042e5780634b6948ed1461043657806350a2fc461461046557610315565b80632f865568116102cd57806347ccca02116102a757806347ccca02146103f8578063492636371461040057806349427c2b1461042657610315565b80632f865568146103c2578063313c06a0146103e85780633ac476fb146103f057610315565b80631ef3755d116102fe5780631ef3755d146103785780632448e045146103825780632641f7a11461039c57610315565b8063146278341461031a5780631bd614901461033e575b600080fd5b61032261080a565b604080516001600160a01b039092168252519081900360200190f35b6103646004803603602081101561035457600080fd5b50356001600160a01b0316610819565b604080519115158252519081900360200190f35b61038061083a565b005b61038a610892565b60408051918252519081900360200190f35b61038a600480360360208110156103b257600080fd5b50356001600160a01b0316610898565b610380600480360360208110156103d857600080fd5b50356001600160a01b0316610970565b610322610cb1565b61038a610cc0565b610322610cc6565b6103806004803603602081101561041657600080fd5b50356001600160a01b0316610cd5565b61038a610d9e565b61038a610da4565b6103806004803603606081101561044c57600080fd5b5080351515906020810135906040013561ffff16610daa565b61038a6004803603602081101561047b57600080fd5b50356001600160a01b031661164e565b61049361166f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104cf5781810151838201526020016104b7565b505050509050019250505060405180910390f35b61038a6116d2565b61038a61174e565b61038a611764565b61038a611835565b610380611845565b6103806004803603602081101561052157600080fd5b50356118a3565b6103806118f1565b610538611ac2565b604051808260a080838360005b8381101561055d578181015183820152602001610545565b5050505090500191505060405180910390f35b6103806004803603602081101561058657600080fd5b50356001600160a01b0316611ca9565b610380600480360360208110156105ac57600080fd5b5035611d72565b610322600480360360208110156105c957600080fd5b5035611dcd565b6105d8611df7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156106125781810151838201526020016105fa565b50505050905090810190601f16801561063f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103806004803603602081101561066357600080fd5b50356001600160a01b0316611e8e565b6106996004803603602081101561068957600080fd5b50356001600160a01b0316611f10565b604080519788526001600160a01b039096166020880152931515868601526060860192909252608085015260a084015261ffff1660c0830152519081900360e00190f35b61038a611f5a565b61038a611f6d565b6103646004803603602081101561070357600080fd5b50356001600160a01b0316612002565b61038a612105565b6103806004803603602081101561073157600080fd5b50356001600160a01b031661211b565b61038a6121e4565b6103806004803603602081101561075f57600080fd5b50356121ea565b61038a612238565b61038a612252565b61038a6004803603602081101561078c57600080fd5b503561226f565b61038a61234d565b610364612407565b6107c9600480360360208110156107b957600080fd5b50356001600160a01b0316612447565b6040805192835260208301919091528051918290030190f35b610364612460565b610322612470565b610364612494565b610322612552565b610380612561565b6008546001600160a01b031681565b6001600160a01b03811660009081526009602052604090205415155b919050565b6008546001600160a01b031633146108835760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002805460ff60a01b19169055565b60035481565b60006108a26132a3565b506001600160a01b03828116600090815260096020908152604091829020825160e08101845281548152600182015494851692810192909252600160a01b90930460ff161515918101919091526002820154606082015260038201546080820152600482015460a082015260059091015461ffff1660c082015261093f6109276128e8565b60a083015161093990620186a0612912565b9061296b565b9150600061095b6002836080015161291290919063ffffffff16565b905080831115610969578092505b5050919050565b3233146109c4576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b600554436000908152600c602052604090205410610a135760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b610a1c81612002565b610a575760405162461bcd60e51b81526004018080602001828103825260278152602001806133376027913960400191505060405180910390fd5b6000610a61611f6d565b1180610a7757506008546001600160a01b031633145b610ac8576040805162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206f776e20616e7920474661726d204e46542e00000000604482015290519081900360640190fd5b610ad06132a3565b506001600160a01b038181166000908152600960209081526040808320815160e08101835281548152600182015495861693810193909352600160a01b90940460ff161515908201526002830154606082015260038301546080820152600483015460a082015260059092015461ffff1660c0830152610b4f8361164e565b90506000610b6c620186a0610939610b656128e8565b8590612912565b90506000610b7985610898565b60008054604080516340c10f1960e01b81523360048201526024810188905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015610bcd57600080fd5b505af1158015610be1573d6000803e3d6000fd5b5050600754610bf392509050846129ad565b600755610bff85612a07565b436000908152600c6020526040902054610c1a9060016129ad565b436000908152600c60205260409020556001600160a01b038516337f30b20c8d4e4e74e5eaf4ac4c6fc06a7ecb631bdf77b25e66205beb5e7d1cbf21610c5e6116d2565b60408089015160a0808b015160c0808d015185519687529315156020870152858501919091526060850189905261ffff909216608085015283018990528201879052519081900360e00190a35050505050565b6001546001600160a01b031681565b60055481565b6002546001600160a01b031681565b6008546001600160a01b03163314610d1e5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6000546001600160a01b031615610d7c576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206164647265737320616c72656164792073657400000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b60045481565b600554436000908152600c602052604090205410610df95760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b600254600160a01b900460ff1615610e425760405162461bcd60e51b815260040180806020018281038252602d8152602001806134d1602d913960400191505060405180910390fd5b323314610e96576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b610e9f33610819565b15610edb5760405162461bcd60e51b815260040180806020018281038252602981526020018061330e6029913960400191505060405180910390fd5b60008211610f30576040805162461bcd60e51b815260206004820152601e60248201527f4f70656e696e6720612074726164652077697468203020746f6b656e732e0000604482015290519081900360640190fd5b6000610f3f8261ffff1661226f565b905080831115610f805760405162461bcd60e51b815260040180806020018281038252603c815260200180613385603c913960400191505060405180910390fd5b610f88612252565b831015610fc65760405162461bcd60e51b81526004018080602001828103825260418152602001806134906041913960600191505060405180910390fd5b6000610fd06116d2565b90508261ffff16600a146111c6576000610fe8611f6d565b90506000811161103f576040805162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206f776e20616e7920474661726d204e46542e00000000604482015290519081900360640190fd5b6000805b828110156111865760025460408051632f745c5960e01b81523360048201526024810184905290516000926001600160a01b031691632f745c59916044808301926020929190829003018186803b15801561109d57600080fd5b505afa1580156110b1573d6000803e3d6000fd5b505050506040513d60208110156110c757600080fd5b5051600254604080517fe4214ec00000000000000000000000000000000000000000000000000000000081526004810184905290519293506000926001600160a01b039092169163e4214ec091602480820192602092909190829003018186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b505160ff16905061ffff881681141561117c57600193505050611186565b5050600101611043565b50806111c35760405162461bcd60e51b815260040180806020018281038252603681526020018061340b6036913960400191505060405180910390fd5b50505b60008054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810188905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b505050506040513d602081101561126457600080fd5b505060008054604080517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810188905290516001600160a01b0390921692639dc29fac9260448084019382900301818387803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b50506006546112f392509050856129ad565b600655600061130b629896806109398761c350612912565b90506000611322629896806109398861c350612912565b9050600061133a826113348986612b81565b90612b81565b90506000611350620186a0610939610b656128e8565b60008054600854604080516340c10f1960e01b81526001600160a01b039283166004820152602481018a905290519495509116926340c10f199260448084019391929182900301818387803b1580156113a857600080fd5b505af11580156113bc573d6000803e3d6000fd5b505060008054604080516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018a905291519190921694506340c10f1993506044808301939282900301818387803b15801561143257600080fd5b505af1158015611446573d6000803e3d6000fd5b505050506040518060e00160405280438152602001336001600160a01b031681526020018a151581526020018681526020018381526020018281526020018861ffff1681525060096000336001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908315150217905550606082015181600201556080820151816003015560a0820151816004015560c08201518160050160006101000a81548161ffff021916908361ffff160217905550905050600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055506115ae6001600d80549050612b8190919063ffffffff16565b336000908152600b6020908152604080832093909355438252600c905220546115d89060016129ad565b436000908152600c60209081526040918290209290925580518781528b1515928101929092528181018390526060820184905261ffff891660808301525133917f724c31922500bddba14383f2b04651a960e6900c06a07e7b588fc3b361636590919081900360a00190a2505050505050505050565b60006116696064610939600a61166386610898565b90612912565b92915050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156116c757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116a9575b505050505090505b90565b60008060006116df612bc3565b915091506000806116ee612d3c565b915091506000806116fd612eb3565b909250905060006117188261171288876129ad565b906129ad565b90506117428161093961172b8686612912565b6117126117388a8a612912565b6117128d8d612912565b97505050505050505090565b3360009081526009602052604090206002015490565b600061176f33610819565b61177b575060006116cf565b6117836132a3565b5033600090815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff1615159282019290925260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c082015290629896809061181d9061180e6116d2565b84604001518560c00151612f8c565b61182633610898565b028161182e57fe5b0591505090565b600061184033610898565b905090565b6008546001600160a01b0316331461188e5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055565b6008546001600160a01b031633146118ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600455565b323314611945576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b600254600160a01b900460ff161561198e5760405162461bcd60e51b815260040180806020018281038252602d8152602001806134d1602d913960400191505060405180910390fd5b336000908152600a6020526040902060018101546003906119b0904390612b81565b10156119ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180613462602e913960400191505060405180910390fd5b80546000611a03620186a0610939610b656128e8565b60008054604080516340c10f1960e01b81523360048201526024810187905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015611a5757600080fd5b505af1158015611a6b573d6000803e3d6000fd5b5050600754611a7d92509050836129ad565b6007556040805183815260208101839052815133927f407a25a25776c6c6f4ff4541622c4757468d49640799b798bab8548f06f7230b928290030190a2505060009055565b611aca6132ef565b60005b611ad5611f6d565b811015611ca55760025460408051632f745c5960e01b81523360048201526024810184905290516000926001600160a01b03169163e4214ec0918391632f745c59916044808301926020929190829003018186803b158015611b3657600080fd5b505afa158015611b4a573d6000803e3d6000fd5b505050506040513d6020811015611b6057600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252516024808301926020929190829003018186803b158015611bb757600080fd5b505afa158015611bcb573d6000803e3d6000fd5b505050506040513d6020811015611be157600080fd5b5051600254604080517fcd53e66400000000000000000000000000000000000000000000000000000000815260ff8416600482015290519293506000926001600160a01b039092169163cd53e66491602480820192602092909190829003018186803b158015611c5057600080fd5b505afa158015611c64573d6000803e3d6000fd5b505050506040513d6020811015611c7a57600080fd5b50519050818460ff831660058110611c8e57fe5b60ff90921660209290920201525050600101611acd565b5090565b6008546001600160a01b03163314611cf25760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002546001600160a01b031615611d50576040805162461bcd60e51b815260206004820152601760248201527f4e4654206164647265737320616c726561647920736574000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611dbb5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600f8110611dc857600080fd5b600555565b600d8181548110611ddd57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600090815260096020526040902060010154606090600160a01b900460ff1615611e56575060408051808201909152600381527f427579000000000000000000000000000000000000000000000000000000000060208201526116cf565b5060408051808201909152600481527f53656c6c00000000000000000000000000000000000000000000000000000000602082015290565b6008546001600160a01b03163314611ed75760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6008546001600160a01b03163314611eee57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03841694600160a01b90940460ff169361ffff1687565b336000908152600a602052604090205490565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611fd157600080fd5b505afa158015611fe5573d6000803e3d6000fd5b505050506040513d6020811015611ffb57600080fd5b5051905090565b600061200d82610819565b61205e576040805162461bcd60e51b815260206004820152601f60248201527f54686973206164647265737320686173206e6f206f70656e2074726164652e00604482015290519081900360640190fd5b6120666132a3565b506001600160a01b03828116600090815260096020908152604091829020825160e08101845281548152600182015494851692810192909252600160a01b90930460ff1615159181019190915260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c0820152906120fe906120ef6116d2565b83604001518460c00151612ff2565b9392505050565b3360009081526009602052604090206004015490565b6008546001600160a01b031633146121645760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6001546001600160a01b0316156121c2576040805162461bcd60e51b815260206004820152601660248201527f4c50206164647265737320616c72656164792073657400000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60075481565b6008546001600160a01b031633146122335760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600355565b3360009081526009602052604090206005015461ffff1690565b600061184061225f6128e8565b60035461093990620186a0612912565b60008061227a612bc3565b9150506000612287612d3c565b9150506000612294612eb3565b9150600090506122a88261171286866129ad565b9050672be2aac7077d5bc360006122f66122c06128e8565b6109396509184e72a000816122d78d610bb8612912565b6109396122ec8a670de0b6b3a7640000612912565b6113348a8c612912565b9050600061230261302d565b5090506000612326620186a06064026109396004548561291290919063ffffffff16565b90508083111561233f5797506108359650505050505050565b509098975050505050505050565b600061235833610819565b612364575060006116cf565b61236c6132a3565b5033600090815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff1615159282019290925260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c082015290612401906123f26116d2565b83604001518460c00151612f8c565b91505090565b336000908152600a6020526040812060010154600390612428904390612b81565b10158015611840575050336000908152600a6020526040902054151590565b600a602052600090815260409020805460019091015482565b600254600160a01b900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061249e6132a3565b5033600081815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff161515928201929092526002820154606082015260038201546080820152600482015460a082015260059091015461ffff1660c08201529061251f90610819565b158061252b5750805143105b1561253a5760009150506116cf565b805160039061254a904390612b81565b101591505090565b6000546001600160a01b031681565b600554436000908152600c6020526040902054106125b05760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b323314612604576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b61260d33610819565b61265e576040805162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f206f70656e2074726164652e000000000000000000604482015290519081900360640190fd5b6126666132a3565b5033600090815260096020908152604091829020825160e081018452815480825260018301546001600160a01b03811694830194909452600160a01b90930460ff16151593810193909352600281015460608401526003808201546080850152600482015460a085015260059091015461ffff1660c08401526126e991906129ad565b4310156127275760405162461bcd60e51b81526004018080602001828103825260298152602001806133e26029913960400191505060405180910390fd5b600061273233610898565b905060008061274033612002565b6128185761274c611764565b915082600083131561278157336000908152600a60205260409020805461277390856129ad565b81554360019091015561279b565b600083121561279b57612798816000859003612b81565b90505b60008054604080516340c10f1960e01b81523360048201526024810185905290516001600160a01b03909216926340c10f199260448084019382900301818387803b1580156127e957600080fd5b505af11580156127fd573d6000803e3d6000fd5b505060075461280f92509050826129ad565b60075550612820565b826000190291505b620186a061282c6128e8565b83028161283557fe5b059050337f7af09f7accd5892d2920e34288d3cbde683c1764402827a275051d2575b9768c6128626116d2565b60408088015160a0808a015160c0808c01518551968752931515602087015285850191909152606085018a905261ffff909216608085015283018790528201859052519081900360e00190a26128b733612a07565b436000908152600c60205260409020546128d29060016129ad565b436000908152600c602052604090205550505050565b60008060006128f561302d565b909250905061290b8261093983620186a0612912565b9250505090565b60008261292157506000611669565b8282028284828161292e57fe5b04146120fe5760405162461bcd60e51b81526004018080602001828103825260218152602001806134416021913960400191505060405180910390fd5b60006120fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061318d565b6000828201838110156120fe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600960205260408120818155600180820180547fffffffffffffffffffffff00000000000000000000000000000000000000000016905560028201839055600382018390556004820192909255600501805461ffff19169055600d541115612b3657600d80546000198101908110612a8a57fe5b60009182526020808320909101546001600160a01b038481168452600b909252604090922054600d80549290931692918110612ac257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600b918290526040812054600d8054919392916000198101908110612b1057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600d805480612b4157fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03929092168152600b9091526040812055565b60006120fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322f565b60008060008073a478c2975ab1ea89e8196811f51a7b7ade33eb116001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612c1657600080fd5b505afa158015612c2a573d6000803e3d6000fd5b505050506040513d6060811015612c4057600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273a478c2975ab1ea89e8196811f51a7b7ade33eb1192630dfe1681926004808301939192829003018186803b158015612c9c57600080fd5b505afa158015612cb0573d6000803e3d6000fd5b505050506040513d6020811015612cc657600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415612d085750506dffffffffffffffffffffffffffff818116908316612d20565b50506dffffffffffffffffffffffffffff8083169082165b612d318161093984620186a0612912565b955093505050509091565b600080600080730d4a11d5eeaac28ec3f61d100daf4d40471f18526001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612d8f57600080fd5b505afa158015612da3573d6000803e3d6000fd5b505050506040513d6060811015612db957600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506000928392730d4a11d5eeaac28ec3f61d100daf4d40471f185292630dfe1681926004808301939192829003018186803b158015612e1557600080fd5b505afa158015612e29573d6000803e3d6000fd5b505050506040513d6020811015612e3f57600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415612e815750506dffffffffffffffffffffffffffff818116908316612e99565b50506dffffffffffffffffffffffffffff8083169082165b612d3181610939620186a06116638664e8d4a51000612912565b60008060008073b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f0657600080fd5b505afa158015612f1a573d6000803e3d6000fd5b505050506040513d6060811015612f3057600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273b4e16d0168e52d35cacd2c6185b44281ec28c9dc92630dfe1681926004808301939192829003018186803b158015612e1557600080fd5b60008215612fab578161ffff16612fa38686613289565b029050612fc2565b8161ffff16612fba8686613289565b600019020290505b6298967f196302625a0081831215612fdc57819250612fe8565b80831315612fe8578092505b5050949350505050565b60008215613014576289543f1961300b86868686612f8c565b13159050613025565b6289543f1961300b86868686612f8c565b949350505050565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561308157600080fd5b505afa158015613095573d6000803e3d6000fd5b505050506040513d60608110156130ab57600080fd5b50805160209182015160015460408051630dfe168160e01b8152905193965091945060009384936001600160a01b0390921692630dfe16819260048083019392829003018186803b1580156130ff57600080fd5b505afa158015613113573d6000803e3d6000fd5b505050506040513d602081101561312957600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2141561316b5750506dffffffffffffffffffffffffffff808316908216613183565b50506dffffffffffffffffffffffffffff8181169083165b9450925050509091565b600081836132195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131de5781810151838201526020016131c6565b50505050905090810190601f16801561320b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161322557fe5b0495945050505050565b600081848411156132815760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131de5781810151838201526020016131c6565b505050900390565b60008262989680818403028161329b57fe5b059392505050565b6040518060e001604052806000815260200160006001600160a01b03168152602001600015158152602001600081526020016000815260200160008152602001600061ffff1681525090565b6040518060a00160405280600590602082028036833750919291505056fe596f752063616e206f6e6c7920686176652031207472616465206f70656e20617420612074696d652e4e6f20747261646520746f206c697175696461746520666f72207468697320616464726573732e4d61782074726164696e672061637469766974792070657220626c6f636b20726561636865642e596f757220706f736974696f6e2073697a65206578636565647320746865206d617820617574686f72697a656420706f736974696f6e2073697a652e43616e206f6e6c792062652063616c6c656420627920676f7665726e616e63652e5472616465206d757374206265206f70656e20666f72206174206c65617374203320626c6f636b732e596f7520646f6e2774206f776e2074686520636f72726573706f6e64696e67204e465420666f722074686973206c657665726167652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f75206d7573742077616974203320626c6f636b20616674657220796f7520636c6f736520612074726164652e596f757220706f736974696f6e2073697a65206d75737420626520626967676572207468616e20746865206d696e696d756d20706f736974696f6e2073697a652e54726164696e67206973207061757365642c2063616e6e6f74206f70656e20616e79206e65772074726164652ea2646970667358221220c730ec07cf0eed42bd30c3889832919ea5b598cb5eef6f3d71188bab41af937664736f6c63430007050033000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103155760003560e01c806392570992116101a7578063ce63ec4f116100ee578063eca0793911610097578063fa0c43cd11610071578063fa0c43cd146107f2578063fc0c546a146107fa578063fcdb89ce1461080257610315565b8063eca07939146107a3578063f0a0ac7b146107e2578063f34184fa146107ea57610315565b8063d5e57486116100c8578063d5e5748614610776578063dc46351314610793578063e2eff5851461079b57610315565b8063ce63ec4f14610749578063cf1bc08214610766578063d1edf9451461076e57610315565b8063ab2dae9d11610150578063bc381dbc1161012a578063bc381dbc14610713578063c135916f1461071b578063c700079c1461074157610315565b8063ab2dae9d146106dd578063b4ea9881146106e5578063b9f4ff55146106ed57610315565b8063a5a887c711610181578063a5a887c7146105d0578063a7ae510b1461064d578063a9f752e51461067357610315565b8063925709921461057057806392634f42146105965780639ab69f99146105b357610315565b80634b07be6b1161026b578063722fb01611610214578063860661db116101ee578063860661db1461050b578063876f06d01461052857806390a5a5d01461053057610315565b8063722fb016146104f3578063804eb821146104fb5780638456cb591461050357610315565b8063532acf0611610245578063532acf061461048b57806367c9b017146104e35780636ee15c6b146104eb57610315565b80634b07be6b1461042e5780634b6948ed1461043657806350a2fc461461046557610315565b80632f865568116102cd57806347ccca02116102a757806347ccca02146103f8578063492636371461040057806349427c2b1461042657610315565b80632f865568146103c2578063313c06a0146103e85780633ac476fb146103f057610315565b80631ef3755d116102fe5780631ef3755d146103785780632448e045146103825780632641f7a11461039c57610315565b8063146278341461031a5780631bd614901461033e575b600080fd5b61032261080a565b604080516001600160a01b039092168252519081900360200190f35b6103646004803603602081101561035457600080fd5b50356001600160a01b0316610819565b604080519115158252519081900360200190f35b61038061083a565b005b61038a610892565b60408051918252519081900360200190f35b61038a600480360360208110156103b257600080fd5b50356001600160a01b0316610898565b610380600480360360208110156103d857600080fd5b50356001600160a01b0316610970565b610322610cb1565b61038a610cc0565b610322610cc6565b6103806004803603602081101561041657600080fd5b50356001600160a01b0316610cd5565b61038a610d9e565b61038a610da4565b6103806004803603606081101561044c57600080fd5b5080351515906020810135906040013561ffff16610daa565b61038a6004803603602081101561047b57600080fd5b50356001600160a01b031661164e565b61049361166f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104cf5781810151838201526020016104b7565b505050509050019250505060405180910390f35b61038a6116d2565b61038a61174e565b61038a611764565b61038a611835565b610380611845565b6103806004803603602081101561052157600080fd5b50356118a3565b6103806118f1565b610538611ac2565b604051808260a080838360005b8381101561055d578181015183820152602001610545565b5050505090500191505060405180910390f35b6103806004803603602081101561058657600080fd5b50356001600160a01b0316611ca9565b610380600480360360208110156105ac57600080fd5b5035611d72565b610322600480360360208110156105c957600080fd5b5035611dcd565b6105d8611df7565b6040805160208082528351818301528351919283929083019185019080838360005b838110156106125781810151838201526020016105fa565b50505050905090810190601f16801561063f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103806004803603602081101561066357600080fd5b50356001600160a01b0316611e8e565b6106996004803603602081101561068957600080fd5b50356001600160a01b0316611f10565b604080519788526001600160a01b039096166020880152931515868601526060860192909252608085015260a084015261ffff1660c0830152519081900360e00190f35b61038a611f5a565b61038a611f6d565b6103646004803603602081101561070357600080fd5b50356001600160a01b0316612002565b61038a612105565b6103806004803603602081101561073157600080fd5b50356001600160a01b031661211b565b61038a6121e4565b6103806004803603602081101561075f57600080fd5b50356121ea565b61038a612238565b61038a612252565b61038a6004803603602081101561078c57600080fd5b503561226f565b61038a61234d565b610364612407565b6107c9600480360360208110156107b957600080fd5b50356001600160a01b0316612447565b6040805192835260208301919091528051918290030190f35b610364612460565b610322612470565b610364612494565b610322612552565b610380612561565b6008546001600160a01b031681565b6001600160a01b03811660009081526009602052604090205415155b919050565b6008546001600160a01b031633146108835760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002805460ff60a01b19169055565b60035481565b60006108a26132a3565b506001600160a01b03828116600090815260096020908152604091829020825160e08101845281548152600182015494851692810192909252600160a01b90930460ff161515918101919091526002820154606082015260038201546080820152600482015460a082015260059091015461ffff1660c082015261093f6109276128e8565b60a083015161093990620186a0612912565b9061296b565b9150600061095b6002836080015161291290919063ffffffff16565b905080831115610969578092505b5050919050565b3233146109c4576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b600554436000908152600c602052604090205410610a135760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b610a1c81612002565b610a575760405162461bcd60e51b81526004018080602001828103825260278152602001806133376027913960400191505060405180910390fd5b6000610a61611f6d565b1180610a7757506008546001600160a01b031633145b610ac8576040805162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206f776e20616e7920474661726d204e46542e00000000604482015290519081900360640190fd5b610ad06132a3565b506001600160a01b038181166000908152600960209081526040808320815160e08101835281548152600182015495861693810193909352600160a01b90940460ff161515908201526002830154606082015260038301546080820152600483015460a082015260059092015461ffff1660c0830152610b4f8361164e565b90506000610b6c620186a0610939610b656128e8565b8590612912565b90506000610b7985610898565b60008054604080516340c10f1960e01b81523360048201526024810188905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015610bcd57600080fd5b505af1158015610be1573d6000803e3d6000fd5b5050600754610bf392509050846129ad565b600755610bff85612a07565b436000908152600c6020526040902054610c1a9060016129ad565b436000908152600c60205260409020556001600160a01b038516337f30b20c8d4e4e74e5eaf4ac4c6fc06a7ecb631bdf77b25e66205beb5e7d1cbf21610c5e6116d2565b60408089015160a0808b015160c0808d015185519687529315156020870152858501919091526060850189905261ffff909216608085015283018990528201879052519081900360e00190a35050505050565b6001546001600160a01b031681565b60055481565b6002546001600160a01b031681565b6008546001600160a01b03163314610d1e5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6000546001600160a01b031615610d7c576040805162461bcd60e51b815260206004820152601960248201527f546f6b656e206164647265737320616c72656164792073657400000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b60045481565b600554436000908152600c602052604090205410610df95760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b600254600160a01b900460ff1615610e425760405162461bcd60e51b815260040180806020018281038252602d8152602001806134d1602d913960400191505060405180910390fd5b323314610e96576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b610e9f33610819565b15610edb5760405162461bcd60e51b815260040180806020018281038252602981526020018061330e6029913960400191505060405180910390fd5b60008211610f30576040805162461bcd60e51b815260206004820152601e60248201527f4f70656e696e6720612074726164652077697468203020746f6b656e732e0000604482015290519081900360640190fd5b6000610f3f8261ffff1661226f565b905080831115610f805760405162461bcd60e51b815260040180806020018281038252603c815260200180613385603c913960400191505060405180910390fd5b610f88612252565b831015610fc65760405162461bcd60e51b81526004018080602001828103825260418152602001806134906041913960600191505060405180910390fd5b6000610fd06116d2565b90508261ffff16600a146111c6576000610fe8611f6d565b90506000811161103f576040805162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e2774206f776e20616e7920474661726d204e46542e00000000604482015290519081900360640190fd5b6000805b828110156111865760025460408051632f745c5960e01b81523360048201526024810184905290516000926001600160a01b031691632f745c59916044808301926020929190829003018186803b15801561109d57600080fd5b505afa1580156110b1573d6000803e3d6000fd5b505050506040513d60208110156110c757600080fd5b5051600254604080517fe4214ec00000000000000000000000000000000000000000000000000000000081526004810184905290519293506000926001600160a01b039092169163e4214ec091602480820192602092909190829003018186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506040513d602081101561115e57600080fd5b505160ff16905061ffff881681141561117c57600193505050611186565b5050600101611043565b50806111c35760405162461bcd60e51b815260040180806020018281038252603681526020018061340b6036913960400191505060405180910390fd5b50505b60008054604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810188905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b15801561123a57600080fd5b505af115801561124e573d6000803e3d6000fd5b505050506040513d602081101561126457600080fd5b505060008054604080517f9dc29fac0000000000000000000000000000000000000000000000000000000081523060048201526024810188905290516001600160a01b0390921692639dc29fac9260448084019382900301818387803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b50506006546112f392509050856129ad565b600655600061130b629896806109398761c350612912565b90506000611322629896806109398861c350612912565b9050600061133a826113348986612b81565b90612b81565b90506000611350620186a0610939610b656128e8565b60008054600854604080516340c10f1960e01b81526001600160a01b039283166004820152602481018a905290519495509116926340c10f199260448084019391929182900301818387803b1580156113a857600080fd5b505af11580156113bc573d6000803e3d6000fd5b505060008054604080516340c10f1960e01b81526001600160a01b037f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d81166004830152602482018a905291519190921694506340c10f1993506044808301939282900301818387803b15801561143257600080fd5b505af1158015611446573d6000803e3d6000fd5b505050506040518060e00160405280438152602001336001600160a01b031681526020018a151581526020018681526020018381526020018281526020018861ffff1681525060096000336001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160146101000a81548160ff021916908315150217905550606082015181600201556080820151816003015560a0820151816004015560c08201518160050160006101000a81548161ffff021916908361ffff160217905550905050600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055506115ae6001600d80549050612b8190919063ffffffff16565b336000908152600b6020908152604080832093909355438252600c905220546115d89060016129ad565b436000908152600c60209081526040918290209290925580518781528b1515928101929092528181018390526060820184905261ffff891660808301525133917f724c31922500bddba14383f2b04651a960e6900c06a07e7b588fc3b361636590919081900360a00190a2505050505050505050565b60006116696064610939600a61166386610898565b90612912565b92915050565b6060600d8054806020026020016040519081016040528092919081815260200182805480156116c757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116a9575b505050505090505b90565b60008060006116df612bc3565b915091506000806116ee612d3c565b915091506000806116fd612eb3565b909250905060006117188261171288876129ad565b906129ad565b90506117428161093961172b8686612912565b6117126117388a8a612912565b6117128d8d612912565b97505050505050505090565b3360009081526009602052604090206002015490565b600061176f33610819565b61177b575060006116cf565b6117836132a3565b5033600090815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff1615159282019290925260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c082015290629896809061181d9061180e6116d2565b84604001518560c00151612f8c565b61182633610898565b028161182e57fe5b0591505090565b600061184033610898565b905090565b6008546001600160a01b0316331461188e5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002805460ff60a01b1916600160a01b179055565b6008546001600160a01b031633146118ec5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600455565b323314611945576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b600254600160a01b900460ff161561198e5760405162461bcd60e51b815260040180806020018281038252602d8152602001806134d1602d913960400191505060405180910390fd5b336000908152600a6020526040902060018101546003906119b0904390612b81565b10156119ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180613462602e913960400191505060405180910390fd5b80546000611a03620186a0610939610b656128e8565b60008054604080516340c10f1960e01b81523360048201526024810187905290519394506001600160a01b03909116926340c10f199260448084019391929182900301818387803b158015611a5757600080fd5b505af1158015611a6b573d6000803e3d6000fd5b5050600754611a7d92509050836129ad565b6007556040805183815260208101839052815133927f407a25a25776c6c6f4ff4541622c4757468d49640799b798bab8548f06f7230b928290030190a2505060009055565b611aca6132ef565b60005b611ad5611f6d565b811015611ca55760025460408051632f745c5960e01b81523360048201526024810184905290516000926001600160a01b03169163e4214ec0918391632f745c59916044808301926020929190829003018186803b158015611b3657600080fd5b505afa158015611b4a573d6000803e3d6000fd5b505050506040513d6020811015611b6057600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526004810192909252516024808301926020929190829003018186803b158015611bb757600080fd5b505afa158015611bcb573d6000803e3d6000fd5b505050506040513d6020811015611be157600080fd5b5051600254604080517fcd53e66400000000000000000000000000000000000000000000000000000000815260ff8416600482015290519293506000926001600160a01b039092169163cd53e66491602480820192602092909190829003018186803b158015611c5057600080fd5b505afa158015611c64573d6000803e3d6000fd5b505050506040513d6020811015611c7a57600080fd5b50519050818460ff831660058110611c8e57fe5b60ff90921660209290920201525050600101611acd565b5090565b6008546001600160a01b03163314611cf25760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6002546001600160a01b031615611d50576040805162461bcd60e51b815260206004820152601760248201527f4e4654206164647265737320616c726561647920736574000000000000000000604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611dbb5760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600f8110611dc857600080fd5b600555565b600d8181548110611ddd57600080fd5b6000918252602090912001546001600160a01b0316905081565b33600090815260096020526040902060010154606090600160a01b900460ff1615611e56575060408051808201909152600381527f427579000000000000000000000000000000000000000000000000000000000060208201526116cf565b5060408051808201909152600481527f53656c6c00000000000000000000000000000000000000000000000000000000602082015290565b6008546001600160a01b03163314611ed75760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6008546001600160a01b03163314611eee57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60096020526000908152604090208054600182015460028301546003840154600485015460059095015493946001600160a01b03841694600160a01b90940460ff169361ffff1687565b336000908152600a602052604090205490565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611fd157600080fd5b505afa158015611fe5573d6000803e3d6000fd5b505050506040513d6020811015611ffb57600080fd5b5051905090565b600061200d82610819565b61205e576040805162461bcd60e51b815260206004820152601f60248201527f54686973206164647265737320686173206e6f206f70656e2074726164652e00604482015290519081900360640190fd5b6120666132a3565b506001600160a01b03828116600090815260096020908152604091829020825160e08101845281548152600182015494851692810192909252600160a01b90930460ff1615159181019190915260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c0820152906120fe906120ef6116d2565b83604001518460c00151612ff2565b9392505050565b3360009081526009602052604090206004015490565b6008546001600160a01b031633146121645760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b6001546001600160a01b0316156121c2576040805162461bcd60e51b815260206004820152601660248201527f4c50206164647265737320616c72656164792073657400000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60075481565b6008546001600160a01b031633146122335760405162461bcd60e51b81526004018080602001828103825260218152602001806133c16021913960400191505060405180910390fd5b600355565b3360009081526009602052604090206005015461ffff1690565b600061184061225f6128e8565b60035461093990620186a0612912565b60008061227a612bc3565b9150506000612287612d3c565b9150506000612294612eb3565b9150600090506122a88261171286866129ad565b9050672be2aac7077d5bc360006122f66122c06128e8565b6109396509184e72a000816122d78d610bb8612912565b6109396122ec8a670de0b6b3a7640000612912565b6113348a8c612912565b9050600061230261302d565b5090506000612326620186a06064026109396004548561291290919063ffffffff16565b90508083111561233f5797506108359650505050505050565b509098975050505050505050565b600061235833610819565b612364575060006116cf565b61236c6132a3565b5033600090815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff1615159282019290925260028201546060820181905260038301546080830152600483015460a083015260059092015461ffff1660c082015290612401906123f26116d2565b83604001518460c00151612f8c565b91505090565b336000908152600a6020526040812060010154600390612428904390612b81565b10158015611840575050336000908152600a6020526040902054151590565b600a602052600090815260409020805460019091015482565b600254600160a01b900460ff1681565b7f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d81565b600061249e6132a3565b5033600081815260096020908152604091829020825160e0810184528154815260018201546001600160a01b03811693820193909352600160a01b90920460ff161515928201929092526002820154606082015260038201546080820152600482015460a082015260059091015461ffff1660c08201529061251f90610819565b158061252b5750805143105b1561253a5760009150506116cf565b805160039061254a904390612b81565b101591505090565b6000546001600160a01b031681565b600554436000908152600c6020526040902054106125b05760405162461bcd60e51b815260040180806020018281038252602781526020018061335e6027913960400191505060405180910390fd5b323314612604576040805162461bcd60e51b815260206004820152601660248201527f436f6e747261637473206e6f7420616c6c6f7765642e00000000000000000000604482015290519081900360640190fd5b61260d33610819565b61265e576040805162461bcd60e51b815260206004820152601760248201527f596f752068617665206e6f206f70656e2074726164652e000000000000000000604482015290519081900360640190fd5b6126666132a3565b5033600090815260096020908152604091829020825160e081018452815480825260018301546001600160a01b03811694830194909452600160a01b90930460ff16151593810193909352600281015460608401526003808201546080850152600482015460a085015260059091015461ffff1660c08401526126e991906129ad565b4310156127275760405162461bcd60e51b81526004018080602001828103825260298152602001806133e26029913960400191505060405180910390fd5b600061273233610898565b905060008061274033612002565b6128185761274c611764565b915082600083131561278157336000908152600a60205260409020805461277390856129ad565b81554360019091015561279b565b600083121561279b57612798816000859003612b81565b90505b60008054604080516340c10f1960e01b81523360048201526024810185905290516001600160a01b03909216926340c10f199260448084019382900301818387803b1580156127e957600080fd5b505af11580156127fd573d6000803e3d6000fd5b505060075461280f92509050826129ad565b60075550612820565b826000190291505b620186a061282c6128e8565b83028161283557fe5b059050337f7af09f7accd5892d2920e34288d3cbde683c1764402827a275051d2575b9768c6128626116d2565b60408088015160a0808a015160c0808c01518551968752931515602087015285850191909152606085018a905261ffff909216608085015283018790528201859052519081900360e00190a26128b733612a07565b436000908152600c60205260409020546128d29060016129ad565b436000908152600c602052604090205550505050565b60008060006128f561302d565b909250905061290b8261093983620186a0612912565b9250505090565b60008261292157506000611669565b8282028284828161292e57fe5b04146120fe5760405162461bcd60e51b81526004018080602001828103825260218152602001806134416021913960400191505060405180910390fd5b60006120fe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061318d565b6000828201838110156120fe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600960205260408120818155600180820180547fffffffffffffffffffffff00000000000000000000000000000000000000000016905560028201839055600382018390556004820192909255600501805461ffff19169055600d541115612b3657600d80546000198101908110612a8a57fe5b60009182526020808320909101546001600160a01b038481168452600b909252604090922054600d80549290931692918110612ac257fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600b918290526040812054600d8054919392916000198101908110612b1057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600d805480612b4157fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03929092168152600b9091526040812055565b60006120fe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322f565b60008060008073a478c2975ab1ea89e8196811f51a7b7ade33eb116001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612c1657600080fd5b505afa158015612c2a573d6000803e3d6000fd5b505050506040513d6060811015612c4057600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273a478c2975ab1ea89e8196811f51a7b7ade33eb1192630dfe1681926004808301939192829003018186803b158015612c9c57600080fd5b505afa158015612cb0573d6000803e3d6000fd5b505050506040513d6020811015612cc657600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415612d085750506dffffffffffffffffffffffffffff818116908316612d20565b50506dffffffffffffffffffffffffffff8083169082165b612d318161093984620186a0612912565b955093505050509091565b600080600080730d4a11d5eeaac28ec3f61d100daf4d40471f18526001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612d8f57600080fd5b505afa158015612da3573d6000803e3d6000fd5b505050506040513d6060811015612db957600080fd5b50805160209182015160408051630dfe168160e01b815290519295509093506000928392730d4a11d5eeaac28ec3f61d100daf4d40471f185292630dfe1681926004808301939192829003018186803b158015612e1557600080fd5b505afa158015612e29573d6000803e3d6000fd5b505050506040513d6020811015612e3f57600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21415612e815750506dffffffffffffffffffffffffffff818116908316612e99565b50506dffffffffffffffffffffffffffff8083169082165b612d3181610939620186a06116638664e8d4a51000612912565b60008060008073b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f0657600080fd5b505afa158015612f1a573d6000803e3d6000fd5b505050506040513d6060811015612f3057600080fd5b50805160209182015160408051630dfe168160e01b81529051929550909350600092839273b4e16d0168e52d35cacd2c6185b44281ec28c9dc92630dfe1681926004808301939192829003018186803b158015612e1557600080fd5b60008215612fab578161ffff16612fa38686613289565b029050612fc2565b8161ffff16612fba8686613289565b600019020290505b6298967f196302625a0081831215612fdc57819250612fe8565b80831315612fe8578092505b5050949350505050565b60008215613014576289543f1961300b86868686612f8c565b13159050613025565b6289543f1961300b86868686612f8c565b949350505050565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561308157600080fd5b505afa158015613095573d6000803e3d6000fd5b505050506040513d60608110156130ab57600080fd5b50805160209182015160015460408051630dfe168160e01b8152905193965091945060009384936001600160a01b0390921692630dfe16819260048083019392829003018186803b1580156130ff57600080fd5b505afa158015613113573d6000803e3d6000fd5b505050506040513d602081101561312957600080fd5b50516001600160a01b031673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2141561316b5750506dffffffffffffffffffffffffffff808316908216613183565b50506dffffffffffffffffffffffffffff8181169083165b9450925050509091565b600081836132195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156131de5781810151838201526020016131c6565b50505050905090810190601f16801561320b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161322557fe5b0495945050505050565b600081848411156132815760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156131de5781810151838201526020016131c6565b505050900390565b60008262989680818403028161329b57fe5b059392505050565b6040518060e001604052806000815260200160006001600160a01b03168152602001600015158152602001600081526020016000815260200160008152602001600061ffff1681525090565b6040518060a00160405280600590602082028036833750919291505056fe596f752063616e206f6e6c7920686176652031207472616465206f70656e20617420612074696d652e4e6f20747261646520746f206c697175696461746520666f72207468697320616464726573732e4d61782074726164696e672061637469766974792070657220626c6f636b20726561636865642e596f757220706f736974696f6e2073697a65206578636565647320746865206d617820617574686f72697a656420706f736974696f6e2073697a652e43616e206f6e6c792062652063616c6c656420627920676f7665726e616e63652e5472616465206d757374206265206f70656e20666f72206174206c65617374203320626c6f636b732e596f7520646f6e2774206f776e2074686520636f72726573706f6e64696e67204e465420666f722074686973206c657665726167652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77596f75206d7573742077616974203320626c6f636b20616674657220796f7520636c6f736520612074726164652e596f757220706f736974696f6e2073697a65206d75737420626520626967676572207468616e20746865206d696e696d756d20706f736974696f6e2073697a652e54726164696e67206973207061757365642c2063616e6e6f74206f70656e20616e79206e65772074726164652ea2646970667358221220c730ec07cf0eed42bd30c3889832919ea5b598cb5eef6f3d71188bab41af937664736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
-----Decoded View---------------
Arg [0] : _GOV (address): 0xC66FbE50Dd33c9AAdd65707F7088D597C86fE00F
Arg [1] : _DEV (address): 0xd39A38bD2D2d552f3908ff698a5530aa397fb92d
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c66fbe50dd33c9aadd65707f7088d597c86fe00f
Arg [1] : 000000000000000000000000d39a38bd2d2d552f3908ff698a5530aa397fb92d
Deployed Bytecode Sourcemap
9094:22395:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10245:25;;;:::i;:::-;;;;-1:-1:-1;;;;;10245:25:0;;;;;;;;;;;;;;20608:108;;;;;;;;;;;;;;;;-1:-1:-1;20608:108:0;-1:-1:-1;;;;;20608:108:0;;:::i;:::-;;;;;;;;;;;;;;;;;;13837:76;;;:::i;:::-;;9496:37;;;:::i;:::-;;;;;;;;;;;;;;;;21134:426;;;;;;;;;;;;;;;;-1:-1:-1;21134:426:0;-1:-1:-1;;;;;21134:426:0;;:::i;27395:1173::-;;;;;;;;;;;;;;;;-1:-1:-1;27395:1173:0;-1:-1:-1;;;;;27395:1173:0;;:::i;9245:24::-;;;:::i;9612:39::-;;;:::i;9276:28::-;;;:::i;12462:185::-;;;;;;;;;;;;;;;;-1:-1:-1;12462:185:0;-1:-1:-1;;;;;12462:185:0;;:::i;9706:30::-;;;:::i;9548:39::-;;;:::i;22432:3062::-;;;;;;;;;;;;;;;;-1:-1:-1;22432:3062:0;;;;;;;;;;;;;;;;:::i;22038:146::-;;;;;;;;;;;;;;;;-1:-1:-1;22038:146:0;-1:-1:-1;;;;;22038:146:0;;:::i;30971:116::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15818:597;;;:::i;30040:104::-;;;:::i;21623:330::-;;;:::i;30284:113::-;;;:::i;13697:73::-;;;:::i;13517:113::-;;;;;;;;;;;;;;;;-1:-1:-1;13517:113:0;;:::i;28620:805::-;;;:::i;31099:387::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12875:169;;;;;;;;;;;;;;;;-1:-1:-1;12875:169:0;-1:-1:-1;;;;;12875:169:0;;:::i;13102:158::-;;;;;;;;;;;;;;;;-1:-1:-1;13102:158:0;;:::i;11097:35::-;;;;;;;;;;;;;;;;-1:-1:-1;11097:35:0;;:::i;30409:144::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12291:134;;;;;;;;;;;;;;;;-1:-1:-1;12291:134:0;-1:-1:-1;;;;;12291:134:0;;:::i;10876:39::-;;;;;;;;;;;;;;;;-1:-1:-1;10876:39:0;-1:-1:-1;;;;;10876:39:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;10876:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29473:100;;;:::i;22235:99::-;;;:::i;20791:254::-;;;;;;;;;;;;;;;;-1:-1:-1;20791:254:0;-1:-1:-1;;;;;20791:254:0;;:::i;30156:116::-;;;:::i;12681:157::-;;;;;;;;;;;;;;;;-1:-1:-1;12681:157:0;-1:-1:-1;;;;;12681:157:0;;:::i;9743:30::-;;;:::i;13327:115::-;;;;;;;;;;;;;;;;-1:-1:-1;13327:115:0;;:::i;30565:102::-;;;:::i;17251:137::-;;;:::i;17575:875::-;;;;;;;;;;;;;;;;-1:-1:-1;17575:875:0;;:::i;29785:243::-;;;:::i;29585:188::-;;;:::i;10922:38::-;;;;;;;;;;;;;;;;-1:-1:-1;10922:38:0;-1:-1:-1;;;;;10922:38:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9368:26;;;:::i;10277:33::-;;;:::i;30679:280::-;;;:::i;9206:32::-;;;:::i;25551:1788::-;;;:::i;10245:25::-;;;-1:-1:-1;;;;;10245:25:0;;:::o;20608:108::-;-1:-1:-1;;;;;20684:9:0;;20661:4;20684:9;;;:6;:9;;;;;:19;:24;;20608:108;;;;:::o;13837:76::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13883:14:::1;:22:::0;;-1:-1:-1;;;;13883:22:0::1;::::0;;13837:76::o;9496:37::-;;;;:::o;21134:426::-;21192:13;21217:14;;:::i;:::-;-1:-1:-1;;;;;;21234:9:0;;;;;;;:6;:9;;;;;;;;;21217:26;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21217:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21267:56;21304:18;:16;:18::i;:::-;21267:17;;;;:32;;9358:3;21267:21;:32::i;:::-;:36;;:56::i;:::-;21256:67;;21400:21;21424:33;21455:1;21424;:26;;;:30;;:33;;;;:::i;:::-;21400:57;;21482:16;21471:8;:27;21468:85;;;21525:16;21514:27;;21468:85;21134:426;;;;;:::o;27395:1173::-;27452:9;27465:10;27452:23;27444:71;;;;;-1:-1:-1;;;27444:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27567:22;;27551:12;27536:28;;;;:14;:28;;;;;;:53;27528:118;;;;-1:-1:-1;;;27528:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27667:15;27680:1;27667:12;:15::i;:::-;27659:80;;;;-1:-1:-1;;;27659:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27776:1;27760:13;:11;:13::i;:::-;:17;:45;;;-1:-1:-1;27795:10:0;;-1:-1:-1;;;;;27795:10:0;27781;:24;27760:45;27752:99;;;;;-1:-1:-1;;;27752:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27864:14;;:::i;:::-;-1:-1:-1;;;;;;27881:9:0;;;;;;;:6;:9;;;;;;;;27864:26;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27864:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:23;27881:9;27922:20;:23::i;:::-;27903:42;;27956:14;27973:50;9358:3;27973:35;27989:18;:16;:18::i;:::-;27973:11;;:15;:35::i;:50::-;27956:67;;28034:13;28050:20;28068:1;28050:17;:20::i;:::-;28083:5;;;:35;;;-1:-1:-1;;;28083:35:0;;28094:10;28083:35;;;;;;;;;;;;28034:36;;-1:-1:-1;;;;;;28083:5:0;;;;:10;;:35;;;;;:5;;:35;;;;;;:5;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28150:18:0;;:35;;-1:-1:-1;28150:18:0;-1:-1:-1;28173:11:0;28150:22;:35::i;:::-;28129:18;:56;28198:22;28218:1;28198:19;:22::i;:::-;28277:12;28262:28;;;;:14;:28;;;;;;:35;;28295:1;28262:32;:35::i;:::-;28246:12;28231:28;;;;:14;:28;;;;;:66;-1:-1:-1;;;;;28315:245:0;;28345:10;28315:245;28386:13;:11;:13::i;:::-;28414:5;;;;;28434:17;;;;;28489:10;;;;;28315:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27395:1173;;;;;:::o;9245:24::-;;;-1:-1:-1;;;;;9245:24:0;;:::o;9612:39::-;;;;:::o;9276:28::-;;;-1:-1:-1;;;;;9276:28:0;;:::o;12462:185::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12561:1:::1;12532:5:::0;-1:-1:-1;;;;;12532:5:0::1;:31:::0;12524:69:::1;;;::::0;;-1:-1:-1;;;12524:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12604:5;:35:::0;;-1:-1:-1;;;;;;12604:35:0::1;-1:-1:-1::0;;;;;12604:35:0;;;::::1;::::0;;;::::1;::::0;;12462:185::o;9706:30::-;;;;:::o;9548:39::-;;;;:::o;22432:3062::-;22563:22;;22547:12;22532:28;;;;:14;:28;;;;;;:53;22524:118;;;;-1:-1:-1;;;22524:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22663:14;;-1:-1:-1;;;22663:14:0;;;;:23;22655:94;;;;-1:-1:-1;;;22655:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22770:9;22783:10;22770:23;22762:71;;;;;-1:-1:-1;;;22762:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22855:24;22868:10;22855:12;:24::i;:::-;22854:25;22846:92;;;;-1:-1:-1;;;22846:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22980:1;22959:18;:22;22951:78;;;;;-1:-1:-1;;;22951:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23042:16;23061:25;23076:9;23061:25;;:14;:25::i;:::-;23042:44;;23129:11;23107:18;:33;;23099:119;;;;-1:-1:-1;;;23099:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23261:16;:14;:16::i;:::-;23239:18;:38;;23231:129;;;;-1:-1:-1;;;23231:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23373:13;23389;:11;:13::i;:::-;23373:29;;23418:9;:15;;23431:2;23418:15;23415:696;;23449:13;23465;:11;:13::i;:::-;23449:29;;23512:1;23501:8;:12;23493:53;;;;;-1:-1:-1;;;23493:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23563:24;23616:6;23612:344;23632:8;23628:1;:12;23612:344;;;23678:3;;:38;;;-1:-1:-1;;;23678:38:0;;23702:10;23678:38;;;;;;;;;;;;23665:10;;-1:-1:-1;;;;;23678:3:0;;:23;;:38;;;;;;;;;;;;;;:3;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23678:38:0;23764:3;;:23;;;;;;;;;;;;;;23678:38;;-1:-1:-1;23735:26:0;;-1:-1:-1;;;;;23764:3:0;;;;:16;;:23;;;;;23678:38;;23764:23;;;;;;;;:3;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23764:23:0;23735:52;;;-1:-1:-1;23809:34:0;;;;;23806:135;;;23889:4;23867:26;;23916:5;;;;23806:135;-1:-1:-1;;23642:3:0;;23612:344;;;;23992:19;23984:103;;;;-1:-1:-1;;;23984:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23415:696;;;24131:5;;;:65;;;;;;24150:10;24131:65;;;;24170:4;24131:65;;;;;;;;;;;;-1:-1:-1;;;;;24131:5:0;;;;:18;;:65;;;;;;;;;;;;;;;;;:5;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24207:5:0;;;:45;;;;;;24226:4;24207:45;;;;;;;;;;;;-1:-1:-1;;;;;24207:5:0;;;;:10;;:45;;;;;;;;;;:5;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24284:18:0;;:42;;-1:-1:-1;24284:18:0;-1:-1:-1;24307:18:0;24284:22;:42::i;:::-;24263:18;:63;24339:12;24354:55;24395:13;24354:36;:18;10346:5;24354:22;:36::i;:55::-;24339:70;-1:-1:-1;24420:12:0;24435:53;24474:13;24435:34;:18;10398:5;24435:22;:34::i;:53::-;24420:68;-1:-1:-1;24501:32:0;24536:44;24420:68;24536:31;:18;24559:7;24536:22;:31::i;:::-;:35;;:44::i;:::-;24501:79;;24591:30;24624:108;9358:3;24624:51;24656:18;:16;:18::i;24624:108::-;24745:5;;;24756:10;;24745:31;;;-1:-1:-1;;;24745:31:0;;-1:-1:-1;;;;;24756:10:0;;;24745:31;;;;;;;;;;;;24591:141;;-1:-1:-1;24745:5:0;;;:10;;:31;;;;;:5;;:31;;;;;;:5;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24787:5:0;;;:29;;;-1:-1:-1;;;24787:29:0;;-1:-1:-1;;;;;24798:8:0;24787:29;;;;;;;;;;;;;;:5;;;;;-1:-1:-1;24787:10:0;;-1:-1:-1;24787:29:0;;;;;:5;:29;;;;;:5;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24850:216;;;;;;;;24870:12;24850:216;;;;24897:10;-1:-1:-1;;;;;24850:216:0;;;;;24922:4;24850:216;;;;;;24941:8;24850:216;;;;24964:27;24850:216;;;;25006:25;24850:216;;;;25046:9;24850:216;;;;;24829:6;:18;24836:10;-1:-1:-1;;;;;24829:18:0;-1:-1:-1;;;;;24829:18:0;;;;;;;;;;;;:237;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24829:237:0;;;;;-1:-1:-1;;;;;24829:237:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25079:18;25103:10;25079:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25079:35:0;;;;;-1:-1:-1;;;;;25079:35:0;;;;;;25158:32;25188:1;25158:18;:25;;;;:29;;:32;;;;:::i;:::-;25144:10;25125:30;;;;:18;:30;;;;;;;;:65;;;;25253:12;25238:28;;:14;:28;;;;:35;;25271:1;25238:32;:35::i;:::-;25222:12;25207:28;;;;:14;:28;;;;;;;;;:66;;;;25291:195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25317:10;;25291:195;;;;;;;;;;22432:3062;;;;;;;;;:::o;22038:146::-;22099:4;22122:54;22172:3;22122:45;22148:17;22122:20;22140:1;22122:17;:20::i;:::-;:24;;:45::i;:54::-;22115:61;22038:146;-1:-1:-1;;22038:146:0:o;30971:116::-;31026:16;31061:18;31054:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31054:25:0;;;;;;;;;;;;;;;;;;;;;;;30971:116;;:::o;15818:597::-;15861:4;15878:16;15896:18;15918:13;:11;:13::i;:::-;15877:54;;;;15943:17;15962:19;15985:14;:12;:14::i;:::-;15942:57;;;;16011:17;16030:19;16053:14;:12;:14::i;:::-;16010:57;;-1:-1:-1;16010:57:0;-1:-1:-1;16080:15:0;16098:53;16010:57;16098:33;:13;16116:14;16098:17;:33::i;:::-;:37;;:53::i;:::-;16080:71;-1:-1:-1;16171:236:0;16080:71;16190:186;16325:32;:12;16342:14;16325:16;:32::i;:::-;16190:108;16247:32;:12;16264:14;16247:16;:32::i;:::-;16190:30;:11;16206:13;16190:15;:30::i;16171:236::-;16164:243;;;;;;;;;15818:597;:::o;30040:104::-;30115:10;30085:4;30108:18;;;:6;:18;;;;;:28;;;30040:104;:::o;21623:330::-;21665:3;21684:24;21697:10;21684:12;:24::i;:::-;21680:42;;-1:-1:-1;21718:1:0;21711:8;;21680:42;21732:14;;:::i;:::-;-1:-1:-1;21756:10:0;21749:18;;;;:6;:18;;;;;;;;;21732:35;;;;;;;;;;;;;;;-1:-1:-1;;;;;21732:35:0;;;;;;;;;-1:-1:-1;;;21732:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21931:13;;21840:67;;21874:13;:11;:13::i;:::-;21889:1;:5;;;21896:1;:10;;;21840:20;:67::i;:::-;21789:29;21807:10;21789:17;:29::i;:::-;21785:122;:160;;;;;;21778:167;;;21623:330;:::o;30284:113::-;30337:4;30360:29;30378:10;30360:17;:29::i;:::-;30353:36;;30284:113;:::o;13697:73::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13741:14:::1;:21:::0;;-1:-1:-1;;;;13741:21:0::1;-1:-1:-1::0;;;13741:21:0::1;::::0;;13697:73::o;13517:113::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13592:18:::1;:30:::0;13517:113::o;28620:805::-;28669:9;28682:10;28669:23;28661:71;;;;;-1:-1:-1;;;28661:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:14;;-1:-1:-1;;;28753:14:0;;;;:23;28745:94;;;;-1:-1:-1;;;28745:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28884:10;28852:23;28878:17;;;:5;:17;;;;;28931:25;;;;28961:1;;28914:43;;:12;;:16;:43::i;:::-;:48;;28906:120;;;;-1:-1:-1;;;28906:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29057:20;;29039:15;29104:49;9358:3;29104:34;29119:18;:16;:18::i;29104:49::-;29166:5;;;:34;;;-1:-1:-1;;;29166:34:0;;29177:10;29166:34;;;;;;;;;;;;29088:65;;-1:-1:-1;;;;;;29166:5:0;;;;:10;;:34;;;;;:5;;:34;;;;;;:5;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29232:18:0;;:34;;-1:-1:-1;29232:18:0;-1:-1:-1;29255:10:0;29232:22;:34::i;:::-;29211:18;:55;29284:96;;;;;;;;;;;;;;29311:10;;29284:96;;;;;;;;-1:-1:-1;;29416:1:0;29393:24;;28620:805::o;31099:387::-;31150:25;;:::i;:::-;31191:6;31187:292;31207:13;:11;:13::i;:::-;31203:1;:17;31187:292;;;31258:3;;31309:38;;;-1:-1:-1;;;31309:38:0;;31333:10;31309:38;;;;;;;;;;;;31241:14;;-1:-1:-1;;;;;31258:3:0;;:16;;:3;;31309:23;;:38;;;;;;;;;;;;;;31258:3;31309:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31309:38:0;31258:120;;;;;;;;;;;;;;;;;;;;;;;;31309:38;;31258:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31258:120:0;31404:3;;:24;;;;;;;;;;;;;;;31258:120;;-1:-1:-1;31393:8:0;;-1:-1:-1;;;;;31404:3:0;;;;:14;;:24;;;;;31258:120;;31404:24;;;;;;;;:3;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31404:24:0;;-1:-1:-1;31459:8:0;31443:9;:13;;;;;;;;;;:24;;;;:13;;;;;;:24;-1:-1:-1;;31222:3:0;;31187:292;;;;31099:387;:::o;12875:169::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12941:3:::1;::::0;-1:-1:-1;;;;;12941:3:0::1;:27:::0;12933:63:::1;;;::::0;;-1:-1:-1;;;12933:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13007:3;:29:::0;;-1:-1:-1;;;;;;13007:29:0::1;-1:-1:-1::0;;;;;13007:29:0;;;::::1;::::0;;;::::1;::::0;;12875:169::o;13102:158::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13203:2:::1;13190:10;:15;13182:24;;;::::0;::::1;;13217:22;:35:::0;13102:158::o;11097:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11097:35:0;;-1:-1:-1;11097:35:0;:::o;30409:144::-;30489:10;30482:18;;;;:6;:18;;;;;:22;;;30454:13;;-1:-1:-1;;;30482:22:0;;;;30479:43;;;-1:-1:-1;30507:12:0;;;;;;;;;;;;;;;;;;;30479:43;-1:-1:-1;30532:13:0;;;;;;;;;;;;;;;;;30409:144;:::o;12291:134::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12378:10:::1;::::0;-1:-1:-1;;;;;12378:10:0::1;12364;:24;12356:33;;;::::0;::::1;;12400:10;:17:::0;;-1:-1:-1;;;;;;12400:17:0::1;-1:-1:-1::0;;;;;12400:17:0;;;::::1;::::0;;;::::1;::::0;;12291:134::o;10876:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10876:39:0;;;-1:-1:-1;;;10876:39:0;;;;;;;;;:::o;29473:100::-;29543:10;29514:4;29537:17;;;:5;:17;;;;;:28;29473:100;:::o;22235:99::-;22301:3;;:25;;;;;;22315:10;22301:25;;;;;;22278:4;;-1:-1:-1;;;;;22301:3:0;;:13;;:25;;;;;;;;;;;;;;:3;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22301:25:0;;-1:-1:-1;22235:99:0;:::o;20791:254::-;20844:4;20868:15;20881:1;20868:12;:15::i;:::-;20860:59;;;;;-1:-1:-1;;;20860:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20930:14;;:::i;:::-;-1:-1:-1;;;;;;20947:9:0;;;;;;;:6;:9;;;;;;;;;20930:26;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20930:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20974:63;;21004:13;:11;:13::i;:::-;21019:1;:5;;;21026:1;:10;;;20974:16;:63::i;:::-;20967:70;20791:254;-1:-1:-1;;;20791:254:0:o;30156:116::-;30237:10;30207:4;30230:18;;;:6;:18;;;;;:34;;;30156:116;:::o;12681:157::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12745:2:::1;::::0;-1:-1:-1;;;;;12745:2:0::1;:23:::0;12737:58:::1;;;::::0;;-1:-1:-1;;;12737:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12806:2;:24:::0;;-1:-1:-1;;;;;;12806:24:0::1;-1:-1:-1::0;;;;;12806:24:0;;;::::1;::::0;;;::::1;::::0;;12681:157::o;9743:30::-;;;;:::o;13327:115::-;12178:10;;-1:-1:-1;;;;;12178:10:0;12164;:24;12156:70;;;;-1:-1:-1;;;12156:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13403:21:::1;:31:::0;13327:115::o;30565:102::-;30639:10;30609:4;30632:18;;;:6;:18;;;;;:27;;;;;30565:102;:::o;17251:137::-;17297:4;17320:60;17361:18;:16;:18::i;:::-;17320:21;;:36;;9358:3;17320:25;:36::i;17575:875::-;17635:4;17654:18;17676:13;:11;:13::i;:::-;17651:38;;;17703:19;17726:14;:12;:14::i;:::-;17700:40;;;17754:19;17777:14;:12;:14::i;:::-;17751:40;-1:-1:-1;17804:20:0;;-1:-1:-1;17827:53:0;17751:40;17827:33;:13;17845:14;17827:17;:33::i;:53::-;17804:76;-1:-1:-1;17905:19:0;17891:11;17974:181;18136:18;:16;:18::i;:::-;17974:157;18116:14;17974:157;18065:19;:9;18079:4;18065:13;:19::i;:::-;17975:58;18007:25;:15;18027:4;18007:19;:25::i;:::-;17975:27;:6;17986:15;17975:10;:27::i;17974:181::-;17955:200;;18169:17;18192:15;:13;:15::i;:::-;18168:39;;;18218:24;18245:55;9358:3;18286;:13;18245:36;18262:18;;18245:12;:16;;:36;;;;:::i;:55::-;18218:82;;18330:19;18316:11;:33;18313:91;;;18372:19;-1:-1:-1;18365:26:0;;-1:-1:-1;;;;;;;18365:26:0;18313:91;-1:-1:-1;18431:11:0;;17575:875;-1:-1:-1;;;;;;;;17575:875:0:o;29785:243::-;29831:3;29850:24;29863:10;29850:12;:24::i;:::-;29846:42;;-1:-1:-1;29884:1:0;29877:8;;29846:42;29900:14;;:::i;:::-;-1:-1:-1;29924:10:0;29917:18;;;;:6;:18;;;;;;;;;29900:35;;;;;;;;;;;;;;;-1:-1:-1;;;;;29900:35:0;;;;;;;;;-1:-1:-1;;;29900:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29953:67;;29987:13;:11;:13::i;:::-;30002:1;:5;;;30009:1;:10;;;29953:20;:67::i;:::-;29946:74;;;29785:243;:::o;29585:188::-;29678:10;29632:4;29672:17;;;:5;:17;;;;;:33;;;29728:1;;29655:51;;:12;;:16;:51::i;:::-;:74;;:110;;;;-1:-1:-1;;29739:10:0;29764:1;29733:17;;;:5;:17;;;;;:28;:32;;;29585:188::o;10922:38::-;;;;;;;;;;;;;;;;;;;:::o;9368:26::-;;;-1:-1:-1;;;9368:26:0;;;;;:::o;10277:33::-;;;:::o;30679:280::-;30738:4;30754:14;;:::i;:::-;-1:-1:-1;30778:10:0;30771:18;;;;:6;:18;;;;;;;;;30754:35;;;;;;;;;;;;;;;-1:-1:-1;;;;;30754:35:0;;;;;;;;;-1:-1:-1;;;30754:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30804:24;;:12;:24::i;:::-;30803:25;:55;;;-1:-1:-1;30847:11:0;;30832:12;:26;30803:55;30800:100;;;30882:5;30875:12;;;;;30800:100;30934:11;;30950:1;;30917:29;;:12;;:16;:29::i;:::-;:34;;30910:41;;;30679:280;:::o;9206:32::-;;;-1:-1:-1;;;;;9206:32:0;;:::o;25551:1788::-;25631:22;;25615:12;25600:28;;;;:14;:28;;;;;;:53;25592:118;;;;-1:-1:-1;;;25592:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25731:9;25744:10;25731:23;25723:71;;;;;-1:-1:-1;;;25723:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25815:24;25828:10;25815:12;:24::i;:::-;25807:74;;;;;-1:-1:-1;;;25807:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25894:14;;:::i;:::-;-1:-1:-1;25918:10:0;25911:18;;;;:6;:18;;;;;;;;;25894:35;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25894:35:0;;;;;;;;;-1:-1:-1;;;25894:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25966:18;;25894:35;25966:15;:18::i;:::-;25950:12;:34;;25942:101;;;;-1:-1:-1;;;25942:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26056:13;26072:29;26090:10;26072:17;:29::i;:::-;26056:45;;26112:12;26135:10;26162:24;26175:10;26162:12;:24::i;:::-;26158:743;;26213:12;:10;:12::i;:::-;26202:23;-1:-1:-1;26258:8:0;26240:15;26307:12;;26304:403;;;26372:10;26340:23;26366:17;;;:5;:17;;;;;26425:20;;:82;;26497:8;26425:66;:82::i;:::-;26402:105;;26554:12;26526:25;;;;:40;26304:403;;;26622:1;26611:8;:12;26608:99;;;26656:35;:10;26676:13;;;;26656:14;:35::i;:::-;26643:48;;26608:99;26723:5;;;:34;;;-1:-1:-1;;;26723:34:0;;26734:10;26723:34;;;;;;;;;;;;-1:-1:-1;;;;;26723:5:0;;;;:10;;:34;;;;;;;;;;:5;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26793:18:0;;:34;;-1:-1:-1;26793:18:0;-1:-1:-1;26816:10:0;26793:22;:34::i;:::-;26772:18;:55;-1:-1:-1;26158:743:0;;;26873:8;-1:-1:-1;;26869:20:0;26858:31;;26158:743;9358:3;26937:18;:16;:18::i;:::-;26922:8;:34;:51;;;;;;;-1:-1:-1;27017:10:0;26991:219;27042:13;:11;:13::i;:::-;27070:5;;;;;27090:17;;;;;27145:10;;;;;26991:219;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27223:31;27243:10;27223:19;:31::i;:::-;27311:12;27296:28;;;;:14;:28;;;;;;:35;;27329:1;27296:32;:35::i;:::-;27280:12;27265:28;;;;:14;:28;;;;;:66;-1:-1:-1;;;;25551:1788:0:o;16979:188::-;17028:4;17045:17;17064:15;17083;:13;:15::i;:::-;17044:54;;-1:-1:-1;17044:54:0;-1:-1:-1;17116:43:0;17044:54;17116:25;17044:54;9358:3;17116:14;:25::i;:43::-;17109:50;;;;16979:188;:::o;3368:471::-;3426:7;3671:6;3667:47;;-1:-1:-1;3701:1:0;3694:8;;3667:47;3738:5;;;3742:1;3738;:5;:1;3762:5;;;;;:10;3754:56;;;;-1:-1:-1;;;3754:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4315:132;4373:7;4400:39;4404:1;4407;4400:39;;;;;;;;;;;;;;;;;:3;:39::i;2014:181::-;2072:7;2104:5;;;2128:6;;;;2120:46;;;;;-1:-1:-1;;;2120:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20015:477;-1:-1:-1;;;;;20080:9:0;;;;;;:6;:9;;;;;20073:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20073:16:0;;;20103:18;:25;:29;20100:311;;;20210:18;20229:25;;-1:-1:-1;;20229:29:0;;;20210:49;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20167:21:0;;;;;:18;:21;;;;;;;;20148:18;:41;;20210:49;;;;;20148:18;:41;;;;;;;;;;;;;;;;;;:111;;-1:-1:-1;;;;;;20148:111:0;-1:-1:-1;;;;;20148:111:0;;;;;;20378:21;;;;;:18;:21;;;;;;;;20311:18;20330:25;;20378:21;;:18;20148:41;-1:-1:-1;;20330:29:0;;;20311:49;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20311:49:0;20274:101;;;;;;;;;;;;:125;20100:311;20421:18;:24;;;;;;;;;;;;;;;;;-1:-1:-1;;20421:24:0;;;;;-1:-1:-1;;;;;;20421:24:0;;;;;;;;;-1:-1:-1;;;;;20463:21:0;;;;;;:18;:21;;;;;;20456:28;20015:477::o;2478:136::-;2536:7;2563:43;2567:1;2570;2563:43;;;;;;;;;;;;;;;;;:3;:43::i;14012:512::-;14056:4;14062;14079:17;14098;9954:42;-1:-1:-1;;;;;14121:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14121:24:0;;;;;;;;14219:19;;-1:-1:-1;;;14219:19:0;;;;14121:24;;-1:-1:-1;14121:24:0;;-1:-1:-1;14156:15:0;;;;9954:42;;14219:17;;:19;;;;;14121:24;;14219:19;;;;;9954:42;14219:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14219:19:0;-1:-1:-1;;;;;14211:27:0;9853:42;14211:27;14208:207;;;-1:-1:-1;;14254:22:0;14291;;;;14254;;14208:207;;;-1:-1:-1;;14344:22:0;;;;;14381;;14208:207;14462:41;14492:10;14462:25;:10;9358:3;14462:14;:25::i;:41::-;14454:62;-1:-1:-1;14505:10:0;-1:-1:-1;;;;14012:512:0;;:::o;14604:529::-;14649:4;14655;14672:17;14691;10057:42;-1:-1:-1;;;;;14714:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14714:25:0;;;;;;;;14814:20;;-1:-1:-1;;;14814:20:0;;;;14714:25;;-1:-1:-1;14714:25:0;;-1:-1:-1;14750:16:0;;;;10057:42;;14814:18;;:20;;;;;14714:25;;14814:20;;;;;10057:42;14814:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14814:20:0;-1:-1:-1;;;;;14806:28:0;9853:42;14806:28;14803:210;;;-1:-1:-1;;14850:22:0;14887:23;;;;14850:22;;14803:210;;;-1:-1:-1;;14941:23:0;;;;;14979:22;;14803:210;15060:52;15101:10;15060:36;9358:3;15060:21;:11;15076:4;15060:15;:21::i;15213:529::-;15258:4;15264;15281:17;15300;10160:42;-1:-1:-1;;;;;15323:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15323:25:0;;;;;;;;15423:20;;-1:-1:-1;;;15423:20:0;;;;15323:25;;-1:-1:-1;15323:25:0;;-1:-1:-1;15359:16:0;;;;10160:42;;15423:18;;:20;;;;;15323:25;;15423:20;;;;;10160:42;15423:20;;;;;;;;;;18778:642;18932:5;18952:4;18949:185;;;19019:9;19015:14;;18976:38;18988:10;19000:13;18976:11;:38::i;:::-;:53;18972:57;;18949:185;;;19112:9;19108:14;;19064:38;19076:10;19088:13;19064:11;:38::i;:::-;-1:-1:-1;;19064:43:0;:58;19060:62;;18949:185;-1:-1:-1;;19228:22:0;19265:21;;;19262:151;;;19306:17;19302:21;;19262:151;;;19347:17;19343:1;:21;19340:73;;;19384:17;19380:21;;19340:73;18778:642;;;;;;;;:::o;19466:494::-;19616:4;19635;19632:321;;;-1:-1:-1;;19662:64:0;19683:10;19695:13;19710:4;19716:9;19662:20;:64::i;:::-;:121;;19655:128;;;;19632:321;-1:-1:-1;;19821:64:0;19842:10;19854:13;19869:4;19875:9;19821:20;:64::i;19632:321::-;19466:494;;;;;;:::o;16479:452::-;16525:4;16531;16548:17;16567;16590:2;;;;;;;;;-1:-1:-1;;;;;16590:2:0;-1:-1:-1;;;;;16590:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16590:16:0;;;;;;;16686:2;;16590:16;16686:11;;-1:-1:-1;;;16686:11:0;;;;16590:16;;-1:-1:-1;16590:16:0;;-1:-1:-1;16619:15:0;;;;-1:-1:-1;;;;;16686:2:0;;;;:9;;:11;;;;;16590:16;16686:11;;;;;:2;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16686:11:0;-1:-1:-1;;;;;16678:19:0;9853:42;16678:19;16675:203;;;-1:-1:-1;;16713:22:0;;;;;16750:24;;16675:203;;;-1:-1:-1;;16805:24:0;16844:22;;;;16805:24;;16675:203;16898:12;-1:-1:-1;16912:10:0;-1:-1:-1;;;16479:452:0;;:::o;4943:278::-;5029:7;5064:12;5057:5;5049:28;;;;-1:-1:-1;;;5049:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5088:9;5104:1;5100;:5;;;;;;;4943:278;-1:-1:-1;;;;;4943:278:0:o;2917:192::-;3003:7;3039:12;3031:6;;;;3023:29;;;;-1:-1:-1;;;3023:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3075:5:0;;;2917:192::o;18581:131::-;18639:3;18702:1;18661:36;18662:15;;;18661:36;18702:1;18661:43;;;;;;18581:131;-1:-1:-1;;;18581:131:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://c730ec07cf0eed42bd30c3889832919ea5b598cb5eef6f3d71188bab41af9376
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.