Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 2 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5351291 | 8 days ago | Contract Creation | 0 S | |||
4809740 | 12 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
FairPresaleDapp
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-01-02 */ // SPDX-License-Identifier: MIT //Dx protocol --- https://dx.app pragma solidity ^0.8.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function decimals() external view returns (uint8); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface ERC20 { function name() external pure returns (string memory); function symbol() external pure returns (string memory); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; address public voter; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyVoter() { require(msg.sender == voter); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } interface LPToken { function sync() external; } // pragma solidity >=0.5.0; interface UniswapFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); } // pragma solidity >=0.6.2; interface UniswapRouter02 { function factory() external pure returns (address); function WETH() external pure returns (address); function WBNB() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function addLiquidityBNB( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactBNBForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); // function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut); // function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface lpLockDeployerInterface { function createLPLocker( address _lockingToken, uint256 _lockerEndTimeStamp, string memory _logo, uint256 _lockingAmount ) external payable returns (address); } contract DefiFairCrowdsale is Ownable { event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); event claimedBack(address indexed beneficiary, uint256 weiAmount); event Finalized(); string public presaleType = "FAIRLAUNCH"; using SafeMath for uint256; mapping(address => uint256) public affiliatesAmount; mapping(address => uint256) public affiliatesAmountForBuyer; mapping(address => uint256) public affiliatesAmountClaimed; mapping(address => uint256) public contributors; mapping(address => uint256) public contributorsTracker; mapping(address => uint256) public contributorsClaim; mapping(address => uint256) public contributorsRefundAnytime; mapping(address => uint256) public contributorsPayoutNumber; mapping(uint256 => address) public contributorsAddressTracker; mapping(address => bool) public contributed; mapping(address => bool) public anytimeRefunded; mapping(address => bool) public whitelist; bool public whitelistEnabled; uint256 public contributorCount; uint256 public AddWhitelistNumber; uint256 public RemoveWhitelistNumber; mapping(uint256 => address) public AddWhitelistTracker; //mapping(uint256 => address) public RemoveWhitelistTracker; address[] public AddWhitelistTrackerArray; //address[] public RemoveWhitelistTrackerArray; uint256 public presaleGoalReachedTime = 0; //event Initialized(); //event TimesChanged(uint startTime, uint endTime, uint oldStartTime, uint oldEndTime); //bool public initialized = false; //bool public Preaslefinalized = false; uint256 public buyRate; uint256 teamFeePer = 2; // team fees percentage uint256 public nativeMultiplier = 20; uint256[2] __min_max_eth; uint256 public soft_cap; //uint256 public hard_cap; uint256 public startTime; uint256 public endTime; uint256 public weiRaised; uint256 public whitelistCoolOff = 60; uint256 public finalizeTimeout = 600; //600; //time before finalize when anytime refund is disabled uint256 public tokenReturnLockTime = 604800; address public token; uint256 public disabledWhitelistTime; uint256 public totalAffiliateAmount; uint256 public totalAffiliateCount; bool public whitelistDisabledInitiated; bool public isFinalized; bool public finalizeValid; bool public vestingEnabled; bool public refundEnabled; bool public alternateFee; bool public affiliate; uint256 public MaxAllowedContribution; uint256 public numberOfVest; uint256 public finalizedTime; uint256 public vestingPeriod; uint256 public uniswapPercentage; uint256 public presaleAmount; uint256 public uniAmount; uint256 public totalTokenRequired; uint256 public affiliatePer = 10; uint256 public extraAmountPerVal; address public presaleCreator; address public feeContract; address public referrerAddr; constructor( address _token, uint256[2] memory _presaleUniAmount, uint256[2] memory start_end_time, address[2] memory targetWallets, uint256[3] memory _soft_cap_min_max_eth, uint256[2] memory _UniPercentage_teamFeePer, uint256[3] memory _extraAmountPer_lockTime_nativeMul, address[2] memory _lpLockDepAndRouter, uint256 _affiliatePer, uint256 _tokenReturnTime ) //Crowdsale(_rate, targetWallets[0], ERC20(token), _min_max_eth[1]) //TimedCrowdsale(start_end_time[0] > now ? start_end_time[0] : now, start_end_time[1]) //CappedCrowdsale(soft_hard_cap[1] * TOKEN_DECIMAL_MULTIPLIER) //RefundableCrowdsale(soft_hard_cap[0] * TOKEN_DECIMAL_MULTIPLIER, teamFees, _UniPercentage, targetWallets[1]) { // require((_govUniPercentage[0] >= 0) && (_govUniPercentage[0] <= 100), "Governance amount is outside of governance limits"); affiliatePer = _affiliatePer; tokenReturnLockTime = _tokenReturnTime; __min_max_eth = [_soft_cap_min_max_eth[1], _soft_cap_min_max_eth[2]]; soft_cap = _soft_cap_min_max_eth[0]; // hard_cap = soft_hard_cap[1] * TOKEN_DECIMAL_MULTIPLIER; startTime = start_end_time[0]; endTime = start_end_time[1]; token = _token; MaxAllowedContribution = _soft_cap_min_max_eth[2]; presaleCreator = targetWallets[0]; feeContract = targetWallets[1]; teamFeePer = _UniPercentage_teamFeePer[1]; uniswapPercentage = _UniPercentage_teamFeePer[0]; presaleAmount = _presaleUniAmount[0]; uniAmount = _presaleUniAmount[1]; totalTokenRequired = ((presaleAmount + uniAmount) * (teamFeePer + 100)) / 100; extraAmountPerVal = _extraAmountPer_lockTime_nativeMul[0] + 100; locktime = _extraAmountPer_lockTime_nativeMul[1]; nativeMultiplier = _extraAmountPer_lockTime_nativeMul[2]; lpLockDeployer = _lpLockDepAndRouter[0]; ROUTER_ADDRESS = _lpLockDepAndRouter[1]; } /* function checkContributorValidity(address contributor_addr) public view returns(uint256) { return contributors[contributor_addr]; } */ function checkRate() public view returns (uint256) { return buyRate; } function minEthContribution() public view returns (uint256) { return __min_max_eth[0]; } function maxEthContribution() public view returns (uint256) { return __min_max_eth[1]; } function presaleStartTime() public view returns (uint256) { return startTime; } function presaleEndTime() public view returns (uint256) { return endTime; } function isContract(address _addr) private view returns (bool isContract) { uint32 size; assembly { size := extcodesize(_addr) } return (size > 0); } /* function mintForPlatform(address _platAddrs) public onlyOwner { require(_platAddrs != address(0), "platform addr cant be zero"); uint256 platFee = (presaleAmount*teamFeePer)/100; ERC20(token).transfer(_platAddrs, platFee); } function mintForUniswap(address uniswapDep) public onlyOwner { require(uniswapDep != address(0x0),"uniswapDep addr cannot be zero"); require(ERC20(token).transfer(uniswapDep, (uniAmount*extraAmountPerVal)/100),"unable to mint for uniDep from presale"); } */ // function resetUserEthAmount(address contributor_addr) onlyOwner public { // contributors[contributor_addr] = 0; //} /** * @dev override hasClosed to add minimal value logic * @return true if remained to achieve less than minimal */ function hasClosed() public view returns (bool) { //bool remainValue = (hard_cap - weiRaised) < __min_max_eth[0]; return (block.timestamp > endTime); // || remainValue; } function CheckSoftCap() public view returns (uint256) { return soft_cap; } /* function CheckHardCap() public view returns(uint256) { return hard_cap; } */ function CheckTotalEthRaised() public view returns (uint256) { return weiRaised; } /* * @dev override purchase validation to add extra value logic. * @return true if sended more than minimal value */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { require(msg.value >= __min_max_eth[0]); // require(msg.value >= 0); require(msg.value <= (__min_max_eth[1])); // it should be 10% in mainnet launch *********************** // require(msg.value <= 1000000000000000000); // require((weiRaised + _weiAmount) <= hard_cap,"contribution reaching over hcap"); require(_beneficiary != address(0)); require(_weiAmount != 0); } function addToWhitelist(address WhitelistAddress) public onlyOwner { // require(!whitelist[WhitelistAddress], "already whitelisted"); whitelist[WhitelistAddress] = true; AddWhitelistTracker[AddWhitelistNumber] = WhitelistAddress; AddWhitelistNumber++; } function removeFromWhitelist(address WhitelistAddress) public onlyOwner { require(whitelist[WhitelistAddress], "not in whitelist!"); whitelist[WhitelistAddress] = false; //RemoveWhitelistTracker[RemoveWhitelistNumber] = WhitelistAddress; RemoveWhitelistNumber++; } function changeAffiliateState( bool _state, uint256 _newPer, bool _changeState, bool _changePer ) public { require(msg.sender == presaleCreator); // checking for presale owner address if (_changeState) { require(affiliate != _state, "already set"); affiliate = _state; } if (_changePer) { require(_newPer <= 10, "invalid per"); affiliatePer = _newPer * 10; } } function enableWhitelist() public onlyOwner { require(!whitelistEnabled, "already enabled"); whitelistEnabled = true; } function disableWhitelist() public onlyOwner { require(whitelistEnabled, "already disabled"); whitelistEnabled = false; disabledWhitelistTime = block.timestamp + whitelistCoolOff; whitelistDisabledInitiated = true; } /* function getAddlist() public view returns(address[] memory){ address[] memory AddList = new address[](AddWhitelistNumber); for (uint256 i = 0; i < AddWhitelistNumber; i++) { if(whitelist[AddWhitelistTracker[i]]){ AddList[i] = AddWhitelistTracker[i]; } else { AddList[i] = address(0x0); } } return AddList; } */ /* function getRemovelist() public view returns(address[] memory) { address[] memory RemoveList = new address[](RemoveWhitelistNumber); for (uint256 i = 0; i < RemoveWhitelistNumber; i++) { RemoveList[i] = RemoveWhitelistTracker[i]; } return RemoveList; } */ /* function getPresaleDataAddr() view returns(address[] memory, uint256[7] memory) { address[] memory PresaleDataAddr = new address[](AddWhitelistNumber); for (uint256 i = 0; i < AddWhitelistNumber; i++) { PresaleDataAddr[i] = AddWhitelistTracker[i]; //******************************************** NEED UPDATE TO ADD CORRECT ADDRESS DATA*************************************************** } return (PresaleDataAddr,getPresaleDataUint()); } */ function getPresaleData() public view returns ( uint256[10] memory, bool[4] memory, string memory ) { uint256[10] memory PresaleDataUint; bool[4] memory presaleDataBool; PresaleDataUint = [ soft_cap, presaleAmount, __min_max_eth[0], __min_max_eth[1], startTime, endTime, weiRaised, buyRate, uniAmount, uniswapPercentage ]; presaleDataBool = [ isFinalized, finalizeValid, vestingEnabled, refundEnabled ]; return (PresaleDataUint, presaleDataBool, presaleType); } /* function getContributorData() public view returns(address[] memory,uint256[] memory) { // address[] memory WalletList = new address[](KYCsverifiedNumber); address[] memory contributorAddresses = new address[](contributorCount); uint256[] memory contributedValues = new uint256[](contributorCount); for (uint256 i = 0; i < contributorCount;i++){ contributorAddresses[i] = contributorsAddressTracker[i]; contributedValues[i] = contributors[contributorsAddressTracker[i]]; } return (contributorAddresses,contributedValues); } */ /** * @dev fallback function ***DO NOT OVERRIDE*** */ receive() external payable { purchaseTokens(msg.value); /* require(block.timestamp > disabledWhitelistTime, "cool Off"); require(!anytimeRefunded[msg.sender], "anytime refunded!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "not whitelisted"); } require(contributors[msg.sender] <= (MaxAllowedContribution - msg.value),"contribution over max allowed"); buyTokens(msg.sender); contributors[msg.sender] += msg.value; contributorsTracker[msg.sender] += msg.value; if(!contributed[msg.sender]){ contributorsAddressTracker[contributorCount] = msg.sender; contributed[msg.sender] = true; contributorCount++; } */ } function purchaseTokens(uint256 _buyAmount) internal { require(block.timestamp > disabledWhitelistTime, "cool Off"); require(!anytimeRefunded[msg.sender], "anytime refunded!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "not whitelisted"); } require( contributors[msg.sender] <= (MaxAllowedContribution - _buyAmount), "contribution over max allowed" ); buyTokens(msg.sender, _buyAmount); contributors[msg.sender] += _buyAmount; contributorsTracker[msg.sender] += _buyAmount; if (!contributed[msg.sender]) { contributorsAddressTracker[contributorCount] = msg.sender; contributed[msg.sender] = true; contributorCount++; } } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary, uint256 _buyValue) internal { require(msg.sender == tx.origin, "no contracts"); require(block.timestamp > disabledWhitelistTime, "cool Off"); require( block.timestamp >= startTime && block.timestamp < endTime, "not active" ); require(!anytimeRefunded[msg.sender], "anytime refunded!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "not whitelisted"); } uint256 weiAmount = _buyValue; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised += weiAmount; //_processPurchase(_beneficiary, tokens); emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens); // _updatePurchasingState(_beneficiary, weiAmount); //_forwardFunds(); //_postValidatePurchase(_beneficiary, weiAmount); } function buyTokensReferral(address _referrer) public payable { //require(_referrer != address(0),"zero adr"); require(!isContract(_referrer), "contract ref not allowed"); require(affiliate, "refer mode not active"); uint256 affiliateValue = (msg.value * affiliatePer) / 1000; purchaseTokens(msg.value - affiliateValue); payable(_referrer).call{value: affiliateValue}(""); affiliatesAmount[_referrer] += affiliateValue; affiliatesAmountForBuyer[msg.sender] += affiliateValue; totalAffiliateAmount += affiliateValue; totalAffiliateCount++; } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return (_weiAmount * buyRate) / (1 ether); // return _weiAmount.mul(rate); } function claimTokens() public { require(!refundEnabled, "refunded"); require(!vestingEnabled, "use vesting"); require(isFinalized, "Not Finalized"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "no claim left"); uint256 tokenValue = ( uint256(contributors[msg.sender]).mul(uint256(buyRate)) ).div(1 ether); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); contributors[msg.sender] = 0; ERC20(token).transfer(msg.sender, tokenValue); contributorsClaim[msg.sender] = tokenValue; if (affiliatesAmountForBuyer[msg.sender] != 0) { claimTokensReferral(); } } function claimTokensReferral() internal { //require(!refundEnabled,"was refunded"); //require(!vestingEnabled,"please use vesting method to claim"); //require(isFinalized, "Not Finalized"); //require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not //require(!(affiliatesAmountForBuyer[msg.sender] == 0), "ref no tokens for buyer"); uint256 tokenValue = (uint256(affiliatesAmountForBuyer[msg.sender]) * (uint256(buyRate))) / (1 ether); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); affiliatesAmountForBuyer[msg.sender] = 0; ERC20(token).transfer(msg.sender, tokenValue); affiliatesAmountClaimed[msg.sender] = tokenValue; } function vestToken() public { // require(!tokenDropFlag,"can't vest when token drop enabled!"); require(!refundEnabled, "refunded"); require(vestingEnabled, "not enabled"); require(isFinalized, "Not Finalized"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "no claim left"); require( contributorsPayoutNumber[msg.sender] < numberOfVest, "all vested" ); uint256 CurrentPayoutRounds = ( ((block.timestamp).sub(finalizedTime)).div(vestingPeriod) ).add(1); // need to add 1 to allow partial token vest right away after presale if (CurrentPayoutRounds >= numberOfVest) { CurrentPayoutRounds = numberOfVest; } uint256 userPayoutRounds = CurrentPayoutRounds.sub( contributorsPayoutNumber[msg.sender] ); require( userPayoutRounds > 0 && userPayoutRounds <= numberOfVest, "not claim window" ); contributorsPayoutNumber[msg.sender] = CurrentPayoutRounds; uint256 tokenValue = ( ( (uint256(contributorsTracker[msg.sender]).mul(uint256(buyRate))) .div(1 ether) ).mul(userPayoutRounds) ).div(numberOfVest); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); uint256 totalTokensLeftForUser = ( uint256(contributors[msg.sender]).mul(uint256(buyRate)) ).div(1 ether); require(tokenValue <= totalTokensLeftForUser, "invalid claim"); uint256 contributionsClaiming = contributorsTracker[msg.sender] .mul(userPayoutRounds) .div(numberOfVest); if (contributionsClaiming >= contributors[msg.sender]) { contributors[msg.sender] = 0; } else { contributors[msg.sender] = contributors[msg.sender].sub( contributionsClaiming ); } ERC20(token).transfer(msg.sender, tokenValue); contributorsClaim[msg.sender] = contributorsClaim[msg.sender].add( tokenValue ); if (affiliatesAmountForBuyer[msg.sender] != 0) { claimTokensReferral(); } } function enableVesting(uint256 _numOfVest, uint256 _vestingPeriod) public { require(_numOfVest > 1, "num of vest invalid"); require(_vestingPeriod > 0, "period invalid"); require( block.timestamp < startTime.sub(600), "invalid after presale start" ); require(!vestingEnabled, "already enabled"); //require(!tokenDropFlag, "can't enable vest when airdrop is on"); require(msg.sender == presaleCreator); // checking for presale owner address vestingEnabled = true; numberOfVest = _numOfVest; vestingPeriod = _vestingPeriod; } function disableVesting() public { require(msg.sender == presaleCreator); require(vestingEnabled, "already disabled"); require(!isFinalized, "already finalized"); vestingEnabled = false; } function claimRefund() public { require(isFinalized, "not finalized"); require( !(goalReached()) || !finalizeValid, "goal reached or presale succeeded" ); refund(msg.sender); } function claimRefundAnytime() public { require(!anytimeRefunded[msg.sender], "already refunded!"); uint256 userContributed = contributors[msg.sender]; require(userContributed > 0, "nothing to claim"); require(!isFinalized, "already finalized!"); require(!finalizeValid, "finalize valid"); require( block.timestamp < endTime.sub(finalizeTimeout), "window expired!" ); // require(!goalReached() || !finalizeValid,"goal reached"); contributorsRefundAnytime[msg.sender] = userContributed; // added for V3 -- need to check weiRaised = weiRaised.sub(userContributed); // Subtract from total eth raised anytimeRefunded[msg.sender] = true; refundAnytime(msg.sender, userContributed); } function refund(address investor) internal { //have to see if onlyOwner works require(refundEnabled, "not enabled"); uint256 depositedValue = contributors[investor]; require(depositedValue > 0, "nothing to claim"); contributors[investor] = 0; (bool refundSucess, ) = payable(investor).call{value: depositedValue}( "" ); require(refundSucess, "refund failed"); emit Refunded(investor, depositedValue); } function refundAnytime(address investor, uint256 _contributed) internal { // have to see if onlyOwner works //require(state == State.Refunding); //uint256 depositedValue = contributors[investor]; //require(depositedValue > 0, "User has no investment to claim"); uint256 penalty = _contributed.mul(20).div(100); uint256 refundValue = _contributed.sub(penalty); contributors[investor] = 0; // added for V3 -- need to check contributorsTracker[investor] = 0; // added for V3 -- need to check (bool feeContractPay, ) = payable(feeContract).call{value: penalty}(""); (bool investorPay, ) = payable(investor).call{value: refundValue}(""); require(feeContractPay && investorPay, "failed at payment"); emit claimedBack(investor, _contributed); } function finalize( address[2] memory __finalizeInfo, uint256 refPer, bool validFinalize ) public onlyOwner returns (uint256) { require(!isFinalized, "already finalized"); require(hasClosed(), "not closed"); referrerAddr = __finalizeInfo[0]; presaleCreator = __finalizeInfo[1]; // uniswapDapAddress = __finalizeInfo[2]; finalizeValid = validFinalize; if (goalReached() && finalizeValid) { setRate(); close(presaleCreator, referrerAddr, refPer); } else { enableRefunds(); } finalizedTime = block.timestamp; emit Finalized(); isFinalized = true; /* if(tokenDropFlag && finalizeValid){ tokenDrop(); } */ return 1; } /* function mintForUniswap(address _uniswapDapp) onlyOwner public { IERC20(token).transfer(_uniswapDapp,uniAmount); } */ function mintForPlatform( address _platform, address _referrer, uint256 _refPer, bool tokenFeeToRef ) public onlyOwner returns (bool) { if (!alternateFee) { require(_platform != address(0), "no zero adr"); uint256 platFee = (presaleAmount * teamFeePer) / 100; uint256 refFee; if (tokenFeeToRef) { refFee = (platFee * _refPer) / 100; ERC20(token).transfer(_platform, platFee - (refFee)); ERC20(token).transfer(_referrer, refFee); } else { ERC20(token).transfer(_platform, platFee); } } return true; } /* function mintForPlatform(address _platform) onlyOwner public { uint256 platformFee = (presaleAmount*teamFeePer)/100; IERC20(token).transfer(_platform,platformFee); } */ function finalizeAnytime( address[3] memory __finalizeInfo, bool validFinalize ) public onlyOwner returns (uint256) { require(!isFinalized, "already finalized"); // require(hasClosed()); referrerAddr = __finalizeInfo[0]; presaleCreator = __finalizeInfo[1]; // uniswapDapAddress = __finalizeInfo[2]; finalizeValid = validFinalize; enableRefunds(); emit Finalized(); isFinalized = true; return 1; } function enableRefunds() internal { refundEnabled = true; emit RefundsEnabled(); } function setRate() internal { buyRate = (presaleAmount * (1 ether)) / CheckTotalEthRaised(); } function getBackTokens() public { // require(block.timestamp > closingTime.add(burnDeltaTime), "cannot withdraw yet"); require(msg.sender == presaleCreator, "not presale owner!"); // require(hasClosed(), "presale not closed!"); require(isFinalized, "not finalized!"); require(!finalizeValid, "finalize valid"); require( IERC20(token).transfer( presaleCreator, IERC20(token).balanceOf(address(this)) ), "transfer fail" ); } function returnUnsoldTokens(uint256 _amount) public { // require(block.timestamp > closingTime.add(burnDeltaTime), "cannot withdraw yet"); require(msg.sender == presaleCreator, "not presale owner!"); require(block.timestamp > (finalizedTime + tokenReturnLockTime)); require( _amount <= IERC20(token).balanceOf(address(this)), "out of balance" ); // require(hasClosed(), "presale not closed!"); require(isFinalized, "not finalized!"); require(finalizeValid, "not valid"); //uint256 tokenUnsold = (((hard_cap-weiRaised)*uniswapRate*uniswapPercentage*extraAmountPerVal)/(10000 ether)) + ((hard_cap-weiRaised)*buyRate) + ((hard_cap-weiRaised)*buyRate * affiliatePer) / 1000; //require(IERC20(token).transfer(presaleCreator, tokenUnsold),"trans err unsold tkn"); require( IERC20(token).transfer(presaleCreator, _amount), "trans err on unsold token" ); } function selectNativeOnlyFee() public { require(msg.sender == presaleCreator, "not presale owner!"); require(!isFinalized, "already finalized!"); alternateFee = true; teamFeePer = (teamFeePer * nativeMultiplier) / 10; } function close( address __Creator, address _referrerAddr, uint256 _refPer ) internal { require(!isFinalized, "already finalized"); emit Closed(); uint256 feesAmount = address(this).balance.mul(teamFeePer).div(100); if (_refPer > 0) { uint256 refAmount = feesAmount.mul(_refPer).div(100); (bool refPay, ) = payable(_referrerAddr).call{value: refAmount}(""); (bool feeContractClosePay, ) = payable(feeContract).call{ value: feesAmount.sub(refAmount) }(""); require(refPay && feeContractClosePay, "invalid ref or fee pay"); } else { (bool feeContractOnlyPay, ) = payable(feeContract).call{ value: feesAmount }(""); require(feeContractOnlyPay, "invalid fee pay"); } uint256 uniswapAmount = address(this) .balance .mul(uniswapPercentage) .div(100); // uint256 GoverningAmount = address(this).balance.mul(gov).div(100); require(address(this).balance >= uniswapAmount, "Not Enough Fund"); // require(address(this).balance > GoverningAmount, "Not Enough Fund to Transfer"); // payable(__uniswapDep).transfer(uniswapAmount); AddLiquidity(uniAmount, uniswapAmount); // __GovContract.transfer(GoverningAmount); if (address(this).balance != 0) { (bool creatorPay, ) = payable(__Creator).call{ value: address(this).balance }(""); require(creatorPay, "unable to pay creator"); } } function goalReached() public view returns (bool) { return weiRaised >= soft_cap; } function presaleEnded() public view returns (bool) { return block.timestamp > endTime; } mapping(address => bool) public validPairPartner; uint256 public hundred = 100; uint256 public locktime; address public ROUTER_ADDRESS; //address public dead = 0x000000000000000000000000000000000000dEaD; address public storedLPAddress; address public lockerAddress; bool public addLiquidityComplete; uint256 public returnVal; address public lpLockDeployer; string public logo = " "; function Approve(address _token) internal returns (bool) { uint256 amountIn = 100000000000000000000000000000000000000000000000000000000000000000000000000000; ERC20(_token).approve(ROUTER_ADDRESS, amountIn); return true; } function ApproveLock(address _lp, address _lockDeployer) internal returns (bool) { uint256 amountIn = 100000000000000000000000000000000000000000000000000000000000000000000000000000; ERC20(_lp).approve(_lockDeployer, amountIn); return true; } function getWrapAddr() public view returns (address) { return UniswapRouter02(ROUTER_ADDRESS).WETH(); } function getpair(address _token1, address _token2) internal returns (address) { if ( UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()).getPair( _token1, _token2 ) != address(0) ) { return UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()) .getPair(_token1, _token2); } else { return UniswapFactory(UniswapRouter02(ROUTER_ADDRESS).factory()) .createPair(_token1, _token2); } } function AddLiquidity(uint256 amountTokenDesired, uint256 nativeForDex) internal { // require(validPairPartner[_pairAlternative], "This is not a valid pair partner"); uint256 amountETH = nativeForDex; uint256 amountETHMin = amountETH - ((amountETH * (10)) / (100)); //uint256 amountTokenToAddLiq = amountTokenDesired * (hundred) / (extraAmountPerVal); uint256 amountTokenToAddLiq = amountTokenDesired; uint256 amountTokenMin = amountTokenToAddLiq - ((amountTokenToAddLiq * (10)) / (100)); uint256 LP_WBNB_exp_balance; uint256 LP_token_balance; uint256 tokenToSend; storedLPAddress = getpair(token, getWrapAddr()); LP_WBNB_exp_balance = ERC20(getWrapAddr()).balanceOf(storedLPAddress); LP_token_balance = ERC20(token).balanceOf(storedLPAddress); if ( storedLPAddress != address(0x0) && (LP_WBNB_exp_balance > 0 && LP_token_balance <= 0) ) { tokenToSend = (amountTokenToAddLiq * (LP_WBNB_exp_balance)) / (amountETH); ERC20(token).transfer(storedLPAddress, tokenToSend); LPToken(storedLPAddress).sync(); // sync after adding token } Approve(token); UniswapRouter02(ROUTER_ADDRESS).addLiquidityETH{value: amountETH}( token, amountTokenToAddLiq, amountTokenMin, amountETHMin, address(this), block.timestamp + (300) ); addLiquidityComplete = true; ApproveLock(storedLPAddress, lpLockDeployer); lockerAddress = lpLockDeployerInterface(lpLockDeployer).createLPLocker( storedLPAddress, locktime, logo, ERC20(storedLPAddress).balanceOf(address(this)) ); } } contract FairPresaleDapp is Ownable { using SafeMath for uint256; address public feeContract; address public lpLockDeployer; uint256 public teamFee = 2; uint256 public affiliatePerBaseThousand = 10; uint256 public tokenReturnTime = 604800; // uint256 public extraAmountPer = 2; uint256 public nativeMultiplier = 20; constructor(address _feeContract, address _lpLockDeployer) { feeContract = _feeContract; lpLockDeployer = _lpLockDeployer; } function CreatePresaleFair( address[4] memory presaleAddressInput_Router, uint256[2] memory start_end_time, uint256[5] memory softcap_preAmnt_uniAmnt_min_max_eth, uint256 uniPercentage, uint256[2] memory extraAmountPer_lockTime ) public returns (address) { DefiFairCrowdsale PresaleContract = new DefiFairCrowdsale( presaleAddressInput_Router[2], [ softcap_preAmnt_uniAmnt_min_max_eth[1], softcap_preAmnt_uniAmnt_min_max_eth[2] ], start_end_time, [presaleAddressInput_Router[1], feeContract], [ softcap_preAmnt_uniAmnt_min_max_eth[0], softcap_preAmnt_uniAmnt_min_max_eth[3], softcap_preAmnt_uniAmnt_min_max_eth[4] ], [uniPercentage, teamFee], [ extraAmountPer_lockTime[0], extraAmountPer_lockTime[1], nativeMultiplier ], [lpLockDeployer, presaleAddressInput_Router[3]], affiliatePerBaseThousand, tokenReturnTime ); PresaleContract.transferOwnership(presaleAddressInput_Router[0]); return address(PresaleContract); } function CheckBlockTimestamp() public view returns (uint256) { return block.timestamp; } function updateNativeMultiplier(uint256 _newMultiplier) public onlyOwner { nativeMultiplier = _newMultiplier; } function updateTeamFee(uint256 _newTeamFee) public onlyOwner { teamFee = _newTeamFee; } function updateAffiliatePer(uint256 _newPerThousand) public onlyOwner { affiliatePerBaseThousand = _newPerThousand; } function updateTokenReturnTime(uint256 _newReturnTimeDelta) public onlyOwner { tokenReturnTime = _newReturnTimeDelta; } function updateFeeContract(address _newFeeContract) public onlyOwner { feeContract = _newFeeContract; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_feeContract","type":"address"},{"internalType":"address","name":"_lpLockDeployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CheckBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[4]","name":"presaleAddressInput_Router","type":"address[4]"},{"internalType":"uint256[2]","name":"start_end_time","type":"uint256[2]"},{"internalType":"uint256[5]","name":"softcap_preAmnt_uniAmnt_min_max_eth","type":"uint256[5]"},{"internalType":"uint256","name":"uniPercentage","type":"uint256"},{"internalType":"uint256[2]","name":"extraAmountPer_lockTime","type":"uint256[2]"}],"name":"CreatePresaleFair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"affiliatePerBaseThousand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpLockDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenReturnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerThousand","type":"uint256"}],"name":"updateAffiliatePer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeContract","type":"address"}],"name":"updateFeeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMultiplier","type":"uint256"}],"name":"updateNativeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTeamFee","type":"uint256"}],"name":"updateTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newReturnTimeDelta","type":"uint256"}],"name":"updateTokenReturnTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526002600455600a60055562093a80600655601460075534801561002657600080fd5b5060405161568d38038061568d8339810160408190526100459161009d565b600080546001600160a01b03199081163317909155600280546001600160a01b03948516908316179055600380549290931691161790556100d0565b80516001600160a01b038116811461009857600080fd5b919050565b600080604083850312156100b057600080fd5b6100b983610081565b91506100c760208401610081565b90509250929050565b6155ae806100df6000396000f3fe60806040523480156200001157600080fd5b5060043610620000ee5760003560e01c806306e2971214620000f3578063096ff6a2146200011f5780631ab8f864146200013857806325cfdf5e14620001515780632b5027ac146200016857806346c96aac14620001725780634a7baeac1462000186578063715018a6146200019d5780638da5cb5b14620001a7578063accef1fa14620001bb578063acedf07c14620001c2578063c3abb76614620001d9578063d1b918e914620001ed578063d48f502914620001f7578063d7c94efd146200020e578063f2fde38b1462000218578063fc006a8a146200022f575b600080fd5b60025462000107906001600160a01b031681565b604051620001169190620005a5565b60405180910390f35b6200013662000130366004620005b9565b62000246565b005b6200014260075481565b60405190815260200162000116565b6200013662000162366004620005b9565b62000263565b6200014260055481565b60015462000107906001600160a01b031681565b6200013662000197366004620005b9565b62000280565b620001366200029d565b60005462000107906001600160a01b031681565b4262000142565b62000136620001d3366004620005b9565b620002fd565b60035462000107906001600160a01b031681565b6200014260065481565b6200010762000208366004620006f4565b6200031a565b6200014260045481565b6200013662000229366004620007aa565b620004c8565b6200013662000240366004620007aa565b620004ee565b6000546001600160a01b031633146200025e57600080fd5b600655565b6000546001600160a01b031633146200027b57600080fd5b600755565b6000546001600160a01b031633146200029857600080fd5b600555565b6000546001600160a01b03163314620002b557600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146200031557600080fd5b600455565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016007548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f600360048110620004015762000401620007cf565b60200201516001600160a01b03169052600554600654604051620004259062000597565b6200043a9a9998979695949392919062000863565b604051809103906000f08015801562000457573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b916200048991600401620005a5565b600060405180830381600087803b158015620004a457600080fd5b505af1158015620004b9573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b03163314620004e057600080fd5b620004eb8162000528565b50565b6000546001600160a01b031633146200050657600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200053c57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b614c7e80620008fb83390190565b6001600160a01b0391909116815260200190565b600060208284031215620005cc57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200060e576200060e620005d3565b60405290565b80356001600160a01b03811681146200062c57600080fd5b919050565b600082601f8301126200064357600080fd5b604080519081016001600160401b0381118282101715620006685762000668620005d3565b80604052508060408401858111156200068057600080fd5b845b818110156200069c57803583526020928301920162000682565b509195945050505050565b600082601f830112620006b957600080fd5b60405160a081016001600160401b0381118282101715620006de57620006de620005d3565b6040528060a08401858111156200068057600080fd5b60008060008060006101c086880312156200070e57600080fd5b86601f8701126200071e57600080fd5b62000728620005e9565b8060808801898111156200073b57600080fd5b885b818110156200076057620007518162000614565b8452602093840193016200073d565b50819750620007708a8262000631565b9650505050620007848760c08801620006a7565b925061016086013591506200079e87610180880162000631565b90509295509295909350565b600060208284031215620007bd57600080fd5b620007c88262000614565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b60028110156200080a578151845260209384019390910190600101620007e9565b50505050565b8060005b60028110156200080a5781516001600160a01b031684526020938401939091019060010162000814565b8060005b60038110156200080a57815184526020938401939091019060010162000842565b6001600160a01b038b168152610260810162000883602083018c620007e5565b62000892606083018b620007e5565b620008a160a083018a62000810565b620008b060e08301896200083e565b620008c0610140830188620007e5565b620008d06101808301876200083e565b620008e06101e083018662000810565b61022082019390935261024001529897505050505050505056fe60c0604052600a60809081526908c8292a49882aa9c86960b31b60a0526002906200002b908262000315565b50600060155560026017556014601855603c601f5561025860205562093a80602155600a602f556064603555604051806040016040528060018152602001600160fd1b815250603c908162000081919062000315565b503480156200008f57600080fd5b5060405162004c7e38038062004c7e833981016040819052620000b29162000547565b600080546001600160a01b03191633179055602f8290556021819055604080518082019091526020878101518252810187600260200201519052620000fc90601990600262000216565b508551601b558751601c55602088810151601d55602280546001600160a01b038d81166001600160a01b031992831617909255604089015160275589516031805491841691831691909117905589830151603280549190931691161790558581015160178190558651602b558a51602c55908a0151602d5560649062000183908262000624565b602d54602c5462000195919062000624565b620001a1919062000640565b620001ad91906200065a565b602e558351620001bf90606462000624565b60305550506020808301516036556040909201516018558051603b80546001600160a01b039283166001600160a01b031991821617909155919092015160378054919093169116179055506200067d945050505050565b826002810192821562000247579160200282015b82811115620002475782518255916020019190600101906200022a565b506200025592915062000259565b5090565b5b808211156200025557600081556001016200025a565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031057600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b5050505b505050565b81516001600160401b0381111562000331576200033162000270565b620003498162000342845462000286565b84620002c2565b602080601f831160018114620003815760008415620003685750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b25788860151825594840194600190910190840162000391565b5085821015620003d15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620003f957600080fd5b919050565b604080519081016001600160401b038111828210171562000423576200042362000270565b60405290565b600082601f8301126200043b57600080fd5b62000445620003fe565b8060408401858111156200045857600080fd5b845b81811015620004745780518452602093840193016200045a565b509095945050505050565b600082601f8301126200049157600080fd5b6200049b620003fe565b806040840185811115620004ae57600080fd5b845b818110156200047457620004c481620003e1565b845260209384019301620004b0565b600082601f830112620004e557600080fd5b604051606081016001600160401b03811182821017156200050a576200050a62000270565b6040528060608401858111156200052057600080fd5b845b818110156200053c57805183526020928301920162000522565b509195945050505050565b6000806000806000806000806000806102608b8d0312156200056857600080fd5b620005738b620003e1565b9950620005848c60208d0162000429565b9850620005958c60608d0162000429565b9750620005a68c60a08d016200047f565b9650620005b78c60e08d01620004d3565b9550620005c98c6101408d0162000429565b9450620005db8c6101808d01620004d3565b9350620005ed8c6101e08d016200047f565b92506102208b015191506102408b015190509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b808201808211156200063a576200063a6200060e565b92915050565b80820281158282048414176200063a576200063a6200060e565b6000826200067857634e487b7160e01b600052601260045260246000fd5b500490565b6145f1806200068d6000396000f3fe6080604052600436106104425760003560e01c806306e29712146104575780630f98c9181461048d57806310ef82c5146104b15780631265d6e7146104c75780631515bc2b146104e95780631ab8f8641461050c5780631bd49653146105225780631e12353e146105385780631edd40ae1461056e5780631f4ba804146105835780631f6d494214610599578063249b7c19146105c6578063252a02eb146105db5780632698d7071461061157806329c0c4d7146106265780632a592e9f146106535780632fc9b686146106805780633197cbb6146106b0578063333863b6146106c65780633675f29b146106f35780633bff8ed7146107135780633cb650d0146107405780634042b66f14610755578063422099b21461076b57806345e05f431461078057806346c96aac146107a157806348c54b9d146107c15780634c4a386f146107d65780634d2a9073146107f75780634e4153bb1461081757806351fb012d1461082d5780635a0e779b146108475780635bff9a27146108685780635f9bae321461087e57806360adf58b1461089457806361644ca8146108b457806361c533b4146108d857806363c18058146108ee5780636ac8d0c2146109035780636e27607a14610923578063715018a61461094457806371beb4e1146109595780637313ee5a1461096f57806378e2df0e1461098557806378e979251461099b5780637d3d6522146109b15780637f87bbd6146109cb5780638190eefd146109ec5780638256645914610a0657806382efbbec14610a1c578063844faace14610a3257806386c5ae2f14610a5f5780638ab1d68114610a7f5780638b6ea1cf14610a9f5780638c0f7eba14610abf5780638d4e408314610ad25780638da5cb5b14610af157806397993fd914610b11578063995c5e9d14610b315780639b19251a14610b615780639b33d9d114610b915780639fe4cb9414610ba6578063a82524b214610bc6578063b138d50014610bdb578063b444e16214610bf1578063b5545a3c14610c07578063b7a871c914610c1c578063b857ba3e14610c4c578063b89918e014610c6c578063b94a6dfe14610c81578063bc2eae0c14610ca1578063be11ce2f14610cb7578063be5ef81a14610ccc578063bf3f15bf14610cec578063c3abb76614610d02578063c6197f3114610d22578063cdfb2b4e14610d38578063ce7dadd014610d4d578063d0e8861814610d63578063d6b0f48414610d79578063d94193d714610d8e578063db37ceec14610dbb578063e132db4114610dd0578063e43252d714610de5578063e4bb624914610e05578063e4c21cf214610e1b578063e5658e1a14610e30578063e580b2b0146104e9578063ecfd892814610e5d578063ef67a5e214610e73578063f2fde38b14610e93578063f6e99c0d14610eb3578063fb7f21eb14610ed3578063fc0c546a14610ee8578063fc37987b14610f08578063fcb3747314610f1e578063fe67a18914610f3457600080fd5b366104525761045034610f4a565b005b600080fd5b34801561046357600080fd5b50603254610477906001600160a01b031681565b6040516104849190613d71565b60405180910390f35b34801561049957600080fd5b506104a3602b5481565b604051908152602001610484565b3480156104bd57600080fd5b506104a3602e5481565b3480156104d357600080fd5b506104dc611105565b6040516104849190613dcb565b3480156104f557600080fd5b50601d5442115b6040519015158152602001610484565b34801561051857600080fd5b506104a360185481565b34801561052e57600080fd5b506104a3603a5481565b34801561054457600080fd5b50610477610553366004613dde565b6013602052600090815260409020546001600160a01b031681565b34801561057a57600080fd5b50610450611193565b34801561058f57600080fd5b506104a360305481565b3480156105a557600080fd5b506104a36105b4366004613e0c565b60066020526000908152604090205481565b3480156105d257600080fd5b50601d546104a3565b3480156105e757600080fd5b506104776105f6366004613dde565b600b602052600090815260409020546001600160a01b031681565b34801561061d57600080fd5b50601e546104a3565b34801561063257600080fd5b506104a3610641366004613e0c565b60046020526000908152604090205481565b34801561065f57600080fd5b506104a361066e366004613e0c565b60086020526000908152604090205481565b34801561068c57600080fd5b506104fc61069b366004613e0c565b600d6020526000908152604090205460ff1681565b3480156106bc57600080fd5b506104a3601d5481565b3480156106d257600080fd5b506104a36106e1366004613e0c565b60056020526000908152604090205481565b3480156106ff57600080fd5b50603954610477906001600160a01b031681565b34801561071f57600080fd5b506104a361072e366004613e0c565b60096020526000908152604090205481565b34801561074c57600080fd5b506104506112fa565b34801561076157600080fd5b506104a3601e5481565b34801561077757600080fd5b50610450611371565b34801561078c57600080fd5b506026546104fc90600160301b900460ff1681565b3480156107ad57600080fd5b50600154610477906001600160a01b031681565b3480156107cd57600080fd5b506104506113f7565b3480156107e257600080fd5b506026546104fc90600160201b900460ff1681565b34801561080357600080fd5b506104a3610812366004613e4d565b6115cb565b34801561082357600080fd5b506104a360155481565b34801561083957600080fd5b50600f546104fc9060ff1681565b34801561085357600080fd5b506039546104fc90600160a01b900460ff1681565b34801561087457600080fd5b506104a360355481565b34801561088a57600080fd5b506104a360235481565b3480156108a057600080fd5b506104506108af366004613dde565b61171a565b3480156108c057600080fd5b506108c961193c565b60405161048493929190613eee565b3480156108e457600080fd5b506104a360365481565b3480156108fa57600080fd5b50610450611ab6565b34801561090f57600080fd5b506026546104fc9062010000900460ff1681565b34801561092f57600080fd5b506026546104fc90600160281b900460ff1681565b34801561095057600080fd5b50610450611c4c565b34801561096557600080fd5b506104a360275481565b34801561097b57600080fd5b506104a3602a5481565b34801561099157600080fd5b506104a3601b5481565b3480156109a757600080fd5b506104a3601c5481565b3480156109bd57600080fd5b50601b54601e5410156104fc565b3480156109d757600080fd5b506026546104fc906301000000900460ff1681565b3480156109f857600080fd5b506026546104fc9060ff1681565b348015610a1257600080fd5b506104a360255481565b348015610a2857600080fd5b506104a360115481565b348015610a3e57600080fd5b506104a3610a4d366004613e0c565b600a6020526000908152604090205481565b348015610a6b57600080fd5b50610477610a7a366004613dde565b611cab565b348015610a8b57600080fd5b50610450610a9a366004613e0c565b611cd5565b348015610aab57600080fd5b50603354610477906001600160a01b031681565b610450610acd366004613e0c565b611d76565b348015610ade57600080fd5b506026546104fc90610100900460ff1681565b348015610afd57600080fd5b50600054610477906001600160a01b031681565b348015610b1d57600080fd5b506104a3610b2c366004613f63565b611f1c565b348015610b3d57600080fd5b506104fc610b4c366004613e0c565b600c6020526000908152604090205460ff1681565b348015610b6d57600080fd5b506104fc610b7c366004613e0c565b600e6020526000908152604090205460ff1681565b348015610b9d57600080fd5b50610477611fde565b348015610bb257600080fd5b50603854610477906001600160a01b031681565b348015610bd257600080fd5b50601c546104a3565b348015610be757600080fd5b506104a3602c5481565b348015610bfd57600080fd5b506104a360205481565b348015610c1357600080fd5b50610450612051565b348015610c2857600080fd5b506104fc610c37366004613e0c565b60346020526000908152604090205460ff1681565b348015610c5857600080fd5b50610450610c67366004613ff9565b612112565b348015610c7857600080fd5b506104506121f1565b348015610c8d57600080fd5b50603754610477906001600160a01b031681565b348015610cad57600080fd5b506104a360125481565b348015610cc357600080fd5b506104a36125aa565b348015610cd857600080fd5b50610450610ce736600461404c565b6125b7565b348015610cf857600080fd5b506104a360285481565b348015610d0e57600080fd5b50603b54610477906001600160a01b031681565b348015610d2e57600080fd5b506104a360215481565b348015610d4457600080fd5b506104506126f8565b348015610d5957600080fd5b506104a3602d5481565b348015610d6f57600080fd5b506104a3602f5481565b348015610d8557600080fd5b50610450612741565b348015610d9a57600080fd5b506104a3610da9366004613e0c565b60036020526000908152604090205481565b348015610dc757600080fd5b506104a36127a3565b348015610ddc57600080fd5b506016546104a3565b348015610df157600080fd5b50610450610e00366004613e0c565b6127ae565b348015610e1157600080fd5b506104a360245481565b348015610e2757600080fd5b50601b546104a3565b348015610e3c57600080fd5b506104a3610e4b366004613e0c565b60076020526000908152604090205481565b348015610e6957600080fd5b506104a360105481565b348015610e7f57600080fd5b50603154610477906001600160a01b031681565b348015610e9f57600080fd5b50610450610eae366004613e0c565b612817565b348015610ebf57600080fd5b506104fc610ece36600461406e565b612837565b348015610edf57600080fd5b506104dc612a62565b348015610ef457600080fd5b50602254610477906001600160a01b031681565b348015610f1457600080fd5b506104a360165481565b348015610f2a57600080fd5b506104a3601f5481565b348015610f4057600080fd5b506104a360295481565b6023544211610f745760405162461bcd60e51b8152600401610f6b906140b6565b60405180910390fd5b336000908152600d602052604090205460ff1615610fa45760405162461bcd60e51b8152600401610f6b906140d8565b600f5460ff1615610fde57336000908152600e602052604090205460ff16610fde5760405162461bcd60e51b8152600401610f6b90614103565b80602754610fec9190614142565b33600090815260066020526040902054111561104a5760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610f6b565b6110543382612a6f565b3360009081526006602052604081208054839290611073908490614155565b90915550503360009081526007602052604081208054839290611097908490614155565b9091555050336000908152600c602052604090205460ff1661110257601080546000908152600b6020908152604080832080546001600160a01b031916339081179091558352600c9091528120805460ff19166001179055815491906110fc83614168565b91905055505b50565b6002805461111290614181565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90614181565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b505050505081565b336000908152600d602052604090205460ff16156111e75760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610f6b565b33600090815260066020526040902054806112145760405162461bcd60e51b8152600401610f6b906141bb565b602654610100900460ff161561123c5760405162461bcd60e51b8152600401610f6b906141e5565b60265462010000900460ff16156112655760405162461bcd60e51b8152600401610f6b90614211565b602054601d5461127491612bff565b42106112b45760405162461bcd60e51b815260206004820152600f60248201526e77696e646f7720657870697265642160881b6044820152606401610f6b565b336000908152600960205260409020819055601e546112d39082612bff565b601e55336000818152600d60205260409020805460ff191660011790556111029082612c22565b6031546001600160a01b0316331461131157600080fd5b6026546301000000900460ff1661133a5760405162461bcd60e51b8152600401610f6b90614239565b602654610100900460ff16156113625760405162461bcd60e51b8152600401610f6b90614263565b6026805463ff00000019169055565b6031546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610f6b9061428e565b602654610100900460ff16156113c35760405162461bcd60e51b8152600401610f6b906141e5565b6026805460ff60281b1916600160281b179055601854601754600a916113e8916142ba565b6113f291906142d1565b601755565b602654600160201b900460ff16156114215760405162461bcd60e51b8152600401610f6b906142f3565b6026546301000000900460ff16156114695760405162461bcd60e51b815260206004820152600b60248201526a7573652076657374696e6760a81b6044820152606401610f6b565b602654610100900460ff166114905760405162461bcd60e51b8152600401610f6b90614315565b60265462010000900460ff166114b85760405162461bcd60e51b8152600401610f6b9061433c565b3360009081526006602052604081205490036114e65760405162461bcd60e51b8152600401610f6b90614365565b60165433600090815260066020526040812054909161151991670de0b6b3a7640000916115139190612da7565b90612ddd565b3360008181526006602052604080822091909155602254905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161155d91859060040161438c565b6020604051808303816000875af115801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a091906143a5565b5033600090815260086020908152604080832084905560049091529020541561110257611102612de9565b600080546001600160a01b031633146115e357600080fd5b602654610100900460ff161561160b5760405162461bcd60e51b8152600401610f6b90614263565b601d5442116116495760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610f6b565b8351603380546001600160a01b039283166001600160a01b03199182161790915560208601516031805491909316911617905560268054831515620100000262ff000019909116179055601b54601e54101580156116af575060265462010000900460ff165b156116de576116bc612eba565b6031546033546116d9916001600160a01b03908116911685612ee1565b6116e6565b6116e6613221565b4260295560405160008051602061459c83398151915290600090a1506026805461ff00191661010017905560019392505050565b6031546001600160a01b031633146117445760405162461bcd60e51b8152600401610f6b9061428e565b6021546029546117549190614155565b421161175f57600080fd5b6022546040516370a0823160e01b81526001600160a01b03909116906370a082319061178f903090600401613d71565b602060405180830381865afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d091906143c2565b8111156118105760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610f6b565b602654610100900460ff166118375760405162461bcd60e51b8152600401610f6b906143db565b60265462010000900460ff1661187b5760405162461bcd60e51b81526020600482015260096024820152681b9bdd081d985b1a5960ba1b6044820152606401610f6b565b60225460315460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926118b192911690859060040161438c565b6020604051808303816000875af11580156118d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f491906143a5565b6111025760405162461bcd60e51b81526020600482015260196024820152783a3930b7399032b9391037b7103ab739b7b632103a37b5b2b760391b6044820152606401610f6b565b611944613d34565b61194c613d53565b6060611956613d34565b61195e613d53565b50506040805161014081018252601b548152602c5460208083019190915260195482840152601a54606080840191909152601c54608080850191909152601d5460a0850152601e5460c085015260165460e0850152602d5461010080860191909152602b546101208601528551918201865260265490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611a2990614181565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5590614181565b8015611aa25780601f10611a7757610100808354040283529160200191611aa2565b820191906000526020600020905b815481529060010190602001808311611a8557829003601f168201915b505050505090509450945094505050909192565b6031546001600160a01b03163314611ae05760405162461bcd60e51b8152600401610f6b9061428e565b602654610100900460ff16611b075760405162461bcd60e51b8152600401610f6b906143db565b60265462010000900460ff1615611b305760405162461bcd60e51b8152600401610f6b90614211565b6022546031546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a0823190611b6d903090600401613d71565b602060405180830381865afa158015611b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bae91906143c2565b6040518363ffffffff1660e01b8152600401611bcb92919061438c565b6020604051808303816000875af1158015611bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0e91906143a5565b611c4a5760405162461bcd60e51b815260206004820152600d60248201526c1d1c985b9cd9995c8819985a5b609a1b6044820152606401610f6b565b565b6000546001600160a01b03163314611c6357600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b60148181548110611cbb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611cec57600080fd5b6001600160a01b0381166000908152600e602052604090205460ff16611d485760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610f6b565b6001600160a01b0381166000908152600e60205260408120805460ff1916905560128054916110fc83614168565b803b63ffffffff1615611dc65760405162461bcd60e51b815260206004820152601860248201527718dbdb9d1c9858dd081c9959881b9bdd08185b1b1bddd95960421b6044820152606401610f6b565b602654600160301b900460ff16611e175760405162461bcd60e51b81526020600482015260156024820152747265666572206d6f6465206e6f742061637469766560581b6044820152606401610f6b565b60006103e8602f5434611e2a91906142ba565b611e3491906142d1565b9050611e48611e438234614142565b610f4a565b6040516001600160a01b038316908290600081818185875af1925050503d8060008114611e91576040519150601f19603f3d011682016040523d82523d6000602084013e611e96565b606091505b5050506001600160a01b03821660009081526003602052604081208054839290611ec1908490614155565b90915550503360009081526004602052604081208054839290611ee5908490614155565b925050819055508060246000828254611efe9190614155565b909155505060258054906000611f1383614168565b91905055505050565b600080546001600160a01b03163314611f3457600080fd5b602654610100900460ff1615611f5c5760405162461bcd60e51b8152600401610f6b90614263565b8251603380546001600160a01b039283166001600160a01b03199182161790915560208501516031805491909316911617905560268054831515620100000262ff000019909116179055611fae613221565b60405160008051602061459c83398151915290600090a1506026805461ff00191661010017905560015b92915050565b603754604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c9190614403565b905090565b602654610100900460ff166120985760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610f6b565b601b54601e5410806120b3575060265462010000900460ff16155b6121095760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610f6b565b611c4a3361325f565b6031546001600160a01b0316331461212957600080fd5b811561219757831515602660069054906101000a900460ff1615150361217f5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610f6b565b6026805460ff60301b1916600160301b861515021790555b80156121eb57600a8311156121dc5760405162461bcd60e51b815260206004820152600b60248201526a34b73b30b634b2103832b960a91b6044820152606401610f6b565b6121e783600a6142ba565b602f555b50505050565b602654600160201b900460ff161561221b5760405162461bcd60e51b8152600401610f6b906142f3565b6026546301000000900460ff166122445760405162461bcd60e51b8152600401610f6b90614420565b602654610100900460ff1661226b5760405162461bcd60e51b8152600401610f6b90614315565b60265462010000900460ff166122935760405162461bcd60e51b8152600401610f6b9061433c565b3360009081526006602052604081205490036122c15760405162461bcd60e51b8152600401610f6b90614365565b602854336000908152600a60205260409020541061230e5760405162461bcd60e51b815260206004820152600a602482015269185b1b081d995cdd195960b21b6044820152606401610f6b565b60006123366001612330602a5461151360295442612bff90919063ffffffff16565b906133a6565b9050602854811061234657506028545b336000908152600a6020526040812054612361908390612bff565b905060008111801561237557506028548111155b6123b45760405162461bcd60e51b815260206004820152601060248201526f6e6f7420636c61696d2077696e646f7760801b6044820152606401610f6b565b336000908152600a602090815260408083208590556028546016546007909352908320546123fe926115139186916123f891670de0b6b3a764000091859190612da7565b90612da7565b601654336000908152600660205260408120549293509161242c91670de0b6b3a76400009161151391612da7565b90508082111561246e5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420636c61696d60981b6044820152606401610f6b565b602854336000908152600760205260408120549091612491916115139087612da7565b3360009081526006602052604090205490915081106124bf57336000908152600660205260408120556124ea565b336000908152600660205260409020546124d99082612bff565b336000908152600660205260409020555b60225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061251c903390879060040161438c565b6020604051808303816000875af115801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255f91906143a5565b503360009081526008602052604090205461257a90846133a6565b33600090815260086020908152604080832093909355600490522054156125a3576125a3612de9565b5050505050565b60006019815b0154905090565b600182116125fd5760405162461bcd60e51b81526020600482015260136024820152721b9d5b481bd9881d995cdd081a5b9d985b1a59606a1b6044820152606401610f6b565b6000811161263e5760405162461bcd60e51b815260206004820152600e60248201526d1c195c9a5bd9081a5b9d985b1a5960921b6044820152606401610f6b565b601c5461264d90610258612bff565b42106126995760405162461bcd60e51b815260206004820152601b60248201527a1a5b9d985b1a590818599d195c881c1c995cd85b19481cdd185c9d602a1b6044820152606401610f6b565b6026546301000000900460ff16156126c35760405162461bcd60e51b8152600401610f6b90614445565b6031546001600160a01b031633146126da57600080fd5b6026805463ff00000019166301000000179055602891909155602a55565b6000546001600160a01b0316331461270f57600080fd5b600f5460ff16156127325760405162461bcd60e51b8152600401610f6b90614445565b600f805460ff19166001179055565b6000546001600160a01b0316331461275857600080fd5b600f5460ff1661277a5760405162461bcd60e51b8152600401610f6b90614239565b600f805460ff19169055601f546127919042614155565b6023556026805460ff19166001179055565b6000601960016125b0565b6000546001600160a01b031633146127c557600080fd5b6001600160a01b0381166000818152600e60209081526040808320805460ff191660011790556011805484526013909252822080546001600160a01b031916909317909255815491906110fc83614168565b6000546001600160a01b0316331461282e57600080fd5b611102816133c4565b600080546001600160a01b0316331461284f57600080fd5b602654600160281b900460ff16612a57576001600160a01b0385166128a45760405162461bcd60e51b815260206004820152600b60248201526a3737903d32b9379030b23960a91b6044820152606401610f6b565b60006064601754602c546128b891906142ba565b6128c291906142d1565b9050600083156129dd5760646128d886846142ba565b6128e291906142d1565b6022549091506001600160a01b031663a9059cbb886129018486614142565b6040518363ffffffff1660e01b815260040161291e92919061438c565b6020604051808303816000875af115801561293d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296191906143a5565b5060225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612994908990859060040161438c565b6020604051808303816000875af11580156129b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d791906143a5565b50612a54565b60225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612a0f908a90869060040161438c565b6020604051808303816000875af1158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5291906143a5565b505b50505b506001949350505050565b603c805461111290614181565b333214612aad5760405162461bcd60e51b815260206004820152600c60248201526b6e6f20636f6e74726163747360a01b6044820152606401610f6b565b6023544211612ace5760405162461bcd60e51b8152600401610f6b906140b6565b601c544210158015612ae15750601d5442105b612b1a5760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610f6b565b336000908152600d602052604090205460ff1615612b4a5760405162461bcd60e51b8152600401610f6b906140d8565b600f5460ff1615612b8457336000908152600e602052604090205460ff16612b845760405162461bcd60e51b8152600401610f6b90614103565b80612b8f8382613432565b6000612b9a82613474565b905081601e6000828254612bae9190614155565b909155505060408051838152602081018390526001600160a01b0386169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a350505050565b600082821115612c1157612c1161446e565b612c1b8284614142565b9392505050565b6000612c346064611513846014612da7565b90506000612c428383612bff565b6001600160a01b03858116600090815260066020908152604080832083905560079091528082208290556032549051939450909291169084908381818185875af1925050503d8060008114612cb3576040519150601f19603f3d011682016040523d82523d6000602084013e612cb8565b606091505b505090506000856001600160a01b03168360405160006040518083038185875af1925050503d8060008114612d09576040519150601f19603f3d011682016040523d82523d6000602084013e612d0e565b606091505b50509050818015612d1c5750805b612d5c5760405162461bcd60e51b815260206004820152601160248201527019985a5b195908185d081c185e5b595b9d607a1b6044820152606401610f6b565b856001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d286604051612d9791815260200190565b60405180910390a2505050505050565b600082600003612db957506000611fd8565b612dc382846142ba565b905081612dd084836142d1565b14611fd857611fd861446e565b6000612c1b82846142d1565b601654336000908152600460205260408120549091670de0b6b3a764000091612e1291906142ba565b612e1c91906142d1565b33600081815260046020819052604080832092909255602254915163a9059cbb60e01b81529394506001600160a01b039091169263a9059cbb92612e6492909186910161438c565b6020604051808303816000875af1158015612e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea791906143a5565b5033600090815260056020526040902055565b601e54602c54612ed290670de0b6b3a76400006142ba565b612edc91906142d1565b601655565b602654610100900460ff1615612f095760405162461bcd60e51b8152600401610f6b90614263565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a16000612f4e606461151360175447612da790919063ffffffff16565b90508115613075576000612f6760646115138486612da7565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fb6576040519150601f19603f3d011682016040523d82523d6000602084013e612fbb565b606091505b50506032549091506000906001600160a01b0316612fd98585612bff565b604051600081818185875af1925050503d8060008114613015576040519150601f19603f3d011682016040523d82523d6000602084013e61301a565b606091505b505090508180156130285750805b61306d5760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726566206f72206665652070617960501b6044820152606401610f6b565b50505061310c565b6032546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c2576040519150601f19603f3d011682016040523d82523d6000602084013e6130c7565b606091505b505090508061310a5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206665652070617960881b6044820152606401610f6b565b505b60006131286064611513602b5447612da790919063ffffffff16565b90508047101561316c5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08115b9bdd59da08119d5b99608a1b6044820152606401610f6b565b613178602d5482613497565b47156125a3576000856001600160a01b03164760405160006040518083038185875af1925050503d80600081146131cb576040519150601f19603f3d011682016040523d82523d6000602084013e6131d0565b606091505b50509050806132195760405162461bcd60e51b81526020600482015260156024820152743ab730b13632903a37903830bc9031b932b0ba37b960591b6044820152606401610f6b565b505050505050565b6026805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602654600160201b900460ff166132885760405162461bcd60e51b8152600401610f6b90614420565b6001600160a01b038116600090815260066020526040902054806132be5760405162461bcd60e51b8152600401610f6b906141bb565b6001600160a01b0382166000818152600660205260408082208290555190919083908381818185875af1925050503d8060008114613318576040519150601f19603f3d011682016040523d82523d6000602084013e61331d565b606091505b505090508061335e5760405162461bcd60e51b815260206004820152600d60248201526c1c99599d5b990819985a5b1959609a1b6044820152606401610f6b565b826001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518360405161339991815260200190565b60405180910390a2505050565b60006133b28284614155565b905082811015611fd857611fd861446e565b6001600160a01b0381166133d757600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60195434101561344157600080fd5b601a5434111561345057600080fd5b6001600160a01b03821661346357600080fd5b8060000361347057600080fd5b5050565b6000670de0b6b3a76400006016548361348d91906142ba565b611fd891906142d1565b80600060646134a783600a6142ba565b6134b191906142d1565b6134bb9083614142565b905083600060646134cd83600a6142ba565b6134d791906142d1565b6134e19083614142565b60225490915060009081908190613508906001600160a01b0316613503611fde565b613956565b603880546001600160a01b0319166001600160a01b0392909216919091179055613530611fde565b6038546040516370a0823160e01b81526001600160a01b03928316926370a082319261356192911690600401613d71565b602060405180830381865afa15801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a291906143c2565b6022546038546040516370a0823160e01b81529295506001600160a01b03918216926370a08231926135d8921690600401613d71565b602060405180830381865afa1580156135f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361991906143c2565b6038549092506001600160a01b03161580159061363f575060008311801561363f575081155b1561373e578661364f84876142ba565b61365991906142d1565b60225460385460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb92613691921690859060040161438c565b6020604051808303816000875af11580156136b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d491906143a5565b50603860009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561372557600080fd5b505af1158015613739573d6000803e3d6000fd5b505050505b602254613753906001600160a01b0316613c04565b506037546022546001600160a01b039182169163f305d719918a911688888b3061377f4261012c614155565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156137ec573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138119190614484565b50506039805460ff60a01b1916600160a01b17905550603854603b54613843916001600160a01b039081169116613ca4565b50603b546038546036546040516370a0823160e01b81526001600160a01b0393841693638a4e6e5693169190603c9083906370a0823190613888903090600401613d71565b602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906143c2565b6040518563ffffffff1660e01b81526004016138e894939291906144b2565b6020604051808303816000875af1158015613907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392b9190614403565b603980546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b6000806001600160a01b0316603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d99190614403565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401613a06929190614581565b602060405180830381865afa158015613a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a479190614403565b6001600160a01b031614613b4157603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acc9190614403565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401613af9929190614581565b602060405180830381865afa158015613b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3a9190614403565b9050611fd8565b603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb89190614403565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401613be5929190614581565b6020604051808303816000875af1158015613b16573d6000803e3d6000fd5b60375460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b392613c579290911690859060040161438c565b6020604051808303816000875af1158015613c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9a91906143a5565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b390613cf1908690859060040161438c565b6020604051808303816000875af1158015613d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5791906143a5565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0391909116815260200190565b6000815180845260005b81811015613dab57602081850181015186830182015201613d8f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612c1b6020830184613d85565b600060208284031215613df057600080fd5b5035919050565b6001600160a01b038116811461110257600080fd5b600060208284031215613e1e57600080fd5b8135612c1b81613df7565b634e487b7160e01b600052604160045260246000fd5b801515811461110257600080fd5b600080600060808486031215613e6257600080fd5b84601f850112613e7157600080fd5b604080519081016001600160401b0381118282101715613e9357613e93613e29565b8060405250806040860187811115613eaa57600080fd5b865b81811015613ecd578035613ebf81613df7565b835260209283019201613eac565b50919450503591506060840135613ee381613e3f565b809150509250925092565b60006101e08286835b600a811015613f16578151835260209283019290910190600101613ef7565b50505061014083018560005b6004811015613f435781511515835260209283019290910190600101613f22565b505050806101c0840152613f5981840185613d85565b9695505050505050565b60008060808385031215613f7657600080fd5b83601f840112613f8557600080fd5b604051606081016001600160401b0381118282101715613fa757613fa7613e29565b604052806060850186811115613fbc57600080fd5b855b81811015613fdf578035613fd181613df7565b835260209283019201613fbe565b509193505035613fee81613e3f565b809150509250929050565b6000806000806080858703121561400f57600080fd5b843561401a81613e3f565b935060208501359250604085013561403181613e3f565b9150606085013561404181613e3f565b939692955090935050565b6000806040838503121561405f57600080fd5b50508035926020909101359150565b6000806000806080858703121561408457600080fd5b843561408f81613df7565b9350602085013561409f81613df7565b925060408501359150606085013561404181613e3f565b60208082526008908201526731b7b7b61027b33360c11b604082015260600190565b602080825260119082015270616e7974696d6520726566756e6465642160781b604082015260600190565b6020808252600f908201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611fd857611fd861412c565b80820180821115611fd857611fd861412c565b60006001820161417a5761417a61412c565b5060010190565b600181811c9082168061419557607f821691505b6020821081036141b557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f6e6f7468696e6720746f20636c61696d60801b604082015260600190565b602080825260129082015271616c72656164792066696e616c697a65642160701b604082015260600190565b6020808252600e908201526d199a5b985b1a5e99481d985b1a5960921b604082015260600190565b60208082526010908201526f185b1c9958591e48191a5cd8589b195960821b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252601290820152716e6f742070726573616c65206f776e65722160701b604082015260600190565b8082028115828204841417611fd857611fd861412c565b6000826142ee57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600890820152671c99599d5b99195960c21b604082015260600190565b6020808252600d908201526c139bdd08119a5b985b1a5e9959609a1b604082015260600190565b6020808252600f908201526e70726573616c65204661696c65642160881b604082015260600190565b6020808252600d908201526c1b9bc818db185a5b481b19599d609a1b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156143b757600080fd5b8151612c1b81613e3f565b6000602082840312156143d457600080fd5b5051919050565b6020808252600e908201526d6e6f742066696e616c697a65642160901b604082015260600190565b60006020828403121561441557600080fd5b8151612c1b81613df7565b6020808252600b908201526a1b9bdd08195b98589b195960aa1b604082015260600190565b6020808252600f908201526e185b1c9958591e48195b98589b1959608a1b604082015260600190565b634e487b7160e01b600052600160045260246000fd5b60008060006060848603121561449957600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c90828116806144ea57607f831692505b858310810361450757634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614526576001811461453c57614567565b60ff198616825284151560051b82019650614567565b60008c81526020902060005b8681101561456157815484820152908501908901614548565b83019750505b505050505050809250505082606083015295945050505050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a264697066735822122015c5d8be3397714fba2f95d2d2f555cca9a7c440723e27b1af7f7abcee67950164736f6c63430008110033a26469706673582212204d59c360f45a7047f7ae72c2fcee8ddda9f613bc92088e89a38876568464fd4664736f6c634300081100330000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d4
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000ee5760003560e01c806306e2971214620000f3578063096ff6a2146200011f5780631ab8f864146200013857806325cfdf5e14620001515780632b5027ac146200016857806346c96aac14620001725780634a7baeac1462000186578063715018a6146200019d5780638da5cb5b14620001a7578063accef1fa14620001bb578063acedf07c14620001c2578063c3abb76614620001d9578063d1b918e914620001ed578063d48f502914620001f7578063d7c94efd146200020e578063f2fde38b1462000218578063fc006a8a146200022f575b600080fd5b60025462000107906001600160a01b031681565b604051620001169190620005a5565b60405180910390f35b6200013662000130366004620005b9565b62000246565b005b6200014260075481565b60405190815260200162000116565b6200013662000162366004620005b9565b62000263565b6200014260055481565b60015462000107906001600160a01b031681565b6200013662000197366004620005b9565b62000280565b620001366200029d565b60005462000107906001600160a01b031681565b4262000142565b62000136620001d3366004620005b9565b620002fd565b60035462000107906001600160a01b031681565b6200014260065481565b6200010762000208366004620006f4565b6200031a565b6200014260045481565b6200013662000229366004620007aa565b620004c8565b6200013662000240366004620007aa565b620004ee565b6000546001600160a01b031633146200025e57600080fd5b600655565b6000546001600160a01b031633146200027b57600080fd5b600755565b6000546001600160a01b031633146200029857600080fd5b600555565b6000546001600160a01b03163314620002b557600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146200031557600080fd5b600455565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016007548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f600360048110620004015762000401620007cf565b60200201516001600160a01b03169052600554600654604051620004259062000597565b6200043a9a9998979695949392919062000863565b604051809103906000f08015801562000457573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b916200048991600401620005a5565b600060405180830381600087803b158015620004a457600080fd5b505af1158015620004b9573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b03163314620004e057600080fd5b620004eb8162000528565b50565b6000546001600160a01b031633146200050657600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200053c57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b614c7e80620008fb83390190565b6001600160a01b0391909116815260200190565b600060208284031215620005cc57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200060e576200060e620005d3565b60405290565b80356001600160a01b03811681146200062c57600080fd5b919050565b600082601f8301126200064357600080fd5b604080519081016001600160401b0381118282101715620006685762000668620005d3565b80604052508060408401858111156200068057600080fd5b845b818110156200069c57803583526020928301920162000682565b509195945050505050565b600082601f830112620006b957600080fd5b60405160a081016001600160401b0381118282101715620006de57620006de620005d3565b6040528060a08401858111156200068057600080fd5b60008060008060006101c086880312156200070e57600080fd5b86601f8701126200071e57600080fd5b62000728620005e9565b8060808801898111156200073b57600080fd5b885b818110156200076057620007518162000614565b8452602093840193016200073d565b50819750620007708a8262000631565b9650505050620007848760c08801620006a7565b925061016086013591506200079e87610180880162000631565b90509295509295909350565b600060208284031215620007bd57600080fd5b620007c88262000614565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b60028110156200080a578151845260209384019390910190600101620007e9565b50505050565b8060005b60028110156200080a5781516001600160a01b031684526020938401939091019060010162000814565b8060005b60038110156200080a57815184526020938401939091019060010162000842565b6001600160a01b038b168152610260810162000883602083018c620007e5565b62000892606083018b620007e5565b620008a160a083018a62000810565b620008b060e08301896200083e565b620008c0610140830188620007e5565b620008d06101808301876200083e565b620008e06101e083018662000810565b61022082019390935261024001529897505050505050505056fe60c0604052600a60809081526908c8292a49882aa9c86960b31b60a0526002906200002b908262000315565b50600060155560026017556014601855603c601f5561025860205562093a80602155600a602f556064603555604051806040016040528060018152602001600160fd1b815250603c908162000081919062000315565b503480156200008f57600080fd5b5060405162004c7e38038062004c7e833981016040819052620000b29162000547565b600080546001600160a01b03191633179055602f8290556021819055604080518082019091526020878101518252810187600260200201519052620000fc90601990600262000216565b508551601b558751601c55602088810151601d55602280546001600160a01b038d81166001600160a01b031992831617909255604089015160275589516031805491841691831691909117905589830151603280549190931691161790558581015160178190558651602b558a51602c55908a0151602d5560649062000183908262000624565b602d54602c5462000195919062000624565b620001a1919062000640565b620001ad91906200065a565b602e558351620001bf90606462000624565b60305550506020808301516036556040909201516018558051603b80546001600160a01b039283166001600160a01b031991821617909155919092015160378054919093169116179055506200067d945050505050565b826002810192821562000247579160200282015b82811115620002475782518255916020019190600101906200022a565b506200025592915062000259565b5090565b5b808211156200025557600081556001016200025a565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031057600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b5050505b505050565b81516001600160401b0381111562000331576200033162000270565b620003498162000342845462000286565b84620002c2565b602080601f831160018114620003815760008415620003685750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b25788860151825594840194600190910190840162000391565b5085821015620003d15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620003f957600080fd5b919050565b604080519081016001600160401b038111828210171562000423576200042362000270565b60405290565b600082601f8301126200043b57600080fd5b62000445620003fe565b8060408401858111156200045857600080fd5b845b81811015620004745780518452602093840193016200045a565b509095945050505050565b600082601f8301126200049157600080fd5b6200049b620003fe565b806040840185811115620004ae57600080fd5b845b818110156200047457620004c481620003e1565b845260209384019301620004b0565b600082601f830112620004e557600080fd5b604051606081016001600160401b03811182821017156200050a576200050a62000270565b6040528060608401858111156200052057600080fd5b845b818110156200053c57805183526020928301920162000522565b509195945050505050565b6000806000806000806000806000806102608b8d0312156200056857600080fd5b620005738b620003e1565b9950620005848c60208d0162000429565b9850620005958c60608d0162000429565b9750620005a68c60a08d016200047f565b9650620005b78c60e08d01620004d3565b9550620005c98c6101408d0162000429565b9450620005db8c6101808d01620004d3565b9350620005ed8c6101e08d016200047f565b92506102208b015191506102408b015190509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b808201808211156200063a576200063a6200060e565b92915050565b80820281158282048414176200063a576200063a6200060e565b6000826200067857634e487b7160e01b600052601260045260246000fd5b500490565b6145f1806200068d6000396000f3fe6080604052600436106104425760003560e01c806306e29712146104575780630f98c9181461048d57806310ef82c5146104b15780631265d6e7146104c75780631515bc2b146104e95780631ab8f8641461050c5780631bd49653146105225780631e12353e146105385780631edd40ae1461056e5780631f4ba804146105835780631f6d494214610599578063249b7c19146105c6578063252a02eb146105db5780632698d7071461061157806329c0c4d7146106265780632a592e9f146106535780632fc9b686146106805780633197cbb6146106b0578063333863b6146106c65780633675f29b146106f35780633bff8ed7146107135780633cb650d0146107405780634042b66f14610755578063422099b21461076b57806345e05f431461078057806346c96aac146107a157806348c54b9d146107c15780634c4a386f146107d65780634d2a9073146107f75780634e4153bb1461081757806351fb012d1461082d5780635a0e779b146108475780635bff9a27146108685780635f9bae321461087e57806360adf58b1461089457806361644ca8146108b457806361c533b4146108d857806363c18058146108ee5780636ac8d0c2146109035780636e27607a14610923578063715018a61461094457806371beb4e1146109595780637313ee5a1461096f57806378e2df0e1461098557806378e979251461099b5780637d3d6522146109b15780637f87bbd6146109cb5780638190eefd146109ec5780638256645914610a0657806382efbbec14610a1c578063844faace14610a3257806386c5ae2f14610a5f5780638ab1d68114610a7f5780638b6ea1cf14610a9f5780638c0f7eba14610abf5780638d4e408314610ad25780638da5cb5b14610af157806397993fd914610b11578063995c5e9d14610b315780639b19251a14610b615780639b33d9d114610b915780639fe4cb9414610ba6578063a82524b214610bc6578063b138d50014610bdb578063b444e16214610bf1578063b5545a3c14610c07578063b7a871c914610c1c578063b857ba3e14610c4c578063b89918e014610c6c578063b94a6dfe14610c81578063bc2eae0c14610ca1578063be11ce2f14610cb7578063be5ef81a14610ccc578063bf3f15bf14610cec578063c3abb76614610d02578063c6197f3114610d22578063cdfb2b4e14610d38578063ce7dadd014610d4d578063d0e8861814610d63578063d6b0f48414610d79578063d94193d714610d8e578063db37ceec14610dbb578063e132db4114610dd0578063e43252d714610de5578063e4bb624914610e05578063e4c21cf214610e1b578063e5658e1a14610e30578063e580b2b0146104e9578063ecfd892814610e5d578063ef67a5e214610e73578063f2fde38b14610e93578063f6e99c0d14610eb3578063fb7f21eb14610ed3578063fc0c546a14610ee8578063fc37987b14610f08578063fcb3747314610f1e578063fe67a18914610f3457600080fd5b366104525761045034610f4a565b005b600080fd5b34801561046357600080fd5b50603254610477906001600160a01b031681565b6040516104849190613d71565b60405180910390f35b34801561049957600080fd5b506104a3602b5481565b604051908152602001610484565b3480156104bd57600080fd5b506104a3602e5481565b3480156104d357600080fd5b506104dc611105565b6040516104849190613dcb565b3480156104f557600080fd5b50601d5442115b6040519015158152602001610484565b34801561051857600080fd5b506104a360185481565b34801561052e57600080fd5b506104a3603a5481565b34801561054457600080fd5b50610477610553366004613dde565b6013602052600090815260409020546001600160a01b031681565b34801561057a57600080fd5b50610450611193565b34801561058f57600080fd5b506104a360305481565b3480156105a557600080fd5b506104a36105b4366004613e0c565b60066020526000908152604090205481565b3480156105d257600080fd5b50601d546104a3565b3480156105e757600080fd5b506104776105f6366004613dde565b600b602052600090815260409020546001600160a01b031681565b34801561061d57600080fd5b50601e546104a3565b34801561063257600080fd5b506104a3610641366004613e0c565b60046020526000908152604090205481565b34801561065f57600080fd5b506104a361066e366004613e0c565b60086020526000908152604090205481565b34801561068c57600080fd5b506104fc61069b366004613e0c565b600d6020526000908152604090205460ff1681565b3480156106bc57600080fd5b506104a3601d5481565b3480156106d257600080fd5b506104a36106e1366004613e0c565b60056020526000908152604090205481565b3480156106ff57600080fd5b50603954610477906001600160a01b031681565b34801561071f57600080fd5b506104a361072e366004613e0c565b60096020526000908152604090205481565b34801561074c57600080fd5b506104506112fa565b34801561076157600080fd5b506104a3601e5481565b34801561077757600080fd5b50610450611371565b34801561078c57600080fd5b506026546104fc90600160301b900460ff1681565b3480156107ad57600080fd5b50600154610477906001600160a01b031681565b3480156107cd57600080fd5b506104506113f7565b3480156107e257600080fd5b506026546104fc90600160201b900460ff1681565b34801561080357600080fd5b506104a3610812366004613e4d565b6115cb565b34801561082357600080fd5b506104a360155481565b34801561083957600080fd5b50600f546104fc9060ff1681565b34801561085357600080fd5b506039546104fc90600160a01b900460ff1681565b34801561087457600080fd5b506104a360355481565b34801561088a57600080fd5b506104a360235481565b3480156108a057600080fd5b506104506108af366004613dde565b61171a565b3480156108c057600080fd5b506108c961193c565b60405161048493929190613eee565b3480156108e457600080fd5b506104a360365481565b3480156108fa57600080fd5b50610450611ab6565b34801561090f57600080fd5b506026546104fc9062010000900460ff1681565b34801561092f57600080fd5b506026546104fc90600160281b900460ff1681565b34801561095057600080fd5b50610450611c4c565b34801561096557600080fd5b506104a360275481565b34801561097b57600080fd5b506104a3602a5481565b34801561099157600080fd5b506104a3601b5481565b3480156109a757600080fd5b506104a3601c5481565b3480156109bd57600080fd5b50601b54601e5410156104fc565b3480156109d757600080fd5b506026546104fc906301000000900460ff1681565b3480156109f857600080fd5b506026546104fc9060ff1681565b348015610a1257600080fd5b506104a360255481565b348015610a2857600080fd5b506104a360115481565b348015610a3e57600080fd5b506104a3610a4d366004613e0c565b600a6020526000908152604090205481565b348015610a6b57600080fd5b50610477610a7a366004613dde565b611cab565b348015610a8b57600080fd5b50610450610a9a366004613e0c565b611cd5565b348015610aab57600080fd5b50603354610477906001600160a01b031681565b610450610acd366004613e0c565b611d76565b348015610ade57600080fd5b506026546104fc90610100900460ff1681565b348015610afd57600080fd5b50600054610477906001600160a01b031681565b348015610b1d57600080fd5b506104a3610b2c366004613f63565b611f1c565b348015610b3d57600080fd5b506104fc610b4c366004613e0c565b600c6020526000908152604090205460ff1681565b348015610b6d57600080fd5b506104fc610b7c366004613e0c565b600e6020526000908152604090205460ff1681565b348015610b9d57600080fd5b50610477611fde565b348015610bb257600080fd5b50603854610477906001600160a01b031681565b348015610bd257600080fd5b50601c546104a3565b348015610be757600080fd5b506104a3602c5481565b348015610bfd57600080fd5b506104a360205481565b348015610c1357600080fd5b50610450612051565b348015610c2857600080fd5b506104fc610c37366004613e0c565b60346020526000908152604090205460ff1681565b348015610c5857600080fd5b50610450610c67366004613ff9565b612112565b348015610c7857600080fd5b506104506121f1565b348015610c8d57600080fd5b50603754610477906001600160a01b031681565b348015610cad57600080fd5b506104a360125481565b348015610cc357600080fd5b506104a36125aa565b348015610cd857600080fd5b50610450610ce736600461404c565b6125b7565b348015610cf857600080fd5b506104a360285481565b348015610d0e57600080fd5b50603b54610477906001600160a01b031681565b348015610d2e57600080fd5b506104a360215481565b348015610d4457600080fd5b506104506126f8565b348015610d5957600080fd5b506104a3602d5481565b348015610d6f57600080fd5b506104a3602f5481565b348015610d8557600080fd5b50610450612741565b348015610d9a57600080fd5b506104a3610da9366004613e0c565b60036020526000908152604090205481565b348015610dc757600080fd5b506104a36127a3565b348015610ddc57600080fd5b506016546104a3565b348015610df157600080fd5b50610450610e00366004613e0c565b6127ae565b348015610e1157600080fd5b506104a360245481565b348015610e2757600080fd5b50601b546104a3565b348015610e3c57600080fd5b506104a3610e4b366004613e0c565b60076020526000908152604090205481565b348015610e6957600080fd5b506104a360105481565b348015610e7f57600080fd5b50603154610477906001600160a01b031681565b348015610e9f57600080fd5b50610450610eae366004613e0c565b612817565b348015610ebf57600080fd5b506104fc610ece36600461406e565b612837565b348015610edf57600080fd5b506104dc612a62565b348015610ef457600080fd5b50602254610477906001600160a01b031681565b348015610f1457600080fd5b506104a360165481565b348015610f2a57600080fd5b506104a3601f5481565b348015610f4057600080fd5b506104a360295481565b6023544211610f745760405162461bcd60e51b8152600401610f6b906140b6565b60405180910390fd5b336000908152600d602052604090205460ff1615610fa45760405162461bcd60e51b8152600401610f6b906140d8565b600f5460ff1615610fde57336000908152600e602052604090205460ff16610fde5760405162461bcd60e51b8152600401610f6b90614103565b80602754610fec9190614142565b33600090815260066020526040902054111561104a5760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610f6b565b6110543382612a6f565b3360009081526006602052604081208054839290611073908490614155565b90915550503360009081526007602052604081208054839290611097908490614155565b9091555050336000908152600c602052604090205460ff1661110257601080546000908152600b6020908152604080832080546001600160a01b031916339081179091558352600c9091528120805460ff19166001179055815491906110fc83614168565b91905055505b50565b6002805461111290614181565b80601f016020809104026020016040519081016040528092919081815260200182805461113e90614181565b801561118b5780601f106111605761010080835404028352916020019161118b565b820191906000526020600020905b81548152906001019060200180831161116e57829003601f168201915b505050505081565b336000908152600d602052604090205460ff16156111e75760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610f6b565b33600090815260066020526040902054806112145760405162461bcd60e51b8152600401610f6b906141bb565b602654610100900460ff161561123c5760405162461bcd60e51b8152600401610f6b906141e5565b60265462010000900460ff16156112655760405162461bcd60e51b8152600401610f6b90614211565b602054601d5461127491612bff565b42106112b45760405162461bcd60e51b815260206004820152600f60248201526e77696e646f7720657870697265642160881b6044820152606401610f6b565b336000908152600960205260409020819055601e546112d39082612bff565b601e55336000818152600d60205260409020805460ff191660011790556111029082612c22565b6031546001600160a01b0316331461131157600080fd5b6026546301000000900460ff1661133a5760405162461bcd60e51b8152600401610f6b90614239565b602654610100900460ff16156113625760405162461bcd60e51b8152600401610f6b90614263565b6026805463ff00000019169055565b6031546001600160a01b0316331461139b5760405162461bcd60e51b8152600401610f6b9061428e565b602654610100900460ff16156113c35760405162461bcd60e51b8152600401610f6b906141e5565b6026805460ff60281b1916600160281b179055601854601754600a916113e8916142ba565b6113f291906142d1565b601755565b602654600160201b900460ff16156114215760405162461bcd60e51b8152600401610f6b906142f3565b6026546301000000900460ff16156114695760405162461bcd60e51b815260206004820152600b60248201526a7573652076657374696e6760a81b6044820152606401610f6b565b602654610100900460ff166114905760405162461bcd60e51b8152600401610f6b90614315565b60265462010000900460ff166114b85760405162461bcd60e51b8152600401610f6b9061433c565b3360009081526006602052604081205490036114e65760405162461bcd60e51b8152600401610f6b90614365565b60165433600090815260066020526040812054909161151991670de0b6b3a7640000916115139190612da7565b90612ddd565b3360008181526006602052604080822091909155602254905163a9059cbb60e01b81529293506001600160a01b03169163a9059cbb9161155d91859060040161438c565b6020604051808303816000875af115801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a091906143a5565b5033600090815260086020908152604080832084905560049091529020541561110257611102612de9565b600080546001600160a01b031633146115e357600080fd5b602654610100900460ff161561160b5760405162461bcd60e51b8152600401610f6b90614263565b601d5442116116495760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610f6b565b8351603380546001600160a01b039283166001600160a01b03199182161790915560208601516031805491909316911617905560268054831515620100000262ff000019909116179055601b54601e54101580156116af575060265462010000900460ff165b156116de576116bc612eba565b6031546033546116d9916001600160a01b03908116911685612ee1565b6116e6565b6116e6613221565b4260295560405160008051602061459c83398151915290600090a1506026805461ff00191661010017905560019392505050565b6031546001600160a01b031633146117445760405162461bcd60e51b8152600401610f6b9061428e565b6021546029546117549190614155565b421161175f57600080fd5b6022546040516370a0823160e01b81526001600160a01b03909116906370a082319061178f903090600401613d71565b602060405180830381865afa1580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d091906143c2565b8111156118105760405162461bcd60e51b815260206004820152600e60248201526d6f7574206f662062616c616e636560901b6044820152606401610f6b565b602654610100900460ff166118375760405162461bcd60e51b8152600401610f6b906143db565b60265462010000900460ff1661187b5760405162461bcd60e51b81526020600482015260096024820152681b9bdd081d985b1a5960ba1b6044820152606401610f6b565b60225460315460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb926118b192911690859060040161438c565b6020604051808303816000875af11580156118d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f491906143a5565b6111025760405162461bcd60e51b81526020600482015260196024820152783a3930b7399032b9391037b7103ab739b7b632103a37b5b2b760391b6044820152606401610f6b565b611944613d34565b61194c613d53565b6060611956613d34565b61195e613d53565b50506040805161014081018252601b548152602c5460208083019190915260195482840152601a54606080840191909152601c54608080850191909152601d5460a0850152601e5460c085015260165460e0850152602d5461010080860191909152602b546101208601528551918201865260265490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611a2990614181565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5590614181565b8015611aa25780601f10611a7757610100808354040283529160200191611aa2565b820191906000526020600020905b815481529060010190602001808311611a8557829003601f168201915b505050505090509450945094505050909192565b6031546001600160a01b03163314611ae05760405162461bcd60e51b8152600401610f6b9061428e565b602654610100900460ff16611b075760405162461bcd60e51b8152600401610f6b906143db565b60265462010000900460ff1615611b305760405162461bcd60e51b8152600401610f6b90614211565b6022546031546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92169083906370a0823190611b6d903090600401613d71565b602060405180830381865afa158015611b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bae91906143c2565b6040518363ffffffff1660e01b8152600401611bcb92919061438c565b6020604051808303816000875af1158015611bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0e91906143a5565b611c4a5760405162461bcd60e51b815260206004820152600d60248201526c1d1c985b9cd9995c8819985a5b609a1b6044820152606401610f6b565b565b6000546001600160a01b03163314611c6357600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b60148181548110611cbb57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611cec57600080fd5b6001600160a01b0381166000908152600e602052604090205460ff16611d485760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610f6b565b6001600160a01b0381166000908152600e60205260408120805460ff1916905560128054916110fc83614168565b803b63ffffffff1615611dc65760405162461bcd60e51b815260206004820152601860248201527718dbdb9d1c9858dd081c9959881b9bdd08185b1b1bddd95960421b6044820152606401610f6b565b602654600160301b900460ff16611e175760405162461bcd60e51b81526020600482015260156024820152747265666572206d6f6465206e6f742061637469766560581b6044820152606401610f6b565b60006103e8602f5434611e2a91906142ba565b611e3491906142d1565b9050611e48611e438234614142565b610f4a565b6040516001600160a01b038316908290600081818185875af1925050503d8060008114611e91576040519150601f19603f3d011682016040523d82523d6000602084013e611e96565b606091505b5050506001600160a01b03821660009081526003602052604081208054839290611ec1908490614155565b90915550503360009081526004602052604081208054839290611ee5908490614155565b925050819055508060246000828254611efe9190614155565b909155505060258054906000611f1383614168565b91905055505050565b600080546001600160a01b03163314611f3457600080fd5b602654610100900460ff1615611f5c5760405162461bcd60e51b8152600401610f6b90614263565b8251603380546001600160a01b039283166001600160a01b03199182161790915560208501516031805491909316911617905560268054831515620100000262ff000019909116179055611fae613221565b60405160008051602061459c83398151915290600090a1506026805461ff00191661010017905560015b92915050565b603754604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204c9190614403565b905090565b602654610100900460ff166120985760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610f6b565b601b54601e5410806120b3575060265462010000900460ff16155b6121095760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610f6b565b611c4a3361325f565b6031546001600160a01b0316331461212957600080fd5b811561219757831515602660069054906101000a900460ff1615150361217f5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610f6b565b6026805460ff60301b1916600160301b861515021790555b80156121eb57600a8311156121dc5760405162461bcd60e51b815260206004820152600b60248201526a34b73b30b634b2103832b960a91b6044820152606401610f6b565b6121e783600a6142ba565b602f555b50505050565b602654600160201b900460ff161561221b5760405162461bcd60e51b8152600401610f6b906142f3565b6026546301000000900460ff166122445760405162461bcd60e51b8152600401610f6b90614420565b602654610100900460ff1661226b5760405162461bcd60e51b8152600401610f6b90614315565b60265462010000900460ff166122935760405162461bcd60e51b8152600401610f6b9061433c565b3360009081526006602052604081205490036122c15760405162461bcd60e51b8152600401610f6b90614365565b602854336000908152600a60205260409020541061230e5760405162461bcd60e51b815260206004820152600a602482015269185b1b081d995cdd195960b21b6044820152606401610f6b565b60006123366001612330602a5461151360295442612bff90919063ffffffff16565b906133a6565b9050602854811061234657506028545b336000908152600a6020526040812054612361908390612bff565b905060008111801561237557506028548111155b6123b45760405162461bcd60e51b815260206004820152601060248201526f6e6f7420636c61696d2077696e646f7760801b6044820152606401610f6b565b336000908152600a602090815260408083208590556028546016546007909352908320546123fe926115139186916123f891670de0b6b3a764000091859190612da7565b90612da7565b601654336000908152600660205260408120549293509161242c91670de0b6b3a76400009161151391612da7565b90508082111561246e5760405162461bcd60e51b815260206004820152600d60248201526c696e76616c696420636c61696d60981b6044820152606401610f6b565b602854336000908152600760205260408120549091612491916115139087612da7565b3360009081526006602052604090205490915081106124bf57336000908152600660205260408120556124ea565b336000908152600660205260409020546124d99082612bff565b336000908152600660205260409020555b60225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061251c903390879060040161438c565b6020604051808303816000875af115801561253b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255f91906143a5565b503360009081526008602052604090205461257a90846133a6565b33600090815260086020908152604080832093909355600490522054156125a3576125a3612de9565b5050505050565b60006019815b0154905090565b600182116125fd5760405162461bcd60e51b81526020600482015260136024820152721b9d5b481bd9881d995cdd081a5b9d985b1a59606a1b6044820152606401610f6b565b6000811161263e5760405162461bcd60e51b815260206004820152600e60248201526d1c195c9a5bd9081a5b9d985b1a5960921b6044820152606401610f6b565b601c5461264d90610258612bff565b42106126995760405162461bcd60e51b815260206004820152601b60248201527a1a5b9d985b1a590818599d195c881c1c995cd85b19481cdd185c9d602a1b6044820152606401610f6b565b6026546301000000900460ff16156126c35760405162461bcd60e51b8152600401610f6b90614445565b6031546001600160a01b031633146126da57600080fd5b6026805463ff00000019166301000000179055602891909155602a55565b6000546001600160a01b0316331461270f57600080fd5b600f5460ff16156127325760405162461bcd60e51b8152600401610f6b90614445565b600f805460ff19166001179055565b6000546001600160a01b0316331461275857600080fd5b600f5460ff1661277a5760405162461bcd60e51b8152600401610f6b90614239565b600f805460ff19169055601f546127919042614155565b6023556026805460ff19166001179055565b6000601960016125b0565b6000546001600160a01b031633146127c557600080fd5b6001600160a01b0381166000818152600e60209081526040808320805460ff191660011790556011805484526013909252822080546001600160a01b031916909317909255815491906110fc83614168565b6000546001600160a01b0316331461282e57600080fd5b611102816133c4565b600080546001600160a01b0316331461284f57600080fd5b602654600160281b900460ff16612a57576001600160a01b0385166128a45760405162461bcd60e51b815260206004820152600b60248201526a3737903d32b9379030b23960a91b6044820152606401610f6b565b60006064601754602c546128b891906142ba565b6128c291906142d1565b9050600083156129dd5760646128d886846142ba565b6128e291906142d1565b6022549091506001600160a01b031663a9059cbb886129018486614142565b6040518363ffffffff1660e01b815260040161291e92919061438c565b6020604051808303816000875af115801561293d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296191906143a5565b5060225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612994908990859060040161438c565b6020604051808303816000875af11580156129b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d791906143a5565b50612a54565b60225460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612a0f908a90869060040161438c565b6020604051808303816000875af1158015612a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5291906143a5565b505b50505b506001949350505050565b603c805461111290614181565b333214612aad5760405162461bcd60e51b815260206004820152600c60248201526b6e6f20636f6e74726163747360a01b6044820152606401610f6b565b6023544211612ace5760405162461bcd60e51b8152600401610f6b906140b6565b601c544210158015612ae15750601d5442105b612b1a5760405162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b6044820152606401610f6b565b336000908152600d602052604090205460ff1615612b4a5760405162461bcd60e51b8152600401610f6b906140d8565b600f5460ff1615612b8457336000908152600e602052604090205460ff16612b845760405162461bcd60e51b8152600401610f6b90614103565b80612b8f8382613432565b6000612b9a82613474565b905081601e6000828254612bae9190614155565b909155505060408051838152602081018390526001600160a01b0386169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a350505050565b600082821115612c1157612c1161446e565b612c1b8284614142565b9392505050565b6000612c346064611513846014612da7565b90506000612c428383612bff565b6001600160a01b03858116600090815260066020908152604080832083905560079091528082208290556032549051939450909291169084908381818185875af1925050503d8060008114612cb3576040519150601f19603f3d011682016040523d82523d6000602084013e612cb8565b606091505b505090506000856001600160a01b03168360405160006040518083038185875af1925050503d8060008114612d09576040519150601f19603f3d011682016040523d82523d6000602084013e612d0e565b606091505b50509050818015612d1c5750805b612d5c5760405162461bcd60e51b815260206004820152601160248201527019985a5b195908185d081c185e5b595b9d607a1b6044820152606401610f6b565b856001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d286604051612d9791815260200190565b60405180910390a2505050505050565b600082600003612db957506000611fd8565b612dc382846142ba565b905081612dd084836142d1565b14611fd857611fd861446e565b6000612c1b82846142d1565b601654336000908152600460205260408120549091670de0b6b3a764000091612e1291906142ba565b612e1c91906142d1565b33600081815260046020819052604080832092909255602254915163a9059cbb60e01b81529394506001600160a01b039091169263a9059cbb92612e6492909186910161438c565b6020604051808303816000875af1158015612e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea791906143a5565b5033600090815260056020526040902055565b601e54602c54612ed290670de0b6b3a76400006142ba565b612edc91906142d1565b601655565b602654610100900460ff1615612f095760405162461bcd60e51b8152600401610f6b90614263565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a16000612f4e606461151360175447612da790919063ffffffff16565b90508115613075576000612f6760646115138486612da7565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114612fb6576040519150601f19603f3d011682016040523d82523d6000602084013e612fbb565b606091505b50506032549091506000906001600160a01b0316612fd98585612bff565b604051600081818185875af1925050503d8060008114613015576040519150601f19603f3d011682016040523d82523d6000602084013e61301a565b606091505b505090508180156130285750805b61306d5760405162461bcd60e51b8152602060048201526016602482015275696e76616c696420726566206f72206665652070617960501b6044820152606401610f6b565b50505061310c565b6032546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c2576040519150601f19603f3d011682016040523d82523d6000602084013e6130c7565b606091505b505090508061310a5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206665652070617960881b6044820152606401610f6b565b505b60006131286064611513602b5447612da790919063ffffffff16565b90508047101561316c5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08115b9bdd59da08119d5b99608a1b6044820152606401610f6b565b613178602d5482613497565b47156125a3576000856001600160a01b03164760405160006040518083038185875af1925050503d80600081146131cb576040519150601f19603f3d011682016040523d82523d6000602084013e6131d0565b606091505b50509050806132195760405162461bcd60e51b81526020600482015260156024820152743ab730b13632903a37903830bc9031b932b0ba37b960591b6044820152606401610f6b565b505050505050565b6026805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602654600160201b900460ff166132885760405162461bcd60e51b8152600401610f6b90614420565b6001600160a01b038116600090815260066020526040902054806132be5760405162461bcd60e51b8152600401610f6b906141bb565b6001600160a01b0382166000818152600660205260408082208290555190919083908381818185875af1925050503d8060008114613318576040519150601f19603f3d011682016040523d82523d6000602084013e61331d565b606091505b505090508061335e5760405162461bcd60e51b815260206004820152600d60248201526c1c99599d5b990819985a5b1959609a1b6044820152606401610f6b565b826001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518360405161339991815260200190565b60405180910390a2505050565b60006133b28284614155565b905082811015611fd857611fd861446e565b6001600160a01b0381166133d757600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60195434101561344157600080fd5b601a5434111561345057600080fd5b6001600160a01b03821661346357600080fd5b8060000361347057600080fd5b5050565b6000670de0b6b3a76400006016548361348d91906142ba565b611fd891906142d1565b80600060646134a783600a6142ba565b6134b191906142d1565b6134bb9083614142565b905083600060646134cd83600a6142ba565b6134d791906142d1565b6134e19083614142565b60225490915060009081908190613508906001600160a01b0316613503611fde565b613956565b603880546001600160a01b0319166001600160a01b0392909216919091179055613530611fde565b6038546040516370a0823160e01b81526001600160a01b03928316926370a082319261356192911690600401613d71565b602060405180830381865afa15801561357e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a291906143c2565b6022546038546040516370a0823160e01b81529295506001600160a01b03918216926370a08231926135d8921690600401613d71565b602060405180830381865afa1580156135f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361991906143c2565b6038549092506001600160a01b03161580159061363f575060008311801561363f575081155b1561373e578661364f84876142ba565b61365991906142d1565b60225460385460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb92613691921690859060040161438c565b6020604051808303816000875af11580156136b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d491906143a5565b50603860009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561372557600080fd5b505af1158015613739573d6000803e3d6000fd5b505050505b602254613753906001600160a01b0316613c04565b506037546022546001600160a01b039182169163f305d719918a911688888b3061377f4261012c614155565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156137ec573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138119190614484565b50506039805460ff60a01b1916600160a01b17905550603854603b54613843916001600160a01b039081169116613ca4565b50603b546038546036546040516370a0823160e01b81526001600160a01b0393841693638a4e6e5693169190603c9083906370a0823190613888903090600401613d71565b602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c991906143c2565b6040518563ffffffff1660e01b81526004016138e894939291906144b2565b6020604051808303816000875af1158015613907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392b9190614403565b603980546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b6000806001600160a01b0316603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d99190614403565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401613a06929190614581565b602060405180830381865afa158015613a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a479190614403565b6001600160a01b031614613b4157603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acc9190614403565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401613af9929190614581565b602060405180830381865afa158015613b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3a9190614403565b9050611fd8565b603760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb89190614403565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401613be5929190614581565b6020604051808303816000875af1158015613b16573d6000803e3d6000fd5b60375460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b392613c579290911690859060040161438c565b6020604051808303816000875af1158015613c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9a91906143a5565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b390613cf1908690859060040161438c565b6020604051808303816000875af1158015613d10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5791906143a5565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0391909116815260200190565b6000815180845260005b81811015613dab57602081850181015186830182015201613d8f565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612c1b6020830184613d85565b600060208284031215613df057600080fd5b5035919050565b6001600160a01b038116811461110257600080fd5b600060208284031215613e1e57600080fd5b8135612c1b81613df7565b634e487b7160e01b600052604160045260246000fd5b801515811461110257600080fd5b600080600060808486031215613e6257600080fd5b84601f850112613e7157600080fd5b604080519081016001600160401b0381118282101715613e9357613e93613e29565b8060405250806040860187811115613eaa57600080fd5b865b81811015613ecd578035613ebf81613df7565b835260209283019201613eac565b50919450503591506060840135613ee381613e3f565b809150509250925092565b60006101e08286835b600a811015613f16578151835260209283019290910190600101613ef7565b50505061014083018560005b6004811015613f435781511515835260209283019290910190600101613f22565b505050806101c0840152613f5981840185613d85565b9695505050505050565b60008060808385031215613f7657600080fd5b83601f840112613f8557600080fd5b604051606081016001600160401b0381118282101715613fa757613fa7613e29565b604052806060850186811115613fbc57600080fd5b855b81811015613fdf578035613fd181613df7565b835260209283019201613fbe565b509193505035613fee81613e3f565b809150509250929050565b6000806000806080858703121561400f57600080fd5b843561401a81613e3f565b935060208501359250604085013561403181613e3f565b9150606085013561404181613e3f565b939692955090935050565b6000806040838503121561405f57600080fd5b50508035926020909101359150565b6000806000806080858703121561408457600080fd5b843561408f81613df7565b9350602085013561409f81613df7565b925060408501359150606085013561404181613e3f565b60208082526008908201526731b7b7b61027b33360c11b604082015260600190565b602080825260119082015270616e7974696d6520726566756e6465642160781b604082015260600190565b6020808252600f908201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611fd857611fd861412c565b80820180821115611fd857611fd861412c565b60006001820161417a5761417a61412c565b5060010190565b600181811c9082168061419557607f821691505b6020821081036141b557634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f6e6f7468696e6720746f20636c61696d60801b604082015260600190565b602080825260129082015271616c72656164792066696e616c697a65642160701b604082015260600190565b6020808252600e908201526d199a5b985b1a5e99481d985b1a5960921b604082015260600190565b60208082526010908201526f185b1c9958591e48191a5cd8589b195960821b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252601290820152716e6f742070726573616c65206f776e65722160701b604082015260600190565b8082028115828204841417611fd857611fd861412c565b6000826142ee57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600890820152671c99599d5b99195960c21b604082015260600190565b6020808252600d908201526c139bdd08119a5b985b1a5e9959609a1b604082015260600190565b6020808252600f908201526e70726573616c65204661696c65642160881b604082015260600190565b6020808252600d908201526c1b9bc818db185a5b481b19599d609a1b604082015260600190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156143b757600080fd5b8151612c1b81613e3f565b6000602082840312156143d457600080fd5b5051919050565b6020808252600e908201526d6e6f742066696e616c697a65642160901b604082015260600190565b60006020828403121561441557600080fd5b8151612c1b81613df7565b6020808252600b908201526a1b9bdd08195b98589b195960aa1b604082015260600190565b6020808252600f908201526e185b1c9958591e48195b98589b1959608a1b604082015260600190565b634e487b7160e01b600052600160045260246000fd5b60008060006060848603121561449957600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c90828116806144ea57607f831692505b858310810361450757634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614526576001811461453c57614567565b60ff198616825284151560051b82019650614567565b60008c81526020902060005b8681101561456157815484820152908501908901614548565b83019750505b505050505050809250505082606083015295945050505050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a264697066735822122015c5d8be3397714fba2f95d2d2f555cca9a7c440723e27b1af7f7abcee67950164736f6c63430008110033a26469706673582212204d59c360f45a7047f7ae72c2fcee8ddda9f613bc92088e89a38876568464fd4664736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d4
-----Decoded View---------------
Arg [0] : _feeContract (address): 0x0FEbB541Ef3632925cD67DAf9e82CdC8Ec7a71ef
Arg [1] : _lpLockDeployer (address): 0xa27eA368c4198a288eb552D642B1E5aCc29912D4
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef
Arg [1] : 000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d4
Deployed Bytecode Sourcemap
45368:2618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45446:26;;;;;-1:-1:-1;;;;;45446:26:0;;;;;;;;;;:::i;:::-;;;;;;;;47702:156;;;;;;:::i;:::-;;:::i;:::-;;45688:36;;;;;;;;;553:25:1;;;541:2;526:18;45688:36:0;407:177:1;47321:125:0;;;;;;:::i;:::-;;:::i;45548:44::-;;;;;;5597:20;;;;;-1:-1:-1;;;;;5597:20:0;;;47563:131;;;;;;:::i;:::-;;:::i;6348:124::-;;;:::i;5570:20::-;;;;;-1:-1:-1;;;;;5570:20:0;;;47211:102;47290:15;47211:102;;47454:101;;;;;;:::i;:::-;;:::i;45479:29::-;;;;;-1:-1:-1;;;;;45479:29:0;;;45599:39;;;;;;45888:1315;;;;;;:::i;:::-;;:::i;45515:26::-;;;;;;6650:111;;;;;;:::i;:::-;;:::i;47866:117::-;;;;;;:::i;:::-;;:::i;47702:156::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;47813:15:::1;:37:::0;47702:156::o;47321:125::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;47405:16:::1;:33:::0;47321:125::o;47563:131::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;47644:24:::1;:42:::0;47563:131::o;6348:124::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;6429:5:::1;::::0;;6410:25:::1;::::0;-1:-1:-1;;;;;6429:5:0;;::::1;::::0;6410:25:::1;::::0;::::1;6462:1;6446:18:::0;;-1:-1:-1;;;;;;6446:18:0::1;::::0;;6348:124::o;47454:101::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;47526:7:::1;:21:::0;47454:101::o;45888:1315::-;46276:29;;;;;46240:834;;;;;;;46276:29;46339:38;;;;46240:834;;46396:38;;;;46240:834;;;;;;;;;;;46494:29;;;;-1:-1:-1;;;;;46240:834:0;;;;;46303:1;46525:11;;46240:834;;;;;;;;;;;;46571:38;;46240:834;;46628:38;;;;46240:834;;;;46685:38;;;;46240:834;;;;;;;;;;;;;;46721:1;46769:7;46240:834;;;;;;;;;;;;46811:26;;46240:834;;-1:-1:-1;;;;46276:29:0;46240:834;46464:14;;46240:834;;;;;46811:23;46880:1;46856:26;;;;46240:834;;;;46901:16;;46240:834;;;;;;;;;;;46948:14;;;;;;;;;-1:-1:-1;;;;;46948:14:0;-1:-1:-1;;;;;46240:834:0;-1:-1:-1;;;;;46240:834:0;;;;;46964:26;46991:1;46964:29;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;46240:834:0;;;47009:24;;47048:15;;46240:834;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47121:29:0;;47087:64;;-1:-1:-1;;;47087:64:0;;46204:870;;-1:-1:-1;;;;;;47087:33:0;;;;;:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47179:15:0;;45888:1315;-1:-1:-1;;;;;;;;;45888:1315:0:o;6650:111::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;6724:29:::1;6743:9;6724:18;:29::i;:::-;6650:111:::0;:::o;47866:117::-;6131:5;;-1:-1:-1;;;;;6131:5:0;6117:10;:19;6109:28;;;;;;47946:11:::1;:29:::0;;-1:-1:-1;;;;;;47946:29:0::1;-1:-1:-1::0;;;;;47946:29:0;;;::::1;::::0;;;::::1;::::0;;47866:117::o;6912:189::-;-1:-1:-1;;;;;6987:23:0;;6979:32;;;;;;7048:5;;;7027:38;;-1:-1:-1;;;;;7027:38:0;;;;7048:5;;;7027:38;;;7076:5;:17;;-1:-1:-1;;;;;;7076:17:0;-1:-1:-1;;;;;7076:17:0;;;;;;;;;;6912:189::o;-1:-1:-1:-;;;;;;;;:::o;14:203:1:-;-1:-1:-1;;;;;178:32:1;;;;160:51;;148:2;133:18;;14:203::o;222:180::-;281:6;334:2;322:9;313:7;309:23;305:32;302:52;;;350:1;347;340:12;302:52;-1:-1:-1;373:23:1;;222:180;-1:-1:-1;222:180:1:o;589:127::-;650:10;645:3;641:20;638:1;631:31;681:4;678:1;671:15;705:4;702:1;695:15;721:247;788:2;782:9;830:3;818:16;;-1:-1:-1;;;;;849:34:1;;885:22;;;846:62;843:88;;;911:18;;:::i;:::-;947:2;940:22;721:247;:::o;973:173::-;1041:20;;-1:-1:-1;;;;;1090:31:1;;1080:42;;1070:70;;1136:1;1133;1126:12;1070:70;973:173;;;:::o;1151:657::-;1212:5;1265:3;1258:4;1250:6;1246:17;1242:27;1232:55;;1283:1;1280;1273:12;1232:55;1316:2;1310:9;;;1346:15;;-1:-1:-1;;;;;1376:34:1;;1412:22;;;1373:62;1370:88;;;1438:18;;:::i;:::-;1478:10;1474:2;1467:22;;1509:6;1550:2;1542:6;1538:15;1576:3;1568:6;1565:15;1562:35;;;1593:1;1590;1583:12;1562:35;1617:6;1632:146;1648:6;1643:3;1640:15;1632:146;;;1716:17;;1704:30;;1763:4;1754:14;;;;1665;1632:146;;;-1:-1:-1;1796:6:1;;1151:657;-1:-1:-1;;;;;1151:657:1:o;1813:648::-;1863:5;1916:3;1909:4;1901:6;1897:17;1893:27;1883:55;;1934:1;1931;1924:12;1883:55;1967:2;1961:9;2009:3;1997:16;;-1:-1:-1;;;;;2028:34:1;;2064:22;;;2025:62;2022:88;;;2090:18;;:::i;:::-;2126:2;2119:22;2161:6;2202:3;2190:16;;2218:15;;;2215:35;;;2246:1;2243;2236:12;2466:1016;2653:6;2661;2669;2677;2685;2738:3;2726:9;2717:7;2713:23;2709:33;2706:53;;;2755:1;2752;2745:12;2706:53;2804:7;2797:4;2786:9;2782:20;2778:34;2768:62;;2826:1;2823;2816:12;2768:62;2850:17;;:::i;:::-;2889:3;2930;2919:9;2915:19;2957:7;2949:6;2946:19;2943:39;;;2978:1;2975;2968:12;2943:39;3002:9;3020:152;3036:6;3031:3;3028:15;3020:152;;;3104:23;3123:3;3104:23;:::i;:::-;3092:36;;3157:4;3148:14;;;;3053;3020:152;;;3024:3;3191:5;3181:15;;3215:52;3259:7;3251:6;3215:52;:::i;:::-;3205:62;;;;;3286:54;3332:7;3326:3;3315:9;3311:19;3286:54;:::i;:::-;3276:64;;3387:3;3376:9;3372:19;3359:33;3349:43;;3411:65;3468:7;3462:3;3451:9;3447:19;3411:65;:::i;:::-;3401:75;;2466:1016;;;;;;;;:::o;3487:186::-;3546:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3638:29;3657:9;3638:29;:::i;:::-;3628:39;3487:186;-1:-1:-1;;;3487:186:1:o;3678:127::-;3739:10;3734:3;3730:20;3727:1;3720:31;3770:4;3767:1;3760:15;3794:4;3791:1;3784:15;3810:337;3914:5;3937:1;3947:194;3961:4;3958:1;3955:11;3947:194;;;4020:13;;4008:26;;4057:4;4081:12;;;;4116:15;;;;3981:1;3974:9;3947:194;;;3951:3;;3810:337;;:::o;4152:352::-;4245:5;4268:1;4278:220;4292:4;4289:1;4286:11;4278:220;;;4355:13;;-1:-1:-1;;;;;4351:39:1;4339:52;;4414:4;4438:12;;;;4473:15;;;;4387:1;4305:9;4278:220;;4509:326;4602:5;4625:1;4635:194;4649:4;4646:1;4643:11;4635:194;;;4708:13;;4696:26;;4745:4;4769:12;;;;4804:15;;;;4669:1;4662:9;4635:194;;4840:1331;-1:-1:-1;;;;;5579:32:1;;5561:51;;5548:3;5533:19;;5621:63;5680:2;5665:18;;5657:6;5621:63;:::i;:::-;5693;5752:2;5741:9;5737:18;5729:6;5693:63;:::i;:::-;5765:53;5813:3;5802:9;5798:19;5790:6;5765:53;:::i;:::-;5827;5875:3;5864:9;5860:19;5852:6;5827:53;:::i;:::-;5889:64;5948:3;5937:9;5933:19;5925:6;5889:64;:::i;:::-;5962:53;6010:3;5999:9;5995:19;5987:6;5962:53;:::i;:::-;6024;6072:3;6061:9;6057:19;6049:6;6024:53;:::i;:::-;6108:3;6093:19;;6086:35;;;;6152:3;6137:19;6130:35;4840:1331;;-1:-1:-1;;;;;;;;4840:1331:1:o
Swarm Source
ipfs://4d59c360f45a7047f7ae72c2fcee8ddda9f613bc92088e89a38876568464fd46
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.