Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 2064198 | 93 days ago | IN | 0 S | 0.00003176 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
2215485 | 91 days ago | Contract Creation | 0 S |
Loading...
Loading
Contract Name:
OverflowPresaleDapp
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; //pragma experimental ABIEncoderV2; //import "https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol"; /** * @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, uint ); 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, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); } // 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, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function addLiquidityBNB( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapExactBNBForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] 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( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } interface lpLockDeployerInterface { function createLPLocker( address _lockingToken, uint256 _lockerEndTimeStamp, string memory _logo, uint256 _lockingAmount ) external payable returns (address); } contract Consts { uint constant TOKEN_DECIMALS = 18; uint8 constant TOKEN_DECIMALS_UINT8 = 18; uint constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS; bool constant CONTINUE_MINTING = false; uint256 constant minPlatTokenReq = 1000 * TOKEN_DECIMAL_MULTIPLIER; uint256 constant airdropTokenPercentage = 2; } contract DefiOverflowCrowdsale is Consts, 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 = "OVERFLOW"; using SafeMath for uint256; 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; uint 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; //604800; //time for presale owner to finalize address public token; uint256 public disabledWhitelistTime; 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 extraAmountPerVal; uint public maxHcapMultiplier = 10; uint256 feesAmount; bool public whitelistDisabledInitiated; bool public isFinalized; bool public finalizeValid; bool public vestingEnabled; bool public refundEnabled; bool public alternateFee; bool public hcapset; address public presaleCreator; address public feeContract; address public referrerAddr; // address public uniswapDapAddress; // address[] teamAddresses; // uint256[] teamAmounts; // uint256[] teamFreezeTimes; //uint256 totalTeamTokensMinted; 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, uint[2] memory _UniPercentage_teamFeePer, uint256[3] memory _extraAmountPer_lockTime_nativeMul, address[2] memory _lpLockDepAndRouter, address[] memory _altAssets ) //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"); __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]; altAssets = _altAssets; for (uint256 i = 0; i < _altAssets.length; i++) { validPairPartner[altAssets[i]] = true; } } 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 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 enableWhitelist() public onlyOwner { require(!whitelistEnabled, "whitelist already enabled"); whitelistEnabled = true; } function disableWhitelist() public onlyOwner { require(whitelistEnabled, "whitelist already disabled"); whitelistEnabled = false; disabledWhitelistTime = block.timestamp + whitelistCoolOff; whitelistDisabledInitiated = true; } function setOverflowCap(uint256 _hcap) public { require(msg.sender == presaleCreator, "caller not creator"); require(!hcapset, "hcap already set"); require( _hcap > soft_cap && _hcap <= soft_cap * maxHcapMultiplier, "invalid hcap" ); hcapset = true; hard_cap = _hcap; } 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, hard_cap, __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 { require( block.timestamp > disabledWhitelistTime, "In whitelist disabled cool Off" ); require(!anytimeRefunded[msg.sender], "User used anytime refund!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "user 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++; } } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) internal { require(hcapset, "hcap not set"); require(msg.sender == tx.origin, "can't contribute via contracts"); require( block.timestamp > disabledWhitelistTime, "In whitelist disabled cool Off" ); require( block.timestamp >= startTime && block.timestamp < endTime, "presale not active" ); require(!anytimeRefunded[msg.sender], "User used anytime refund!"); //checking if user refunded from this presale at anytime if (whitelistEnabled) { require(whitelist[msg.sender], "user not whitelisted"); } uint256 weiAmount = msg.value; _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 _getTokenAmount( uint256 _weiAmount ) internal view returns (uint256) { return (_weiAmount * buyRate) / (1 ether); // return _weiAmount.mul(rate); } function claimTokens() public { require(!refundEnabled, "presale was refunded"); //require(!vestingEnabled,"please use vesting method to claim"); require(isFinalized, "Not Finalized yet!"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require( !(contributors[msg.sender] == 0), "user has no more tokens to claim!" ); uint256 tokenValue = ( uint256(contributors[msg.sender]).mul(uint256(buyRate)) ).div(1 ether); // uint256 tokenValueDecimalOptimized = (tokenValue.mul(10 ** uint256(seeDecimals(token)))).div(1 ether); if (weiRaised > hard_cap.add(feesAmount)) { payable(msg.sender).call{ value: ( contributors[msg.sender].sub( contributors[msg.sender].mul(hard_cap).div(weiRaised) ) ) .sub( contributors[msg.sender].mul(feesAmount).div(weiRaised) ) .mul(9999) .div(10000) }(""); } contributors[msg.sender] = 0; ERC20(token).transfer(msg.sender, tokenValue); contributorsClaim[msg.sender] = tokenValue; } /* function claimOverflowReturn() public { require(!refundEnabled,"presale was refunded"); //require(!vestingEnabled,"please use vesting method to claim"); require(isFinalized, "Not Finalized yet!"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "user has no more tokens to claim!"); require(weiRaised > hard_cap.add(feesAmount),"raise not overflown"); if(weiRaised > hard_cap.add(feesAmount)){ payable(msg.sender).call{value:contributors[msg.sender].sub(contributors[msg.sender].mul(hard_cap).div(weiRaised.sub(feesAmount)))}(""); } contributors[msg.sender] = 0; } */ /* function vestToken() public { // require(!tokenDropFlag,"can't vest when token drop enabled!"); require(!refundEnabled,"presale was refunded"); require(vestingEnabled,"vesting not enabled"); require(isFinalized, "Not Finalized yet!"); require(finalizeValid, "presale Failed!"); //checking if presale succeeded or not require(!(contributors[msg.sender] == 0), "user has no more tokens to claim!"); require(contributorsPayoutNumber[msg.sender] < numberOfVest,"all tokens 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 in user 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,"can't claim more than allowed"); 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); } function enableVesting(uint256 _numOfVest, uint256 _vestingPeriod) public{ require(_numOfVest > 1,"num of vest has to be grtr than 1"); require(_vestingPeriod > 0,"vesting period invalid"); require(block.timestamp < startTime.sub(600),"can't enable vest after presale start"); require(!vestingEnabled,"vesting 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,"vesting already disabled"); require(!isFinalized,"presale 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, "already succesfully finalized"); require( block.timestamp < endTime.sub(finalizeTimeout), "withdrawal 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, "refund not enabled"); uint256 depositedValue = contributors[investor]; require(depositedValue > 0, "User has no investment to claim"); contributors[investor] = 0; payable(investor).call{value: depositedValue}(""); 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 payable(feeContract).call{value: penalty}(""); payable(investor).call{value: refundValue}(""); emit claimedBack(investor, _contributed); } function finalize( address[2] memory __finalizeInfo, uint256 refPer, bool validFinalize ) public onlyOwner returns (uint256) { require(hcapset, "hcap not set"); 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), "platform addr cant be zero"); 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, "presale 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()).mul(hard_cap).div(weiRaised); buyRate = presaleAmount.mul(1 ether).div(weiRaised); } function getBackTokens() public { // require(block.timestamp > closingTime.add(burnDeltaTime), "cannot withdraw yet"); require( msg.sender == presaleCreator, "initiator is not presale owner!" ); // require(hasClosed(), "presale not closed!"); require(isFinalized, "presale not finalized!"); require(!finalizeValid, "finalize was valid"); require( IERC20(token).transfer( presaleCreator, IERC20(token).balanceOf(address(this)) ), "cannot transfer token back" ); } function selectNativeOnlyFee() public { require( msg.sender == presaleCreator, "initiator is not presale owner!" ); require(!isFinalized, "presale already finalized!"); alternateFee = true; teamFeePer = (teamFeePer * nativeMultiplier) / 10; } function close( address __Creator, address _referrerAddr, uint256 _refPer ) internal { require(!isFinalized, "presale already finalized"); emit Closed(); uint256 uniswapAmount; feesAmount = address(this).balance.mul(teamFeePer).div(100); if (_refPer > 0) { uint256 refAmount = feesAmount.mul(_refPer).div(100); payable(_referrerAddr).call{value: refAmount}(""); payable(feeContract).call{value: feesAmount.sub(refAmount)}(""); } else { payable(feeContract).call{value: feesAmount}(""); } if (weiRaised > hard_cap.add(feesAmount)) { uniswapAmount = (hard_cap).mul(uniswapPercentage).div(100); } else { 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 to Transfer" ); // 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) { if (weiRaised > hard_cap.add(feesAmount)) { if (hard_cap.sub(uniswapAmount) > 0) { payable(__Creator).call{value: hard_cap.sub(uniswapAmount)}( "" ); } } else { payable(__Creator).call{value: address(this).balance}(""); } } } function goalReached() public view returns (bool) { return weiRaised >= soft_cap; } function hardCapReached() public view returns (bool) { return weiRaised >= hard_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 altAssets; address public storedLPAddress; address public lockerAddress; bool public addLiquidityComplete; address public alternativeCurrency; bool public useAlternativeCurrency; 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 setAlternateCurrency(address _newCurrency) public { require(_newCurrency != address(0), "currency cannot be Zero addr"); // require(swapRouterMap[_swapRouter],"invalid router"); require(validPairPartner[_newCurrency], "invalid asset selected"); require(!addLiquidityComplete, "Liquidity is added already"); require(msg.sender == presaleCreator, "not the presale creator"); // swapRouter_Address = _swapRouter; alternativeCurrency = _newCurrency; useAlternativeCurrency = true; } function revertToNative() public { require(!addLiquidityComplete, "Liquidity is added already"); require(msg.sender == presaleCreator, "not the presale creator"); useAlternativeCurrency = false; } function getAmountsMinToken( address _tokenAddress, uint256 _ethIN ) public view returns (uint256) { // UniswapRouter02 pancakeRouter = UniswapRouter02(_router); // generate the pair path of token -> weth uint256[] memory amountMinArr; uint256 AmountMin; address[] memory path = new address[](2); path[0] = getWrapAddr(); path[1] = address(_tokenAddress); amountMinArr = UniswapRouter02(ROUTER_ADDRESS).getAmountsOut( _ethIN, path ); AmountMin = uint256(amountMinArr[1]); return AmountMin; } function swapETHForTokens(uint256 _nativeForDex) private { require(useAlternativeCurrency, "alt currency not selected"); address[] memory path = new address[](2); //path[0] = address(this); path[0] = getWrapAddr(); path[1] = alternativeCurrency; Approve(alternativeCurrency); // make the swap UniswapRouter02(ROUTER_ADDRESS).swapExactETHForTokens{ value: _nativeForDex }( getAmountsMinToken(alternativeCurrency, _nativeForDex), path, address(this), block.timestamp + (300) ); returnVal = ERC20(alternativeCurrency).balanceOf(address(this)); } 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; if (useAlternativeCurrency) { swapETHForTokens(nativeForDex); storedLPAddress = getpair(token, alternativeCurrency); LP_WBNB_exp_balance = ERC20(alternativeCurrency).balanceOf( storedLPAddress ); LP_token_balance = ERC20(token).balanceOf(storedLPAddress); } else { 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); if (useAlternativeCurrency) { UniswapRouter02(ROUTER_ADDRESS).addLiquidity( token, alternativeCurrency, amountTokenDesired, ERC20(alternativeCurrency).balanceOf(address(this)), amountTokenDesired, ERC20(alternativeCurrency).balanceOf(address(this)), address(this), block.timestamp + (300) ); } else { 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 OverflowPresaleDapp is Consts, Ownable { // using SafeMath for uint256; address public feeContract; address public lpLockDeployer; uint256 public teamFee = 2; // uint256 public extraAmountPer = 2; uint256 public nativeMultiplier = 20; address[] public altAssets; constructor( address _feeContract, address _lpLockDeployer, address[] memory _altAssets ) { feeContract = _feeContract; lpLockDeployer = _lpLockDeployer; altAssets = _altAssets; } function CreatePresaleOverflow( 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) { DefiOverflowCrowdsale PresaleContract = new DefiOverflowCrowdsale( 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]], altAssets ); 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 updateFeeContract(address _newFeeContract) public onlyOwner { feeContract = _newFeeContract; } function updateAltAssets( uint index, address _newAltAsset ) public onlyOwner { altAssets[index] = _newAltAsset; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 1 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feeContract","type":"address"},{"internalType":"address","name":"_lpLockDeployer","type":"address"},{"internalType":"address[]","name":"_altAssets","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":[{"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":"CreatePresaleOverflow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"altAssets","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"_newAltAsset","type":"address"}],"name":"updateAltAssets","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":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600260045560146005553480156200001b57600080fd5b5060405162005c9638038062005c968339810160408190526200003e916200014b565b60008054336001600160a01b0319918216179091556002805482166001600160a01b03868116919091179091556003805490921690841617905580516200008d90600690602084019062000097565b5050505062000245565b828054828255906000526020600020908101928215620000ef579160200282015b82811115620000ef57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620000b8565b50620000fd92915062000101565b5090565b5b80821115620000fd576000815560010162000102565b80516001600160a01b03811681146200013057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156200016157600080fd5b6200016c8462000118565b925060206200017d81860162000118565b60408601519093506001600160401b03808211156200019b57600080fd5b818701915087601f830112620001b057600080fd5b815181811115620001c557620001c562000135565b8060051b604051601f19603f83011681018181108582111715620001ed57620001ed62000135565b60405291825284820192508381018501918a8311156200020c57600080fd5b938501935b828510156200023557620002258562000118565b8452938501939285019262000211565b8096505050505050509250925092565b615a4180620002556000396000f3fe60806040523480156200001157600080fd5b5060043610620000be5760003560e01c806306e2971214620000c35780631ab8f86414620000ef5780631dfaced4146200010857806325cfdf5e146200011f578063417d4add146200013857806346c96aac146200014f5780636716e0151462000163578063715018a6146200017a5780638da5cb5b1462000184578063c3abb7661462000198578063d7c94efd14620001ac578063f2fde38b14620001b6578063fc006a8a14620001cd575b600080fd5b600254620000d7906001600160a01b031681565b604051620000e6919062000574565b60405180910390f35b620000f960055481565b604051908152602001620000e6565b620000d76200011936600462000588565b620001e4565b620001366200013036600462000588565b6200020f565b005b6200013662000149366004620005bf565b6200022c565b600154620000d7906001600160a01b031681565b620000d762000174366004620006f2565b6200028d565b6200013662000437565b600054620000d7906001600160a01b031681565b600354620000d7906001600160a01b031681565b620000f960045481565b62000136620001c7366004620007a8565b62000497565b62000136620001de366004620007a8565b620004bd565b60068181548110620001f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146200022757600080fd5b600555565b6000546001600160a01b031633146200024457600080fd5b80600683815481106200025b576200025b620007cd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016005548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f600360048110620003745762000374620007cd565b60200201516001600160a01b03169052604051600690620003959062000566565b620003a99998979695949392919062000861565b604051809103906000f080158015620003c6573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b91620003f89160040162000574565b600060405180830381600087803b1580156200041357600080fd5b505af115801562000428573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b031633146200044f57600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b03163314620004af57600080fd5b620004ba81620004f7565b50565b6000546001600160a01b03163314620004d557600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200050b57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6150cd806200093f83390190565b6001600160a01b0391909116815260200190565b6000602082840312156200059b57600080fd5b5035919050565b80356001600160a01b0381168114620005ba57600080fd5b919050565b60008060408385031215620005d357600080fd5b82359150620005e560208401620005a2565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006295762000629620005ee565b60405290565b600082601f8301126200064157600080fd5b604080519081016001600160401b0381118282101715620006665762000666620005ee565b80604052508060408401858111156200067e57600080fd5b845b818110156200069a57803583526020928301920162000680565b509195945050505050565b600082601f830112620006b757600080fd5b60405160a081016001600160401b0381118282101715620006dc57620006dc620005ee565b6040528060a08401858111156200067e57600080fd5b60008060008060006101c086880312156200070c57600080fd5b86601f8701126200071c57600080fd5b6200072662000604565b8060808801898111156200073957600080fd5b885b818110156200075e576200074f81620005a2565b8452602093840193016200073b565b508197506200076e8a826200062f565b9650505050620007828760c08801620006a5565b925061016086013591506200079c8761018088016200062f565b90509295509295909350565b600060208284031215620007bb57600080fd5b620007c682620005a2565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b600281101562000808578151845260209384019390910190600101620007e7565b50505050565b8060005b6002811015620008085781516001600160a01b031684526020938401939091019060010162000812565b8060005b60038110156200080857815184526020938401939091019060010162000840565b6001600160a01b038a8116825260009061024090838201906020620008898187018f620007e3565b62000898606087018e620007e3565b620008a760a087018d6200080e565b620008b660e087018c6200083c565b620008c661014087018b620007e3565b620008d661018087018a6200083c565b620008e66101e08701896200080e565b836102208701528293508654808452610260870194508760005281600020935060005b818110156200092957845484168652948201946001948501940162000909565b50939f9e50505050505050505050505050505056fe60c060405260086080908152674f564552464c4f5760c01b60a052600290620000299082620003e0565b50600060135560026015556014601655603c601e55610258601f55600a602a5560646030556040805180820190915260018152600160fd1b6020820152603990620000759082620003e0565b503480156200008357600080fd5b50604051620050cd380380620050cd833981016040819052620000a69162000645565b600080546001600160a01b03191633179055604080518082019091526020868101518252810186600260200201519052620000e690601790600262000289565b5084516019558651601b55602080880151601c5580546001600160a01b03199081166001600160a01b038c811691909117835560408801516022558851602c805491831667010000000000000002600160381b600160d81b031990921691909117905588830151602d805490931691161790558481015160158190558551602655895160275590890151602855606490620001829082620007d1565b602854602754620001949190620007d1565b620001a09190620007ed565b620001ac919062000807565b60295560208084015160315560408401516016558251603880546001600160a01b039283166001600160a01b03199182161790915584830151603280549190931691161790558151620002069160339190840190620002cc565b5060005b815181101562000279576001602f600060338481548110620002305762000230620007a5565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558062000270816200082a565b9150506200020a565b5050505050505050505062000846565b8260028101928215620002ba579160200282015b82811115620002ba5782518255916020019190600101906200029d565b50620002c892915062000324565b5090565b828054828255906000526020600020908101928215620002ba579160200282015b82811115620002ba57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002ed565b5b80821115620002c8576000815560010162000325565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200036657607f821691505b6020821081036200038757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003db57600081815260208120601f850160051c81016020861015620003b65750805b601f850160051c820191505b81811015620003d757828155600101620003c2565b5050505b505050565b81516001600160401b03811115620003fc57620003fc6200033b565b62000414816200040d845462000351565b846200038d565b602080601f8311600181146200044c5760008415620004335750858301515b600019600386901b1c1916600185901b178555620003d7565b600085815260208120601f198616915b828110156200047d578886015182559484019460019091019084016200045c565b50858210156200049c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620004c457600080fd5b919050565b604080519081016001600160401b0381118282101715620004ee57620004ee6200033b565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200051f576200051f6200033b565b604052919050565b600082601f8301126200053957600080fd5b62000543620004c9565b8060408401858111156200055657600080fd5b845b818110156200057257805184526020938401930162000558565b509095945050505050565b600082601f8301126200058f57600080fd5b62000599620004c9565b806040840185811115620005ac57600080fd5b845b818110156200057257620005c281620004ac565b845260209384019301620005ae565b600082601f830112620005e357600080fd5b604051606081016001600160401b03811182821017156200060857620006086200033b565b6040528060608401858111156200061e57600080fd5b845b818110156200063a57805183526020928301920162000620565b509195945050505050565b60008060008060008060008060006102408a8c0312156200066557600080fd5b620006708a620004ac565b9850620006818b60208c0162000527565b9750620006928b60608c0162000527565b9650620006a38b60a08c016200057d565b9550620006b48b60e08c01620005d1565b9450620006c68b6101408c0162000527565b9350620006d88b6101808c01620005d1565b9250620006ea8b6101e08c016200057d565b6102208b01519092506001600160401b03808211156200070957600080fd5b818c0191508c601f8301126200071e57600080fd5b8151818111156200073357620007336200033b565b8060051b91506200074760208301620004f4565b81815260209284018301928101908f8411156200076357600080fd5b6020850194505b8385101562000790576200077e85620004ac565b8252602094850194909101906200076a565b80955050505050509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620007e757620007e7620007bb565b92915050565b8082028115828204841417620007e757620007e7620007bb565b6000826200082557634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016200083f576200083f620007bb565b5060010190565b61487780620008566000396000f3fe60806040526004361061042c5760003560e01c806306e29712146105ef5780630f98c918146106255780631096f46a1461064957806310ef82c5146106695780631265d6e71461067f5780631515bc2b146106a15780631ab8f864146106c45780631bd49653146106da5780631dfaced4146106f05780631e12353e146107105780631edd40ae146107465780631f6d49421461075b578063249b7c1914610788578063252a02eb1461079d5780632698d707146107d35780632951f4b1146107e85780632a592e9f146107fe5780632fc9b6861461082b5780633197cbb61461085b5780633675f29b1461087157806337ce1647146108915780633bff8ed7146108b25780634042b66f146108df578063422099b2146108f557806346c96aac1461090a57806348c54b9d1461092a5780634c4a386f1461093f5780634d2a9073146109605780634de64b81146109805780634e4153bb146109a057806351229077146109b657806351fb012d146109d8578063585e1af6146109f25780635a0e779b14610a085780635bff9a2714610a295780635f9bae3214610a3f5780636008405914610a5557806361644ca814610a7557806361c533b414610a9957806363c1805814610aaf5780636ac8d0c214610ac45780636e27607a14610ae4578063715018a614610b0557806371beb4e114610b1a5780637313ee5a14610b30578063772bf07b14610b4657806378e2df0e14610b6757806378e9792514610b7d5780637d3d652214610b935780637f87bbd614610bad5780638190eefd14610bce57806382efbbec14610be8578063844faace14610bfe57806386c5ae2f14610c2b5780638ab1d68114610c4b5780638b6ea1cf14610c6b5780638d4e408314610c8b5780638da5cb5b14610caa5780639762f80214610cca5780639774748014610ce457806397993fd914610cf9578063995c5e9d14610d195780639b19251a14610d495780639b33d9d114610d795780639fe4cb9414610d8e578063a82524b214610dae578063b138d50014610dc3578063b444e16214610dd9578063b5545a3c14610def578063b7a871c914610e04578063b94a6dfe14610e34578063bc2eae0c14610e54578063be11ce2f14610e6a578063bf3f15bf14610e7f578063bf79519814610e95578063c3abb76614610eb5578063cdfb2b4e14610ed5578063ce7dadd014610eea578063d6b0f48414610f00578063db37ceec14610f15578063dd47ab6814610f2a578063e132db4114610f4a578063e43252d714610f5f578063e4c21cf214610f7f578063e5658e1a14610f94578063e580b2b0146106a1578063ecfd892814610fc1578063ef67a5e214610fd7578063f2fde38b14610ffe578063f6e99c0d1461101e578063fb7f21eb1461103e578063fc0c546a14611053578063fc37987b14611073578063fcb3747314611089578063fe67a1891461109f57600080fd5b366105ea57602154421161045b5760405162461bcd60e51b815260040161045290613f9a565b60405180910390fd5b336000908152600a602052604090205460ff161561048b5760405162461bcd60e51b815260040161045290613fd1565b600c5460ff16156104c557336000908152600b602052604090205460ff166104c55760405162461bcd60e51b815260040161045290614004565b346022546104d39190614048565b3360009081526003602052604090205411156105315760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610452565b61053a336110b5565b336000908152600360205260408120805434929061055990849061405b565b9091555050336000908152600460205260408120805434929061057d90849061405b565b90915550503360009081526009602052604090205460ff166105e857600d8054600090815260086020908152604080832080546001600160a01b03191633908117909155835260099091528120805460ff19166001179055815491906105e28361406e565b91905055505b005b600080fd5b3480156105fb57600080fd5b50602d5461060f906001600160a01b031681565b60405161061c9190614087565b60405180910390f35b34801561063157600080fd5b5061063b60265481565b60405190815260200161061c565b34801561065557600080fd5b5060365461060f906001600160a01b031681565b34801561067557600080fd5b5061063b60295481565b34801561068b57600080fd5b50610694611286565b60405161061c91906140e1565b3480156106ad57600080fd5b50601c5442115b604051901515815260200161061c565b3480156106d057600080fd5b5061063b60165481565b3480156106e657600080fd5b5061063b60375481565b3480156106fc57600080fd5b5061060f61070b3660046140f4565b611314565b34801561071c57600080fd5b5061060f61072b3660046140f4565b6010602052600090815260409020546001600160a01b031681565b34801561075257600080fd5b506105e861133e565b34801561076757600080fd5b5061063b610776366004614122565b60036020526000908152604090205481565b34801561079457600080fd5b50601c5461063b565b3480156107a957600080fd5b5061060f6107b83660046140f4565b6008602052600090815260409020546001600160a01b031681565b3480156107df57600080fd5b50601d5461063b565b3480156107f457600080fd5b5061063b602a5481565b34801561080a57600080fd5b5061063b610819366004614122565b60056020526000908152604090205481565b34801561083757600080fd5b506106b4610846366004614122565b600a6020526000908152604090205460ff1681565b34801561086757600080fd5b5061063b601c5481565b34801561087d57600080fd5b5060355461060f906001600160a01b031681565b34801561089d57600080fd5b506036546106b490600160a01b900460ff1681565b3480156108be57600080fd5b5061063b6108cd366004614122565b60066020526000908152604090205481565b3480156108eb57600080fd5b5061063b601d5481565b34801561090157600080fd5b506105e861152b565b34801561091657600080fd5b5060015461060f906001600160a01b031681565b34801561093657600080fd5b506105e86115e5565b34801561094b57600080fd5b50602c546106b490600160201b900460ff1681565b34801561096c57600080fd5b5061063b61097b366004614193565b6118ec565b34801561098c57600080fd5b5061063b61099b366004614234565b611a9e565b3480156109ac57600080fd5b5061063b60135481565b3480156109c257600080fd5b506109cb611bc5565b60405161061c91906142a4565b3480156109e457600080fd5b50600c546106b49060ff1681565b3480156109fe57600080fd5b5061063b601a5481565b348015610a1457600080fd5b506035546106b490600160a01b900460ff1681565b348015610a3557600080fd5b5061063b60305481565b348015610a4b57600080fd5b5061063b60215481565b348015610a6157600080fd5b506105e8610a70366004614122565b611cea565b348015610a8157600080fd5b50610a8a611e22565b60405161061c939291906142b7565b348015610aa557600080fd5b5061063b60315481565b348015610abb57600080fd5b506105e8611f9c565b348015610ad057600080fd5b50602c546106b49062010000900460ff1681565b348015610af057600080fd5b50602c546106b490600160281b900460ff1681565b348015610b1157600080fd5b506105e861219b565b348015610b2657600080fd5b5061063b60225481565b348015610b3c57600080fd5b5061063b60255481565b348015610b5257600080fd5b50602c546106b490600160301b900460ff1681565b348015610b7357600080fd5b5061063b60195481565b348015610b8957600080fd5b5061063b601b5481565b348015610b9f57600080fd5b50601954601d5410156106b4565b348015610bb957600080fd5b50602c546106b4906301000000900460ff1681565b348015610bda57600080fd5b50602c546106b49060ff1681565b348015610bf457600080fd5b5061063b600e5481565b348015610c0a57600080fd5b5061063b610c19366004614122565b60076020526000908152604090205481565b348015610c3757600080fd5b5061060f610c463660046140f4565b6121fa565b348015610c5757600080fd5b506105e8610c66366004614122565b61220a565b348015610c7757600080fd5b50602e5461060f906001600160a01b031681565b348015610c9757600080fd5b50602c546106b490610100900460ff1681565b348015610cb657600080fd5b5060005461060f906001600160a01b031681565b348015610cd657600080fd5b50601a54601d5410156106b4565b348015610cf057600080fd5b506105e86122b3565b348015610d0557600080fd5b5061063b610d1436600461432c565b61231d565b348015610d2557600080fd5b506106b4610d34366004614122565b60096020526000908152604090205460ff1681565b348015610d5557600080fd5b506106b4610d64366004614122565b600b6020526000908152604090205460ff1681565b348015610d8557600080fd5b5061060f6123ed565b348015610d9a57600080fd5b5060345461060f906001600160a01b031681565b348015610dba57600080fd5b50601b5461063b565b348015610dcf57600080fd5b5061063b60275481565b348015610de557600080fd5b5061063b601f5481565b348015610dfb57600080fd5b506105e8612460565b348015610e1057600080fd5b506106b4610e1f366004614122565b602f6020526000908152604090205460ff1681565b348015610e4057600080fd5b5060325461060f906001600160a01b031681565b348015610e6057600080fd5b5061063b600f5481565b348015610e7657600080fd5b5061063b612521565b348015610e8b57600080fd5b5061063b60235481565b348015610ea157600080fd5b506105e8610eb03660046140f4565b61252e565b348015610ec157600080fd5b5060385461060f906001600160a01b031681565b348015610ee157600080fd5b506105e8612644565b348015610ef657600080fd5b5061063b60285481565b348015610f0c57600080fd5b506105e86126b9565b348015610f2157600080fd5b5061063b612748565b348015610f3657600080fd5b5061060f610f453660046140f4565b612753565b348015610f5657600080fd5b5060145461063b565b348015610f6b57600080fd5b506105e8610f7a366004614122565b612763565b348015610f8b57600080fd5b5060195461063b565b348015610fa057600080fd5b5061063b610faf366004614122565b60046020526000908152604090205481565b348015610fcd57600080fd5b5061063b600d5481565b348015610fe357600080fd5b50602c5461060f90600160381b90046001600160a01b031681565b34801561100a57600080fd5b506105e8611019366004614122565b6127cc565b34801561102a57600080fd5b506106b46110393660046143c2565b6127ec565b34801561104a57600080fd5b50610694612a26565b34801561105f57600080fd5b5060205461060f906001600160a01b031681565b34801561107f57600080fd5b5061063b60145481565b34801561109557600080fd5b5061063b601e5481565b3480156110ab57600080fd5b5061063b60245481565b602c54600160301b900460ff166110de5760405162461bcd60e51b815260040161045290614415565b33321461112d5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420636f6e747269627574652076696120636f6e74726163747300006044820152606401610452565b602154421161114e5760405162461bcd60e51b815260040161045290613f9a565b601b5442101580156111615750601c5442105b6111a25760405162461bcd60e51b815260206004820152601260248201527170726573616c65206e6f742061637469766560701b6044820152606401610452565b336000908152600a602052604090205460ff16156111d25760405162461bcd60e51b815260040161045290613fd1565b600c5460ff161561120c57336000908152600b602052604090205460ff1661120c5760405162461bcd60e51b815260040161045290614004565b346112178282612a33565b600061122282612a75565b905081601d6000828254611236919061405b565b909155505060408051838152602081018390526001600160a01b0385169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050565b600280546112939061443b565b80601f01602080910402602001604051908101604052809291908181526020018280546112bf9061443b565b801561130c5780601f106112e15761010080835404028352916020019161130c565b820191906000526020600020905b8154815290600101906020018083116112ef57829003601f168201915b505050505081565b6033818154811061132457600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600a602052604090205460ff16156113925760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610452565b33600090815260036020526040902054806113e25760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610452565b602c54610100900460ff161561142f5760405162461bcd60e51b8152602060048201526012602482015271616c72656164792066696e616c697a65642160701b6044820152606401610452565b602c5462010000900460ff16156114885760405162461bcd60e51b815260206004820152601d60248201527f616c72656164792073756363657366756c6c792066696e616c697a65640000006044820152606401610452565b601f54601c5461149791612a98565b42106114e25760405162461bcd60e51b815260206004820152601a6024820152797769746864726177616c2077696e646f7720657870697265642160301b6044820152606401610452565b336000908152600660205260409020819055601d546115019082612a98565b601d55336000818152600a60205260409020805460ff191660011790556115289082612abb565b50565b602c54600160381b90046001600160a01b0316331461155c5760405162461bcd60e51b81526004016104529061446f565b602c54610100900460ff16156115b15760405162461bcd60e51b815260206004820152601a60248201527970726573616c6520616c72656164792066696e616c697a65642160301b6044820152606401610452565b602c805460ff60281b1916600160281b179055601654601554600a916115d6916144a6565b6115e091906144bd565b601555565b602c54600160201b900460ff16156116365760405162461bcd60e51b81526020600482015260146024820152731c1c995cd85b19481dd85cc81c99599d5b99195960621b6044820152606401610452565b602c54610100900460ff166116825760405162461bcd60e51b81526020600482015260126024820152714e6f742046696e616c697a6564207965742160701b6044820152606401610452565b602c5462010000900460ff166116cc5760405162461bcd60e51b815260206004820152600f60248201526e70726573616c65204661696c65642160881b6044820152606401610452565b3360009081526003602052604081205490036117345760405162461bcd60e51b815260206004820152602160248201527f7573657220686173206e6f206d6f726520746f6b656e7320746f20636c61696d6044820152602160f81b6064820152608401610452565b60145433600090815260036020526040812054909161176791670de0b6b3a7640000916117619190612bec565b90612c22565b9050611780602b54601a54612c2e90919063ffffffff16565b601d54111561185257601d54602b5433600081815260036020526040902054909261180d92612710926117619261270f92611807926117c29291869190612bec565b601d54601a5433600090815260036020526040902054611801926117eb92909161176191612bec565b3360009081526003602052604090205490612a98565b90612a98565b90612bec565b604051600081818185875af1925050503d8060008114611849576040519150601f19603f3d011682016040523d82523d6000602084013e61184e565b606091505b5050505b3360008181526003602090815260408083209290925554905163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91611896919085906004016144df565b6020604051808303816000875af11580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d991906144f8565b5033600090815260056020526040902055565b600080546001600160a01b0316331461190457600080fd5b602c54600160301b900460ff1661192d5760405162461bcd60e51b815260040161045290614415565b602c54610100900460ff16156119795760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e48199a5b985b1a5e9959607a1b6044820152606401610452565b601c5442116119b75760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610452565b8351602e80546001600160a01b0319166001600160a01b039283161790556020850151602c805466ffffffff010000600160d81b031916600160381b929093169190910262ff00001916919091176201000084151502179055601954601d5410801590611a2c5750602c5462010000900460ff165b15611a6257611a39612c4c565b602c54602e54611a5d916001600160a01b03600160381b9091048116911685612c74565b611a6a565b611a6a612fb8565b4260245560405160008051602061482283398151915290600090a150602c805461ff00191661010017905560019392505050565b60408051600280825260608083018452600093909284928392602083019080368337019050509050611ace6123ed565b81600081518110611ae157611ae1614515565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611b1557611b15614515565b6001600160a01b03928316602091820292909201015260325460405163d06ca61f60e01b815291169063d06ca61f90611b54908890859060040161452b565b600060405180830381865afa158015611b71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b99919081019061454c565b925082600181518110611bae57611bae614515565b602002602001015191508193505050505b92915050565b60606000600e546001600160401b03811115611be357611be361413f565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b50905060005b600e54811015611ce4576000818152601060209081526040808320546001600160a01b03168352600b90915290205460ff1615611c9d5760008181526010602052604090205482516001600160a01b0390911690839083908110611c7857611c78614515565b60200260200101906001600160a01b031690816001600160a01b031681525050611cd2565b6000828281518110611cb157611cb1614515565b60200260200101906001600160a01b031690816001600160a01b0316815250505b80611cdc8161406e565b915050611c12565b50919050565b6001600160a01b038116611d3f5760405162461bcd60e51b815260206004820152601c60248201527b31bab93932b731bc9031b0b73737ba103132902d32b9379030b2323960211b6044820152606401610452565b6001600160a01b0381166000908152602f602052604090205460ff16611da05760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a5908185cdcd95d081cd95b1958dd195960521b6044820152606401610452565b603554600160a01b900460ff1615611dca5760405162461bcd60e51b8152600401610452906145f1565b602c54600160381b90046001600160a01b03163314611dfb5760405162461bcd60e51b815260040161045290614625565b603680546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b611e2a613f5d565b611e32613f7c565b6060611e3c613f5d565b611e44613f7c565b505060408051610140810182526019548152601a5460208083019190915260175482840152601854606080840191909152601b54608080850191909152601c5460a0850152601d5460c085015260145460e08501526028546101008086019190915260265461012086015285519182018652602c5490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611f0f9061443b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b9061443b565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b505050505090509450945094505050909192565b602c54600160381b90046001600160a01b03163314611fcd5760405162461bcd60e51b81526004016104529061446f565b602c54610100900460ff1661201d5760405162461bcd60e51b815260206004820152601660248201527570726573616c65206e6f742066696e616c697a65642160501b6044820152606401610452565b602c5462010000900460ff161561206b5760405162461bcd60e51b8152602060048201526012602482015271199a5b985b1a5e99481dd85cc81d985b1a5960721b6044820152606401610452565b602054602c546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92600160381b9004169083906370a08231906120af903090600401614087565b602060405180830381865afa1580156120cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f09190614656565b6040518363ffffffff1660e01b815260040161210d9291906144df565b6020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215091906144f8565b6121995760405162461bcd60e51b815260206004820152601a60248201527963616e6e6f74207472616e7366657220746f6b656e206261636b60301b6044820152606401610452565b565b6000546001600160a01b031633146121b257600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6011818154811061132457600080fd5b6000546001600160a01b0316331461222157600080fd5b6001600160a01b0381166000908152600b602052604090205460ff1661227d5760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610452565b6001600160a01b0381166000908152600b60205260408120805460ff19169055600f8054916122ab8361406e565b919050555050565b603554600160a01b900460ff16156122dd5760405162461bcd60e51b8152600401610452906145f1565b602c54600160381b90046001600160a01b0316331461230e5760405162461bcd60e51b815260040161045290614625565b6036805460ff60a01b19169055565b600080546001600160a01b0316331461233557600080fd5b602c54610100900460ff161561235d5760405162461bcd60e51b81526004016104529061466f565b8251602e80546001600160a01b0319166001600160a01b039283161790556020840151602c805466ffffffff010000600160d81b031916600160381b929093169190910262ff000019169190911762010000841515021790556123be612fb8565b60405160008051602061482283398151915290600090a150602c805461ff001916610100179055600192915050565b603254604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245b91906146a2565b905090565b602c54610100900460ff166124a75760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610452565b601954601d5410806124c25750602c5462010000900460ff16155b6125185760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610452565b61219933612ff6565b60006017815b0154905090565b602c54600160381b90046001600160a01b031633146125845760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1031b932b0ba37b960711b6044820152606401610452565b602c54600160301b900460ff16156125d15760405162461bcd60e51b815260206004820152601060248201526f1a18d85c08185b1c9958591e481cd95d60821b6044820152606401610452565b601954811180156125f15750602a546019546125ed91906144a6565b8111155b61262c5760405162461bcd60e51b815260206004820152600c60248201526b0696e76616c696420686361760a41b6044820152606401610452565b602c805460ff60301b1916600160301b179055601a55565b6000546001600160a01b0316331461265b57600080fd5b600c5460ff16156126aa5760405162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd08185b1c9958591e48195b98589b1959603a1b6044820152606401610452565b600c805460ff19166001179055565b6000546001600160a01b031633146126d057600080fd5b600c5460ff1661271f5760405162461bcd60e51b815260206004820152601a6024820152791dda1a5d195b1a5cdd08185b1c9958591e48191a5cd8589b195960321b6044820152606401610452565b600c805460ff19169055601e54612736904261405b565b602155602c805460ff19166001179055565b600060176001612527565b6012818154811061132457600080fd5b6000546001600160a01b0316331461277a57600080fd5b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001179055600e805484526010909252822080546001600160a01b031916909317909255815491906122ab8361406e565b6000546001600160a01b031633146127e357600080fd5b6115288161314f565b600080546001600160a01b0316331461280457600080fd5b602c54600160281b900460ff16612a1b576001600160a01b0385166128685760405162461bcd60e51b815260206004820152601a602482015279706c6174666f726d20616464722063616e74206265207a65726f60301b6044820152606401610452565b6000606460155460275461287c91906144a6565b61288691906144bd565b9050600083156129a157606461289c86846144a6565b6128a691906144bd565b6020549091506001600160a01b031663a9059cbb886128c58486614048565b6040518363ffffffff1660e01b81526004016128e29291906144df565b6020604051808303816000875af1158015612901573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292591906144f8565b5060205460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061295890899085906004016144df565b6020604051808303816000875af1158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b91906144f8565b50612a18565b60205460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906129d3908a9086906004016144df565b6020604051808303816000875af11580156129f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1691906144f8565b505b50505b506001949350505050565b603980546112939061443b565b601754341015612a4257600080fd5b601854341115612a5157600080fd5b6001600160a01b038216612a6457600080fd5b80600003612a7157600080fd5b5050565b6000670de0b6b3a764000060145483612a8e91906144a6565b611bbf91906144bd565b600082821115612aaa57612aaa6146bf565b612ab48284614048565b9392505050565b6000612acd6064611761846014612bec565b90506000612adb8383612a98565b6001600160a01b0385811660009081526003602090815260408083208390556004909152808220829055602d54905193945090911691849181818185875af1925050503d8060008114612b4a576040519150601f19603f3d011682016040523d82523d6000602084013e612b4f565b606091505b50506040516001600160a01b03861691508290600081818185875af1925050503d8060008114612b9b576040519150601f19603f3d011682016040523d82523d6000602084013e612ba0565b606091505b505050836001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d284604051612bde91815260200190565b60405180910390a250505050565b600082600003612bfe57506000611bbf565b612c0882846144a6565b905081612c1584836144bd565b14611bbf57611bbf6146bf565b6000612ab482846144bd565b6000612c3a828461405b565b905082811015611bbf57611bbf6146bf565b612c6f601d54611761670de0b6b3a7640000602754612bec90919063ffffffff16565b601455565b602c54610100900460ff1615612c9c5760405162461bcd60e51b81526004016104529061466f565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a16000612ce1606461176160155447612bec90919063ffffffff16565b602b558115612dc1576000612d06606461176185602b54612bec90919063ffffffff16565b9050836001600160a01b03168160405160006040518083038185875af1925050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050602d54602b546001600160a01b039091169150612d779083612a98565b604051600081818185875af1925050503d8060008114612db3576040519150601f19603f3d011682016040523d82523d6000602084013e612db8565b606091505b50505050612e18565b602d54602b546040516001600160a01b0390921691600081818185875af1925050503d8060008114612e0f576040519150601f19603f3d011682016040523d82523d6000602084013e612e14565b606091505b5050505b602b54601a54612e2791612c2e565b601d541115612e5357612e4c6064611761602654601a54612bec90919063ffffffff16565b9050612e70565b612e6d606461176160265447612bec90919063ffffffff16565b90505b80471015612ebe5760405162461bcd60e51b815260206004820152601b60248201527a2737ba1022b737bab3b410233ab732103a37902a3930b739b332b960291b6044820152606401610452565b612eca602854826131bd565b4715612fb257602b54601a54612edf91612c2e565b601d541115612f6057601a54600090612ef89083612a98565b1115612f5b57601a546001600160a01b03851690612f169083612a98565b604051600081818185875af1925050503d8060008114612f52576040519150601f19603f3d011682016040523d82523d6000602084013e612f57565b606091505b5050505b612fb2565b6040516001600160a01b038516904790600081818185875af1925050503d8060008114612fa9576040519150601f19603f3d011682016040523d82523d6000602084013e612fae565b606091505b5050505b50505050565b602c805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602c54600160201b900460ff166130445760405162461bcd60e51b81526020600482015260126024820152711c99599d5b99081b9bdd08195b98589b195960721b6044820152606401610452565b6001600160a01b038116600090815260036020526040902054806130aa5760405162461bcd60e51b815260206004820152601f60248201527f5573657220686173206e6f20696e766573746d656e7420746f20636c61696d006044820152606401610452565b6001600160a01b03821660008181526003602052604080822082905551839181818185875af1925050503d8060008114613100576040519150601f19603f3d011682016040523d82523d6000602084013e613105565b606091505b505050816001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405161314391815260200190565b60405180910390a25050565b6001600160a01b03811661316257600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80600060646131cd83600a6144a6565b6131d791906144bd565b6131e19083614048565b905083600060646131f383600a6144a6565b6131fd91906144bd565b6132079083614048565b90506000806000603660149054906101000a900460ff161561334b5761322c88613987565b602054603654613248916001600160a01b039081169116613b7f565b603480546001600160a01b0319166001600160a01b039283169081179091556036546040516370a0823160e01b81529216916370a082319161328c91600401614087565b602060405180830381865afa1580156132a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cd9190614656565b6020546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613303921690600401614087565b602060405180830381865afa158015613320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133449190614656565b915061347c565b602054613368906001600160a01b03166133636123ed565b613b7f565b603480546001600160a01b0319166001600160a01b03929092169190911790556133906123ed565b6034546040516370a0823160e01b81526001600160a01b03928316926370a08231926133c192911690600401614087565b602060405180830381865afa1580156133de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134029190614656565b6020546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613438921690600401614087565b602060405180830381865afa158015613455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134799190614656565b91505b6034546001600160a01b03161580159061349f575060008311801561349f575081155b1561359e57866134af84876144a6565b6134b991906144bd565b60205460345460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926134f192169085906004016144df565b6020604051808303816000875af1158015613510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353491906144f8565b50603460009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561358557600080fd5b505af1158015613599573d6000803e3d6000fd5b505050505b6020546135b3906001600160a01b0316613e2d565b50603654600160a01b900460ff1615613784576032546020546036546040516370a0823160e01b81526001600160a01b039384169363e8e337009381169216908d9082906370a082319061360b903090600401614087565b602060405180830381865afa158015613628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364c9190614656565b8e603660009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161368e9190614087565b602060405180830381865afa1580156136ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cf9190614656565b306136dc4261012c61405b565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015613758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377c91906146d5565b505050613845565b6032546020546001600160a01b039182169163f305d719918a911688888b306137af4261012c61405b565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af115801561381c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061384191906146d5565b5050505b6035805460ff60a01b1916600160a01b179055603454603854613874916001600160a01b039081169116613ecd565b506038546034546031546040516370a0823160e01b81526001600160a01b0393841693638a4e6e569316919060399083906370a08231906138b9903090600401614087565b602060405180830381865afa1580156138d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fa9190614656565b6040518563ffffffff1660e01b81526004016139199493929190614703565b6020604051808303816000875af1158015613938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395c91906146a2565b603580546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b603654600160a01b900460ff166139dc5760405162461bcd60e51b8152602060048201526019602482015278185b1d0818dd5c9c995b98de481b9bdd081cd95b1958dd1959603a1b6044820152606401610452565b604080516002808252606082018352600092602083019080368337019050509050613a056123ed565b81600081518110613a1857613a18614515565b6001600160a01b039283166020918202929092010152603654825191169082906001908110613a4957613a49614515565b6001600160a01b039283166020918202929092010152603654613a6c9116613e2d565b506032546036546001600160a01b0391821691637ff36ab5918591613a92911682611a9e565b8430613aa04261012c61405b565b6040518663ffffffff1660e01b8152600401613abf94939291906147d2565b60006040518083038185885af1158015613add573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052613b06919081019061454c565b506036546040516370a0823160e01b81526001600160a01b03909116906370a0823190613b37903090600401614087565b602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190614656565b6037555050565b6000806001600160a01b0316603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0291906146a2565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401613c2f929190614807565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7091906146a2565b6001600160a01b031614613d6a57603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf591906146a2565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401613d22929190614807565b602060405180830381865afa158015613d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6391906146a2565b9050611bbf565b603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de191906146a2565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401613e0e929190614807565b6020604051808303816000875af1158015613d3f573d6000803e3d6000fd5b60325460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b392613e80929091169085906004016144df565b6020604051808303816000875af1158015613e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec391906144f8565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b390613f1a90869085906004016144df565b6020604051808303816000875af1158015613f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906144f8565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6020808252601e908201527f496e2077686974656c6973742064697361626c656420636f6f6c204f66660000604082015260600190565b60208082526019908201527855736572207573656420616e7974696d6520726566756e642160381b604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611bbf57611bbf614032565b80820180821115611bbf57611bbf614032565b60006001820161408057614080614032565b5060010190565b6001600160a01b0391909116815260200190565b6000815180845260005b818110156140c1576020818501810151868301820152016140a5565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612ab4602083018461409b565b60006020828403121561410657600080fd5b5035919050565b6001600160a01b038116811461152857600080fd5b60006020828403121561413457600080fd5b8135612ab48161410d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561417d5761417d61413f565b604052919050565b801515811461152857600080fd5b6000806000608084860312156141a857600080fd5b84601f8501126141b757600080fd5b604080519081016001600160401b03811182821017156141d9576141d961413f565b80604052508060408601878111156141f057600080fd5b865b818110156142135780356142058161410d565b8352602092830192016141f2565b5091945050359150606084013561422981614185565b809150509250925092565b6000806040838503121561424757600080fd5b82356142528161410d565b946020939093013593505050565b600081518084526020808501945080840160005b838110156142995781516001600160a01b031687529582019590820190600101614274565b509495945050505050565b602081526000612ab46020830184614260565b60006101e08286835b600a8110156142df5781518352602092830192909101906001016142c0565b50505061014083018560005b600481101561430c57815115158352602092830192909101906001016142eb565b505050806101c08401526143228184018561409b565b9695505050505050565b6000806080838503121561433f57600080fd5b83601f84011261434e57600080fd5b604051606081016001600160401b03811182821017156143705761437061413f565b60405280606085018681111561438557600080fd5b855b818110156143a857803561439a8161410d565b835260209283019201614387565b5091935050356143b781614185565b809150509250929050565b600080600080608085870312156143d857600080fd5b84356143e38161410d565b935060208501356143f38161410d565b925060408501359150606085013561440a81614185565b939692955090935050565b6020808252600c908201526b1a18d85c081b9bdd081cd95d60a21b604082015260600190565b600181811c9082168061444f57607f821691505b602082108103611ce457634e487b7160e01b600052602260045260246000fd5b6020808252601f908201527f696e69746961746f72206973206e6f742070726573616c65206f776e65722100604082015260600190565b8082028115828204841417611bbf57611bbf614032565b6000826144da57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03929092168252602082015260400190565b60006020828403121561450a57600080fd5b8151612ab481614185565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006145446040830184614260565b949350505050565b6000602080838503121561455f57600080fd5b82516001600160401b038082111561457657600080fd5b818501915085601f83011261458a57600080fd5b81518181111561459c5761459c61413f565b8060051b91506145ad848301614155565b81815291830184019184810190888411156145c757600080fd5b938501935b838510156145e5578451825293850193908501906145cc565b98975050505050505050565b6020808252601a90820152794c697175696469747920697320616464656420616c726561647960301b604082015260600190565b6020808252601790820152763737ba103a343290383932b9b0b6329031b932b0ba37b960491b604082015260600190565b60006020828403121561466857600080fd5b5051919050565b6020808252601990820152781c1c995cd85b1948185b1c9958591e48199a5b985b1a5e9959603a1b604082015260600190565b6000602082840312156146b457600080fd5b8151612ab48161410d565b634e487b7160e01b600052600160045260246000fd5b6000806000606084860312156146ea57600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c908281168061473b57607f831692505b858310810361475857634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614777576001811461478d576147b8565b60ff198616825284151560051b820196506147b8565b60008c81526020902060005b868110156147b257815484820152908501908901614799565b83019750505b505050505050809250505082606083015295945050505050565b8481526080602082015260006147eb6080830186614260565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a2646970667358221220ff11f2133127d0f45941a98b9fe4884106f5cdce57ce661cc5a4f18544b2c34764736f6c63430008110033a2646970667358221220560d60f4bb97d0081d60eb043a7f4ef4fc71067139c4bcbad594955ade83b25164736f6c634300081100330000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000300000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000be5760003560e01c806306e2971214620000c35780631ab8f86414620000ef5780631dfaced4146200010857806325cfdf5e146200011f578063417d4add146200013857806346c96aac146200014f5780636716e0151462000163578063715018a6146200017a5780638da5cb5b1462000184578063c3abb7661462000198578063d7c94efd14620001ac578063f2fde38b14620001b6578063fc006a8a14620001cd575b600080fd5b600254620000d7906001600160a01b031681565b604051620000e6919062000574565b60405180910390f35b620000f960055481565b604051908152602001620000e6565b620000d76200011936600462000588565b620001e4565b620001366200013036600462000588565b6200020f565b005b6200013662000149366004620005bf565b6200022c565b600154620000d7906001600160a01b031681565b620000d762000174366004620006f2565b6200028d565b6200013662000437565b600054620000d7906001600160a01b031681565b600354620000d7906001600160a01b031681565b620000f960045481565b62000136620001c7366004620007a8565b62000497565b62000136620001de366004620007a8565b620004bd565b60068181548110620001f557600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146200022757600080fd5b600555565b6000546001600160a01b031633146200024457600080fd5b80600683815481106200025b576200025b620007cd565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b604085810151815180830183526020868101518252868401518183015283518085018552818a01516001600160a01b039081168252600254168183015284516060808201875289518252808a01518285015260808a0151828801528651808801885289815260045481860152875191820190975287518152600096879695948c9493929081018a6001602002015181526020016005548152506040518060400160405280600360009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020018f600360048110620003745762000374620007cd565b60200201516001600160a01b03169052604051600690620003959062000566565b620003a99998979695949392919062000861565b604051809103906000f080158015620003c6573d6000803e3d6000fd5b50875160405163f2fde38b60e01b81529192506001600160a01b0383169163f2fde38b91620003f89160040162000574565b600060405180830381600087803b1580156200041357600080fd5b505af115801562000428573d6000803e3d6000fd5b50929998505050505050505050565b6000546001600160a01b031633146200044f57600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b03163314620004af57600080fd5b620004ba81620004f7565b50565b6000546001600160a01b03163314620004d557600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166200050b57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6150cd806200093f83390190565b6001600160a01b0391909116815260200190565b6000602082840312156200059b57600080fd5b5035919050565b80356001600160a01b0381168114620005ba57600080fd5b919050565b60008060408385031215620005d357600080fd5b82359150620005e560208401620005a2565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006295762000629620005ee565b60405290565b600082601f8301126200064157600080fd5b604080519081016001600160401b0381118282101715620006665762000666620005ee565b80604052508060408401858111156200067e57600080fd5b845b818110156200069a57803583526020928301920162000680565b509195945050505050565b600082601f830112620006b757600080fd5b60405160a081016001600160401b0381118282101715620006dc57620006dc620005ee565b6040528060a08401858111156200067e57600080fd5b60008060008060006101c086880312156200070c57600080fd5b86601f8701126200071c57600080fd5b6200072662000604565b8060808801898111156200073957600080fd5b885b818110156200075e576200074f81620005a2565b8452602093840193016200073b565b508197506200076e8a826200062f565b9650505050620007828760c08801620006a5565b925061016086013591506200079c8761018088016200062f565b90509295509295909350565b600060208284031215620007bb57600080fd5b620007c682620005a2565b9392505050565b634e487b7160e01b600052603260045260246000fd5b8060005b600281101562000808578151845260209384019390910190600101620007e7565b50505050565b8060005b6002811015620008085781516001600160a01b031684526020938401939091019060010162000812565b8060005b60038110156200080857815184526020938401939091019060010162000840565b6001600160a01b038a8116825260009061024090838201906020620008898187018f620007e3565b62000898606087018e620007e3565b620008a760a087018d6200080e565b620008b660e087018c6200083c565b620008c661014087018b620007e3565b620008d661018087018a6200083c565b620008e66101e08701896200080e565b836102208701528293508654808452610260870194508760005281600020935060005b818110156200092957845484168652948201946001948501940162000909565b50939f9e50505050505050505050505050505056fe60c060405260086080908152674f564552464c4f5760c01b60a052600290620000299082620003e0565b50600060135560026015556014601655603c601e55610258601f55600a602a5560646030556040805180820190915260018152600160fd1b6020820152603990620000759082620003e0565b503480156200008357600080fd5b50604051620050cd380380620050cd833981016040819052620000a69162000645565b600080546001600160a01b03191633179055604080518082019091526020868101518252810186600260200201519052620000e690601790600262000289565b5084516019558651601b55602080880151601c5580546001600160a01b03199081166001600160a01b038c811691909117835560408801516022558851602c805491831667010000000000000002600160381b600160d81b031990921691909117905588830151602d805490931691161790558481015160158190558551602655895160275590890151602855606490620001829082620007d1565b602854602754620001949190620007d1565b620001a09190620007ed565b620001ac919062000807565b60295560208084015160315560408401516016558251603880546001600160a01b039283166001600160a01b03199182161790915584830151603280549190931691161790558151620002069160339190840190620002cc565b5060005b815181101562000279576001602f600060338481548110620002305762000230620007a5565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558062000270816200082a565b9150506200020a565b5050505050505050505062000846565b8260028101928215620002ba579160200282015b82811115620002ba5782518255916020019190600101906200029d565b50620002c892915062000324565b5090565b828054828255906000526020600020908101928215620002ba579160200282015b82811115620002ba57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002ed565b5b80821115620002c8576000815560010162000325565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200036657607f821691505b6020821081036200038757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003db57600081815260208120601f850160051c81016020861015620003b65750805b601f850160051c820191505b81811015620003d757828155600101620003c2565b5050505b505050565b81516001600160401b03811115620003fc57620003fc6200033b565b62000414816200040d845462000351565b846200038d565b602080601f8311600181146200044c5760008415620004335750858301515b600019600386901b1c1916600185901b178555620003d7565b600085815260208120601f198616915b828110156200047d578886015182559484019460019091019084016200045c565b50858210156200049c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620004c457600080fd5b919050565b604080519081016001600160401b0381118282101715620004ee57620004ee6200033b565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200051f576200051f6200033b565b604052919050565b600082601f8301126200053957600080fd5b62000543620004c9565b8060408401858111156200055657600080fd5b845b818110156200057257805184526020938401930162000558565b509095945050505050565b600082601f8301126200058f57600080fd5b62000599620004c9565b806040840185811115620005ac57600080fd5b845b818110156200057257620005c281620004ac565b845260209384019301620005ae565b600082601f830112620005e357600080fd5b604051606081016001600160401b03811182821017156200060857620006086200033b565b6040528060608401858111156200061e57600080fd5b845b818110156200063a57805183526020928301920162000620565b509195945050505050565b60008060008060008060008060006102408a8c0312156200066557600080fd5b620006708a620004ac565b9850620006818b60208c0162000527565b9750620006928b60608c0162000527565b9650620006a38b60a08c016200057d565b9550620006b48b60e08c01620005d1565b9450620006c68b6101408c0162000527565b9350620006d88b6101808c01620005d1565b9250620006ea8b6101e08c016200057d565b6102208b01519092506001600160401b03808211156200070957600080fd5b818c0191508c601f8301126200071e57600080fd5b8151818111156200073357620007336200033b565b8060051b91506200074760208301620004f4565b81815260209284018301928101908f8411156200076357600080fd5b6020850194505b8385101562000790576200077e85620004ac565b8252602094850194909101906200076a565b80955050505050509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115620007e757620007e7620007bb565b92915050565b8082028115828204841417620007e757620007e7620007bb565b6000826200082557634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016200083f576200083f620007bb565b5060010190565b61487780620008566000396000f3fe60806040526004361061042c5760003560e01c806306e29712146105ef5780630f98c918146106255780631096f46a1461064957806310ef82c5146106695780631265d6e71461067f5780631515bc2b146106a15780631ab8f864146106c45780631bd49653146106da5780631dfaced4146106f05780631e12353e146107105780631edd40ae146107465780631f6d49421461075b578063249b7c1914610788578063252a02eb1461079d5780632698d707146107d35780632951f4b1146107e85780632a592e9f146107fe5780632fc9b6861461082b5780633197cbb61461085b5780633675f29b1461087157806337ce1647146108915780633bff8ed7146108b25780634042b66f146108df578063422099b2146108f557806346c96aac1461090a57806348c54b9d1461092a5780634c4a386f1461093f5780634d2a9073146109605780634de64b81146109805780634e4153bb146109a057806351229077146109b657806351fb012d146109d8578063585e1af6146109f25780635a0e779b14610a085780635bff9a2714610a295780635f9bae3214610a3f5780636008405914610a5557806361644ca814610a7557806361c533b414610a9957806363c1805814610aaf5780636ac8d0c214610ac45780636e27607a14610ae4578063715018a614610b0557806371beb4e114610b1a5780637313ee5a14610b30578063772bf07b14610b4657806378e2df0e14610b6757806378e9792514610b7d5780637d3d652214610b935780637f87bbd614610bad5780638190eefd14610bce57806382efbbec14610be8578063844faace14610bfe57806386c5ae2f14610c2b5780638ab1d68114610c4b5780638b6ea1cf14610c6b5780638d4e408314610c8b5780638da5cb5b14610caa5780639762f80214610cca5780639774748014610ce457806397993fd914610cf9578063995c5e9d14610d195780639b19251a14610d495780639b33d9d114610d795780639fe4cb9414610d8e578063a82524b214610dae578063b138d50014610dc3578063b444e16214610dd9578063b5545a3c14610def578063b7a871c914610e04578063b94a6dfe14610e34578063bc2eae0c14610e54578063be11ce2f14610e6a578063bf3f15bf14610e7f578063bf79519814610e95578063c3abb76614610eb5578063cdfb2b4e14610ed5578063ce7dadd014610eea578063d6b0f48414610f00578063db37ceec14610f15578063dd47ab6814610f2a578063e132db4114610f4a578063e43252d714610f5f578063e4c21cf214610f7f578063e5658e1a14610f94578063e580b2b0146106a1578063ecfd892814610fc1578063ef67a5e214610fd7578063f2fde38b14610ffe578063f6e99c0d1461101e578063fb7f21eb1461103e578063fc0c546a14611053578063fc37987b14611073578063fcb3747314611089578063fe67a1891461109f57600080fd5b366105ea57602154421161045b5760405162461bcd60e51b815260040161045290613f9a565b60405180910390fd5b336000908152600a602052604090205460ff161561048b5760405162461bcd60e51b815260040161045290613fd1565b600c5460ff16156104c557336000908152600b602052604090205460ff166104c55760405162461bcd60e51b815260040161045290614004565b346022546104d39190614048565b3360009081526003602052604090205411156105315760405162461bcd60e51b815260206004820152601d60248201527f636f6e747269627574696f6e206f766572206d617820616c6c6f7765640000006044820152606401610452565b61053a336110b5565b336000908152600360205260408120805434929061055990849061405b565b9091555050336000908152600460205260408120805434929061057d90849061405b565b90915550503360009081526009602052604090205460ff166105e857600d8054600090815260086020908152604080832080546001600160a01b03191633908117909155835260099091528120805460ff19166001179055815491906105e28361406e565b91905055505b005b600080fd5b3480156105fb57600080fd5b50602d5461060f906001600160a01b031681565b60405161061c9190614087565b60405180910390f35b34801561063157600080fd5b5061063b60265481565b60405190815260200161061c565b34801561065557600080fd5b5060365461060f906001600160a01b031681565b34801561067557600080fd5b5061063b60295481565b34801561068b57600080fd5b50610694611286565b60405161061c91906140e1565b3480156106ad57600080fd5b50601c5442115b604051901515815260200161061c565b3480156106d057600080fd5b5061063b60165481565b3480156106e657600080fd5b5061063b60375481565b3480156106fc57600080fd5b5061060f61070b3660046140f4565b611314565b34801561071c57600080fd5b5061060f61072b3660046140f4565b6010602052600090815260409020546001600160a01b031681565b34801561075257600080fd5b506105e861133e565b34801561076757600080fd5b5061063b610776366004614122565b60036020526000908152604090205481565b34801561079457600080fd5b50601c5461063b565b3480156107a957600080fd5b5061060f6107b83660046140f4565b6008602052600090815260409020546001600160a01b031681565b3480156107df57600080fd5b50601d5461063b565b3480156107f457600080fd5b5061063b602a5481565b34801561080a57600080fd5b5061063b610819366004614122565b60056020526000908152604090205481565b34801561083757600080fd5b506106b4610846366004614122565b600a6020526000908152604090205460ff1681565b34801561086757600080fd5b5061063b601c5481565b34801561087d57600080fd5b5060355461060f906001600160a01b031681565b34801561089d57600080fd5b506036546106b490600160a01b900460ff1681565b3480156108be57600080fd5b5061063b6108cd366004614122565b60066020526000908152604090205481565b3480156108eb57600080fd5b5061063b601d5481565b34801561090157600080fd5b506105e861152b565b34801561091657600080fd5b5060015461060f906001600160a01b031681565b34801561093657600080fd5b506105e86115e5565b34801561094b57600080fd5b50602c546106b490600160201b900460ff1681565b34801561096c57600080fd5b5061063b61097b366004614193565b6118ec565b34801561098c57600080fd5b5061063b61099b366004614234565b611a9e565b3480156109ac57600080fd5b5061063b60135481565b3480156109c257600080fd5b506109cb611bc5565b60405161061c91906142a4565b3480156109e457600080fd5b50600c546106b49060ff1681565b3480156109fe57600080fd5b5061063b601a5481565b348015610a1457600080fd5b506035546106b490600160a01b900460ff1681565b348015610a3557600080fd5b5061063b60305481565b348015610a4b57600080fd5b5061063b60215481565b348015610a6157600080fd5b506105e8610a70366004614122565b611cea565b348015610a8157600080fd5b50610a8a611e22565b60405161061c939291906142b7565b348015610aa557600080fd5b5061063b60315481565b348015610abb57600080fd5b506105e8611f9c565b348015610ad057600080fd5b50602c546106b49062010000900460ff1681565b348015610af057600080fd5b50602c546106b490600160281b900460ff1681565b348015610b1157600080fd5b506105e861219b565b348015610b2657600080fd5b5061063b60225481565b348015610b3c57600080fd5b5061063b60255481565b348015610b5257600080fd5b50602c546106b490600160301b900460ff1681565b348015610b7357600080fd5b5061063b60195481565b348015610b8957600080fd5b5061063b601b5481565b348015610b9f57600080fd5b50601954601d5410156106b4565b348015610bb957600080fd5b50602c546106b4906301000000900460ff1681565b348015610bda57600080fd5b50602c546106b49060ff1681565b348015610bf457600080fd5b5061063b600e5481565b348015610c0a57600080fd5b5061063b610c19366004614122565b60076020526000908152604090205481565b348015610c3757600080fd5b5061060f610c463660046140f4565b6121fa565b348015610c5757600080fd5b506105e8610c66366004614122565b61220a565b348015610c7757600080fd5b50602e5461060f906001600160a01b031681565b348015610c9757600080fd5b50602c546106b490610100900460ff1681565b348015610cb657600080fd5b5060005461060f906001600160a01b031681565b348015610cd657600080fd5b50601a54601d5410156106b4565b348015610cf057600080fd5b506105e86122b3565b348015610d0557600080fd5b5061063b610d1436600461432c565b61231d565b348015610d2557600080fd5b506106b4610d34366004614122565b60096020526000908152604090205460ff1681565b348015610d5557600080fd5b506106b4610d64366004614122565b600b6020526000908152604090205460ff1681565b348015610d8557600080fd5b5061060f6123ed565b348015610d9a57600080fd5b5060345461060f906001600160a01b031681565b348015610dba57600080fd5b50601b5461063b565b348015610dcf57600080fd5b5061063b60275481565b348015610de557600080fd5b5061063b601f5481565b348015610dfb57600080fd5b506105e8612460565b348015610e1057600080fd5b506106b4610e1f366004614122565b602f6020526000908152604090205460ff1681565b348015610e4057600080fd5b5060325461060f906001600160a01b031681565b348015610e6057600080fd5b5061063b600f5481565b348015610e7657600080fd5b5061063b612521565b348015610e8b57600080fd5b5061063b60235481565b348015610ea157600080fd5b506105e8610eb03660046140f4565b61252e565b348015610ec157600080fd5b5060385461060f906001600160a01b031681565b348015610ee157600080fd5b506105e8612644565b348015610ef657600080fd5b5061063b60285481565b348015610f0c57600080fd5b506105e86126b9565b348015610f2157600080fd5b5061063b612748565b348015610f3657600080fd5b5061060f610f453660046140f4565b612753565b348015610f5657600080fd5b5060145461063b565b348015610f6b57600080fd5b506105e8610f7a366004614122565b612763565b348015610f8b57600080fd5b5060195461063b565b348015610fa057600080fd5b5061063b610faf366004614122565b60046020526000908152604090205481565b348015610fcd57600080fd5b5061063b600d5481565b348015610fe357600080fd5b50602c5461060f90600160381b90046001600160a01b031681565b34801561100a57600080fd5b506105e8611019366004614122565b6127cc565b34801561102a57600080fd5b506106b46110393660046143c2565b6127ec565b34801561104a57600080fd5b50610694612a26565b34801561105f57600080fd5b5060205461060f906001600160a01b031681565b34801561107f57600080fd5b5061063b60145481565b34801561109557600080fd5b5061063b601e5481565b3480156110ab57600080fd5b5061063b60245481565b602c54600160301b900460ff166110de5760405162461bcd60e51b815260040161045290614415565b33321461112d5760405162461bcd60e51b815260206004820152601e60248201527f63616e277420636f6e747269627574652076696120636f6e74726163747300006044820152606401610452565b602154421161114e5760405162461bcd60e51b815260040161045290613f9a565b601b5442101580156111615750601c5442105b6111a25760405162461bcd60e51b815260206004820152601260248201527170726573616c65206e6f742061637469766560701b6044820152606401610452565b336000908152600a602052604090205460ff16156111d25760405162461bcd60e51b815260040161045290613fd1565b600c5460ff161561120c57336000908152600b602052604090205460ff1661120c5760405162461bcd60e51b815260040161045290614004565b346112178282612a33565b600061122282612a75565b905081601d6000828254611236919061405b565b909155505060408051838152602081018390526001600160a01b0385169133917f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18910160405180910390a3505050565b600280546112939061443b565b80601f01602080910402602001604051908101604052809291908181526020018280546112bf9061443b565b801561130c5780601f106112e15761010080835404028352916020019161130c565b820191906000526020600020905b8154815290600101906020018083116112ef57829003601f168201915b505050505081565b6033818154811061132457600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600a602052604090205460ff16156113925760405162461bcd60e51b8152602060048201526011602482015270616c726561647920726566756e6465642160781b6044820152606401610452565b33600090815260036020526040902054806113e25760405162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b6044820152606401610452565b602c54610100900460ff161561142f5760405162461bcd60e51b8152602060048201526012602482015271616c72656164792066696e616c697a65642160701b6044820152606401610452565b602c5462010000900460ff16156114885760405162461bcd60e51b815260206004820152601d60248201527f616c72656164792073756363657366756c6c792066696e616c697a65640000006044820152606401610452565b601f54601c5461149791612a98565b42106114e25760405162461bcd60e51b815260206004820152601a6024820152797769746864726177616c2077696e646f7720657870697265642160301b6044820152606401610452565b336000908152600660205260409020819055601d546115019082612a98565b601d55336000818152600a60205260409020805460ff191660011790556115289082612abb565b50565b602c54600160381b90046001600160a01b0316331461155c5760405162461bcd60e51b81526004016104529061446f565b602c54610100900460ff16156115b15760405162461bcd60e51b815260206004820152601a60248201527970726573616c6520616c72656164792066696e616c697a65642160301b6044820152606401610452565b602c805460ff60281b1916600160281b179055601654601554600a916115d6916144a6565b6115e091906144bd565b601555565b602c54600160201b900460ff16156116365760405162461bcd60e51b81526020600482015260146024820152731c1c995cd85b19481dd85cc81c99599d5b99195960621b6044820152606401610452565b602c54610100900460ff166116825760405162461bcd60e51b81526020600482015260126024820152714e6f742046696e616c697a6564207965742160701b6044820152606401610452565b602c5462010000900460ff166116cc5760405162461bcd60e51b815260206004820152600f60248201526e70726573616c65204661696c65642160881b6044820152606401610452565b3360009081526003602052604081205490036117345760405162461bcd60e51b815260206004820152602160248201527f7573657220686173206e6f206d6f726520746f6b656e7320746f20636c61696d6044820152602160f81b6064820152608401610452565b60145433600090815260036020526040812054909161176791670de0b6b3a7640000916117619190612bec565b90612c22565b9050611780602b54601a54612c2e90919063ffffffff16565b601d54111561185257601d54602b5433600081815260036020526040902054909261180d92612710926117619261270f92611807926117c29291869190612bec565b601d54601a5433600090815260036020526040902054611801926117eb92909161176191612bec565b3360009081526003602052604090205490612a98565b90612a98565b90612bec565b604051600081818185875af1925050503d8060008114611849576040519150601f19603f3d011682016040523d82523d6000602084013e61184e565b606091505b5050505b3360008181526003602090815260408083209290925554905163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91611896919085906004016144df565b6020604051808303816000875af11580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d991906144f8565b5033600090815260056020526040902055565b600080546001600160a01b0316331461190457600080fd5b602c54600160301b900460ff1661192d5760405162461bcd60e51b815260040161045290614415565b602c54610100900460ff16156119795760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e48199a5b985b1a5e9959607a1b6044820152606401610452565b601c5442116119b75760405162461bcd60e51b815260206004820152600a6024820152691b9bdd0818db1bdcd95960b21b6044820152606401610452565b8351602e80546001600160a01b0319166001600160a01b039283161790556020850151602c805466ffffffff010000600160d81b031916600160381b929093169190910262ff00001916919091176201000084151502179055601954601d5410801590611a2c5750602c5462010000900460ff165b15611a6257611a39612c4c565b602c54602e54611a5d916001600160a01b03600160381b9091048116911685612c74565b611a6a565b611a6a612fb8565b4260245560405160008051602061482283398151915290600090a150602c805461ff00191661010017905560019392505050565b60408051600280825260608083018452600093909284928392602083019080368337019050509050611ace6123ed565b81600081518110611ae157611ae1614515565b60200260200101906001600160a01b031690816001600160a01b0316815250508581600181518110611b1557611b15614515565b6001600160a01b03928316602091820292909201015260325460405163d06ca61f60e01b815291169063d06ca61f90611b54908890859060040161452b565b600060405180830381865afa158015611b71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b99919081019061454c565b925082600181518110611bae57611bae614515565b602002602001015191508193505050505b92915050565b60606000600e546001600160401b03811115611be357611be361413f565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b50905060005b600e54811015611ce4576000818152601060209081526040808320546001600160a01b03168352600b90915290205460ff1615611c9d5760008181526010602052604090205482516001600160a01b0390911690839083908110611c7857611c78614515565b60200260200101906001600160a01b031690816001600160a01b031681525050611cd2565b6000828281518110611cb157611cb1614515565b60200260200101906001600160a01b031690816001600160a01b0316815250505b80611cdc8161406e565b915050611c12565b50919050565b6001600160a01b038116611d3f5760405162461bcd60e51b815260206004820152601c60248201527b31bab93932b731bc9031b0b73737ba103132902d32b9379030b2323960211b6044820152606401610452565b6001600160a01b0381166000908152602f602052604090205460ff16611da05760405162461bcd60e51b81526020600482015260166024820152751a5b9d985b1a5908185cdcd95d081cd95b1958dd195960521b6044820152606401610452565b603554600160a01b900460ff1615611dca5760405162461bcd60e51b8152600401610452906145f1565b602c54600160381b90046001600160a01b03163314611dfb5760405162461bcd60e51b815260040161045290614625565b603680546001600160a81b0319166001600160a01b0390921691909117600160a01b179055565b611e2a613f5d565b611e32613f7c565b6060611e3c613f5d565b611e44613f7c565b505060408051610140810182526019548152601a5460208083019190915260175482840152601854606080840191909152601b54608080850191909152601c5460a0850152601d5460c085015260145460e08501526028546101008086019190915260265461012086015285519182018652602c5490810460ff908116151583526201000082048116151594830194909452630100000081048416151595820195909552600160201b90940490911615159083015260028054919291839183918190611f0f9061443b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b9061443b565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b505050505090509450945094505050909192565b602c54600160381b90046001600160a01b03163314611fcd5760405162461bcd60e51b81526004016104529061446f565b602c54610100900460ff1661201d5760405162461bcd60e51b815260206004820152601660248201527570726573616c65206e6f742066696e616c697a65642160501b6044820152606401610452565b602c5462010000900460ff161561206b5760405162461bcd60e51b8152602060048201526012602482015271199a5b985b1a5e99481dd85cc81d985b1a5960721b6044820152606401610452565b602054602c546040516370a0823160e01b81526001600160a01b039283169263a9059cbb92600160381b9004169083906370a08231906120af903090600401614087565b602060405180830381865afa1580156120cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f09190614656565b6040518363ffffffff1660e01b815260040161210d9291906144df565b6020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215091906144f8565b6121995760405162461bcd60e51b815260206004820152601a60248201527963616e6e6f74207472616e7366657220746f6b656e206261636b60301b6044820152606401610452565b565b6000546001600160a01b031633146121b257600080fd5b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6011818154811061132457600080fd5b6000546001600160a01b0316331461222157600080fd5b6001600160a01b0381166000908152600b602052604090205460ff1661227d5760405162461bcd60e51b81526020600482015260116024820152706e6f7420696e2077686974656c6973742160781b6044820152606401610452565b6001600160a01b0381166000908152600b60205260408120805460ff19169055600f8054916122ab8361406e565b919050555050565b603554600160a01b900460ff16156122dd5760405162461bcd60e51b8152600401610452906145f1565b602c54600160381b90046001600160a01b0316331461230e5760405162461bcd60e51b815260040161045290614625565b6036805460ff60a01b19169055565b600080546001600160a01b0316331461233557600080fd5b602c54610100900460ff161561235d5760405162461bcd60e51b81526004016104529061466f565b8251602e80546001600160a01b0319166001600160a01b039283161790556020840151602c805466ffffffff010000600160d81b031916600160381b929093169190910262ff000019169190911762010000841515021790556123be612fb8565b60405160008051602061482283398151915290600090a150602c805461ff001916610100179055600192915050565b603254604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015612437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245b91906146a2565b905090565b602c54610100900460ff166124a75760405162461bcd60e51b815260206004820152600d60248201526c1b9bdd08199a5b985b1a5e9959609a1b6044820152606401610452565b601954601d5410806124c25750602c5462010000900460ff16155b6125185760405162461bcd60e51b815260206004820152602160248201527f676f616c2072656163686564206f722070726573616c652073756363656564656044820152601960fa1b6064820152608401610452565b61219933612ff6565b60006017815b0154905090565b602c54600160381b90046001600160a01b031633146125845760405162461bcd60e51b815260206004820152601260248201527131b0b63632b9103737ba1031b932b0ba37b960711b6044820152606401610452565b602c54600160301b900460ff16156125d15760405162461bcd60e51b815260206004820152601060248201526f1a18d85c08185b1c9958591e481cd95d60821b6044820152606401610452565b601954811180156125f15750602a546019546125ed91906144a6565b8111155b61262c5760405162461bcd60e51b815260206004820152600c60248201526b0696e76616c696420686361760a41b6044820152606401610452565b602c805460ff60301b1916600160301b179055601a55565b6000546001600160a01b0316331461265b57600080fd5b600c5460ff16156126aa5760405162461bcd60e51b81526020600482015260196024820152781dda1a5d195b1a5cdd08185b1c9958591e48195b98589b1959603a1b6044820152606401610452565b600c805460ff19166001179055565b6000546001600160a01b031633146126d057600080fd5b600c5460ff1661271f5760405162461bcd60e51b815260206004820152601a6024820152791dda1a5d195b1a5cdd08185b1c9958591e48191a5cd8589b195960321b6044820152606401610452565b600c805460ff19169055601e54612736904261405b565b602155602c805460ff19166001179055565b600060176001612527565b6012818154811061132457600080fd5b6000546001600160a01b0316331461277a57600080fd5b6001600160a01b0381166000818152600b60209081526040808320805460ff19166001179055600e805484526010909252822080546001600160a01b031916909317909255815491906122ab8361406e565b6000546001600160a01b031633146127e357600080fd5b6115288161314f565b600080546001600160a01b0316331461280457600080fd5b602c54600160281b900460ff16612a1b576001600160a01b0385166128685760405162461bcd60e51b815260206004820152601a602482015279706c6174666f726d20616464722063616e74206265207a65726f60301b6044820152606401610452565b6000606460155460275461287c91906144a6565b61288691906144bd565b9050600083156129a157606461289c86846144a6565b6128a691906144bd565b6020549091506001600160a01b031663a9059cbb886128c58486614048565b6040518363ffffffff1660e01b81526004016128e29291906144df565b6020604051808303816000875af1158015612901573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292591906144f8565b5060205460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061295890899085906004016144df565b6020604051808303816000875af1158015612977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299b91906144f8565b50612a18565b60205460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906129d3908a9086906004016144df565b6020604051808303816000875af11580156129f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1691906144f8565b505b50505b506001949350505050565b603980546112939061443b565b601754341015612a4257600080fd5b601854341115612a5157600080fd5b6001600160a01b038216612a6457600080fd5b80600003612a7157600080fd5b5050565b6000670de0b6b3a764000060145483612a8e91906144a6565b611bbf91906144bd565b600082821115612aaa57612aaa6146bf565b612ab48284614048565b9392505050565b6000612acd6064611761846014612bec565b90506000612adb8383612a98565b6001600160a01b0385811660009081526003602090815260408083208390556004909152808220829055602d54905193945090911691849181818185875af1925050503d8060008114612b4a576040519150601f19603f3d011682016040523d82523d6000602084013e612b4f565b606091505b50506040516001600160a01b03861691508290600081818185875af1925050503d8060008114612b9b576040519150601f19603f3d011682016040523d82523d6000602084013e612ba0565b606091505b505050836001600160a01b03167f7e77c11526f6439d832e432cabb72ef2aaa7e1677ca8b9509c14df61fba190d284604051612bde91815260200190565b60405180910390a250505050565b600082600003612bfe57506000611bbf565b612c0882846144a6565b905081612c1584836144bd565b14611bbf57611bbf6146bf565b6000612ab482846144bd565b6000612c3a828461405b565b905082811015611bbf57611bbf6146bf565b612c6f601d54611761670de0b6b3a7640000602754612bec90919063ffffffff16565b601455565b602c54610100900460ff1615612c9c5760405162461bcd60e51b81526004016104529061466f565b6040517f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a90600090a16000612ce1606461176160155447612bec90919063ffffffff16565b602b558115612dc1576000612d06606461176185602b54612bec90919063ffffffff16565b9050836001600160a01b03168160405160006040518083038185875af1925050503d8060008114612d53576040519150601f19603f3d011682016040523d82523d6000602084013e612d58565b606091505b5050602d54602b546001600160a01b039091169150612d779083612a98565b604051600081818185875af1925050503d8060008114612db3576040519150601f19603f3d011682016040523d82523d6000602084013e612db8565b606091505b50505050612e18565b602d54602b546040516001600160a01b0390921691600081818185875af1925050503d8060008114612e0f576040519150601f19603f3d011682016040523d82523d6000602084013e612e14565b606091505b5050505b602b54601a54612e2791612c2e565b601d541115612e5357612e4c6064611761602654601a54612bec90919063ffffffff16565b9050612e70565b612e6d606461176160265447612bec90919063ffffffff16565b90505b80471015612ebe5760405162461bcd60e51b815260206004820152601b60248201527a2737ba1022b737bab3b410233ab732103a37902a3930b739b332b960291b6044820152606401610452565b612eca602854826131bd565b4715612fb257602b54601a54612edf91612c2e565b601d541115612f6057601a54600090612ef89083612a98565b1115612f5b57601a546001600160a01b03851690612f169083612a98565b604051600081818185875af1925050503d8060008114612f52576040519150601f19603f3d011682016040523d82523d6000602084013e612f57565b606091505b5050505b612fb2565b6040516001600160a01b038516904790600081818185875af1925050503d8060008114612fa9576040519150601f19603f3d011682016040523d82523d6000602084013e612fae565b606091505b5050505b50505050565b602c805460ff60201b1916600160201b1790556040517f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8990600090a1565b602c54600160201b900460ff166130445760405162461bcd60e51b81526020600482015260126024820152711c99599d5b99081b9bdd08195b98589b195960721b6044820152606401610452565b6001600160a01b038116600090815260036020526040902054806130aa5760405162461bcd60e51b815260206004820152601f60248201527f5573657220686173206e6f20696e766573746d656e7420746f20636c61696d006044820152606401610452565b6001600160a01b03821660008181526003602052604080822082905551839181818185875af1925050503d8060008114613100576040519150601f19603f3d011682016040523d82523d6000602084013e613105565b606091505b505050816001600160a01b03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405161314391815260200190565b60405180910390a25050565b6001600160a01b03811661316257600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80600060646131cd83600a6144a6565b6131d791906144bd565b6131e19083614048565b905083600060646131f383600a6144a6565b6131fd91906144bd565b6132079083614048565b90506000806000603660149054906101000a900460ff161561334b5761322c88613987565b602054603654613248916001600160a01b039081169116613b7f565b603480546001600160a01b0319166001600160a01b039283169081179091556036546040516370a0823160e01b81529216916370a082319161328c91600401614087565b602060405180830381865afa1580156132a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cd9190614656565b6020546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613303921690600401614087565b602060405180830381865afa158015613320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133449190614656565b915061347c565b602054613368906001600160a01b03166133636123ed565b613b7f565b603480546001600160a01b0319166001600160a01b03929092169190911790556133906123ed565b6034546040516370a0823160e01b81526001600160a01b03928316926370a08231926133c192911690600401614087565b602060405180830381865afa1580156133de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134029190614656565b6020546034546040516370a0823160e01b81529295506001600160a01b03918216926370a0823192613438921690600401614087565b602060405180830381865afa158015613455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134799190614656565b91505b6034546001600160a01b03161580159061349f575060008311801561349f575081155b1561359e57866134af84876144a6565b6134b991906144bd565b60205460345460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb926134f192169085906004016144df565b6020604051808303816000875af1158015613510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353491906144f8565b50603460009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561358557600080fd5b505af1158015613599573d6000803e3d6000fd5b505050505b6020546135b3906001600160a01b0316613e2d565b50603654600160a01b900460ff1615613784576032546020546036546040516370a0823160e01b81526001600160a01b039384169363e8e337009381169216908d9082906370a082319061360b903090600401614087565b602060405180830381865afa158015613628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364c9190614656565b8e603660009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161368e9190614087565b602060405180830381865afa1580156136ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cf9190614656565b306136dc4261012c61405b565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1158015613758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377c91906146d5565b505050613845565b6032546020546001600160a01b039182169163f305d719918a911688888b306137af4261012c61405b565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af115801561381c573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061384191906146d5565b5050505b6035805460ff60a01b1916600160a01b179055603454603854613874916001600160a01b039081169116613ecd565b506038546034546031546040516370a0823160e01b81526001600160a01b0393841693638a4e6e569316919060399083906370a08231906138b9903090600401614087565b602060405180830381865afa1580156138d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fa9190614656565b6040518563ffffffff1660e01b81526004016139199493929190614703565b6020604051808303816000875af1158015613938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395c91906146a2565b603580546001600160a01b0319166001600160a01b0392909216919091179055505050505050505050565b603654600160a01b900460ff166139dc5760405162461bcd60e51b8152602060048201526019602482015278185b1d0818dd5c9c995b98de481b9bdd081cd95b1958dd1959603a1b6044820152606401610452565b604080516002808252606082018352600092602083019080368337019050509050613a056123ed565b81600081518110613a1857613a18614515565b6001600160a01b039283166020918202929092010152603654825191169082906001908110613a4957613a49614515565b6001600160a01b039283166020918202929092010152603654613a6c9116613e2d565b506032546036546001600160a01b0391821691637ff36ab5918591613a92911682611a9e565b8430613aa04261012c61405b565b6040518663ffffffff1660e01b8152600401613abf94939291906147d2565b60006040518083038185885af1158015613add573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052613b06919081019061454c565b506036546040516370a0823160e01b81526001600160a01b03909116906370a0823190613b37903090600401614087565b602060405180830381865afa158015613b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b789190614656565b6037555050565b6000806001600160a01b0316603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c0291906146a2565b6001600160a01b031663e6a4390585856040518363ffffffff1660e01b8152600401613c2f929190614807565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c7091906146a2565b6001600160a01b031614613d6a57603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf591906146a2565b6001600160a01b031663e6a4390584846040518363ffffffff1660e01b8152600401613d22929190614807565b602060405180830381865afa158015613d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6391906146a2565b9050611bbf565b603260009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613de191906146a2565b6001600160a01b031663c9c6539684846040518363ffffffff1660e01b8152600401613e0e929190614807565b6020604051808303816000875af1158015613d3f573d6000803e3d6000fd5b60325460405163095ea7b360e01b81526000917606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b916001600160a01b038581169263095ea7b392613e80929091169085906004016144df565b6020604051808303816000875af1158015613e9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec391906144f8565b5060019392505050565b60405163095ea7b360e01b81526000907606e8aff4357fd6c8924f7875b89f9cf5f554c3db737e95604d1b906001600160a01b0385169063095ea7b390613f1a90869085906004016144df565b6020604051808303816000875af1158015613f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1b91906144f8565b604051806101400160405280600a906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6020808252601e908201527f496e2077686974656c6973742064697361626c656420636f6f6c204f66660000604082015260600190565b60208082526019908201527855736572207573656420616e7974696d6520726566756e642160381b604082015260600190565b6020808252601490820152731d5cd95c881b9bdd081dda1a5d195b1a5cdd195960621b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611bbf57611bbf614032565b80820180821115611bbf57611bbf614032565b60006001820161408057614080614032565b5060010190565b6001600160a01b0391909116815260200190565b6000815180845260005b818110156140c1576020818501810151868301820152016140a5565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612ab4602083018461409b565b60006020828403121561410657600080fd5b5035919050565b6001600160a01b038116811461152857600080fd5b60006020828403121561413457600080fd5b8135612ab48161410d565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561417d5761417d61413f565b604052919050565b801515811461152857600080fd5b6000806000608084860312156141a857600080fd5b84601f8501126141b757600080fd5b604080519081016001600160401b03811182821017156141d9576141d961413f565b80604052508060408601878111156141f057600080fd5b865b818110156142135780356142058161410d565b8352602092830192016141f2565b5091945050359150606084013561422981614185565b809150509250925092565b6000806040838503121561424757600080fd5b82356142528161410d565b946020939093013593505050565b600081518084526020808501945080840160005b838110156142995781516001600160a01b031687529582019590820190600101614274565b509495945050505050565b602081526000612ab46020830184614260565b60006101e08286835b600a8110156142df5781518352602092830192909101906001016142c0565b50505061014083018560005b600481101561430c57815115158352602092830192909101906001016142eb565b505050806101c08401526143228184018561409b565b9695505050505050565b6000806080838503121561433f57600080fd5b83601f84011261434e57600080fd5b604051606081016001600160401b03811182821017156143705761437061413f565b60405280606085018681111561438557600080fd5b855b818110156143a857803561439a8161410d565b835260209283019201614387565b5091935050356143b781614185565b809150509250929050565b600080600080608085870312156143d857600080fd5b84356143e38161410d565b935060208501356143f38161410d565b925060408501359150606085013561440a81614185565b939692955090935050565b6020808252600c908201526b1a18d85c081b9bdd081cd95d60a21b604082015260600190565b600181811c9082168061444f57607f821691505b602082108103611ce457634e487b7160e01b600052602260045260246000fd5b6020808252601f908201527f696e69746961746f72206973206e6f742070726573616c65206f776e65722100604082015260600190565b8082028115828204841417611bbf57611bbf614032565b6000826144da57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03929092168252602082015260400190565b60006020828403121561450a57600080fd5b8151612ab481614185565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006145446040830184614260565b949350505050565b6000602080838503121561455f57600080fd5b82516001600160401b038082111561457657600080fd5b818501915085601f83011261458a57600080fd5b81518181111561459c5761459c61413f565b8060051b91506145ad848301614155565b81815291830184019184810190888411156145c757600080fd5b938501935b838510156145e5578451825293850193908501906145cc565b98975050505050505050565b6020808252601a90820152794c697175696469747920697320616464656420616c726561647960301b604082015260600190565b6020808252601790820152763737ba103a343290383932b9b0b6329031b932b0ba37b960491b604082015260600190565b60006020828403121561466857600080fd5b5051919050565b6020808252601990820152781c1c995cd85b1948185b1c9958591e48199a5b985b1a5e9959603a1b604082015260600190565b6000602082840312156146b457600080fd5b8151612ab48161410d565b634e487b7160e01b600052600160045260246000fd5b6000806000606084860312156146ea57600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03851681526020808201859052608060408301528354600091908290600181811c908281168061473b57607f831692505b858310810361475857634e487b7160e01b85526022600452602485fd5b6080880183905260a08801818015614777576001811461478d576147b8565b60ff198616825284151560051b820196506147b8565b60008c81526020902060005b868110156147b257815484820152908501908901614799565b83019750505b505050505050809250505082606083015295945050505050565b8481526080602082015260006147eb6080830186614260565b6001600160a01b03949094166040830152506060015292915050565b6001600160a01b039283168152911660208201526040019056fe6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b17681a2646970667358221220ff11f2133127d0f45941a98b9fe4884106f5cdce57ce661cc5a4f18544b2c34764736f6c63430008110033a2646970667358221220560d60f4bb97d0081d60eb043a7f4ef4fc71067139c4bcbad594955ade83b25164736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000300000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889400000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
-----Decoded View---------------
Arg [0] : _feeContract (address): 0x0FEbB541Ef3632925cD67DAf9e82CdC8Ec7a71ef
Arg [1] : _lpLockDeployer (address): 0xa27eA368c4198a288eb552D642B1E5aCc29912D4
Arg [2] : _altAssets (address[]): 0x29219dd400f2Bf60E5a23d13Be72B486D4038894,0x29219dd400f2Bf60E5a23d13Be72B486D4038894,0x29219dd400f2Bf60E5a23d13Be72B486D4038894
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000febb541ef3632925cd67daf9e82cdc8ec7a71ef
Arg [1] : 000000000000000000000000a27ea368c4198a288eb552d642b1e5acc29912d4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [4] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [5] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Arg [6] : 00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 100.00% | $1,772.94 | 0.00000000999 | $0.000018 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.