S Price: $0.606369 (-18.92%)

Contract

0x4e5b26aecE75D0ACd6D2434b2a78933B28DE9104

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy108229782025-02-28 19:18:423 days ago1740770322IN
0x4e5b26ae...B28DE9104
0 S0.1938049551.5

Latest 2 internal transactions

Parent Transaction Hash Block From To
108229782025-02-28 19:18:423 days ago1740770322
0x4e5b26ae...B28DE9104
 Contract Creation0 S
108066832025-02-28 17:40:093 days ago1740764409  Contract Creation0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeployyyyerFactory

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 800 runs

Other Settings:
paris EvmVersion
File 1 of 5 : DeployyyyerFactory.sol
// SPDX-License-Identifier: MIT
/*********************************************************************************************\
* Deployyyyer Memes: https://deployyyyer.fun
* Deployyyyer: https://deployyyyer.io
* Twitter: https://x.com/deployyyyer
* Telegram: https://t.me/Deployyyyer
/*********************************************************************************************/

pragma solidity ^0.8.23;

import {DeployyyyerToken} from "./DeployyyyerToken.sol";

interface IERC20 {
    function balanceOf(address owner) external view returns (uint);
    function transfer(address to, uint value) external returns (bool);

    
}

contract DeployyyyerFactory {
    address owner_;
    address taxWallet_;
    address teamFinanceLocker_;
    uint256 minLiq_;
    uint256 ethCost_;
    mapping(address => bool) validRouters_; 
    mapping(address => address) launchedTokens_; 
    event ContractDeployed(address owner, address childContract);
    
    struct ConstructorArgs {
        address owner;
        address taxwallet;
        address v2router;
        uint256 minLiq;
        address uniswapRouter;
        address sushiswapRouter;
        address pancakeswapRouter;
        address teamFinanceLocker;
    }
    struct TokParams {
        address owner;
        address token;
        bool isFree;
        bool isEthPaid; 
        uint256 cost;
        string name; 
        string symbol; 
        uint256 supply;
        address router;
    }
    struct TokParamsExtra {
        address token;
        address taxWallet;
        uint256 maxBuyTax;
        uint256 maxSellTax;
        uint256 minBuyTax;
        uint256 minSellTax;
        uint256 lpTax;
        uint256 initTaxType;
        uint256 initInterval;
        uint256 countInterval;

    }
    
    event TokenLaunched(TokParams params);
    event TokenLaunchedExtra(TokParamsExtra params);
    event FactoryBuilt(string name, string symbol, uint256 supply);


    constructor(ConstructorArgs memory _args) {
        owner_ = _args.owner;
        taxWallet_ = payable(_args.taxwallet);
        teamFinanceLocker_ = _args.teamFinanceLocker;
        validRouters_[_args.v2router] = true;
        validRouters_[_args.uniswapRouter] = true;
        validRouters_[_args.sushiswapRouter] = true;
        validRouters_[_args.pancakeswapRouter] = true;
        minLiq_ = _args.minLiq;
        emit FactoryBuilt("Deployyyyer", "DEPLOY", 0);
    }

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external {
        require(msg.sender == owner_);
        owner_ = _newOwner;
    }
    
    /// @notice Get the address of the owner
    /// @return _owner The address of the owner.
    function owner() external view returns (address _owner) {
        _owner = owner_;
    }

    function deploy(bytes32 _salt, DeployyyyerToken.InitParams memory params) public payable {
        require(msg.value == 0 || msg.value == ethCost_);
        require(params.owner == msg.sender, "1");
        require(params.minLiq == minLiq_, "2");
        require(params.teamFinanceLocker == teamFinanceLocker_, "3");
        require(params.maxBuyTax >= params.minBuyTax && params.maxBuyTax <= 40, "6");
        require(params.minBuyTax <= 6, "l");
        require(params.maxSellTax >= params.minSellTax && params.maxSellTax <= 40, "k");
        require(params.minSellTax <= 6, "j");
        require(params.initTaxType <= 3, "i");
        require(params.initInterval <= 7200, "h"); //2hours
        require(params.countInterval <= 100, "g");
        require(params.lpTax <= 50);
        require(params.maxWallet > 0 && params.maxWallet <= 10000, "f");
        require(params.maxTx > 0 && params.maxTx <= 10000, "e");

        require(params.supply >= 1*10**18 && params.supply <= 1000000000000000*10**18, "d");

        
        require(params.preventSwap <= 50, "c");
        require(params.maxSwap >= params.supply/100 && params.maxSwap <= params.supply*2/100, "b"); //atleast 1% max 2%
        
        require(params.taxSwapThreshold >= params.supply/1000000 && params.taxSwapThreshold <= params.supply/1000, "a"); 
        params.isFreeTier = true;
        if(msg.value > 0){
            params.isFreeTier = false;
        }

        //isEth = false;
        //atleast 0.0001% max 0.1%
        DeployyyyerToken newContract = new DeployyyyerToken{salt: _salt}(params);
        launchedTokens_[address(newContract)] = msg.sender; 
        emit ContractDeployed(msg.sender, address(newContract));

        TokParams memory tokparams = TokParams({cost:0, owner:msg.sender, isFree:params.isFreeTier, isEthPaid:!params.isFreeTier, name: params.name, symbol: params.symbol, supply: params.supply, token: address(newContract), router: address(0)});
        TokParamsExtra memory tokparamsx = TokParamsExtra({token: address(newContract), taxWallet: params.taxWallet, maxBuyTax: params.maxBuyTax, maxSellTax: params.maxSellTax, minBuyTax: params.minBuyTax, minSellTax: params.minSellTax, lpTax: params.lpTax, initTaxType: params.initTaxType, initInterval: params.initInterval, countInterval: params.countInterval});
        emit TokenLaunched(tokparams);
        emit TokenLaunchedExtra(tokparamsx);
    
    }

    /// @notice add/remove routers to be supported 
    /// @dev 
    function changeValidRouters(address router, bool isSupported) public {
        require(msg.sender == owner_);
        require(router != address(0));
        validRouters_[router] = isSupported;
    }

    /// @notice check if a router is valid
    /// @dev
    function isValidRouter(address router) external view returns (bool) {
        return(validRouters_[router]);
    }

    /// @notice check if a token is valid
    /// @dev
    function isValidToken(address token) external view returns (bool) {
        return(launchedTokens_[token] != address(0));
    }

    /// @notice get Deployyyyer details like cost, minimum liquidity and team.finance locker address 
    /// @dev
    function getLauncherDetails() public view returns (uint256, uint256, address) {
        return (ethCost_, minLiq_, teamFinanceLocker_);
    }

    function rescueERC20(address _address) external {
        require(IERC20(_address).transfer(owner_, IERC20(_address).balanceOf(address(this))), "x");
    }

    /// @notice rescues ETH from the contract 
    /// @dev sent to tax wallet
    function rescueEth() external {
    	require(address(this).balance > 0, "y");
    	//s.taxWallet.transfer(address(this).balance);
        (bool stax, ) = taxWallet_.call{value: address(this).balance}("");
        require(stax, "r");
    }

    function setMinLiq(uint256 minLiq) external {
        require(msg.sender == owner_);
        minLiq_ = minLiq;
    }

    /// @notice receive
    receive() external payable {}


}

File 2 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;


interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function transfer(address _to, uint256 _value) external returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 5 : IStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

interface IStaking {
    struct StakingParams {
            address owner;
            uint256 withdrawTimeout;
        }
    struct StakingDetails {
        uint256 claimable;
        uint256 withdrawable;
        uint256 unstakedAmount;
        uint256 totalRewards;
        uint256 timeToWithdraw;
        uint256 stakedAmount;
    }
    function transferOwnership(address _newOwner) external;
    function owner() external view returns (address);
    function rescueERC20(address _address) external;
    function stake(uint256 _amount) external;
    function unstake(uint256 _amount) external;
    function restake() external;
    function withdraw() external;
    function claimRewards() external;
    //function refreshPool() external;
    function getUserDetails(address) external view returns (StakingDetails memory);
}

File 4 of 5 : DeployyyyerToken.sol
// SPDX-License-Identifier: MIT
/*********************************************************************************************\
* Deployyyyer Memes: https://deployyyyer.fun
* Deployyyyer: https://deployyyyer.io
* Twitter: https://x.com/deployyyyer
* Telegram: https://t.me/Deployyyyer
/*********************************************************************************************/

pragma solidity ^0.8.23; 
import {IStaking} from "../interfaces/IStaking.sol";
import {StakingPool} from "./StakingPool.sol";

library SafeCall {
    /**
     * @notice Perform a low level call without copying any returndata
     *
     * @param _target   Address to call
     * @param _gas      Amount of gas to pass to the call
     * @param _value    Amount of value to pass to the call
     * @param _calldata Calldata to pass to the call
     */
    function call(
        address _target,
        uint256 _gas,
        uint256 _value,
        bytes memory _calldata
    ) internal returns (bool) {
        bool _success;
        assembly {
            _success := call(
                _gas, // gas
                _target, // recipient
                _value, // ether value
                add(_calldata, 0x20), // inloc
                mload(_calldata), // inlen
                0, // outloc
                0 // outlen
            )
        }
        return _success;
    }
}


interface IHelper {
	function isValidRouter(address router) external view returns (bool);
}


interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function transfer(address _to, uint256 _value) external returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed ownerAddress, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);

}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface ITeamFinanceLocker {
    function lockToken(
        address _tokenAddress,
        address _withdrawalAddress,
        uint256 _amount,
        uint256 _unlockTime,
        bool _mintNFT, 
        address referrer
    ) external payable returns (uint256 _id);
}


/// @title DeployyyyerToken 
/// @notice Contains methods related to ERC20
/// @dev 
contract DeployyyyerToken is IERC20 {
    address owner_; 
    uint256 minLiq;
    uint256 lockerId;
    address teamFinanceLocker;

    mapping(address => bool)  isExTxLimit; //is excluded from transaction limit
    mapping(address => bool)  isExWaLimit; //is excluded from wallet limit
    mapping (address => uint256)  balances; //ERC20 balance
    mapping (address => mapping (address => uint256))  allowances; //ERC20 balance

    address payable taxWallet; //tax wallet for the token
    address payable deployyyyerCa; //deployyyyer contract address

    
    // Reduction Rules
    uint256  buyCount; 

    uint256 initTaxType; //0-time,1-buyCount,2-hybrid,3-none
    //interval*1, lastIntEnd+(interval*2), lastIntEnd+(interval*3)
    uint256 initInterval; //seconds 0-1 hour(if 1m: 1m, 3m, 6m, 10m)
    uint256 countInterval; //0-100 

    //current taxes
    uint256  taxBuy; 
    uint256  maxBuyTax; //40%
    uint256  minBuyTax; //0

    uint256  taxSell; 
    uint256  maxSellTax; //40%
    uint256  minSellTax; //0

    uint256  tradingOpened;

    // Token Information
    uint8   decimals_;
    uint256   tTotal;
    string   name_;
    string   symbol_;

    // Contract Swap Rules 
    uint256 lastSwapBlock;
    uint256 preventSwap; //50            
    uint256  taxSwapThreshold; //0.1%
    uint256  maxTaxSwap; //1%
    uint256  maxWallet; //1%
    uint256  maxTx;

    IUniswapV2Router02  uniswapV2Router;
    address  uniswapV2Pair;
    
    bool  tradingOpen; //true if liquidity pool is created
    bool  inSwap;
    bool  walletLimited;
    bool isFreeTier;
    bool isBurnt;
    bool isRetrieved;
    uint256 lockPeriod_;
    uint256 stakingShare;
    address stakingContract;

    uint256 lastSwap;


    bool liquidityOpen;
    uint256 halfLp;
    uint256 lpTax;
    event TradingEnabled(address pair, uint256 liq, uint256 lockPeriod, bool isBurnt, address router);
	event TaxMade(uint256 amount);
    event TaxGiven(uint256 amount);
    event StakingMade(uint256 amount);
    event ExternalLocked(uint256 id, uint256 lockPeriod);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    event IncreasedLimits(uint256 maxWallet, uint256 maxTx);
    event LockUpdated(uint256 ldays);
    event LockRetrieved();
    event SocialsSet(string telegram, string twitter, string website);
    event LpBurnt();
    event StakingLaunched(address stakingPool, address owner, uint256 share);
    event StakingShareIncreased(uint256 share);
    event StakingArgs(IStaking.StakingParams params);

    struct InitParams {
        address owner;
        address taxWallet;
        address teamFinanceLocker;
        uint256 minLiq; 
        uint256 supply;
        uint256 initTaxType; //0-time,1-buyCount,2-hybrid
        uint256 initInterval; //seconds 0-1 hour(if 1m: 1m, 3m, 6m, 10m)
        uint256 countInterval; //0-100 
        uint256  maxBuyTax; //40%
        uint256  minBuyTax; //0
        uint256  maxSellTax; //40%
        uint256  minSellTax; //0
        uint256 lpTax;
        uint256 maxWallet;
        uint256 maxTx;
        uint256 preventSwap;
        uint256 maxSwap;
        uint256 taxSwapThreshold;
        string  name;
        string  symbol;
        bool isFreeTier;
    }


    struct LPDetails {
        address pair;
        uint256 buycount;
        uint256 taxBuy;
        uint256 taxSell;
        uint256 lockDays;
        bool isBurnt;
        uint256 tradingOpened;
        bool walletLimited;
        address stakingContract; //address(0) backward comp
        uint256 stakingShare; //external lock id here
        uint256 maxTx;
        uint256 maxWallet;
        address router;
        address presale; //address(0) backward comp
    }

    //reentrancy lock
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    /// @notice Constructor of Diamond Proxy for a launched token
    constructor(InitParams memory params) {
        owner_ = params.owner;
        emit OwnershipTransferred(address(0), owner_);
        teamFinanceLocker = params.teamFinanceLocker;
        // adding ERC165 data

        deployyyyerCa = payable(msg.sender);
 
        minLiq = params.minLiq;
        taxBuy = params.maxBuyTax; //20%
        maxBuyTax = params.maxBuyTax;
        minBuyTax = params.minBuyTax;

        taxSell = params.maxSellTax; //20%
        maxSellTax = params.maxSellTax;
        minSellTax = params.minSellTax;
        lpTax = params.lpTax;
        
        initTaxType = params.initTaxType;
        initInterval = params.initInterval;
        countInterval = params.countInterval;

        // Reduction Rules
        buyCount = 0; 
        isFreeTier = params.isFreeTier;
    

        // Token Information
        decimals_ = 18;

        taxWallet = payable(params.taxWallet);
        
        name_ = params.name;
        symbol_ = params.symbol;
        tTotal = params.supply;

        // Contract Swap Rules            
        taxSwapThreshold = params.taxSwapThreshold; //0.1%
        maxTaxSwap = params.maxSwap; //1%
        walletLimited = true;
        
        
        maxWallet = tTotal * params.maxWallet / 10000;  //1% (allow 1 - 100)
        maxTx = tTotal * params.maxTx / 10000;
        if (params.maxWallet == 10000 && params.maxTx == 10000) {
            walletLimited = false;
        }
        emit IncreasedLimits(params.maxWallet, params.maxTx);
        balances[address(this)] = tTotal;
        emit Transfer(address(0), address(this), tTotal);

        preventSwap = params.preventSwap;

    } 


    /// @notice Create liquidity pool and start trading for the token
    /// @dev
    function startTrading(uint256 lockPeriod, bool shouldBurn, address router) external payable  {
        require(msg.sender == owner_, "o");
        require(!tradingOpen, "1");
        require(address(this).balance >= minLiq, "2");
        if(!shouldBurn) {
            require(lockPeriod >= 14);
        } 
        
        tradingOpen = true;

        uint256 maxTxTemp = maxTx;
        uint256 maxWalletTemp = maxWallet;
        bool walletLimitedTemp = walletLimited;
        
        if(walletLimited == true) {
            maxTx = tTotal;
            maxWallet = tTotal;
            walletLimited = false;
        }
        

        isExTxLimit[address(this)] = true;
        isExTxLimit[owner_] = true;
        isExTxLimit[address(0x000000000000000000000000000000000000dEaD)] = true;

        isExWaLimit[address(this)] = true;
        isExWaLimit[owner_] = true;
        isExWaLimit[address(0x000000000000000000000000000000000000dEaD)] = true;
        
        //0x000000000000000000000000000000000000dEaD or address(0)
        address liqOwner = address(this);
        if(shouldBurn) {
            liqOwner = address(0);
            isBurnt = true;
        } else {
            lockPeriod_ = lockPeriod;
            isBurnt = false;
        }

        uint256 liqBalance = balances[address(this)];
        tradingOpened = block.timestamp;
        
        require(IHelper(deployyyyerCa).isValidRouter(router));
        uniswapV2Router = IUniswapV2Router02(router);
        allowances[address(this)][address(uniswapV2Router)] = tTotal;
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        isExWaLimit[address(uniswapV2Pair)] = true;
        isExTxLimit[address(uniswapV2Pair)] = true;
        isExTxLimit[address(uniswapV2Router)] = true;
        isExWaLimit[address(uniswapV2Router)] = true;
        
        
        emit TradingEnabled(uniswapV2Pair, address(this).balance, lockPeriod_, shouldBurn, address(uniswapV2Router));
        require(IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max), "3");
        
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),liqBalance,0,0,liqOwner,block.timestamp+60);
        liquidityOpen = true;
        
        if(walletLimitedTemp == true) {
            maxTx = maxTxTemp;
            maxWallet = maxWalletTemp;
            walletLimited = true;
        }

    }
    /*
    function lockOnTeamFinance(uint256 lps, bool ref) external payable  {
        require(msg.sender ==  owner_ && isBurnt == false && isRetrieved == false && tradingOpen == true && lps >= 3600 * 24 * 14, "o");
        //require(isBurnt == false && isRetrieved == false && tradingOpen == true, "lt");
        //require(lps >= 3600 * 24 * 14, "ls");
        uint256 lpBalance = IERC20(uniswapV2Pair).balanceOf(address(this));
        IERC20(uniswapV2Pair).approve(teamFinanceLocker, lpBalance);
        lockerId = ITeamFinanceLocker(teamFinanceLocker).lockToken{value: msg.value}(uniswapV2Pair, msg.sender, lpBalance, block.timestamp + lps, false, ref?address(deployyyyerCa):address(0));
        isRetrieved = true;
        emit ExternalLocked(lockerId, lps);
        //emit ExternalLocked(lockPeriodSec);
    }
    */

    /// @notice Burn the liquidity pool tokens of the token
    function burnLP() external  {
        require(msg.sender == owner_, "o");
        require(!isBurnt && !isRetrieved && tradingOpen, "a"); 
        isBurnt = true;
        emit LpBurnt();
        require(IERC20(uniswapV2Pair).transfer(address(0x000000000000000000000000000000000000dEaD), IERC20(   uniswapV2Pair).balanceOf(address(this))), "o2");        
    }

    /// @notice Get lp lock period remaining
    /// @return lpldays lock days remaining 
    function getLockleft() private view returns (uint256) {
        if(!tradingOpen) {
            return 0;
        }
        //time traversed in days
        uint256 tt = ((block.timestamp - tradingOpened)/86400);
        if (tt > lockPeriod_) {
            return 0;
        } else {
            return lockPeriod_ - tt;
        }

    }
    
    /// @notice Extend LP lock
    /// @dev should not be already retrieved or burnt
    /// @param ldays no of days to extend
    function extendLock(uint256 ldays) external  {
        require(msg.sender == owner_, "o");
        require(!isRetrieved && !isBurnt && tradingOpen, "a");
        //expired lock 
        if((tradingOpened + (lockPeriod_*86400)) < block.timestamp) {
            lockPeriod_ = (block.timestamp - tradingOpened)/86400;
        }
        lockPeriod_ += ldays; 
        emit LockUpdated(lockPeriod_);
        
    }
    
    /// @notice Retrieve LP tokens
    /// @dev should not be already retrieved or burnt
    function retrieveLock() external  {
        require(msg.sender == owner_, "o");
        require(!isRetrieved && !isBurnt && tradingOpen, "a");
        if((tradingOpened + (lockPeriod_*60*60*24)) < block.timestamp) {
            isRetrieved = true;
            
            uint256 bal = IERC20(uniswapV2Pair).balanceOf(address(this));
            emit LockRetrieved();
            require(IERC20(uniswapV2Pair).transfer(msg.sender, bal), "b");
            
        }
    }

    function increaseLimits(uint256 maxwallet, uint256 maxtx) external {
        require(msg.sender ==  owner_ && walletLimited, "o");
        //require(walletLimited);
        require(tTotal * maxwallet / 10000 >= maxWallet && maxwallet <= 10000, "a");
        require(tTotal * maxtx / 10000 >= maxTx && maxtx <= 10000, "b");
        maxWallet = tTotal * maxwallet / 10000;   
        maxTx = tTotal * maxtx / 10000;
        
        if (maxwallet == 10000 && maxtx == 10000) {
            walletLimited = false;
        }

        emit IncreasedLimits(maxwallet, maxtx);
    }

    ///@dev Returns the name of the token.
    function name() external view override returns (string memory) {
        return name_;
    }

    ///@dev Returns the symbol of the token, usually a shorter version of name.
    function symbol() external view override returns (string memory) {
        return symbol_;
    }

    ///@dev Returns the number of decimals used to get its user representation.
    function decimals() external view override returns (uint8) {
        return decimals_;
    }

    ///@dev Returns the value of tokens in existence.
    function totalSupply() public view override returns (uint256) {
        return tTotal;
    }

    ///@dev Returns the value of tokens owned by account.
    function balanceOf(address account) public view override returns (uint256) {
        return balances[account];
    }

    ///@dev Moves a amount of tokens from the caller's account to receipient.
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    ///@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
    function allowance(address owner, address spender) external view override returns (uint256) {
        return allowances[owner][spender];
    }

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's token   
     *
     * 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 override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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) public override returns (bool) {
        require(amount <= allowances[sender][msg.sender], "25");
        _approve(sender, msg.sender,allowances[sender][msg.sender] - amount);
        _transfer(sender, recipient, amount);
        return true;
    }
    
    function _approve(address _owner, address _spender, uint256 _amount) private {
        require(_owner != address(0));
        require(_spender != address(0));
        allowances[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
    }

    /// @notice sets tax for the trade
    /// @dev 
    function _setTax(bool isBuy) private {
        uint256 maxTax;
        uint256 minTax;
        uint256 tax;
        if(isBuy) {
            maxTax = maxBuyTax;
            minTax = minBuyTax;
            tax = taxBuy;
        } else {
            maxTax = maxSellTax;
            minTax = minSellTax;
            tax = taxSell;
        }

        if(tax != minTax) {
            if(initTaxType == 0) {
                if (block.timestamp >= (tradingOpened + (initInterval))) {
                    tax = minTax; 
                }
                else if (block.timestamp >= (tradingOpened + (initInterval/2))) {
                    tax = minTax + (maxTax - minTax)/4;
                }
                else if (block.timestamp >= (tradingOpened + (initInterval/4))) {
                    tax = minTax + ((maxTax - minTax)/2);
                }
                else {       
                    tax = maxTax; 
                }        
                  
            } else if(initTaxType == 1) {
                if (buyCount > (countInterval)) {
                    tax = minTax; 
                } else {       
                    tax = maxTax; 
                } 
                //this is forced after 2hrs
                if(block.timestamp >= (tradingOpened + 7200)) {
                    tax = minTax;
                }      

            } else if(initTaxType == 2){
                if (buyCount > (countInterval) || block.timestamp >= (tradingOpened + (initInterval))) {
                    tax = minTax; 
                }
                else if (buyCount > (countInterval/2) || block.timestamp >= (tradingOpened + (initInterval/2))) {
                    tax = minTax + (maxTax - minTax)/4;
                }
                else if (buyCount > (countInterval/4) || block.timestamp >= (tradingOpened + (initInterval/4))) {
                    tax = minTax + ((maxTax - minTax)/2);
                }
                else {       
                    tax = maxTax; 
                }        
            // } else if(   initTaxType == 3) { //check block number}        
                
            } else {
                tax = minTax; 
            }

            if(isBuy) {
                   taxBuy = tax;
            } else {
                   taxSell = tax;
            }
        }

    }

    /// @notice internal method of transfer
    /// @dev 
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0) && to != address(0));
        //require(to != address(0));
        //require(amount > 0); //compliance erc20
        require(balances[from] >= amount, "66");
        uint256 taxAmount=0;
        
        if (tradingOpen &&  walletLimited && !isExTxLimit[from] && !isExTxLimit[to])
            require(maxTx >= amount, "30");
        if (tradingOpen && walletLimited && !isExWaLimit[to])
            require((balances[to] + amount) <= maxWallet, "31");
         
        if (from != owner_ && to != owner_ && liquidityOpen == true) {
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
            	//buy from uniswap, only if amount > 0
                buyCount++;
                _setTax(true);

            	taxAmount = amount * taxBuy / 100;
                //console.log("_setTaxDone");
                
                
            }
            if(to == uniswapV2Pair && from!= address(this)) {
            	//sell from uniswap
                _setTax(false);
                taxAmount = amount * taxSell / 100;    
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapped = false;
        if (!inSwap && to == uniswapV2Pair && from!= address(this) && contractTokenBalance > 0 && buyCount > preventSwap) {
            //we swap only on sell to uniswap pool
            if(contractTokenBalance > taxSwapThreshold || ((block.timestamp - tradingOpened) > (86400) && minBuyTax == 0 && minSellTax == 0)) {
                if(block.number > lastSwapBlock) {
                    if(contractTokenBalance < maxTaxSwap) {
                        swapTokensForEth(contractTokenBalance);
                    }
                    else {
                        swapTokensForEth(maxTaxSwap);
                    }
                    sendETHToFee(address(this).balance);
                    swapped = true;
                    lastSwapBlock = block.number;
                }
            }
        }

        if(taxAmount > 0) {
            balances[address(this)] = balances[address(this)] + (taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }

        //from can be taxWallet
        balances[from] = balances[from] - amount;
        balances[to] = balances[to] + amount - taxAmount;
        emit Transfer(from, to, amount - taxAmount);
        
        if(swapped) {
            //everything else is taken care, anything left is for token's tax wallet
            //this call needs to be safe from reverts, consuming all gas and return bombs
            bool ttax = SafeCall.call(taxWallet, 100000, address(this).balance, "");
            if(ttax)
                emit TaxMade(address(this).balance);
        }

    }

    /// @notice swaps tokens from tax into eth
    /// @dev this is nonrentrant using lockTheSwap
    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(lpTax > 0) { 
            halfLp = tokenAmount * lpTax / 200;  
            tokenAmount -= halfLp; 
            lastSwap = tokenAmount;
        }

        _approve(address(this), address(uniswapV2Router), tokenAmount);
           uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    /// @notice sends the eth to respective tax wallets 
    /// @dev 
    function sendETHToFee(uint256 amount) private {  
        uint256 da = 0;
        uint256 ethLpShare = 0;
        uint256 spshare = 0;
        uint256 halfLpTemp;
        //s.isFreeTier && 
        if(isFreeTier == true && ((block.timestamp - tradingOpened) < (86400*90))) {     
            da = amount * 10 / 100;
            emit TaxGiven(da);
            (bool stax, ) =  deployyyyerCa.call{value: da}("");
            require(stax, "99");
        }
        if(lpTax > 0 && halfLp > 0) {
            //newly added liquidity is also locked
            //address liqOwner = address(this);
            
            //we should also be keeping half of lp in tokens, so that u add equal amount of eth and token to lp
            ethLpShare = halfLp * amount / lastSwap;
            halfLpTemp = halfLp;
            halfLp = 0;
            lastSwap = 0;
            _approve(address(this), address(uniswapV2Router), halfLpTemp);
            uniswapV2Router.addLiquidityETH{ value: ethLpShare }(
                address(this),
                halfLpTemp,
                0,
                0,
                address(this),
                block.timestamp + 60
            );

            
        }
        if(stakingContract != address(0)) {
            spshare = (amount - da - ethLpShare) * stakingShare / 100;
            //stakingContract is safe since its our own! 
            (bool sent, ) = stakingContract.call{value: spshare}("");
            require(sent, "s9");
            emit StakingMade(spshare);
        }
    }

    /// @notice recovers eth to tax wallet if any
    /// @dev 
    function recoverEth() private {
        //blocked while trading is disabled
        if(!inSwap && tradingOpen) { 
            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToFee(contractETHBalance);
                (bool ttax, ) = taxWallet.call{value: address(this).balance}("");
                if(ttax)
                    emit TaxMade(address(this).balance);
            }
        }

    }

    /// @notice rescues any erc20 tokens sent to contract, also recovers eth to tax wallet if any
    /// @dev trying to rescue own token or own lp tokens will revert
    function rescueERC20(address _address) external {
        //block pulling out lp
        require(_address != uniswapV2Pair); 
        require(_address != address(this));
        
        require(IERC20(_address).transfer(taxWallet, IERC20(_address).balanceOf(address(this))), "r");
        recoverEth();
    }
    
    /// @notice Set the address of the new owner of the contract
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external {
        require(msg.sender == owner_, "o");
        emit OwnershipTransferred(owner_, _newOwner);
        //isExTxLimit[owner_] = false;
        //isExWaLimit[owner_] = false;
        owner_ = _newOwner;
        isExTxLimit[owner_] = true;
        isExWaLimit[owner_] = true;
        
    }
    
    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() public view returns (address) {
        //address _owner = owner_;
        return owner_;
    }
    

    /// @notice Get liquidity pool details of the token
    /// @return IOwnership.LPDetails
    /// @dev 
    function getLPDetails() external view returns (LPDetails memory) {
        return LPDetails(uniswapV2Pair, buyCount, taxBuy, taxSell, getLockleft(), isBurnt, tradingOpened, walletLimited, stakingContract, stakingShare, maxTx, maxWallet, address(uniswapV2Router), address(0));
    }


    /// @notice increase revenue share to staking pool for the token
    /// @dev 
    function increaseStakingShare(uint256 share) external {
        require(msg.sender == owner_ && stakingShare > 0 && share > 0, "o");
        //staking pool is live
        //require(stakingShare > 0 && share > 0);
        stakingShare += share;
        require(stakingShare <= 100, "os");
        emit StakingShareIncreased(stakingShare);
    }

    /// @notice launch staking pool for the token
    /// @dev 
    function launchStaking(uint256 share, IStaking.StakingParams memory params) external {
        require(msg.sender == owner_, "o");
        require(stakingShare == 0 && share > 0 && share <= 100, "y");
        //require(stakingShare == 0, "o12");
        require(params.withdrawTimeout >= 2 days && params.withdrawTimeout < 10 days, "z");
        stakingShare = share;
        params.owner = msg.sender;
        
        StakingPool stakingPool = new StakingPool(params);
        isExTxLimit[address(stakingPool)] = true;
        isExWaLimit[address(stakingPool)] = true;
        emit StakingLaunched(address(stakingPool), msg.sender, stakingShare);
        emit StakingArgs(params);
        stakingContract = payable(address(stakingPool));

    }
    
    /// @notice receive eth
    receive() external payable {}

}

File 5 of 5 : StakingPool.sol
// SPDX-License-Identifier: MIT
/*********************************************************************************************\
* Deployyyyer Memes: https://deployyyyer.fun
* Deployyyyer: https://deployyyyer.io
* Twitter: https://x.com/deployyyyer
* Telegram: https://t.me/Deployyyyer
/*********************************************************************************************/

pragma solidity ^0.8.23;

import "../interfaces/IStaking.sol";
import { IERC20 } from "../interfaces/IERC20.sol"; 

struct AppStorageStaking {
    address token;
    address owner;
    uint256 accRewardsPrecision;
    uint256 totalStakedAmount;
    uint256 withdrawTimeout;
    uint256 unallocatedETH;
    uint256 accRewardsPerShare;
    uint256 totalETHCollected;
    mapping(address => uint256) totalRewards;
    mapping(address => uint256) rewardDebt;
    mapping(address => uint256) stakedAmount;
    mapping(address => uint256) claimedAmount;
    mapping(address => uint256) claimableRewards;
    mapping(address => uint256) lastUnstakeTime;
    mapping(address => uint256) unstakedAmount;

}

contract Modifiers {
    AppStorageStaking internal s;
}
/// @title StakingPool
/// @dev 
contract StakingPool is IStaking, Modifiers {
    event Stake(address indexed user, uint256 amount);
    event Unstake(address indexed user, uint256 amount);
    event Withdraw(address indexed user, uint256 amount);
    event ClaimRewards(address indexed user, uint256 amount);
    event RewardsReceived(address indexed sender, uint256 amount, uint256 accRewardsPerShare);
    //event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(IStaking.StakingParams memory params) {
        require(params.owner != address(0));
        s.owner = params.owner;
        //init appStorage 
        s.accRewardsPrecision = 1e18;  
        s.token = msg.sender;
        s.withdrawTimeout = params.withdrawTimeout;

    } 

    //tracking ownership in subgraph is not needed here, since ownership is unimportant
    /// @notice transfer ownership
    /// @dev
    function transferOwnership(address _newOwner) external override {
        require(msg.sender == s.owner);
        s.owner =  _newOwner;
    }
    
    /// @notice return owner address
    /// @dev
    function owner() external override view returns (address owner_) {
        owner_ = s.owner;
    }

    /// @notice rescue erc20 tokens from the contract
    /// @dev
    function rescueERC20(address _address) external {
        //only use of owner: as the rescue wallet! 
        bool ret = IERC20(_address).transfer(s.owner, IERC20(_address).balanceOf(address(this)));
        require(ret, "1");
    }

    /// @notice stake tokens
    /// @dev
    function stake(uint256 _amount) external override {
        uint256 pending = 0;
        require(_amount > 0);
        if (s.stakedAmount[msg.sender] > 0) {
            pending = ((s.stakedAmount[msg.sender] * s.accRewardsPerShare) / s.accRewardsPrecision) - s.rewardDebt[msg.sender];
        }

        uint256 unstakedAmount = s.unstakedAmount[msg.sender];
        if (unstakedAmount >= _amount) {
            s.unstakedAmount[msg.sender] -= _amount;
        } else {
            uint256 tokensNeeded = _amount - unstakedAmount;
            s.unstakedAmount[msg.sender] = 0;
            //requires staking contract to be approved by user
        	require(IERC20(s.token).transferFrom(msg.sender, address(this), tokensNeeded), "2");
        }
        
        s.stakedAmount[msg.sender] += _amount;
        s.rewardDebt[msg.sender] = s.stakedAmount[msg.sender] * s.accRewardsPerShare / s.accRewardsPrecision; 
        s.totalStakedAmount += _amount;

        if(pending > 0) {
            s.claimableRewards[msg.sender] += pending;
        }
        
        emit Stake(msg.sender, _amount);
    }

    /// @notice unstake staked tokens
    /// @dev
    function unstake(uint256 _amount) external override {
        require(_amount > 0 && s.stakedAmount[msg.sender] >= _amount, "3"); 
        uint256 pending = ((s.stakedAmount[msg.sender] * s.accRewardsPerShare) / s.accRewardsPrecision) - s.rewardDebt[msg.sender];
        s.stakedAmount[msg.sender] -= _amount;
        s.lastUnstakeTime[msg.sender] = block.timestamp;
        s.unstakedAmount[msg.sender] += _amount;

        s.rewardDebt[msg.sender] = s.stakedAmount[msg.sender] * s.accRewardsPerShare / s.accRewardsPrecision;
        s.totalStakedAmount -= _amount;

        if(pending > 0) {
            s.claimableRewards[msg.sender] += pending;
        }

        emit Unstake(msg.sender, _amount);
    }

    /// @notice restake unstaked tokens
    /// @dev
    function restake() external override {
        uint256 pending = 0;
        uint256 amountToRestake = s.unstakedAmount[msg.sender];
        require(amountToRestake > 0, "4"); 
        //allocateRewards();
        if (s.stakedAmount[msg.sender] > 0) {
            pending = ((s.stakedAmount[msg.sender] * s.accRewardsPerShare) / s.accRewardsPrecision) - s.rewardDebt[msg.sender];
        }

        s.unstakedAmount[msg.sender] = 0;
        s.stakedAmount[msg.sender] += amountToRestake;
        s.rewardDebt[msg.sender] = s.stakedAmount[msg.sender] * s.accRewardsPerShare / s.accRewardsPrecision;
        s.totalStakedAmount += amountToRestake;

        if(pending > 0) {
            s.claimableRewards[msg.sender] += pending;
        }
        emit Stake(msg.sender, amountToRestake);
    }

    /// @notice withdraw unstaked tokens
    /// @dev
    function withdraw() external override {
        uint256 toWithdraw = s.unstakedAmount[msg.sender];
        require(toWithdraw > 0, "5");
        require(block.timestamp >= s.lastUnstakeTime[msg.sender] + s.withdrawTimeout, "6");
        s.unstakedAmount[msg.sender] = 0;
        emit Withdraw(msg.sender, toWithdraw);
        require(IERC20(s.token).transfer(msg.sender, toWithdraw), "7");
        
    }

    /// @notice claim rewards in eth
    /// @dev
    function claimRewards() external override {
        s.claimableRewards[msg.sender] += ((s.stakedAmount[msg.sender] * s.accRewardsPerShare) / s.accRewardsPrecision) - s.rewardDebt[msg.sender];
        uint256 claimable = s.claimableRewards[msg.sender];
        require(claimable > 0, "8");
        s.rewardDebt[msg.sender] = s.stakedAmount[msg.sender] * s.accRewardsPerShare / s.accRewardsPrecision;
        uint256 amount = address(this).balance > claimable ? claimable : address(this).balance;
        s.claimableRewards[msg.sender] -= amount;
        s.claimedAmount[msg.sender] += amount; 
        emit ClaimRewards(msg.sender, amount);
        (bool sent,) = payable(msg.sender).call{value: amount}("");
        require(sent, "9");
        
    }
    
    /// @notice get details related to the user
    /// @dev
    function getUserDetails(address _user) external view returns (IStaking.StakingDetails memory) {
    	uint256 withdrawable = 0;
    	uint256 timeToWithdraw = 0;
    	uint256 claimable = s.claimableRewards[_user] + ((s.stakedAmount[_user] * s.accRewardsPerShare) / s.accRewardsPrecision) - s.rewardDebt[_user];
    	
    	if (block.timestamp >= s.lastUnstakeTime[_user] + s.withdrawTimeout) {
            withdrawable = s.unstakedAmount[_user];
        } else {
        	timeToWithdraw = block.timestamp - s.lastUnstakeTime[_user] + s.withdrawTimeout;
        }

        return IStaking.StakingDetails(claimable, withdrawable, s.unstakedAmount[_user], s.totalRewards[_user], timeToWithdraw, s.stakedAmount[_user]);
    }

    /// @notice receive
    /// @dev staing rewards in eth, sets accRewardsPerShare
    receive() external payable {
        uint256 amount = msg.value;
        require(amount > 0, "r");
        s.totalRewards[msg.sender] += amount;
        s.totalETHCollected += amount;
        if (s.totalStakedAmount == 0) {
            s.unallocatedETH += amount;
        } else {
            s.accRewardsPerShare += ((amount+s.unallocatedETH) * s.accRewardsPrecision) / s.totalStakedAmount;  
            s.unallocatedETH = 0;         
        }
        emit RewardsReceived(msg.sender, amount, s.accRewardsPerShare);
    }

}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"taxwallet","type":"address"},{"internalType":"address","name":"v2router","type":"address"},{"internalType":"uint256","name":"minLiq","type":"uint256"},{"internalType":"address","name":"uniswapRouter","type":"address"},{"internalType":"address","name":"sushiswapRouter","type":"address"},{"internalType":"address","name":"pancakeswapRouter","type":"address"},{"internalType":"address","name":"teamFinanceLocker","type":"address"}],"internalType":"struct DeployyyyerFactory.ConstructorArgs","name":"_args","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"childContract","type":"address"}],"name":"ContractDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"FactoryBuilt","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"isFree","type":"bool"},{"internalType":"bool","name":"isEthPaid","type":"bool"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"address","name":"router","type":"address"}],"indexed":false,"internalType":"struct DeployyyyerFactory.TokParams","name":"params","type":"tuple"}],"name":"TokenLaunched","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"taxWallet","type":"address"},{"internalType":"uint256","name":"maxBuyTax","type":"uint256"},{"internalType":"uint256","name":"maxSellTax","type":"uint256"},{"internalType":"uint256","name":"minBuyTax","type":"uint256"},{"internalType":"uint256","name":"minSellTax","type":"uint256"},{"internalType":"uint256","name":"lpTax","type":"uint256"},{"internalType":"uint256","name":"initTaxType","type":"uint256"},{"internalType":"uint256","name":"initInterval","type":"uint256"},{"internalType":"uint256","name":"countInterval","type":"uint256"}],"indexed":false,"internalType":"struct DeployyyyerFactory.TokParamsExtra","name":"params","type":"tuple"}],"name":"TokenLaunchedExtra","type":"event"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"bool","name":"isSupported","type":"bool"}],"name":"changeValidRouters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"taxWallet","type":"address"},{"internalType":"address","name":"teamFinanceLocker","type":"address"},{"internalType":"uint256","name":"minLiq","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"initTaxType","type":"uint256"},{"internalType":"uint256","name":"initInterval","type":"uint256"},{"internalType":"uint256","name":"countInterval","type":"uint256"},{"internalType":"uint256","name":"maxBuyTax","type":"uint256"},{"internalType":"uint256","name":"minBuyTax","type":"uint256"},{"internalType":"uint256","name":"maxSellTax","type":"uint256"},{"internalType":"uint256","name":"minSellTax","type":"uint256"},{"internalType":"uint256","name":"lpTax","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxTx","type":"uint256"},{"internalType":"uint256","name":"preventSwap","type":"uint256"},{"internalType":"uint256","name":"maxSwap","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bool","name":"isFreeTier","type":"bool"}],"internalType":"struct DeployyyyerToken.InitParams","name":"params","type":"tuple"}],"name":"deploy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getLauncherDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isValidRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isValidToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minLiq","type":"uint256"}],"name":"setMinLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051615a7d380380615a7d83398101604081905261002f9161017d565b8051600080546001600160a01b039283166001600160a01b03199182161782556020808501516001805491861691841691909117815560e0860151600280549187169190941617909255604080860151851684526005909152808320805460ff199081168417909155608086015185168452818420805482168417905560a086015185168452818420805482168417905560c086015190941683528083208054909416909117909255606083015160035590517fe28fd1bead94852c1ee968d92f0d870ec63780bcdd79d68c7d990619ab42210c91610153916060808252600b908201526a2232b83637bcbcbcbcb2b960a91b608082015260a060208201819052600690820152654445504c4f5960d01b60c0820152604081019190915260e00190565b60405180910390a150610248565b80516001600160a01b038116811461017857600080fd5b919050565b600061010080838503121561019157600080fd5b604051908101906001600160401b03821181831017156101c157634e487b7160e01b600052604160045260246000fd5b816040526101ce84610161565b81526101dc60208501610161565b60208201526101ed60408501610161565b60408201526060840151606082015261020860808501610161565b608082015261021960a08501610161565b60a082015261022a60c08501610161565b60c082015261023b60e08501610161565b60e0820152949350505050565b615826806102576000396000f3fe6080604052600436106100b55760003560e01c8063c187645311610069578063ce31a06b1161004e578063ce31a06b14610201578063f2fde38b14610216578063f39bb7d21461023657600080fd5b8063c1876453146101a6578063ccec3716146101e157600080fd5b80638da5cb5b1161009a5780638da5cb5b14610115578063a99266471461013d578063b9efb9bf1461018657600080fd5b8063353a9e71146100c15780636bb185d81461010057600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506004546003546002546040805193845260208401929092526001600160a01b0316908201526060015b60405180910390f35b61011361010e366004610d06565b610256565b005b34801561012157600080fd5b506000546040516001600160a01b0390911681526020016100f7565b34801561014957600080fd5b50610176610158366004610e8f565b6001600160a01b031660009081526005602052604090205460ff1690565b60405190151581526020016100f7565b34801561019257600080fd5b506101136101a1366004610eb1565b610954565b3480156101b257600080fd5b506101766101c1366004610e8f565b6001600160a01b0390811660009081526006602052604090205416151590565b3480156101ed57600080fd5b506101136101fc366004610e8f565b610970565b34801561020d57600080fd5b50610113610aa1565b34801561022257600080fd5b50610113610231366004610e8f565b610b5c565b34801561024257600080fd5b50610113610251366004610eca565b610ba2565b341580610264575060045434145b61026d57600080fd5b80516001600160a01b031633146102af5760405162461bcd60e51b81526020600482015260016024820152603160f81b60448201526064015b60405180910390fd5b6003548160600151146102e85760405162461bcd60e51b81526020600482015260016024820152601960f91b60448201526064016102a6565b60025460408201516001600160a01b0390811691161461032e5760405162461bcd60e51b81526020600482015260016024820152603360f81b60448201526064016102a6565b8061012001518161010001511015801561034e5750602881610100015111155b61037e5760405162461bcd60e51b81526020600482015260016024820152601b60f91b60448201526064016102a6565b600681610120015111156103b85760405162461bcd60e51b81526020600482015260016024820152601b60fa1b60448201526064016102a6565b806101600151816101400151101580156103d85750602881610140015111155b6104085760405162461bcd60e51b81526020600482015260016024820152606b60f81b60448201526064016102a6565b600681610160015111156104425760405162461bcd60e51b81526020600482015260016024820152603560f91b60448201526064016102a6565b60038160a00151111561047b5760405162461bcd60e51b81526020600482015260016024820152606960f81b60448201526064016102a6565b611c208160c0015111156104b55760405162461bcd60e51b81526020600482015260016024820152600d60fb1b60448201526064016102a6565b60648160e0015111156104ee5760405162461bcd60e51b81526020600482015260016024820152606760f81b60448201526064016102a6565b6032816101800151111561050157600080fd5b6000816101a0015111801561051d5750612710816101a0015111155b61054d5760405162461bcd60e51b81526020600482015260016024820152603360f91b60448201526064016102a6565b6000816101c001511180156105695750612710816101c0015111155b6105995760405162461bcd60e51b81526020600482015260016024820152606560f81b60448201526064016102a6565b670de0b6b3a76400008160800151101580156105c757506d314dc6448d9338c15b0a00000000816080015111155b6105f75760405162461bcd60e51b81526020600482015260016024820152601960fa1b60448201526064016102a6565b6032816101e0015111156106315760405162461bcd60e51b81526020600482015260016024820152606360f81b60448201526064016102a6565b606481608001516106429190610f01565b8161020001511015801561067757506064816080015160026106649190610f23565b61066e9190610f01565b81610200015111155b6106a75760405162461bcd60e51b81526020600482015260016024820152603160f91b60448201526064016102a6565b620f424081608001516106ba9190610f01565b816102200151101580156106e457506103e881608001516106db9190610f01565b81610220015111155b6107145760405162461bcd60e51b81526020600482015260016024820152606160f81b60448201526064016102a6565b6001610280820152341561072b5760006102808201525b6000828260405161073b90610bf7565b6107459190610f94565b8190604051809103906000f5905080158015610765573d6000803e3d6000fd5b506001600160a01b038116600081815260066020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916339081179091558251908152908101929092529192507f33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688910160405180910390a16000604051806101200160405280336001600160a01b03168152602001836001600160a01b0316815260200184610280015115158152602001846102800151151515815260200160008152602001846102400151815260200184610260015181526020018460800151815260200160006001600160a01b031681525090506000604051806101400160405280846001600160a01b0316815260200185602001516001600160a01b03168152602001856101000151815260200185610140015181526020018561012001518152602001856101600151815260200185610180015181526020018560a0015181526020018560c0015181526020018560e0015181525090507f05801121ffc1080c74d11ce5f437ed5f77b1014c00f7e1b8bb6cd899ad1f95048260405161090e91906110f9565b60405180910390a17f6789ae7431eb646c5e4f10cf3a38e4597b460ba0bc7629611376bbb0b4491a6c8160405161094591906111b9565b60405180910390a15050505050565b6000546001600160a01b0316331461096b57600080fd5b600355565b6000546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611240565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e9190611259565b610a9e5760405162461bcd60e51b81526020600482015260016024820152600f60fb1b60448201526064016102a6565b50565b60004711610ad55760405162461bcd60e51b81526020600482015260016024820152607960f81b60448201526064016102a6565b6001546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b22576040519150601f19603f3d011682016040523d82523d6000602084013e610b27565b606091505b5050905080610a9e5760405162461bcd60e51b81526020600482015260016024820152603960f91b60448201526064016102a6565b6000546001600160a01b03163314610b7357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bb957600080fd5b6001600160a01b038216610bcc57600080fd5b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61457a8061127783390190565b634e487b7160e01b600052604160045260246000fd5b6040516102a0810167ffffffffffffffff81118282101715610c3e57610c3e610c04565b60405290565b80356001600160a01b0381168114610c5b57600080fd5b919050565b600082601f830112610c7157600080fd5b813567ffffffffffffffff80821115610c8c57610c8c610c04565b604051601f8301601f19908116603f01168101908282118183101715610cb457610cb4610c04565b81604052838152866020858801011115610ccd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610a9e57600080fd5b8035610c5b81610ced565b60008060408385031215610d1957600080fd5b82359150602083013567ffffffffffffffff80821115610d3857600080fd5b908401906102a08287031215610d4d57600080fd5b610d55610c1a565b610d5e83610c44565b8152610d6c60208401610c44565b6020820152610d7d60408401610c44565b6040820152606083810135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013583811115610e3657600080fd5b610e4289828701610c60565b8284015250506102608084013583811115610e5c57600080fd5b610e6889828701610c60565b8284015250506102809150610e7e828401610cfb565b828201528093505050509250929050565b600060208284031215610ea157600080fd5b610eaa82610c44565b9392505050565b600060208284031215610ec357600080fd5b5035919050565b60008060408385031215610edd57600080fd5b610ee683610c44565b91506020830135610ef681610ced565b809150509250929050565b600082610f1e57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610f4857634e487b7160e01b600052601160045260246000fd5b92915050565b6000815180845260005b81811015610f7457602081850181015186830182015201610f58565b506000602082860101526020601f19601f83011685010191505092915050565b60208152610fae6020820183516001600160a01b03169052565b60006020830151610fca60408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015160808381019190915283015160a08084019190915283015160c08084019190915283015160e08084019190915283015161010080840191909152830151610120808401919091528301516101408084019190915283015161016080840191909152830151610180808401919091528301516101a0808401919091528301516101c0808401919091528301516101e0808401919091528301516102008084019190915283015161022080840191909152830151610240808401919091528301516102a06102608085018290526110be6102c0860184610f4e565b9250808601519050610280601f1986850301818701526110de8483610f4e565b908701518015158785015290935090505b5090949350505050565b602081526111136020820183516001600160a01b03169052565b6000602083015161112f60408401826001600160a01b03169052565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a08301516101208060c0850152611172610140850183610f4e565b915060c0850151601f198584030160e086015261118f8382610f4e565b60e0870151610100878101919091528701516001600160a01b0381168488015290935090506110ef565b81516001600160a01b03168152610140810160208301516111e560208401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561125257600080fd5b5051919050565b60006020828403121561126b57600080fd5b8151610eaa81610ced56fe608060405234801561001057600080fd5b5060405161457a38038061457a83398101604081905261002f916103d0565b8051600080546001600160a01b0319166001600160a01b0390921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36040810151600380546001600160a01b039283166001600160a01b031991821617909155600980548216331790556060830151600155610100830151600e819055600f556101208301516010556101408301516011819055601290815561016084015160135561018084015160275560a0840151600b5560c0840151600c5560e0840151600d556000600a5561028084015160208054911515600160b81b0260ff60b81b199092169190911781556015805460ff19169092179091558301516008805491909316911617905561024081015160179061015690826105d9565b5061026081015160189061016a90826105d9565b5060808101516016819055610220820151601b55610200820151601c556020805460ff60b01b1916600160b01b1790556101a0820151612710916101ae9190610698565b6101b891906106c3565b601d556101c0810151601654612710916101d191610698565b6101db91906106c3565b601e556101a08101516127101480156101fa5750806101c00151612710145b1561020d576020805460ff60b01b191690555b7f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d9327816101a00151826101c00151604051610251929190918252602082015260400190565b60405180910390a160165430600081815260066020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36101e00151601a556106e5565b634e487b7160e01b600052604160045260246000fd5b6040516102a081016001600160401b03811182821017156102ea576102ea6102b1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610318576103186102b1565b604052919050565b80516001600160a01b038116811461033757600080fd5b919050565b600082601f83011261034d57600080fd5b81516001600160401b03811115610366576103666102b1565b602061037a601f8301601f191682016102f0565b828152858284870101111561038e57600080fd5b60005b838110156103ac578581018301518282018401528201610391565b506000928101909101919091529392505050565b8051801515811461033757600080fd5b6000602082840312156103e257600080fd5b81516001600160401b03808211156103f957600080fd5b908301906102a0828603121561040e57600080fd5b6104166102c7565b61041f83610320565b815261042d60208401610320565b602082015261043e60408401610320565b6040820152606083810151908201526080808401519082015260a0808401519082015260c0808401519082015260e08084015190820152610100808401519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e080840151908201526102008084015190820152610220808401519082015261024080840151838111156104f757600080fd5b6105038882870161033c565b828401525050610260808401518381111561051d57600080fd5b6105298882870161033c565b828401525050610280915061053f8284016103c0565b91810191909152949350505050565b600181811c9082168061056257607f821691505b60208210810361058257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156105d4576000816000526020600020601f850160051c810160208610156105b15750805b601f850160051c820191505b818110156105d0578281556001016105bd565b5050505b505050565b81516001600160401b038111156105f2576105f26102b1565b61060681610600845461054e565b84610588565b602080601f83116001811461063b57600084156106235750858301515b600019600386901b1c1916600185901b1785556105d0565b600085815260208120601f198616915b8281101561066a5788860151825594840194600190910190840161064b565b50858210156106885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176106bd57634e487b7160e01b600052601160045260246000fd5b92915050565b6000826106e057634e487b7160e01b600052601260045260246000fd5b500490565b613e86806106f46000396000f3fe6080604052600436106101635760003560e01c806370a08231116100c0578063af66394d11610074578063db7c4dda11610059578063db7c4dda146103ac578063dd62ed3e146103bf578063f2fde38b1461040557600080fd5b8063af66394d1461036c578063ccec37161461038c57600080fd5b80638da5cb5b116100a55780638da5cb5b1461030f57806395d89b4114610337578063a9059cbb1461034c57600080fd5b806370a08231146102b957806378f8484b146102ef57600080fd5b806323b872dd1161011757806344ee3a1c116100fc57806344ee3a1c146102625780634839c8b3146102825780635c89dfe11461029757600080fd5b806323b872dd14610220578063313ce5671461024057600080fd5b80630b45260e116101485780630b45260e146101ca57806318160ddd146101e157806320ffb26d1461020057600080fd5b806306fdde031461016f578063095ea7b31461019a57600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b50610184610425565b6040516101919190612816565b60405180910390f35b3480156101a657600080fd5b506101ba6101b536600461287a565b6104b7565b6040519015158152602001610191565b3480156101d657600080fd5b506101df6104ce565b005b3480156101ed57600080fd5b506016545b604051908152602001610191565b34801561020c57600080fd5b506101df61021b3660046128a6565b6106d0565b34801561022c57600080fd5b506101ba61023b3660046128bf565b6107b5565b34801561024c57600080fd5b5060155460405160ff9091168152602001610191565b34801561026e57600080fd5b506101df61027d3660046128a6565b61085d565b34801561028e57600080fd5b506101df610993565b3480156102a357600080fd5b506102ac610be1565b6040516101919190612900565b3480156102c557600080fd5b506101f26102d43660046129c6565b6001600160a01b031660009081526006602052604090205490565b3480156102fb57600080fd5b506101df61030a3660046129ea565b610d2e565b34801561031b57600080fd5b506000546040516001600160a01b039091168152602001610191565b34801561034357600080fd5b50610184610edd565b34801561035857600080fd5b506101ba61036736600461287a565b610eec565b34801561037857600080fd5b506101df610387366004612a0c565b610ef9565b34801561039857600080fd5b506101df6103a73660046129c6565b61110d565b6101df6103ba366004612a9c565b61125b565b3480156103cb57600080fd5b506101f26103da366004612ade565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561041157600080fd5b506101df6104203660046129c6565b61190c565b60606017805461043490612b17565b80601f016020809104026020016040519081016040528092919081815260200182805461046090612b17565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b60006104c43384846119d8565b5060015b92915050565b6000546001600160a01b031633146105115760405162461bcd60e51b81526020600482015260016024820152606f60f81b60448201526064015b60405180910390fd5b602054600160c01b900460ff161580156105355750602054600160c81b900460ff16155b801561054a5750602054600160a01b900460ff165b61057a5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b6020805460ff60c01b1916600160c01b1790556040517fc43e780723fe0e2a85c0bd4291955d83cac42c6036fd8bf58b10463d3f9f1ae890600090a16020546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb9061dead9083906370a0823190602401602060405180830381865afa15801561060a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062e9190612b51565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d9190612b6a565b6106ce5760405162461bcd60e51b8152602060048201526002602482015261379960f11b6044820152606401610508565b565b6000546001600160a01b0316331480156106ec57506000602254115b80156106f85750600081115b6107285760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b806022600082825461073a9190612b9d565b9091555050602254606410156107775760405162461bcd60e51b81526020600482015260026024820152616f7360f01b6044820152606401610508565b7fcc5d343fa3728e63489d08b6f42d710f12e9126dec83f9b9a9fa74b7e54d22416022546040516107aa91815260200190565b60405180910390a150565b6001600160a01b038316600090815260076020908152604080832033845290915281205482111561080d5760405162461bcd60e51b8152602060048201526002602482015261323560f01b6044820152606401610508565b6001600160a01b038416600090815260076020908152604080832033808552925290912054610848918691610843908690612bb0565b6119d8565b610853848484611a5f565b5060019392505050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160c81b900460ff161580156108bf5750602054600160c01b900460ff16155b80156108d45750602054600160a01b900460ff165b6109045760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b42602154620151806109169190612bc3565b6014546109239190612b9d565b101561094957620151806014544261093b9190612bb0565b6109459190612bda565b6021555b806021600082825461095b9190612b9d565b90915550506021546040519081527fa7b24c66dd3269a292a60b3facdbb8f3e7557d1e19e64d99e0d6ee7250be63ad906020016107aa565b6000546001600160a01b031633146109d15760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160c81b900460ff161580156109f55750602054600160c01b900460ff16155b8015610a0a5750602054600160a01b900460ff165b610a3a5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b42602154603c610a4a9190612bc3565b610a5590603c612bc3565b610a60906018612bc3565b601454610a6d9190612b9d565b10156106ce5760208054600160c81b7fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff8216179091556040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190612b51565b6040519091507faf0fe1663cb7e005c807c426024d6b7bedd6fea7b9df02852418932d71cd78bd90600090a160205460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190612b6a565b610bde5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610508565b50565b610c7b604051806101c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160001515815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604080516101c081018252602080546001600160a01b03168252600a5490820152600e5491810191909152601154606082015260808101610cba611fca565b81526020805460ff600160c01b820481161515928401929092526014546040840152600160b01b900416151560608201526023546001600160a01b03908116608083015260225460a0830152601e5460c0830152601d5460e0830152601f5416610100820152600061012090910152919050565b6000546001600160a01b031633148015610d515750602054600160b01b900460ff165b610d815760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b601d5461271083601654610d959190612bc3565b610d9f9190612bda565b10158015610daf57506127108211155b610ddf5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b601e5461271082601654610df39190612bc3565b610dfd9190612bda565b10158015610e0d57506127108111155b610e3d5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610508565b61271082601654610e4e9190612bc3565b610e589190612bda565b601d5560165461271090610e6d908390612bc3565b610e779190612bda565b601e5561271082148015610e8c575080612710145b15610e9f576020805460ff60b01b191690555b60408051838152602081018390527f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d932791015b60405180910390a15050565b60606018805461043490612b17565b60006104c4338484611a5f565b6000546001600160a01b03163314610f375760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602254158015610f475750600082115b8015610f54575060648211155b610f845760405162461bcd60e51b81526020600482015260016024820152607960f81b6044820152606401610508565b6202a300816020015110158015610fa15750620d2f008160200151105b610fd15760405162461bcd60e51b81526020600482015260016024820152603d60f91b6044820152606401610508565b60228290553381526040516000908290610fea90612809565b81516001600160a01b0316815260209182015191810191909152604001604051809103906000f080158015611023573d6000803e3d6000fd5b506001600160a01b03811660008181526004602090815260408083208054600160ff199182168117909255600584529382902080549094161790925560225482519384523391840191909152908201529091507fc718bf738f6d7cb0af735b17552ef9e5f1857d1719d7f882b8780ea2f08b3e7f9060600160405180910390a16040805183516001600160a01b03168152602080850151908201527f8bdc63644658897d37c2cff731dd7a8898394f85b3c9d9b4b7879390385d4c26910160405180910390a1602380546001600160a01b0319166001600160a01b03929092169190911790555050565b6020546001600160a01b039081169082160361112857600080fd5b306001600160a01b0382160361113d57600080fd5b6008546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b49190612b51565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112239190612b6a565b6112535760405162461bcd60e51b81526020600482015260016024820152603960f91b6044820152606401610508565b610bde61202a565b6000546001600160a01b031633146112995760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160a01b900460ff16156112d75760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610508565b60015447101561130d5760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610508565b8161132057600e83101561132057600080fd5b602080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790819055601e54601d549091600160b01b900460ff1680151560010361138557601654601e819055601d556020805460ff60b01b191690555b3060008181526004602090815260408083208054600160ff19918216811790925584546001600160a01b03908116865283862080548316841790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd80548316841790558686526005909452828520805482168317905584549093168452908320805483168217905561dead9092527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549091169091179055851561146057506020805460ff60c01b1916600160c01b1790556000611473565b60218790556020805460ff60c01b191690555b30600090815260066020526040908190205442601455600954915163a992664760e01b81526001600160a01b0388811660048301529192919091169063a992664790602401602060405180830381865afa1580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f99190612b6a565b61150257600080fd5b601f80546001600160a01b0319166001600160a01b03888116918217835560165430600090815260076020908152604080832095835294815290849020919091559254825163c45a015560e01b8152925191169263c45a015592600480820193918290030181865afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612bfc565b6001600160a01b031663c9c6539630601f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190612bfc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612bfc565b602080546001600160a01b0319166001600160a01b039283169081178255600090815260058083526040808320805460ff199081166001908117909255855487168552600486528285208054821683179055601f80548816865283862080548316841790558054881686529386529382902080549094161790925582546021549154835191861682524794820194909452918201528915156060820152911660808201527f0157a1a09a393e0b2567e699c9fafaa987dd8440f4b66795e9667d8749d7239e9060a00160405180910390a1602054601f5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156117be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e29190612b6a565b6118125760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610508565b601f546001600160a01b031663f305d7194730846000808861183542603c612b9d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156118a2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118c79190612c19565b50506025805460ff191660019081179091558415159003905061190257601e859055601d8490556020805460ff60b01b1916600160b01b1790555b5050505050505050565b6000546001600160a01b0316331461194a5760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392831690811782558152600460209081526040808320805460ff1990811660019081179092558454909516845260059092529091208054909216179055565b6001600160a01b0383166119eb57600080fd5b6001600160a01b0382166119fe57600080fd5b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611a7f57506001600160a01b03821615155b611a8857600080fd5b6001600160a01b038316600090815260066020526040902054811115611ad55760405162461bcd60e51b81526020600482015260026024820152611b1b60f11b6044820152606401610508565b602054600090600160a01b900460ff168015611afa5750602054600160b01b900460ff165b8015611b1f57506001600160a01b03841660009081526004602052604090205460ff16155b8015611b4457506001600160a01b03831660009081526004602052604090205460ff16155b15611b805781601e541015611b805760405162461bcd60e51b8152602060048201526002602482015261033360f41b6044820152606401610508565b602054600160a01b900460ff168015611ba25750602054600160b01b900460ff165b8015611bc757506001600160a01b03831660009081526005602052604090205460ff16155b15611c2657601d546001600160a01b038416600090815260066020526040902054611bf3908490612b9d565b1115611c265760405162461bcd60e51b8152602060048201526002602482015261333160f01b6044820152606401610508565b6000546001600160a01b03858116911614801590611c5257506000546001600160a01b03848116911614155b8015611c65575060255460ff1615156001145b15611d28576020546001600160a01b038581169116148015611c955750601f546001600160a01b03848116911614155b15611cd657600a8054906000611caa83612c47565b9190505550611cb960016120f2565b6064600e5483611cc99190612bc3565b611cd39190612bda565b90505b6020546001600160a01b038481169116148015611cfc57506001600160a01b0384163014155b15611d2857611d0b60006120f2565b606460115483611d1b9190612bc3565b611d259190612bda565b90505b30600090815260066020526040812054602054909150600090600160a81b900460ff16158015611d6557506020546001600160a01b038681169116145b8015611d7a57506001600160a01b0386163014155b8015611d865750600082115b8015611d955750601a54600a54115b15611e1357601b54821180611dd057506201518060145442611db79190612bb0565b118015611dc45750601054155b8015611dd05750601354155b15611e1357601954431115611e1357601c54821015611df757611df2826122f4565b611e02565b611e02601c546122f4565b611e0b476124b3565b504360195560015b8215611e8e5730600090815260066020526040902054611e34908490612b9d565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e859087815260200190565b60405180910390a35b6001600160a01b038616600090815260066020526040902054611eb2908590612bb0565b6001600160a01b0380881660009081526006602052604080822093909355908716815220548390611ee4908690612b9d565b611eee9190612bb0565b6001600160a01b0380871660008181526006602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611f388688612bb0565b60405190815260200160405180910390a38015611fc2576000611f84600860009054906101000a90046001600160a01b0316620186a047604051806020016040528060008152506127ef565b90508015611fc0576040514781527f2488b4123934dca0dca56f8f7005a71c0a52e2c9158fe31ac31869efe776d6eb9060200160405180910390a15b505b505050505050565b602054600090600160a01b900460ff16611fe45750600090565b60006201518060145442611ff89190612bb0565b6120029190612bda565b905060215481111561201657600091505090565b806021546120249190612bb0565b91505090565b602054600160a81b900460ff1615801561204d5750602054600160a01b900460ff165b156106ce57478015610bde57612062816124b3565b6008546040516000916001600160a01b03169047908381818185875af1925050503d80600081146120af576040519150601f19603f3d011682016040523d82523d6000602084013e6120b4565b606091505b5050905080156120ee576040514781527f2488b4123934dca0dca56f8f7005a71c0a52e2c9158fe31ac31869efe776d6eb90602001610ed1565b5050565b6000806000831561211157600f5492506010549150600e549050612121565b6012549250601354915060115490505b8181146122ee57600b546000036121ce57600c546014546121429190612b9d565b421061214f5750806122d8565b6002600c5461215e9190612bda565b60145461216b9190612b9d565b421061219857600461217d8385612bb0565b6121879190612bda565b6121919083612b9d565b90506122d8565b6004600c546121a79190612bda565b6014546121b49190612b9d565b42106121c657600261217d8385612bb0565b50815b6122d8565b600b5460010361220a57600d54600a5411156121eb5750806121ee565b50815b6014546121fd90611c20612b9d565b42106121c95750806122d8565b600b546002036122d557600d54600a5411806122355750600c546014546122319190612b9d565b4210155b156122415750806122d8565b6002600d546122509190612bda565b600a54118061227a57506002600c546122699190612bda565b6014546122769190612b9d565b4210155b1561228b57600461217d8385612bb0565b6004600d5461229a9190612bda565b600a5411806122c457506004600c546122b39190612bda565b6014546122c09190612b9d565b4210155b156121c657600261217d8385612bb0565b50805b83156122e857600e8190556122ee565b60118190555b50505050565b6020805460ff60a81b1916600160a81b1781556040805160028082526060820183526000939192909183019080368337019050509050308160008151811061233e5761233e612c60565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bb9190612bfc565b816001815181106123ce576123ce612c60565b6001600160a01b03909216602092830291909101909101526027541561241f5760c8602754836123fe9190612bc3565b6124089190612bda565b60268190556124179083612bb0565b602481905591505b601f546124379030906001600160a01b0316846119d8565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612470908590600090869030904290600401612c76565b600060405180830381600087803b15801561248a57600080fd5b505af115801561249e573d6000803e3d6000fd5b50506020805460ff60a81b1916905550505050565b600080600080602060179054906101000a900460ff161515600115151480156124eb57506276a700601454426124e99190612bb0565b105b156125cc5760646124fd86600a612bc3565b6125079190612bda565b93507f27becf433f6eafb15520b27cdc27123fc4bb3ab578777db9f713bd54da1611a68460405161253a91815260200190565b60405180910390a16009546040516000916001600160a01b03169086908381818185875af1925050503d806000811461258f576040519150601f19603f3d011682016040523d82523d6000602084013e612594565b606091505b50509050806125ca5760405162461bcd60e51b8152602060048201526002602482015261393960f01b6044820152606401610508565b505b60006027541180156125e057506000602654115b156126e657602454856026546125f69190612bc3565b6126009190612bda565b60268054600091829055602491909155601f54919450915061262d9030906001600160a01b0316836119d8565b601f546001600160a01b031663f305d7198430846000808361265042603c612b9d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156126bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126e29190612c19565b5050505b6023546001600160a01b0316156127e857602254606490846127088789612bb0565b6127129190612bb0565b61271c9190612bc3565b6127269190612bda565b6023546040519193506000916001600160a01b039091169084908381818185875af1925050503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b50509050806127b35760405162461bcd60e51b8152602060048201526002602482015261733960f01b6044820152606401610508565b6040518381527f3392b75a0721e4605be82daf22af3b927da9086deccc7dbb947b37bf895d3deb9060200160405180910390a1505b5050505050565b600080600080845160208601878a8af19695505050505050565b61116780612cea83390190565b60006020808352835180602085015260005b8181101561284457858101830151858201604001528201612828565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bde57600080fd5b6000806040838503121561288d57600080fd5b823561289881612865565b946020939093013593505050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612865565b925060208401356128ef81612865565b929592945050506040919091013590565b81516001600160a01b031681526101c081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015161294d60a084018215159052565b5060c083015160c083015260e083015161296b60e084018215159052565b50610100838101516001600160a01b0390811691840191909152610120808501519084015261014080850151908401526101608085015190840152610180808501518216908401526101a09384015116929091019190915290565b6000602082840312156129d857600080fd5b81356129e381612865565b9392505050565b600080604083850312156129fd57600080fd5b50508035926020909101359150565b6000808284036060811215612a2057600080fd5b833592506040601f1982011215612a3657600080fd5b506040516040810181811067ffffffffffffffff82111715612a6857634e487b7160e01b600052604160045260246000fd5b6040526020840135612a7981612865565b81526040939093013560208401525092909150565b8015158114610bde57600080fd5b600080600060608486031215612ab157600080fd5b833592506020840135612ac381612a8e565b91506040840135612ad381612865565b809150509250925092565b60008060408385031215612af157600080fd5b8235612afc81612865565b91506020830135612b0c81612865565b809150509250929050565b600181811c90821680612b2b57607f821691505b602082108103612b4b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612b6357600080fd5b5051919050565b600060208284031215612b7c57600080fd5b81516129e381612a8e565b634e487b7160e01b600052601160045260246000fd5b808201808211156104c8576104c8612b87565b818103818111156104c8576104c8612b87565b80820281158282048414176104c8576104c8612b87565b600082612bf757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c0e57600080fd5b81516129e381612865565b600080600060608486031215612c2e57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612c5957612c59612b87565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015612cc85784516001600160a01b031683529383019391830191600101612ca3565b50506001600160a01b0396909616606085015250505060800152939250505056fe608060405234801561001057600080fd5b5060405161116738038061116783398101604081905261002f91610086565b80516001600160a01b031661004357600080fd5b8051600180546001600160a01b039092166001600160a01b0319928316179055670de0b6b3a76400006002556000805490911633179055602001516004556100f7565b60006040828403121561009857600080fd5b604080519081016001600160401b03811182821017156100c857634e487b7160e01b600052604160045260246000fd5b60405282516001600160a01b03811681146100e257600080fd5b81526020928301519281019290925250919050565b611061806101066000396000f3fe60806040526004361061009a5760003560e01c80638da5cb5b11610069578063cc3d967b1161004e578063cc3d967b1461027b578063ccec3716146102e7578063f2fde38b1461030757600080fd5b80638da5cb5b1461022e578063a694fc3a1461025b57600080fd5b80632e17de78146101cd578063372500ab146101ef5780633ccfd60b146102045780634f91440d1461021957600080fd5b366101c85734806100d65760405162461bcd60e51b81526020600482015260016024820152603960f91b60448201526064015b60405180910390fd5b33600090815260086020526040812080548392906100f5908490610f42565b90915550506007805482919060009061010f908490610f42565b909155505060035460000361013e5780600060050160008282546101339190610f42565b909155506101829050565b6003546002546005546101519084610f42565b61015b9190610f5b565b6101659190610f72565b60068054600090610177908490610f42565b909155505060006005555b60065460405133917f731185b941ee4773f1c8f1cf0c22be2c6b4eaeb0075fbb4c524ac1f80ad391f3916101be91858252602082015260400190565b60405180910390a2005b600080fd5b3480156101d957600080fd5b506101ed6101e8366004610f94565b610327565b005b3480156101fb57600080fd5b506101ed6104ca565b34801561021057600080fd5b506101ed6106c0565b34801561022557600080fd5b506101ed610845565b34801561023a57600080fd5b506001546040516001600160a01b0390911681526020015b60405180910390f35b34801561026757600080fd5b506101ed610276366004610f94565b6109c2565b34801561028757600080fd5b5061029b610296366004610fad565b610c17565b6040516102529190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102f357600080fd5b506101ed610302366004610fad565b610da1565b34801561031357600080fd5b506101ed610322366004610fad565b610edb565b6000811180156103465750336000908152600a60205260409020548111155b6103765760405162461bcd60e51b81526020600482015260016024820152603360f81b60448201526064016100cd565b33600090815260096020908152604080832054600254600654600a9094529184205490926103a391610f5b565b6103ad9190610f72565b6103b79190610fdd565b336000908152600a60205260408120805492935084929091906103db908490610fdd565b9091555050336000908152600d60209081526040808320429055600e9091528120805484929061040c908490610f42565b9091555050600254600654336000908152600a60205260409020546104319190610f5b565b61043b9190610f72565b3360009081526009602052604081209190915560038054849290610460908490610fdd565b9091555050801561049057336000908152600c60205260408120805483929061048a908490610f42565b90915550505b60405182815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd906020015b60405180910390a25050565b33600090815260096020908152604080832054600254600654600a909452919093205490916104f891610f5b565b6105029190610f72565b61050c9190610fdd565b336000908152600c60205260408120805490919061052b908490610f42565b9091555050336000908152600c6020526040902054806105715760405162461bcd60e51b81526020600482015260016024820152600760fb1b60448201526064016100cd565b600254600654336000908152600a60205260409020546105919190610f5b565b61059b9190610f72565b336000908152600960205260408120919091554782106105bb57476105bd565b815b336000908152600c60205260408120805492935083929091906105e1908490610fdd565b9091555050336000908152600b602052604081208054839290610605908490610f42565b909155505060405181815233907f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc679060200160405180910390a2604051600090339083908381818185875af1925050503d8060008114610681576040519150601f19603f3d011682016040523d82523d6000602084013e610686565b606091505b50509050806106bb5760405162461bcd60e51b81526020600482015260016024820152603960f81b60448201526064016100cd565b505050565b336000908152600e6020526040902054806107015760405162461bcd60e51b81526020600482015260016024820152603560f81b60448201526064016100cd565b600454336000908152600d602052604090205461071e9190610f42565b4210156107515760405162461bcd60e51b81526020600482015260016024820152601b60f91b60448201526064016100cd565b336000818152600e602052604080822091909155517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906107959084815260200190565b60405180910390a260005460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108129190610ff0565b6108425760405162461bcd60e51b81526020600482015260016024820152603760f81b60448201526064016100cd565b50565b336000908152600e6020526040812054806108865760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016100cd565b336000908152600a6020526040902054156108e05733600090815260096020908152604080832054600254600654600a909452919093205490916108c991610f5b565b6108d39190610f72565b6108dd9190610fdd565b91505b336000908152600e60209081526040808320839055600a9091528120805483929061090c908490610f42565b9091555050600254600654336000908152600a60205260409020546109319190610f5b565b61093b9190610f72565b3360009081526009602052604081209190915560038054839290610960908490610f42565b9091555050811561099057336000908152600c60205260408120805484929061098a908490610f42565b90915550505b60405181815233907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a906020016104be565b60008082116109d057600080fd5b336000908152600a602052604090205415610a2a5733600090815260096020908152604080832054600254600654600a90945291909320549091610a1391610f5b565b610a1d9190610f72565b610a279190610fdd565b90505b336000908152600e6020526040902054828110610a6b57336000908152600e602052604081208054859290610a60908490610fdd565b90915550610b3a9050565b6000610a778285610fdd565b336000818152600e6020526040808220829055905490516323b872dd60e01b81526004810192909252306024830152604482018390529192506001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190610ff0565b610b385760405162461bcd60e51b81526020600482015260016024820152601960f91b60448201526064016100cd565b505b336000908152600a602052604081208054859290610b59908490610f42565b9091555050600254600654336000908152600a6020526040902054610b7e9190610f5b565b610b889190610f72565b3360009081526009602052604081209190915560038054859290610bad908490610f42565b90915550508115610bdd57336000908152600c602052604081208054849290610bd7908490610f42565b90915550505b60405183815233907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9060200160405180910390a2505050565b610c506040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038216600090815260096020908152604080832054600254600654600a909452918420548493849391610c8a9190610f5b565b610c949190610f72565b6001600160a01b0387166000908152600c6020526040902054610cb79190610f42565b610cc19190610fdd565b6004546001600160a01b0387166000908152600d6020526040902054919250610ce991610f42565b4210610d0f576001600160a01b0385166000908152600e60205260409020549250610d42565b6004546001600160a01b0386166000908152600d6020526040902054610d359042610fdd565b610d3f9190610f42565b91505b6040805160c0810182529182526020808301949094526001600160a01b039095166000818152600e855286812054838801528181526008855286812054606084015260808301939093528252600a909252929092205460a08301525090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b038481169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d9190611012565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190610ff0565b905080610ed75760405162461bcd60e51b81526020600482015260016024820152603160f81b60448201526064016100cd565b5050565b6001546001600160a01b03163314610ef257600080fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f5557610f55610f2c565b92915050565b8082028115828204841417610f5557610f55610f2c565b600082610f8f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610fa657600080fd5b5035919050565b600060208284031215610fbf57600080fd5b81356001600160a01b0381168114610fd657600080fd5b9392505050565b81810381811115610f5557610f55610f2c565b60006020828403121561100257600080fd5b81518015158114610fd657600080fd5b60006020828403121561102457600080fd5b505191905056fea26469706673582212201be65b40cb7776d62b638c878f0e41b37b004cbd039f7d54b20da61e3c9965eb64736f6c63430008190033a264697066735822122046423ee4c935bdced56258cde1f3d1fb2bf342aa964757dcbe6d6e2f64a4fcdf64736f6c63430008190033a2646970667358221220813ad1bb387b1626fb55a5f7da3188a0ea2efe4f0e527afd6d020a88cd87ea3264736f6c63430008190033000000000000000000000000a8939be8156f6adc5fbb519e346a11167acba1050000000000000000000000009c84288cb2c0fcad30f031ac1d4b1633ef994c63000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b948830000000000000000000000004f0fd563be89ec8c3e7d595bf3639128c0a7c33a

Deployed Bytecode

0x6080604052600436106100b55760003560e01c8063c187645311610069578063ce31a06b1161004e578063ce31a06b14610201578063f2fde38b14610216578063f39bb7d21461023657600080fd5b8063c1876453146101a6578063ccec3716146101e157600080fd5b80638da5cb5b1161009a5780638da5cb5b14610115578063a99266471461013d578063b9efb9bf1461018657600080fd5b8063353a9e71146100c15780636bb185d81461010057600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506004546003546002546040805193845260208401929092526001600160a01b0316908201526060015b60405180910390f35b61011361010e366004610d06565b610256565b005b34801561012157600080fd5b506000546040516001600160a01b0390911681526020016100f7565b34801561014957600080fd5b50610176610158366004610e8f565b6001600160a01b031660009081526005602052604090205460ff1690565b60405190151581526020016100f7565b34801561019257600080fd5b506101136101a1366004610eb1565b610954565b3480156101b257600080fd5b506101766101c1366004610e8f565b6001600160a01b0390811660009081526006602052604090205416151590565b3480156101ed57600080fd5b506101136101fc366004610e8f565b610970565b34801561020d57600080fd5b50610113610aa1565b34801561022257600080fd5b50610113610231366004610e8f565b610b5c565b34801561024257600080fd5b50610113610251366004610eca565b610ba2565b341580610264575060045434145b61026d57600080fd5b80516001600160a01b031633146102af5760405162461bcd60e51b81526020600482015260016024820152603160f81b60448201526064015b60405180910390fd5b6003548160600151146102e85760405162461bcd60e51b81526020600482015260016024820152601960f91b60448201526064016102a6565b60025460408201516001600160a01b0390811691161461032e5760405162461bcd60e51b81526020600482015260016024820152603360f81b60448201526064016102a6565b8061012001518161010001511015801561034e5750602881610100015111155b61037e5760405162461bcd60e51b81526020600482015260016024820152601b60f91b60448201526064016102a6565b600681610120015111156103b85760405162461bcd60e51b81526020600482015260016024820152601b60fa1b60448201526064016102a6565b806101600151816101400151101580156103d85750602881610140015111155b6104085760405162461bcd60e51b81526020600482015260016024820152606b60f81b60448201526064016102a6565b600681610160015111156104425760405162461bcd60e51b81526020600482015260016024820152603560f91b60448201526064016102a6565b60038160a00151111561047b5760405162461bcd60e51b81526020600482015260016024820152606960f81b60448201526064016102a6565b611c208160c0015111156104b55760405162461bcd60e51b81526020600482015260016024820152600d60fb1b60448201526064016102a6565b60648160e0015111156104ee5760405162461bcd60e51b81526020600482015260016024820152606760f81b60448201526064016102a6565b6032816101800151111561050157600080fd5b6000816101a0015111801561051d5750612710816101a0015111155b61054d5760405162461bcd60e51b81526020600482015260016024820152603360f91b60448201526064016102a6565b6000816101c001511180156105695750612710816101c0015111155b6105995760405162461bcd60e51b81526020600482015260016024820152606560f81b60448201526064016102a6565b670de0b6b3a76400008160800151101580156105c757506d314dc6448d9338c15b0a00000000816080015111155b6105f75760405162461bcd60e51b81526020600482015260016024820152601960fa1b60448201526064016102a6565b6032816101e0015111156106315760405162461bcd60e51b81526020600482015260016024820152606360f81b60448201526064016102a6565b606481608001516106429190610f01565b8161020001511015801561067757506064816080015160026106649190610f23565b61066e9190610f01565b81610200015111155b6106a75760405162461bcd60e51b81526020600482015260016024820152603160f91b60448201526064016102a6565b620f424081608001516106ba9190610f01565b816102200151101580156106e457506103e881608001516106db9190610f01565b81610220015111155b6107145760405162461bcd60e51b81526020600482015260016024820152606160f81b60448201526064016102a6565b6001610280820152341561072b5760006102808201525b6000828260405161073b90610bf7565b6107459190610f94565b8190604051809103906000f5905080158015610765573d6000803e3d6000fd5b506001600160a01b038116600081815260066020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916339081179091558251908152908101929092529192507f33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688910160405180910390a16000604051806101200160405280336001600160a01b03168152602001836001600160a01b0316815260200184610280015115158152602001846102800151151515815260200160008152602001846102400151815260200184610260015181526020018460800151815260200160006001600160a01b031681525090506000604051806101400160405280846001600160a01b0316815260200185602001516001600160a01b03168152602001856101000151815260200185610140015181526020018561012001518152602001856101600151815260200185610180015181526020018560a0015181526020018560c0015181526020018560e0015181525090507f05801121ffc1080c74d11ce5f437ed5f77b1014c00f7e1b8bb6cd899ad1f95048260405161090e91906110f9565b60405180910390a17f6789ae7431eb646c5e4f10cf3a38e4597b460ba0bc7629611376bbb0b4491a6c8160405161094591906111b9565b60405180910390a15050505050565b6000546001600160a01b0316331461096b57600080fd5b600355565b6000546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611240565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6e9190611259565b610a9e5760405162461bcd60e51b81526020600482015260016024820152600f60fb1b60448201526064016102a6565b50565b60004711610ad55760405162461bcd60e51b81526020600482015260016024820152607960f81b60448201526064016102a6565b6001546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b22576040519150601f19603f3d011682016040523d82523d6000602084013e610b27565b606091505b5050905080610a9e5760405162461bcd60e51b81526020600482015260016024820152603960f91b60448201526064016102a6565b6000546001600160a01b03163314610b7357600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bb957600080fd5b6001600160a01b038216610bcc57600080fd5b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b61457a8061127783390190565b634e487b7160e01b600052604160045260246000fd5b6040516102a0810167ffffffffffffffff81118282101715610c3e57610c3e610c04565b60405290565b80356001600160a01b0381168114610c5b57600080fd5b919050565b600082601f830112610c7157600080fd5b813567ffffffffffffffff80821115610c8c57610c8c610c04565b604051601f8301601f19908116603f01168101908282118183101715610cb457610cb4610c04565b81604052838152866020858801011115610ccd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610a9e57600080fd5b8035610c5b81610ced565b60008060408385031215610d1957600080fd5b82359150602083013567ffffffffffffffff80821115610d3857600080fd5b908401906102a08287031215610d4d57600080fd5b610d55610c1a565b610d5e83610c44565b8152610d6c60208401610c44565b6020820152610d7d60408401610c44565b6040820152606083810135908201526080808401359082015260a0808401359082015260c0808401359082015260e08084013590820152610100808401359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013583811115610e3657600080fd5b610e4289828701610c60565b8284015250506102608084013583811115610e5c57600080fd5b610e6889828701610c60565b8284015250506102809150610e7e828401610cfb565b828201528093505050509250929050565b600060208284031215610ea157600080fd5b610eaa82610c44565b9392505050565b600060208284031215610ec357600080fd5b5035919050565b60008060408385031215610edd57600080fd5b610ee683610c44565b91506020830135610ef681610ced565b809150509250929050565b600082610f1e57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610f4857634e487b7160e01b600052601160045260246000fd5b92915050565b6000815180845260005b81811015610f7457602081850181015186830182015201610f58565b506000602082860101526020601f19601f83011685010191505092915050565b60208152610fae6020820183516001600160a01b03169052565b60006020830151610fca60408401826001600160a01b03169052565b5060408301516001600160a01b038116606084015250606083015160808381019190915283015160a08084019190915283015160c08084019190915283015160e08084019190915283015161010080840191909152830151610120808401919091528301516101408084019190915283015161016080840191909152830151610180808401919091528301516101a0808401919091528301516101c0808401919091528301516101e0808401919091528301516102008084019190915283015161022080840191909152830151610240808401919091528301516102a06102608085018290526110be6102c0860184610f4e565b9250808601519050610280601f1986850301818701526110de8483610f4e565b908701518015158785015290935090505b5090949350505050565b602081526111136020820183516001600160a01b03169052565b6000602083015161112f60408401826001600160a01b03169052565b5060408301518015156060840152506060830151801515608084015250608083015160a083015260a08301516101208060c0850152611172610140850183610f4e565b915060c0850151601f198584030160e086015261118f8382610f4e565b60e0870151610100878101919091528701516001600160a01b0381168488015290935090506110ef565b81516001600160a01b03168152610140810160208301516111e560208401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561125257600080fd5b5051919050565b60006020828403121561126b57600080fd5b8151610eaa81610ced56fe608060405234801561001057600080fd5b5060405161457a38038061457a83398101604081905261002f916103d0565b8051600080546001600160a01b0319166001600160a01b0390921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36040810151600380546001600160a01b039283166001600160a01b031991821617909155600980548216331790556060830151600155610100830151600e819055600f556101208301516010556101408301516011819055601290815561016084015160135561018084015160275560a0840151600b5560c0840151600c5560e0840151600d556000600a5561028084015160208054911515600160b81b0260ff60b81b199092169190911781556015805460ff19169092179091558301516008805491909316911617905561024081015160179061015690826105d9565b5061026081015160189061016a90826105d9565b5060808101516016819055610220820151601b55610200820151601c556020805460ff60b01b1916600160b01b1790556101a0820151612710916101ae9190610698565b6101b891906106c3565b601d556101c0810151601654612710916101d191610698565b6101db91906106c3565b601e556101a08101516127101480156101fa5750806101c00151612710145b1561020d576020805460ff60b01b191690555b7f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d9327816101a00151826101c00151604051610251929190918252602082015260400190565b60405180910390a160165430600081815260066020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36101e00151601a556106e5565b634e487b7160e01b600052604160045260246000fd5b6040516102a081016001600160401b03811182821017156102ea576102ea6102b1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610318576103186102b1565b604052919050565b80516001600160a01b038116811461033757600080fd5b919050565b600082601f83011261034d57600080fd5b81516001600160401b03811115610366576103666102b1565b602061037a601f8301601f191682016102f0565b828152858284870101111561038e57600080fd5b60005b838110156103ac578581018301518282018401528201610391565b506000928101909101919091529392505050565b8051801515811461033757600080fd5b6000602082840312156103e257600080fd5b81516001600160401b03808211156103f957600080fd5b908301906102a0828603121561040e57600080fd5b6104166102c7565b61041f83610320565b815261042d60208401610320565b602082015261043e60408401610320565b6040820152606083810151908201526080808401519082015260a0808401519082015260c0808401519082015260e08084015190820152610100808401519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e080840151908201526102008084015190820152610220808401519082015261024080840151838111156104f757600080fd5b6105038882870161033c565b828401525050610260808401518381111561051d57600080fd5b6105298882870161033c565b828401525050610280915061053f8284016103c0565b91810191909152949350505050565b600181811c9082168061056257607f821691505b60208210810361058257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156105d4576000816000526020600020601f850160051c810160208610156105b15750805b601f850160051c820191505b818110156105d0578281556001016105bd565b5050505b505050565b81516001600160401b038111156105f2576105f26102b1565b61060681610600845461054e565b84610588565b602080601f83116001811461063b57600084156106235750858301515b600019600386901b1c1916600185901b1785556105d0565b600085815260208120601f198616915b8281101561066a5788860151825594840194600190910190840161064b565b50858210156106885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176106bd57634e487b7160e01b600052601160045260246000fd5b92915050565b6000826106e057634e487b7160e01b600052601260045260246000fd5b500490565b613e86806106f46000396000f3fe6080604052600436106101635760003560e01c806370a08231116100c0578063af66394d11610074578063db7c4dda11610059578063db7c4dda146103ac578063dd62ed3e146103bf578063f2fde38b1461040557600080fd5b8063af66394d1461036c578063ccec37161461038c57600080fd5b80638da5cb5b116100a55780638da5cb5b1461030f57806395d89b4114610337578063a9059cbb1461034c57600080fd5b806370a08231146102b957806378f8484b146102ef57600080fd5b806323b872dd1161011757806344ee3a1c116100fc57806344ee3a1c146102625780634839c8b3146102825780635c89dfe11461029757600080fd5b806323b872dd14610220578063313ce5671461024057600080fd5b80630b45260e116101485780630b45260e146101ca57806318160ddd146101e157806320ffb26d1461020057600080fd5b806306fdde031461016f578063095ea7b31461019a57600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b50610184610425565b6040516101919190612816565b60405180910390f35b3480156101a657600080fd5b506101ba6101b536600461287a565b6104b7565b6040519015158152602001610191565b3480156101d657600080fd5b506101df6104ce565b005b3480156101ed57600080fd5b506016545b604051908152602001610191565b34801561020c57600080fd5b506101df61021b3660046128a6565b6106d0565b34801561022c57600080fd5b506101ba61023b3660046128bf565b6107b5565b34801561024c57600080fd5b5060155460405160ff9091168152602001610191565b34801561026e57600080fd5b506101df61027d3660046128a6565b61085d565b34801561028e57600080fd5b506101df610993565b3480156102a357600080fd5b506102ac610be1565b6040516101919190612900565b3480156102c557600080fd5b506101f26102d43660046129c6565b6001600160a01b031660009081526006602052604090205490565b3480156102fb57600080fd5b506101df61030a3660046129ea565b610d2e565b34801561031b57600080fd5b506000546040516001600160a01b039091168152602001610191565b34801561034357600080fd5b50610184610edd565b34801561035857600080fd5b506101ba61036736600461287a565b610eec565b34801561037857600080fd5b506101df610387366004612a0c565b610ef9565b34801561039857600080fd5b506101df6103a73660046129c6565b61110d565b6101df6103ba366004612a9c565b61125b565b3480156103cb57600080fd5b506101f26103da366004612ade565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561041157600080fd5b506101df6104203660046129c6565b61190c565b60606017805461043490612b17565b80601f016020809104026020016040519081016040528092919081815260200182805461046090612b17565b80156104ad5780601f10610482576101008083540402835291602001916104ad565b820191906000526020600020905b81548152906001019060200180831161049057829003601f168201915b5050505050905090565b60006104c43384846119d8565b5060015b92915050565b6000546001600160a01b031633146105115760405162461bcd60e51b81526020600482015260016024820152606f60f81b60448201526064015b60405180910390fd5b602054600160c01b900460ff161580156105355750602054600160c81b900460ff16155b801561054a5750602054600160a01b900460ff165b61057a5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b6020805460ff60c01b1916600160c01b1790556040517fc43e780723fe0e2a85c0bd4291955d83cac42c6036fd8bf58b10463d3f9f1ae890600090a16020546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb9061dead9083906370a0823190602401602060405180830381865afa15801561060a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062e9190612b51565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069d9190612b6a565b6106ce5760405162461bcd60e51b8152602060048201526002602482015261379960f11b6044820152606401610508565b565b6000546001600160a01b0316331480156106ec57506000602254115b80156106f85750600081115b6107285760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b806022600082825461073a9190612b9d565b9091555050602254606410156107775760405162461bcd60e51b81526020600482015260026024820152616f7360f01b6044820152606401610508565b7fcc5d343fa3728e63489d08b6f42d710f12e9126dec83f9b9a9fa74b7e54d22416022546040516107aa91815260200190565b60405180910390a150565b6001600160a01b038316600090815260076020908152604080832033845290915281205482111561080d5760405162461bcd60e51b8152602060048201526002602482015261323560f01b6044820152606401610508565b6001600160a01b038416600090815260076020908152604080832033808552925290912054610848918691610843908690612bb0565b6119d8565b610853848484611a5f565b5060019392505050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160c81b900460ff161580156108bf5750602054600160c01b900460ff16155b80156108d45750602054600160a01b900460ff165b6109045760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b42602154620151806109169190612bc3565b6014546109239190612b9d565b101561094957620151806014544261093b9190612bb0565b6109459190612bda565b6021555b806021600082825461095b9190612b9d565b90915550506021546040519081527fa7b24c66dd3269a292a60b3facdbb8f3e7557d1e19e64d99e0d6ee7250be63ad906020016107aa565b6000546001600160a01b031633146109d15760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160c81b900460ff161580156109f55750602054600160c01b900460ff16155b8015610a0a5750602054600160a01b900460ff165b610a3a5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b42602154603c610a4a9190612bc3565b610a5590603c612bc3565b610a60906018612bc3565b601454610a6d9190612b9d565b10156106ce5760208054600160c81b7fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff8216179091556040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d9190612b51565b6040519091507faf0fe1663cb7e005c807c426024d6b7bedd6fea7b9df02852418932d71cd78bd90600090a160205460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190612b6a565b610bde5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610508565b50565b610c7b604051806101c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000815260200160001515815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b604080516101c081018252602080546001600160a01b03168252600a5490820152600e5491810191909152601154606082015260808101610cba611fca565b81526020805460ff600160c01b820481161515928401929092526014546040840152600160b01b900416151560608201526023546001600160a01b03908116608083015260225460a0830152601e5460c0830152601d5460e0830152601f5416610100820152600061012090910152919050565b6000546001600160a01b031633148015610d515750602054600160b01b900460ff165b610d815760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b601d5461271083601654610d959190612bc3565b610d9f9190612bda565b10158015610daf57506127108211155b610ddf5760405162461bcd60e51b81526020600482015260016024820152606160f81b6044820152606401610508565b601e5461271082601654610df39190612bc3565b610dfd9190612bda565b10158015610e0d57506127108111155b610e3d5760405162461bcd60e51b81526020600482015260016024820152603160f91b6044820152606401610508565b61271082601654610e4e9190612bc3565b610e589190612bda565b601d5560165461271090610e6d908390612bc3565b610e779190612bda565b601e5561271082148015610e8c575080612710145b15610e9f576020805460ff60b01b191690555b60408051838152602081018390527f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d932791015b60405180910390a15050565b60606018805461043490612b17565b60006104c4338484611a5f565b6000546001600160a01b03163314610f375760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602254158015610f475750600082115b8015610f54575060648211155b610f845760405162461bcd60e51b81526020600482015260016024820152607960f81b6044820152606401610508565b6202a300816020015110158015610fa15750620d2f008160200151105b610fd15760405162461bcd60e51b81526020600482015260016024820152603d60f91b6044820152606401610508565b60228290553381526040516000908290610fea90612809565b81516001600160a01b0316815260209182015191810191909152604001604051809103906000f080158015611023573d6000803e3d6000fd5b506001600160a01b03811660008181526004602090815260408083208054600160ff199182168117909255600584529382902080549094161790925560225482519384523391840191909152908201529091507fc718bf738f6d7cb0af735b17552ef9e5f1857d1719d7f882b8780ea2f08b3e7f9060600160405180910390a16040805183516001600160a01b03168152602080850151908201527f8bdc63644658897d37c2cff731dd7a8898394f85b3c9d9b4b7879390385d4c26910160405180910390a1602380546001600160a01b0319166001600160a01b03929092169190911790555050565b6020546001600160a01b039081169082160361112857600080fd5b306001600160a01b0382160361113d57600080fd5b6008546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611190573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b49190612b51565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112239190612b6a565b6112535760405162461bcd60e51b81526020600482015260016024820152603960f91b6044820152606401610508565b610bde61202a565b6000546001600160a01b031633146112995760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b602054600160a01b900460ff16156112d75760405162461bcd60e51b81526020600482015260016024820152603160f81b6044820152606401610508565b60015447101561130d5760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610508565b8161132057600e83101561132057600080fd5b602080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790819055601e54601d549091600160b01b900460ff1680151560010361138557601654601e819055601d556020805460ff60b01b191690555b3060008181526004602090815260408083208054600160ff19918216811790925584546001600160a01b03908116865283862080548316841790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd80548316841790558686526005909452828520805482168317905584549093168452908320805483168217905561dead9092527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549091169091179055851561146057506020805460ff60c01b1916600160c01b1790556000611473565b60218790556020805460ff60c01b191690555b30600090815260066020526040908190205442601455600954915163a992664760e01b81526001600160a01b0388811660048301529192919091169063a992664790602401602060405180830381865afa1580156114d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f99190612b6a565b61150257600080fd5b601f80546001600160a01b0319166001600160a01b03888116918217835560165430600090815260076020908152604080832095835294815290849020919091559254825163c45a015560e01b8152925191169263c45a015592600480820193918290030181865afa15801561157c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a09190612bfc565b6001600160a01b031663c9c6539630601f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190612bfc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612bfc565b602080546001600160a01b0319166001600160a01b039283169081178255600090815260058083526040808320805460ff199081166001908117909255855487168552600486528285208054821683179055601f80548816865283862080548316841790558054881686529386529382902080549094161790925582546021549154835191861682524794820194909452918201528915156060820152911660808201527f0157a1a09a393e0b2567e699c9fafaa987dd8440f4b66795e9667d8749d7239e9060a00160405180910390a1602054601f5460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af11580156117be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e29190612b6a565b6118125760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610508565b601f546001600160a01b031663f305d7194730846000808861183542603c612b9d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156118a2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118c79190612c19565b50506025805460ff191660019081179091558415159003905061190257601e859055601d8490556020805460ff60b01b1916600160b01b1790555b5050505050505050565b6000546001600160a01b0316331461194a5760405162461bcd60e51b81526020600482015260016024820152606f60f81b6044820152606401610508565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392831690811782558152600460209081526040808320805460ff1990811660019081179092558454909516845260059092529091208054909216179055565b6001600160a01b0383166119eb57600080fd5b6001600160a01b0382166119fe57600080fd5b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611a7f57506001600160a01b03821615155b611a8857600080fd5b6001600160a01b038316600090815260066020526040902054811115611ad55760405162461bcd60e51b81526020600482015260026024820152611b1b60f11b6044820152606401610508565b602054600090600160a01b900460ff168015611afa5750602054600160b01b900460ff165b8015611b1f57506001600160a01b03841660009081526004602052604090205460ff16155b8015611b4457506001600160a01b03831660009081526004602052604090205460ff16155b15611b805781601e541015611b805760405162461bcd60e51b8152602060048201526002602482015261033360f41b6044820152606401610508565b602054600160a01b900460ff168015611ba25750602054600160b01b900460ff165b8015611bc757506001600160a01b03831660009081526005602052604090205460ff16155b15611c2657601d546001600160a01b038416600090815260066020526040902054611bf3908490612b9d565b1115611c265760405162461bcd60e51b8152602060048201526002602482015261333160f01b6044820152606401610508565b6000546001600160a01b03858116911614801590611c5257506000546001600160a01b03848116911614155b8015611c65575060255460ff1615156001145b15611d28576020546001600160a01b038581169116148015611c955750601f546001600160a01b03848116911614155b15611cd657600a8054906000611caa83612c47565b9190505550611cb960016120f2565b6064600e5483611cc99190612bc3565b611cd39190612bda565b90505b6020546001600160a01b038481169116148015611cfc57506001600160a01b0384163014155b15611d2857611d0b60006120f2565b606460115483611d1b9190612bc3565b611d259190612bda565b90505b30600090815260066020526040812054602054909150600090600160a81b900460ff16158015611d6557506020546001600160a01b038681169116145b8015611d7a57506001600160a01b0386163014155b8015611d865750600082115b8015611d955750601a54600a54115b15611e1357601b54821180611dd057506201518060145442611db79190612bb0565b118015611dc45750601054155b8015611dd05750601354155b15611e1357601954431115611e1357601c54821015611df757611df2826122f4565b611e02565b611e02601c546122f4565b611e0b476124b3565b504360195560015b8215611e8e5730600090815260066020526040902054611e34908490612b9d565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e859087815260200190565b60405180910390a35b6001600160a01b038616600090815260066020526040902054611eb2908590612bb0565b6001600160a01b0380881660009081526006602052604080822093909355908716815220548390611ee4908690612b9d565b611eee9190612bb0565b6001600160a01b0380871660008181526006602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611f388688612bb0565b60405190815260200160405180910390a38015611fc2576000611f84600860009054906101000a90046001600160a01b0316620186a047604051806020016040528060008152506127ef565b90508015611fc0576040514781527f2488b4123934dca0dca56f8f7005a71c0a52e2c9158fe31ac31869efe776d6eb9060200160405180910390a15b505b505050505050565b602054600090600160a01b900460ff16611fe45750600090565b60006201518060145442611ff89190612bb0565b6120029190612bda565b905060215481111561201657600091505090565b806021546120249190612bb0565b91505090565b602054600160a81b900460ff1615801561204d5750602054600160a01b900460ff165b156106ce57478015610bde57612062816124b3565b6008546040516000916001600160a01b03169047908381818185875af1925050503d80600081146120af576040519150601f19603f3d011682016040523d82523d6000602084013e6120b4565b606091505b5050905080156120ee576040514781527f2488b4123934dca0dca56f8f7005a71c0a52e2c9158fe31ac31869efe776d6eb90602001610ed1565b5050565b6000806000831561211157600f5492506010549150600e549050612121565b6012549250601354915060115490505b8181146122ee57600b546000036121ce57600c546014546121429190612b9d565b421061214f5750806122d8565b6002600c5461215e9190612bda565b60145461216b9190612b9d565b421061219857600461217d8385612bb0565b6121879190612bda565b6121919083612b9d565b90506122d8565b6004600c546121a79190612bda565b6014546121b49190612b9d565b42106121c657600261217d8385612bb0565b50815b6122d8565b600b5460010361220a57600d54600a5411156121eb5750806121ee565b50815b6014546121fd90611c20612b9d565b42106121c95750806122d8565b600b546002036122d557600d54600a5411806122355750600c546014546122319190612b9d565b4210155b156122415750806122d8565b6002600d546122509190612bda565b600a54118061227a57506002600c546122699190612bda565b6014546122769190612b9d565b4210155b1561228b57600461217d8385612bb0565b6004600d5461229a9190612bda565b600a5411806122c457506004600c546122b39190612bda565b6014546122c09190612b9d565b4210155b156121c657600261217d8385612bb0565b50805b83156122e857600e8190556122ee565b60118190555b50505050565b6020805460ff60a81b1916600160a81b1781556040805160028082526060820183526000939192909183019080368337019050509050308160008151811061233e5761233e612c60565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bb9190612bfc565b816001815181106123ce576123ce612c60565b6001600160a01b03909216602092830291909101909101526027541561241f5760c8602754836123fe9190612bc3565b6124089190612bda565b60268190556124179083612bb0565b602481905591505b601f546124379030906001600160a01b0316846119d8565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612470908590600090869030904290600401612c76565b600060405180830381600087803b15801561248a57600080fd5b505af115801561249e573d6000803e3d6000fd5b50506020805460ff60a81b1916905550505050565b600080600080602060179054906101000a900460ff161515600115151480156124eb57506276a700601454426124e99190612bb0565b105b156125cc5760646124fd86600a612bc3565b6125079190612bda565b93507f27becf433f6eafb15520b27cdc27123fc4bb3ab578777db9f713bd54da1611a68460405161253a91815260200190565b60405180910390a16009546040516000916001600160a01b03169086908381818185875af1925050503d806000811461258f576040519150601f19603f3d011682016040523d82523d6000602084013e612594565b606091505b50509050806125ca5760405162461bcd60e51b8152602060048201526002602482015261393960f01b6044820152606401610508565b505b60006027541180156125e057506000602654115b156126e657602454856026546125f69190612bc3565b6126009190612bda565b60268054600091829055602491909155601f54919450915061262d9030906001600160a01b0316836119d8565b601f546001600160a01b031663f305d7198430846000808361265042603c612b9d565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156126bd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126e29190612c19565b5050505b6023546001600160a01b0316156127e857602254606490846127088789612bb0565b6127129190612bb0565b61271c9190612bc3565b6127269190612bda565b6023546040519193506000916001600160a01b039091169084908381818185875af1925050503d8060008114612778576040519150601f19603f3d011682016040523d82523d6000602084013e61277d565b606091505b50509050806127b35760405162461bcd60e51b8152602060048201526002602482015261733960f01b6044820152606401610508565b6040518381527f3392b75a0721e4605be82daf22af3b927da9086deccc7dbb947b37bf895d3deb9060200160405180910390a1505b5050505050565b600080600080845160208601878a8af19695505050505050565b61116780612cea83390190565b60006020808352835180602085015260005b8181101561284457858101830151858201604001528201612828565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bde57600080fd5b6000806040838503121561288d57600080fd5b823561289881612865565b946020939093013593505050565b6000602082840312156128b857600080fd5b5035919050565b6000806000606084860312156128d457600080fd5b83356128df81612865565b925060208401356128ef81612865565b929592945050506040919091013590565b81516001600160a01b031681526101c081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015161294d60a084018215159052565b5060c083015160c083015260e083015161296b60e084018215159052565b50610100838101516001600160a01b0390811691840191909152610120808501519084015261014080850151908401526101608085015190840152610180808501518216908401526101a09384015116929091019190915290565b6000602082840312156129d857600080fd5b81356129e381612865565b9392505050565b600080604083850312156129fd57600080fd5b50508035926020909101359150565b6000808284036060811215612a2057600080fd5b833592506040601f1982011215612a3657600080fd5b506040516040810181811067ffffffffffffffff82111715612a6857634e487b7160e01b600052604160045260246000fd5b6040526020840135612a7981612865565b81526040939093013560208401525092909150565b8015158114610bde57600080fd5b600080600060608486031215612ab157600080fd5b833592506020840135612ac381612a8e565b91506040840135612ad381612865565b809150509250925092565b60008060408385031215612af157600080fd5b8235612afc81612865565b91506020830135612b0c81612865565b809150509250929050565b600181811c90821680612b2b57607f821691505b602082108103612b4b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612b6357600080fd5b5051919050565b600060208284031215612b7c57600080fd5b81516129e381612a8e565b634e487b7160e01b600052601160045260246000fd5b808201808211156104c8576104c8612b87565b818103818111156104c8576104c8612b87565b80820281158282048414176104c8576104c8612b87565b600082612bf757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612c0e57600080fd5b81516129e381612865565b600080600060608486031215612c2e57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612c5957612c59612b87565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015612cc85784516001600160a01b031683529383019391830191600101612ca3565b50506001600160a01b0396909616606085015250505060800152939250505056fe608060405234801561001057600080fd5b5060405161116738038061116783398101604081905261002f91610086565b80516001600160a01b031661004357600080fd5b8051600180546001600160a01b039092166001600160a01b0319928316179055670de0b6b3a76400006002556000805490911633179055602001516004556100f7565b60006040828403121561009857600080fd5b604080519081016001600160401b03811182821017156100c857634e487b7160e01b600052604160045260246000fd5b60405282516001600160a01b03811681146100e257600080fd5b81526020928301519281019290925250919050565b611061806101066000396000f3fe60806040526004361061009a5760003560e01c80638da5cb5b11610069578063cc3d967b1161004e578063cc3d967b1461027b578063ccec3716146102e7578063f2fde38b1461030757600080fd5b80638da5cb5b1461022e578063a694fc3a1461025b57600080fd5b80632e17de78146101cd578063372500ab146101ef5780633ccfd60b146102045780634f91440d1461021957600080fd5b366101c85734806100d65760405162461bcd60e51b81526020600482015260016024820152603960f91b60448201526064015b60405180910390fd5b33600090815260086020526040812080548392906100f5908490610f42565b90915550506007805482919060009061010f908490610f42565b909155505060035460000361013e5780600060050160008282546101339190610f42565b909155506101829050565b6003546002546005546101519084610f42565b61015b9190610f5b565b6101659190610f72565b60068054600090610177908490610f42565b909155505060006005555b60065460405133917f731185b941ee4773f1c8f1cf0c22be2c6b4eaeb0075fbb4c524ac1f80ad391f3916101be91858252602082015260400190565b60405180910390a2005b600080fd5b3480156101d957600080fd5b506101ed6101e8366004610f94565b610327565b005b3480156101fb57600080fd5b506101ed6104ca565b34801561021057600080fd5b506101ed6106c0565b34801561022557600080fd5b506101ed610845565b34801561023a57600080fd5b506001546040516001600160a01b0390911681526020015b60405180910390f35b34801561026757600080fd5b506101ed610276366004610f94565b6109c2565b34801561028757600080fd5b5061029b610296366004610fad565b610c17565b6040516102529190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102f357600080fd5b506101ed610302366004610fad565b610da1565b34801561031357600080fd5b506101ed610322366004610fad565b610edb565b6000811180156103465750336000908152600a60205260409020548111155b6103765760405162461bcd60e51b81526020600482015260016024820152603360f81b60448201526064016100cd565b33600090815260096020908152604080832054600254600654600a9094529184205490926103a391610f5b565b6103ad9190610f72565b6103b79190610fdd565b336000908152600a60205260408120805492935084929091906103db908490610fdd565b9091555050336000908152600d60209081526040808320429055600e9091528120805484929061040c908490610f42565b9091555050600254600654336000908152600a60205260409020546104319190610f5b565b61043b9190610f72565b3360009081526009602052604081209190915560038054849290610460908490610fdd565b9091555050801561049057336000908152600c60205260408120805483929061048a908490610f42565b90915550505b60405182815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd906020015b60405180910390a25050565b33600090815260096020908152604080832054600254600654600a909452919093205490916104f891610f5b565b6105029190610f72565b61050c9190610fdd565b336000908152600c60205260408120805490919061052b908490610f42565b9091555050336000908152600c6020526040902054806105715760405162461bcd60e51b81526020600482015260016024820152600760fb1b60448201526064016100cd565b600254600654336000908152600a60205260409020546105919190610f5b565b61059b9190610f72565b336000908152600960205260408120919091554782106105bb57476105bd565b815b336000908152600c60205260408120805492935083929091906105e1908490610fdd565b9091555050336000908152600b602052604081208054839290610605908490610f42565b909155505060405181815233907f1f89f96333d3133000ee447473151fa9606543368f02271c9d95ae14f13bcc679060200160405180910390a2604051600090339083908381818185875af1925050503d8060008114610681576040519150601f19603f3d011682016040523d82523d6000602084013e610686565b606091505b50509050806106bb5760405162461bcd60e51b81526020600482015260016024820152603960f81b60448201526064016100cd565b505050565b336000908152600e6020526040902054806107015760405162461bcd60e51b81526020600482015260016024820152603560f81b60448201526064016100cd565b600454336000908152600d602052604090205461071e9190610f42565b4210156107515760405162461bcd60e51b81526020600482015260016024820152601b60f91b60448201526064016100cd565b336000818152600e602052604080822091909155517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906107959084815260200190565b60405180910390a260005460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108129190610ff0565b6108425760405162461bcd60e51b81526020600482015260016024820152603760f81b60448201526064016100cd565b50565b336000908152600e6020526040812054806108865760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016100cd565b336000908152600a6020526040902054156108e05733600090815260096020908152604080832054600254600654600a909452919093205490916108c991610f5b565b6108d39190610f72565b6108dd9190610fdd565b91505b336000908152600e60209081526040808320839055600a9091528120805483929061090c908490610f42565b9091555050600254600654336000908152600a60205260409020546109319190610f5b565b61093b9190610f72565b3360009081526009602052604081209190915560038054839290610960908490610f42565b9091555050811561099057336000908152600c60205260408120805484929061098a908490610f42565b90915550505b60405181815233907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a906020016104be565b60008082116109d057600080fd5b336000908152600a602052604090205415610a2a5733600090815260096020908152604080832054600254600654600a90945291909320549091610a1391610f5b565b610a1d9190610f72565b610a279190610fdd565b90505b336000908152600e6020526040902054828110610a6b57336000908152600e602052604081208054859290610a60908490610fdd565b90915550610b3a9050565b6000610a778285610fdd565b336000818152600e6020526040808220829055905490516323b872dd60e01b81526004810192909252306024830152604482018390529192506001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190610ff0565b610b385760405162461bcd60e51b81526020600482015260016024820152601960f91b60448201526064016100cd565b505b336000908152600a602052604081208054859290610b59908490610f42565b9091555050600254600654336000908152600a6020526040902054610b7e9190610f5b565b610b889190610f72565b3360009081526009602052604081209190915560038054859290610bad908490610f42565b90915550508115610bdd57336000908152600c602052604081208054849290610bd7908490610f42565b90915550505b60405183815233907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9060200160405180910390a2505050565b610c506040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038216600090815260096020908152604080832054600254600654600a909452918420548493849391610c8a9190610f5b565b610c949190610f72565b6001600160a01b0387166000908152600c6020526040902054610cb79190610f42565b610cc19190610fdd565b6004546001600160a01b0387166000908152600d6020526040902054919250610ce991610f42565b4210610d0f576001600160a01b0385166000908152600e60205260409020549250610d42565b6004546001600160a01b0386166000908152600d6020526040902054610d359042610fdd565b610d3f9190610f42565b91505b6040805160c0810182529182526020808301949094526001600160a01b039095166000818152600e855286812054838801528181526008855286812054606084015260808301939093528252600a909252929092205460a08301525090565b6001546040516370a0823160e01b81523060048201526000916001600160a01b038481169263a9059cbb92919091169083906370a0823190602401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d9190611012565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea49190610ff0565b905080610ed75760405162461bcd60e51b81526020600482015260016024820152603160f81b60448201526064016100cd565b5050565b6001546001600160a01b03163314610ef257600080fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f5557610f55610f2c565b92915050565b8082028115828204841417610f5557610f55610f2c565b600082610f8f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610fa657600080fd5b5035919050565b600060208284031215610fbf57600080fd5b81356001600160a01b0381168114610fd657600080fd5b9392505050565b81810381811115610f5557610f55610f2c565b60006020828403121561100257600080fd5b81518015158114610fd657600080fd5b60006020828403121561102457600080fd5b505191905056fea26469706673582212201be65b40cb7776d62b638c878f0e41b37b004cbd039f7d54b20da61e3c9965eb64736f6c63430008190033a264697066735822122046423ee4c935bdced56258cde1f3d1fb2bf342aa964757dcbe6d6e2f64a4fcdf64736f6c63430008190033a2646970667358221220813ad1bb387b1626fb55a5f7da3188a0ea2efe4f0e527afd6d020a88cd87ea3264736f6c63430008190033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a8939be8156f6adc5fbb519e346a11167acba1050000000000000000000000009c84288cb2c0fcad30f031ac1d4b1633ef994c63000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b948830000000000000000000000004f0fd563be89ec8c3e7d595bf3639128c0a7c33a

-----Decoded View---------------
Arg [0] : _args (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000a8939be8156f6adc5fbb519e346a11167acba105
Arg [1] : 0000000000000000000000009c84288cb2c0fcad30f031ac1d4b1633ef994c63
Arg [2] : 000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883
Arg [5] : 000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883
Arg [6] : 000000000000000000000000a6ad18c2ac47803e193f75c3677b14bf19b94883
Arg [7] : 0000000000000000000000004f0fd563be89ec8c3e7d595bf3639128c0a7c33a


Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.