ETH Price: $3,117.10 (-4.05%)
 

Overview

Max Total Supply

1,000,000 TRENCH

Holders

270 (0.00%)

Transfers

-
1 ( -66.67%)

Market

Price

$0.03 @ 0.000008 ETH (-6.77%)

Onchain Market Cap

$25,277.28

Circulating Supply Market Cap

$25,277.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TrenchDigger is a PvP speculation protocol powered by Behavioral Finance (BeFi).

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TrenchDigger

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 800 runs

Other Settings:
paris EvmVersion
File 1 of 1 : TrenchDigger.sol
// SPDX-License-Identifier: MIT

/*

 _________  ______    ______   ___   __    ______   ___   ___     
/________/\/_____/\  /_____/\ /__/\ /__/\ /_____/\ /__/\ /__/\    
\__.::.__\/\:::_ \ \ \::::_\/_\::\_\\  \ \\:::__\/ \::\ \\  \ \   
   \::\ \   \:(_) ) )_\:\/___/\\:. `-\  \ \\:\ \  __\::\/_\ .\ \  
    \::\ \   \: __ `\ \\::___\/_\:. _    \ \\:\ \/_/\\:: ___::\ \ 
     \::\ \   \ \ `\ \ \\:\____/\\. \`-\  \ \\:\_\ \ \\: \ \\::\ \
      \__\/    \_\/ \_\/ \_____\/ \__\/ \__\/ \_____\/ \__\/ \::\/
 ______    ________  _______    _______    ______   ______        
/_____/\  /_______/\/______/\  /______/\  /_____/\ /_____/\       
\:::_ \ \ \__.::._\/\::::__\/__\::::__\/__\::::_\/_\:::_ \ \      
 \:\ \ \ \   \::\ \  \:\ /____/\\:\ /____/\\:\/___/\\:(_) ) )_    
  \:\ \ \ \  _\::\ \__\:\\_  _\/ \:\\_  _\/ \::___\/_\: __ `\ \   
   \:\/.:| |/__\::\__/\\:\_\ \ \  \:\_\ \ \  \:\____/\\ \ `\ \ \  
    \____/_/\________\/ \_____\/   \_____\/   \_____\/ \_\/ \_\/       


TG: https://t.me/trenchdiggereth
X: https://x.com/i/communities/1939432261595636176

Yo Degens,

Welcome to TrenchDigger, a permissionless arena for behavioral liquidity 
where bullPosts roar and FUDs lurk in the trenches.

In TrenchDigger, the entrenched sentiment of any $TOKEN can be determined by analysing its bullPosts and FUDs. 
Your position is called a Dwelling which is also tradable. 
A dwelling - Bull or Bear - is locked for a set duration and liquidated at the end of that duration. 

Express bullish conviction by BullPosting (trading $TRENCH for $TOKEN) or 
bearish stance by Creating FUD (trading $TOKEN for $TRENCH). 
BullShit to fud a BullPost or BuryFUD to counter FUD. 

How to dig $TRENCH:
- Use Etherscan, DIY scripts, or the dApp, whatever suits your degen style
- Ensure $TOKEN is NOT a honeypot, Uniswap doesn't care, neither do I
- Make sure the $TRENCH <-> $TOKEN prices make sense
- Approve $TRENCH CA to spend $TRENCH/$TOKEN
- Entrench as a bull or bear in a Dwelling using BullPost, BullShit, CreateFUD, BuryFUD
- BullPost on $TOKEN by sending x $TRENCH for y $TOKEN for duration of 1hr/6hrs/12hrs/24hrs/7days/15days/30days
  BullShit on the BullPost by sending y $TOKEN for x $TRENCH within the duration
- CreateFUD on $TOKEN by sending p $TOKEN for q $TRENCH for duration of 1hr/6hrs/12hrs/24hrs/7days/15days/30days
  BuryFUD on $TOKEN by sending q $TRENCH for p $TOKEN within the duration
- Set selling price for your Dwelling and trade Dwellings using $TRENCH
- Withdraw your $TRENCH or $TOKEN after the duration ends
- There is no fee, just pay gas

Example:
- Sensai is bullish on $PEPE
- current $TRENCH <-> $PEPE happens to be 1:1
- Sensai bullPosts "to the moon" with 10 $TRENCH for 9 $PEPE for a duration lock of 24hrs, 
  entrenches a new dwelling with id 1 as the bull 
- Becker calls bullShit "to the dump" on Sensai's bullPost and transfers 9 $PEPE, 
  enters dwelling 1 as the bear
- $PEPE price shoots and current $TRENCH <-> $PEPE happens to be 3:1 
- Sensai needs a quick exit and sets the price of his dwelling as 15 $TRENCH
- Shark is also bullish on $PEPE and buys dwelling 1 as the bull replacing Sensai, 
  transferring 15 $TRENCH to Sensai
- 24 hrs are over and $PEPE is still holding 3:1
- position is liquidated with Shark receiving 9 $PEPE and Becker receiving 10 $TRENCH
- Shark swaps 9 $PEPE for 25 $TRENCH on dex, profits of 10 $TRENCH

$TRENCH-nomics:
Supply: 1000000 $TRENCH
Launch Market Cap ~ 5000 USD, Ratio of 1 $ETH to 1000000 $TRENCH with 100% supply in uni-v3 lp
Wallet Limits - 1% of supply, increased gradually.

Liquidity pool position mint NFT is PERMA-LOCKED into this contract. 
$TRENCH is DEFLATIONARY in nature, 1% LP fees in $TRENCH is burnt on-chain.

$TRENCH-map:
Trench web app will be deployed on IPFS, hash will be updated and announced on-chain
Leaderboard for most profitable dwellings and top diggers
TrenchDigger TG bot & X agent: share on-chain bullPosts and Leaderboards
 
devs are welcome to build more dApps, bots, tools, scripts, subgraphs on $TRENCH
AI Agents can learn to dig $TRENCH and trade dwellings as a test for intelligent belligerence

Contract will NOT be renounced. 
Read emitted contract events for announcements and navigation through the trenches.

Yours truly,
dev

Telegram : https://t.me/trenchdiggereth
Twitter  : https://x.com/i/communities/1939432261595636176

P.S. I will never DM you.

*/
pragma solidity ^0.8.25; 


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 INonfungiblePositionManager {
    struct CollectParams {
        uint256 tokenId;
        address recipient;
        uint128 amount0Max;
        uint128 amount1Max;
    }
    function collect(CollectParams calldata params) external payable returns (uint256 amount0, uint256 amount1);
    function positions(uint256 tokenId)
        external
        view
        returns (
            uint96 nonce,
            address operator,
            address token0,
            address token1,
            uint24 fee,
            int24 tickLower,
            int24 tickUpper,
            uint128 liquidity,
            uint256 feeGrowthInside0LastX128,
            uint256 feeGrowthInside1LastX128,
            uint128 tokensOwed0,
            uint128 tokensOwed1
        );

    struct MintParams {
        address token0;
        address token1;
        uint24 fee;
        int24 tickLower;
        int24 tickUpper;
        uint256 amount0Desired;
        uint256 amount1Desired;
        uint256 amount0Min;
        uint256 amount1Min;
        address recipient;
        uint256 deadline;
    }

    function createAndInitializePoolIfNecessary(
        address token0,
        address token1,
        uint24 fee,
        uint160 sqrtPriceX96
    ) external payable returns (address pool);

    function mint(MintParams calldata params)
        external
        payable
        returns (
            uint256 tokenId,
            uint128 liquidity,
            uint256 amount0,
            uint256 amount1
        );
    function factory() external pure returns (address);
    function WETH9() external pure returns (address);
}

interface IUniswapV3Factory {
    /// @return pool The address of the newly created pool
    function createPool(
        address tokenA,
        address tokenB,
        uint24 fee
    ) external returns (address pool);
}

interface IUniswapV3Pool {
    function initialize(uint160 sqrtPriceX96) external;
}


/// @title TrenchDigger 
/// @dev contains ERC20 methods along with TrenchDigger extension
contract TrenchDigger is IERC20 {
    mapping (address => uint256)  balances_; 
    mapping (address => mapping (address => uint256))  allowances_; 
    mapping(address => bool)  isExempted_; 
    mapping (uint256 => Entrench) dwellings_; 
    uint256 nextDwelling_;
    address owner_; 
    address spawner_;
    bool  tradingEnabled_; 
    uint256  tradingEnabledTs_;
    uint8   decimals_;
    uint256   supply_;
    string   name_;
    string   symbol_;
    uint256  maxWallet_; 
    uint256  maxTx_;
    bool  walletLtd_;
    INonfungiblePositionManager  positionManager_;
    address  uniswapV3Pool_;
    uint256 lpNFTId_;
    bool isEntered_;

    event StartedDigging(address pair, uint256 liq, address router);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event IncreasedLimits(uint256 maxWallet_, uint256 maxTx);
    event BullPost(uint256 id, address token, Entrench entrench, string message, uint256 price);
    event CreateFud(uint256 id, address token, Entrench entrench, string message, uint256 price);
    event BullShit(uint256 id, address token, string message, uint256 price);
    event BuryFud(uint256 id, address token, string message, uint256 price);
    event Announcement(string message);
    event SocialsRequest(string twitter, string telegram, string message);
    event BullChanged(uint256 id, address oldBull, address newBull, uint256 price);
    event BearChanged(uint256 id, address oldBear, address newBear, uint256 price);
    event Withdrawn(uint256 id);
    event BullPriceChanged(uint256 id, uint256 price);
    event BearPriceChanged(uint256 id, uint256 price);

    struct Initializer {
        address owner;
        uint256 maxWallet;
        uint256 maxTx;
    }

    struct Entrench {
        address token;
        address bull;
        address bear;
        uint256 amount;
        uint256 cost;
        uint256 duration;
        uint256 createTs;
        uint256 status;
        uint256 bullPrice;
        uint256 bearPrice;
        bool isBull;
    }

    //reentrancy lock
    modifier lockTheEntry {
        isEntered_ = true;
        _;
        isEntered_ = false;
    }

    /// @notice Constructor 
    constructor(Initializer memory params) {
        spawner_ = msg.sender;
        owner_ = payable(params.owner);
        decimals_ = 18;
        name_ = "TrenchDigger";
        symbol_ = "TRENCH";
        supply_ = 1000000 * 10**decimals_;
           
        walletLtd_ = true;   
        maxWallet_ = supply_ * params.maxWallet / 10000; 
        maxTx_ = supply_ * params.maxTx / 10000;
        if (params.maxWallet == 10000 && params.maxTx == 10000) {
            walletLtd_ = false;
        }

        isExempted_[address(this)] = true;
        isExempted_[address(owner_)] = true;
        isExempted_[address(spawner_)] = true;
        isExempted_[address(0x000000000000000000000000000000000000dEaD)] = true;
        balances_[address(this)] = supply_;
        emit OwnershipTransferred(address(0), owner_);
        emit IncreasedLimits(params.maxWallet, params.maxTx); 
        emit Transfer(address(0), address(this), supply_);
    } 


    /// @notice Create liquidity pool
    /// @dev
    function startDigging(address pmgr, uint160 sqrtPriceX96, INonfungiblePositionManager.MintParams memory params) external  {
        require(msg.sender == owner_ || msg.sender == spawner_);
        require(!tradingEnabled_);
        
        tradingEnabled_ = true;
        tradingEnabledTs_ = block.timestamp;

        uint256 maxTxTemp = maxTx_;
        uint256 maxWalletTemp = maxWallet_;
        bool walletLtdTemp = walletLtd_;
        
        if(walletLtd_ == true) {
            maxTx_ = supply_;
            maxWallet_ = supply_;
            walletLtd_ = false;
        }
        
        positionManager_ = INonfungiblePositionManager(pmgr);
        isExempted_[address(positionManager_)] = true;

        allowances_[address(this)][address(positionManager_)] = supply_;

        require(sqrtPriceX96 >= 0, "sq");
        require(params.token0 != params.token1);
        require(params.token1 == address(this) || params.token0 == address(this),"s2");
        if(params.token1 == address(this)) {
            require(params.amount1Desired == supply_,"s6");
        } else {
            require(params.amount0Desired == supply_,"s6");
        }
       
        uniswapV3Pool_ = positionManager_.createAndInitializePoolIfNecessary(params.token0, params.token1, params.fee, sqrtPriceX96);
        isExempted_[address(uniswapV3Pool_)] = true;
        (lpNFTId_,,,) = positionManager_.mint(params);

        emit StartedDigging(uniswapV3Pool_, address(this).balance, address(positionManager_));
        
        if(walletLtdTemp == true) {
            maxTx_ = maxTxTemp;
            maxWallet_ = maxWalletTemp;
            walletLtd_ = true;
        }

    }

    ///@dev Increases wallet and tx limits
    function increaseLimits(uint256 _maxwallet, uint256 _maxtx) external {
        require(msg.sender == owner_ && walletLtd_);
        require(supply_ * _maxwallet / 10000 >= maxWallet_ && _maxwallet <= 10000, "a");
        require(supply_ * _maxtx / 10000 >= maxTx_ && _maxtx <= 10000, "b");
        maxWallet_ = supply_ * _maxwallet / 10000;   
        maxTx_ = supply_ * _maxtx / 10000;
        
        if (_maxwallet == 10000 && _maxtx == 10000) {
            walletLtd_ = 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 supply_;
    }

    ///@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 ERC20 transfer
    /// @dev 
    function _transfer(address _from, address _to, uint256 _amount) private {
        require(_from != address(0) && _to != address(0));
        require(balances_[_from] >= _amount, "ba");
          
        if (tradingEnabled_ && walletLtd_ && !isExempted_[_from] && !isExempted_[_to]) {
            require(maxTx_ >= _amount, "mt");
        }
        if (tradingEnabled_ && walletLtd_ && !isExempted_[_to]) {
            require((balances_[_to] + _amount) <= maxWallet_, "mw");
        }

        balances_[_from] = balances_[_from] - _amount;
        balances_[_to] = balances_[_to] + _amount;
        emit Transfer(_from, _to, _amount);

    }

    /// @notice recovers eth 
    /// @dev 
    function recoverEth() external lockTheEntry {
        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            (bool ret, ) = owner_.call{value: address(this).balance}("");
        }
    }
    
    /// @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_);
        emit OwnershipTransferred(owner_, _newOwner);
        owner_ = _newOwner;    
    }
    
    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() public view returns (address) {
        return owner_;
    }
    
    /// @notice Claim LP Rewards and Burn $TRENCH
    /// @dev 
    function claimLPRewards() external lockTheEntry {
        require(tradingEnabledTs_ > 0, "tc");
        (uint256 amount0, uint256 amount1) = positionManager_.collect(
            INonfungiblePositionManager.CollectParams({
                tokenId: lpNFTId_,
                recipient: address(this),
                amount0Max: type(uint128).max,
                amount1Max: type(uint128).max
            })
        );

        (,, address token0, address token1,,,,,,,,) = positionManager_.positions(lpNFTId_);

        if(token0 == address(this)) {
            if(amount0 > 0)
                require(IERC20(address(this)).transfer(address(0x000000000000000000000000000000000000dEaD), amount0),"cr1");
            if(amount1 > 0)
                require(IERC20(token1).transfer(owner_, amount1),"cr2");
        } else {
            if(amount1 > 0)
                require(IERC20(address(this)).transfer(address(0x000000000000000000000000000000000000dEaD), amount1),"cr3");
            if(amount0 > 0)
                require(IERC20(token0).transfer(owner_, amount0),"cr4");  
        }

    }

    /// @notice Dev Announcements
    /// @dev check emitted events
    function announce(string calldata _announcement) external {
        require(msg.sender == owner_);
        emit Announcement(_announcement);
    }
 
    /// @notice bullPost create a locked position with $trench for any $token
    /// @dev requires approval for $trench ca to spend $trench on your behalf
    /// @param _token address of any $token
    /// @param _amount $trench to be transferred to this contract in wei
    /// @param _cost $token required to be transferred by bear to this contract in wei
    /// @param _duration in seconds
    /// @param _price price of bull dwelling in $trench, 0 if you dont wish to sell 
    /// @param _message bull post
    function bullPost(address _token, uint256 _amount, uint256 _cost, uint256 _duration, uint256 _price, string calldata _message) external lockTheEntry {
        //am ready to buy _amount $token using _cost $trench for _duration seconds
        require(tradingEnabledTs_ > 0, "bp1");
        require(_duration == 1 hours || _duration == 6 hours || _duration == 12 hours || _duration == 24 hours || _duration == 7 days || _duration == 15 days || _duration == 30 days, "bp2");
        require(IERC20(address(this)).transferFrom(msg.sender, address(this), _amount), "bp3");
        nextDwelling_ += 1;
        dwellings_[nextDwelling_] = Entrench(_token, msg.sender, address(0), _amount, _cost, _duration, block.timestamp, 1, _price, 0, true);
        emit BullPost(nextDwelling_, _token, dwellings_[nextDwelling_], _message, _price);
    }

    /// @notice bullShit on any bullpost by entering locked position with $token 
    /// @dev requires approval for $trench ca to spend $token on your behalf
    /// @param _id id of the dwelling
    /// @param _price price of bear dwelling in $trench, 0 if you dont wish to sell 
    /// @param _message bullshit
    function bullShit(uint256 _id, uint256 _price, string calldata _message) external lockTheEntry {
        //status=0-none,1-active,2-sold,3-claimed
        require(tradingEnabledTs_ > 0, "bs1");
        require(dwellings_[_id].bull != msg.sender && dwellings_[_id].bear != msg.sender, "bs2");
        require(dwellings_[_id].status == 1 && dwellings_[_id].isBull == true, "bs3");
        require(block.timestamp - dwellings_[_id].createTs < dwellings_[_id].duration, "bs4");
        require(IERC20(dwellings_[_id].token).transferFrom(msg.sender, address(this), dwellings_[_id].cost), "bs5");
        dwellings_[_id].status = 2;
        dwellings_[_id].bear = msg.sender;
        dwellings_[_id].bearPrice = _price;
        emit BullShit(_id, dwellings_[_id].token, _message, _price);
    }

    /// @notice createFud create a locked position(dwelling) with any $token for $trench
    /// @dev requires approval for $trench ca to spend $token on your behalf
    /// @param _token address of any $token
    /// @param _amount $token in wei transferred into this contract
    /// @param _cost $trench in wei to be transferred by bull
    /// @param _duration in seconds
    /// @param _price price of the created bear dwelling in $trench, 0 if you dont wish to sell 
    /// @param _message FUD 
    function createFUD(address _token, uint256 _amount, uint256 _cost, uint256 _duration, uint256 _price, string calldata _message) external lockTheEntry {
        require(tradingEnabledTs_ > 0, "cf1");
        require(_duration == 1 hours || _duration == 6 hours || _duration == 12 hours || _duration == 24 hours || _duration == 7 days || _duration == 15 days || _duration == 30 days, "cf2");
        require(IERC20(_token).transferFrom(msg.sender, address(this), _amount), "cf3");
        nextDwelling_ += 1;
        dwellings_[nextDwelling_] = Entrench(_token, address(0), msg.sender, _amount, _cost, _duration, block.timestamp, 1, 0, _price, false);
        emit CreateFud(nextDwelling_, _token, dwellings_[nextDwelling_], _message, _price);
    }

    /// @notice bury a FUD by entering a locked position with $trench for $token 
    /// @dev requires approval for $trench ca to spend $trench on your behalf
    /// @param _id id of the dwelling
    /// @param _price price of bull dwelling in $trench, 0 if you dont wish to sell 
    /// @param _message bullish message 
    function buryFUD(uint256 _id, uint256 _price, string calldata _message) external lockTheEntry {
        require(tradingEnabledTs_ > 0, "bf1");
        require(dwellings_[_id].bear != msg.sender && dwellings_[_id].bull != msg.sender, "bf2");
        require(dwellings_[_id].status == 1, "bzf3");
        require(!dwellings_[_id].isBull, "bf4z");
        require(block.timestamp - dwellings_[_id].createTs < dwellings_[_id].duration, "bf4");
        require(IERC20(address(this)).transferFrom(msg.sender, address(this), dwellings_[_id].cost), "bf5");
        dwellings_[_id].status = 2;
        dwellings_[_id].bull = msg.sender;
        dwellings_[_id].bullPrice = _price;
        emit BuryFud(_id, dwellings_[_id].token, _message, _price);
    }

    /// @notice withdraw $trench or $token after end of lock duration
    /// @dev pass appropriate id
    /// @param _id id of the dwelling
    function withdraw(uint256 _id) external lockTheEntry {
        require(tradingEnabledTs_ > 0, "w1");
        require(block.timestamp - dwellings_[_id].createTs >= dwellings_[_id].duration, "w2");
        require(dwellings_[_id].status > 0 && dwellings_[_id].status < 3, "w3");
        if(dwellings_[_id].status == 1) {
            if(dwellings_[_id].isBull == true) {
                require(IERC20(address(this)).transfer(dwellings_[_id].bull, dwellings_[_id].amount), "w4");
            } else {
                require(IERC20(dwellings_[_id].token).transfer(dwellings_[_id].bear, dwellings_[_id].amount), "w5");
            }
        } else {
            if(dwellings_[_id].isBull == true) {
                require(IERC20(address(this)).transfer(dwellings_[_id].bear, dwellings_[_id].amount), "w6");
                require(IERC20(dwellings_[_id].token).transfer(dwellings_[_id].bull, dwellings_[_id].cost), "w7");    
            } else {
                require(IERC20(address(this)).transfer(dwellings_[_id].bear, dwellings_[_id].cost), "w8");
                require(IERC20(dwellings_[_id].token).transfer(dwellings_[_id].bull, dwellings_[_id].amount), "w9");          
            }
        }
        dwellings_[_id].status = 3;
        emit Withdrawn(_id);
    }

    /// @notice get the details of a bullPost or createdFud
    /// @dev pass appropriate id
    /// @param _id id of the dwelling
    function getDwelling(uint256 _id) external view returns (Entrench memory) {
        return dwellings_[_id];
    }

    /// @notice set the selling price for your dwelling
    /// @dev pass appropriate id and new price
    /// @param _id id of the dwelling
    /// @param _price new price, 0 if you dont wish to sell
    function setDwellingPrice(uint256 _id, uint256 _price) external lockTheEntry {
        require(dwellings_[_id].status > 0 && dwellings_[_id].status < 3, "sd1");
        require(block.timestamp - dwellings_[_id].createTs < dwellings_[_id].duration, "sd2");
        if(msg.sender == dwellings_[_id].bull) {
            dwellings_[_id].bullPrice = _price;
            emit BullPriceChanged(_id, _price);
        } else if (msg.sender == dwellings_[_id].bear) {
            dwellings_[_id].bearPrice = _price;
            emit BearPriceChanged(_id, _price);
        }
    }

    /// @notice buy dwelling, requires allowance for $trench ca to spend on your behalf 
    /// @dev pass appropriate id, isBull or not and new price
    /// @param _id id of the dwelling
    /// @param _isBull true to be the bull, false to be the bear
    /// @param _newPrice price after the buy, 0 if you dont wish to sell
    function buyDwelling(uint256 _id, bool _isBull, uint256 _newPrice) external lockTheEntry {
        require(dwellings_[_id].status > 0 && dwellings_[_id].status < 3, "bd1");
        require(block.timestamp - dwellings_[_id].createTs < dwellings_[_id].duration, "bd2");
        if(_isBull == true) {
            require(dwellings_[_id].bullPrice > 0, "bd3");
            require(dwellings_[_id].bull != msg.sender && dwellings_[_id].bear != msg.sender , "bd4");
            require(IERC20(address(this)).transferFrom(msg.sender, dwellings_[_id].bull, dwellings_[_id].bullPrice), "bd5");  
            emit BullChanged(_id, dwellings_[_id].bull, msg.sender, _newPrice);
            dwellings_[_id].bull = msg.sender;
            dwellings_[_id].bullPrice = _newPrice;
            
        } else {
            require(dwellings_[_id].bearPrice > 0, "bd6");
            require(dwellings_[_id].bull != msg.sender && dwellings_[_id].bear != msg.sender, "bd7");
            require(IERC20(address(this)).transferFrom(msg.sender, dwellings_[_id].bear, dwellings_[_id].bearPrice), "bd8");
            emit BearChanged(_id, dwellings_[_id].bear, msg.sender, _newPrice);
            dwellings_[_id].bear = msg.sender;
            dwellings_[_id].bearPrice = _newPrice;
        }
    }

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

}

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":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxTx","type":"uint256"}],"internalType":"struct TrenchDigger.Initializer","name":"params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Announcement","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"ownerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"oldBear","type":"address"},{"indexed":false,"internalType":"address","name":"newBear","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BearChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BearPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"oldBull","type":"address"},{"indexed":false,"internalType":"address","name":"newBull","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BullChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bull","type":"address"},{"internalType":"address","name":"bear","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"createTs","type":"uint256"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"uint256","name":"bullPrice","type":"uint256"},{"internalType":"uint256","name":"bearPrice","type":"uint256"},{"internalType":"bool","name":"isBull","type":"bool"}],"indexed":false,"internalType":"struct TrenchDigger.Entrench","name":"entrench","type":"tuple"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BullPost","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BullPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BullShit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"BuryFud","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bull","type":"address"},{"internalType":"address","name":"bear","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"createTs","type":"uint256"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"uint256","name":"bullPrice","type":"uint256"},{"internalType":"uint256","name":"bearPrice","type":"uint256"},{"internalType":"bool","name":"isBull","type":"bool"}],"indexed":false,"internalType":"struct TrenchDigger.Entrench","name":"entrench","type":"tuple"},{"indexed":false,"internalType":"string","name":"message","type":"string"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"CreateFud","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"IncreasedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"twitter","type":"string"},{"indexed":false,"internalType":"string","name":"telegram","type":"string"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"SocialsRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"liq","type":"uint256"},{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"StartedDigging","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_announcement","type":"string"}],"name":"announce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_message","type":"string"}],"name":"bullPost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_message","type":"string"}],"name":"bullShit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_message","type":"string"}],"name":"buryFUD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_isBull","type":"bool"},{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"buyDwelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLPRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"string","name":"_message","type":"string"}],"name":"createFUD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getDwelling","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"bull","type":"address"},{"internalType":"address","name":"bear","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"createTs","type":"uint256"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"uint256","name":"bullPrice","type":"uint256"},{"internalType":"uint256","name":"bearPrice","type":"uint256"},{"internalType":"bool","name":"isBull","type":"bool"}],"internalType":"struct TrenchDigger.Entrench","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxwallet","type":"uint256"},{"internalType":"uint256","name":"_maxtx","type":"uint256"}],"name":"increaseLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setDwellingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pmgr","type":"address"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"components":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"uint256","name":"amount0Desired","type":"uint256"},{"internalType":"uint256","name":"amount1Desired","type":"uint256"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct INonfungiblePositionManager.MintParams","name":"params","type":"tuple"}],"name":"startDigging","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50604051613e4f380380613e4f83398101604081905261002f916102bb565b600680546001600160a01b031990811633179091558151600580546001600160a01b0392909216919092161790556008805460ff1916601217905560408051808201909152600c81526b2a3932b731b42234b3b3b2b960a11b6020820152600a9061009a90826103b3565b506040805180820190915260068152650a8a48a9c86960d31b6020820152600b906100c590826103b3565b506008546100d79060ff16600a61056e565b6100e490620f4240610584565b6009819055600e805460ff191660011790556020820151612710916101099190610584565b610113919061059b565b600c5560408101516009546127109161012b91610584565b610135919061059b565b600d55602081015161271014801561015257508060400151612710145b1561016257600e805460ff191690555b3060008181526002602090815260408083208054600160ff199182168117909255600580546001600160a01b03908116875284872080548416851790556006548116875284872080548416851790557f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80549093169093179091556009549585529284905281842094909455905490519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a37f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d93278160200151826040015160405161025c929190918252602082015260400190565b60405180910390a160095460405190815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506105bd565b634e487b7160e01b600052604160045260246000fd5b6000606082840312156102cd57600080fd5b604051606081016001600160401b03811182821017156102ef576102ef6102a5565b60405282516001600160a01b038116811461030957600080fd5b8152602083810151908201526040928301519281019290925250919050565b600181811c9082168061033c57607f821691505b60208210810361035c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103ae576000816000526020600020601f850160051c8101602086101561038b5750805b601f850160051c820191505b818110156103aa57828155600101610397565b5050505b505050565b81516001600160401b038111156103cc576103cc6102a5565b6103e0816103da8454610328565b84610362565b602080601f83116001811461041557600084156103fd5750858301515b600019600386901b1c1916600185901b1785556103aa565b600085815260208120601f198616915b8281101561044457888601518255948401946001909101908401610425565b50858210156104625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156104c35781600019048211156104a9576104a9610472565b808516156104b657918102915b93841c939080029061048d565b509250929050565b6000826104da57506001610568565b816104e757506000610568565b81600181146104fd576002811461050757610523565b6001915050610568565b60ff84111561051857610518610472565b50506001821b610568565b5060208310610133831016604e8410600b8410161715610546575081810a610568565b6105508383610488565b806000190482111561056457610564610472565b0290505b92915050565b600061057d60ff8416836104cb565b9392505050565b808202811582820484141761056857610568610472565b6000826105b857634e487b7160e01b600052601260045260246000fd5b500490565b613883806105cc6000396000f3fe60806040526004361061018f5760003560e01c806378f8484b116100d6578063c9e014e71161007f578063f2fde38b11610059578063f2fde38b14610489578063f30b2a24146104a9578063f628146b146104c957600080fd5b8063c9e014e7146103f6578063dd62ed3e14610423578063ea0a52371461046957600080fd5b8063a9059cbb116100b0578063a9059cbb146103a1578063bcdb446b146103c1578063c7f6fea8146103d657600080fd5b806378f8484b146103445780638da5cb5b1461036457806395d89b411461038c57600080fd5b80632e1a7d4d116101385780633cad2a0a116101125780633cad2a0a146102d95780634cbe8c14146102ee57806370a082311461030e57600080fd5b80632e1a7d4d14610277578063313ce5671461029757806337b24344146102b957600080fd5b806317c96e301161016957806317c96e301461021857806318160ddd1461023857806323b872dd1461025757600080fd5b806306fdde031461019b578063095ea7b3146101c657806309d9dcc3146101f657600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101b06104e9565b6040516101bd9190612e9d565b60405180910390f35b3480156101d257600080fd5b506101e66101e1366004612f14565b61057b565b60405190151581526020016101bd565b34801561020257600080fd5b50610216610211366004612f40565b610592565b005b34801561022457600080fd5b50610216610233366004612fab565b610750565b34801561024457600080fd5b506009545b6040519081526020016101bd565b34801561026357600080fd5b506101e6610272366004612ffe565b610a15565b34801561028357600080fd5b5061021661029236600461303f565b610abd565b3480156102a357600080fd5b5060085460405160ff90911681526020016101bd565b3480156102c557600080fd5b506102166102d4366004613066565b6110f8565b3480156102e557600080fd5b506102166115f6565b3480156102fa57600080fd5b5061021661030936600461308d565b611a5d565b34801561031a57600080fd5b5061024961032936600461310a565b6001600160a01b031660009081526020819052604090205490565b34801561035057600080fd5b5061021661035f366004612f40565b611dc4565b34801561037057600080fd5b506005546040516001600160a01b0390911681526020016101bd565b34801561039857600080fd5b506101b0611f42565b3480156103ad57600080fd5b506101e66103bc366004612f14565b611f51565b3480156103cd57600080fd5b50610216611f5e565b3480156103e257600080fd5b506102166103f136600461308d565b611fd6565b34801561040257600080fd5b5061041661041136600461303f565b61231a565b6040516101bd919061312e565b34801561042f57600080fd5b5061024961043e3660046131dc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561047557600080fd5b50610216610484366004613215565b612437565b34801561049557600080fd5b506102166104a436600461310a565b61247f565b3480156104b557600080fd5b506102166104c4366004612fab565b6124f2565b3480156104d557600080fd5b506102166104e43660046132c5565b6127bf565b6060600a80546104f8906133be565b80601f0160208091040260200160405190810160405280929190818152602001828054610524906133be565b80156105715780601f1061054657610100808354040283529160200191610571565b820191906000526020600020905b81548152906001019060200180831161055457829003601f168201915b5050505050905090565b6000610588338484612bba565b5060015b92915050565b6011805460ff19166001179055600082815260036020526040902060070154158015906105d15750600082815260036020819052604090912060070154105b6106085760405162461bcd60e51b815260206004820152600360248201526273643160e81b60448201526064015b60405180910390fd5b6000828152600360205260409020600581015460069091015461062b904261340e565b1061065e5760405162461bcd60e51b815260206004820152600360248201526239b21960e91b60448201526064016105ff565b6000828152600360205260409020600101546001600160a01b031633036106d25760008281526003602090815260409182902060080183905581518481529081018390527f58d5a56362e92d7dcea6a58fd13962b8e0e5fcf48794f09e1547f6924a06948a910160405180910390a1610742565b6000828152600360205260409020600201546001600160a01b031633036107425760008281526003602090815260409182902060090183905581518481529081018390527f5662df4684bb6fe102693c08536975bd679d9c6619b7f3366d9e9b0834714c70910160405180910390a15b50506011805460ff19169055565b6011805460ff191660011790556007546107925760405162461bcd60e51b815260206004820152600360248201526262733160e81b60448201526064016105ff565b6000848152600360205260409020600101546001600160a01b031633148015906107d657506000848152600360205260409020600201546001600160a01b03163314155b6108085760405162461bcd60e51b815260206004820152600360248201526231399960e91b60448201526064016105ff565b600084815260036020526040902060070154600114801561083f57506000848152600360205260409020600a015460ff1615156001145b6108715760405162461bcd60e51b815260206004820152600360248201526262733360e81b60448201526064016105ff565b60008481526003602052604090206005810154600690910154610894904261340e565b106108c75760405162461bcd60e51b8152602060048201526003602482015262189ccd60ea1b60448201526064016105ff565b60008481526003602052604090819020805460049182015492516323b872dd60e01b8152339281019290925230602483015260448201929092526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109599190613421565b61098b5760405162461bcd60e51b815260206004820152600360248201526262733560e81b60448201526064016105ff565b60008481526003602052604090819020600260078201819055810180546001600160a01b03191633179055600981018590555490517f657632ff1e3fc43186b0f328182aa4ae803d976b181ad235686b3da119f8a1cf916109fd9187916001600160a01b031690869086908990613467565b60405180910390a150506011805460ff191690555050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054821115610a6d5760405162461bcd60e51b8152602060048201526002602482015261323560f01b60448201526064016105ff565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610aa8918691610aa390869061340e565b612bba565b610ab3848484612c42565b5060019392505050565b6011805460ff19166001179055600754610afe5760405162461bcd60e51b8152602060048201526002602482015261773160f01b60448201526064016105ff565b60008181526003602052604090206005810154600690910154610b21904261340e565b1015610b545760405162461bcd60e51b81526020600482015260026024820152613b9960f11b60448201526064016105ff565b60008181526003602052604090206007015415801590610b865750600081815260036020819052604090912060070154105b610bb75760405162461bcd60e51b8152602060048201526002602482015261773360f01b60448201526064016105ff565b600081815260036020526040902060070154600103610d71576000818152600360205260409020600a015460ff161515600103610cb0576000818152600360208190526040918290206001810154910154915163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152309063a9059cbb906044016020604051808303816000875af1158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190613421565b610cab5760405162461bcd60e51b81526020600482015260026024820152611dcd60f21b60448201526064016105ff565b61109d565b600081815260036020819052604091829020805460028201549190920154925163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352169063a9059cbb906044016020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613421565b610cab5760405162461bcd60e51b8152602060048201526002602482015261773560f01b60448201526064016105ff565b6000818152600360205260409020600a015460ff161515600103610f11576000818152600360208190526040918290206002810154910154915163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152309063a9059cbb906044016020604051808303816000875af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190613421565b610e4c5760405162461bcd60e51b81526020600482015260026024820152613b9b60f11b60448201526064016105ff565b6000818152600360205260409081902080546001820154600492830154935163a9059cbb60e01b81526001600160a01b03918216938101939093526024830193909352919091169063a9059cbb906044016020604051808303816000875af1158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190613421565b610cab5760405162461bcd60e51b8152602060048201526002602482015261773760f01b60448201526064016105ff565b600081815260036020526040908190206002810154600491820154925163a9059cbb60e01b8152309363a9059cbb93610f68936001600160a01b031692016001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab9190613421565b610fdc5760405162461bcd60e51b81526020600482015260026024820152610ee760f31b60448201526064016105ff565b600081815260036020819052604091829020805460018201549190920154925163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352169063a9059cbb906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190613421565b61109d5760405162461bcd60e51b8152602060048201526002602482015261773960f01b60448201526064016105ff565b60008181526003602081905260409182902060070155517f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b56906110e39083815260200190565b60405180910390a1506011805460ff19169055565b6011805460ff19166001179055600083815260036020526040902060070154158015906111375750600083815260036020819052604090912060070154105b6111695760405162461bcd60e51b815260206004820152600360248201526262643160e81b60448201526064016105ff565b6000838152600360205260409020600581015460069091015461118c904261340e565b106111bf5760405162461bcd60e51b815260206004820152600360248201526231321960e91b60448201526064016105ff565b8115156001036113da5760008381526003602052604090206008015461120d5760405162461bcd60e51b815260206004820152600360248201526262643360e81b60448201526064016105ff565b6000838152600360205260409020600101546001600160a01b0316331480159061125157506000838152600360205260409020600201546001600160a01b03163314155b6112835760405162461bcd60e51b815260206004820152600360248201526218990d60ea1b60448201526064016105ff565b60008381526003602052604090819020600181015460089091015491516323b872dd60e01b81523360048201526001600160a01b039091166024820152604481019190915230906323b872dd906064016020604051808303816000875af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190613421565b6113485760405162461bcd60e51b815260206004820152600360248201526262643560e81b60448201526064016105ff565b6000838152600360209081526040918290206001015482518681526001600160a01b039091169181019190915233818301526060810183905290517f8661281a60022b18b61d33579daa391cec879d924d9eadac21d4563853b7f94b9181900360800190a160008381526003602052604090206001810180546001600160a01b031916331790556008018190556115e7565b60008381526003602052604090206009015461141e5760405162461bcd60e51b815260206004820152600360248201526231321b60e91b60448201526064016105ff565b6000838152600360205260409020600101546001600160a01b0316331480159061146257506000838152600360205260409020600201546001600160a01b03163314155b6114945760405162461bcd60e51b815260206004820152600360248201526262643760e81b60448201526064016105ff565b60008381526003602052604090819020600281015460099091015491516323b872dd60e01b81523360048201526001600160a01b039091166024820152604481019190915230906323b872dd906064016020604051808303816000875af1158015611503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115279190613421565b6115595760405162461bcd60e51b81526020600482015260036024820152620c4c8760eb1b60448201526064016105ff565b6000838152600360209081526040918290206002015482518681526001600160a01b039091169181019190915233818301526060810183905290517fb9fb6182f11a563643190aed5c83ac117eba8c31c419f332daa49889fc21c8f09181900360800190a160008381526003602052604090206002810180546001600160a01b031916331790556009018190555b50506011805460ff1916905550565b6011805460ff191660011790556007546116375760405162461bcd60e51b8152602060048201526002602482015261746360f01b60448201526064016105ff565b600e5460408051608081018252601054815230602082019081526fffffffffffffffffffffffffffffffff82840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b039081166024850152915181166044840152925190921660648201526000928392610100909104169063fc6f78659060840160408051808303816000875af11580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906134a2565b600e5460105460405163133f757160e31b81526004810191909152929450909250600091829161010090046001600160a01b0316906399fbab889060240161018060405180830381865afa15801561175b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177f9190613507565b5050505050505050935093505050306001600160a01b0316826001600160a01b0316036118fc5783156118485760405163a9059cbb60e01b815261dead600482015260248101859052309063a9059cbb906044016020604051808303816000875af11580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118169190613421565b6118485760405162461bcd60e51b815260206004820152600360248201526263723160e81b60448201526064016105ff565b82156118f75760055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018590529082169063a9059cbb906044016020604051808303816000875af11580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c59190613421565b6118f75760405162461bcd60e51b815260206004820152600360248201526231b91960e91b60448201526064016105ff565b611a4d565b821561199e5760405163a9059cbb60e01b815261dead600482015260248101849052309063a9059cbb906044016020604051808303816000875af1158015611948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196c9190613421565b61199e5760405162461bcd60e51b815260206004820152600360248201526263723360e81b60448201526064016105ff565b8315611a4d5760055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529083169063a9059cbb906044016020604051808303816000875af11580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613421565b611a4d5760405162461bcd60e51b815260206004820152600360248201526218dc8d60ea1b60448201526064016105ff565b50506011805460ff191690555050565b6011805460ff19166001179055600754611a9f5760405162461bcd60e51b815260206004820152600360248201526263663160e81b60448201526064016105ff565b83610e101480611ab0575083615460145b80611abc57508361a8c0145b80611ac957508362015180145b80611ad657508362093a80145b80611ae35750836213c680145b80611af057508362278d00145b611b225760405162461bcd60e51b815260206004820152600360248201526231b31960e91b60448201526064016105ff565b6040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b038816906323b872dd906064016020604051808303816000875af1158015611b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b999190613421565b611bcb5760405162461bcd60e51b815260206004820152600360248201526263663360e81b60448201526064016105ff565b600160046000828254611bde91906135e8565b92505081905550604051806101600160405280886001600160a01b0316815260200160006001600160a01b03168152602001336001600160a01b0316815260200187815260200186815260200185815260200142815260200160018152602001600081526020018481526020016000151581525060036000600454815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff0219169083151502179055509050507fe0b6aba33b9336f19dfa63f93410833208d1288753058756ad753ff5c8d2bb1d60045488600360006004548152602001908152602001600020858588604051611da9969594939291906135fb565b60405180910390a150506011805460ff191690555050505050565b6005546001600160a01b031633148015611de05750600e5460ff165b611de957600080fd5b600c5461271083600954611dfd91906136db565b611e0791906136f2565b10158015611e1757506127108211155b611e475760405162461bcd60e51b81526020600482015260016024820152606160f81b60448201526064016105ff565b600d5461271082600954611e5b91906136db565b611e6591906136f2565b10158015611e7557506127108111155b611ea55760405162461bcd60e51b81526020600482015260016024820152603160f91b60448201526064016105ff565b61271082600954611eb691906136db565b611ec091906136f2565b600c5560095461271090611ed59083906136db565b611edf91906136f2565b600d5561271082148015611ef4575080612710145b15611f0457600e805460ff191690555b60408051838152602081018390527f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d932791015b60405180910390a15050565b6060600b80546104f8906133be565b6000610588338484612c42565b6011805460ff19166001179055478015611fc9576005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611fbf576040519150601f19603f3d011682016040523d82523d6000602084013e611fc4565b606091505b505050505b506011805460ff19169055565b6011805460ff191660011790556007546120185760405162461bcd60e51b815260206004820152600360248201526262703160e81b60448201526064016105ff565b83610e101480612029575083615460145b8061203557508361a8c0145b8061204257508362015180145b8061204f57508362093a80145b8061205c5750836213c680145b8061206957508362278d00145b61209b5760405162461bcd60e51b815260206004820152600360248201526231381960e91b60448201526064016105ff565b6040516323b872dd60e01b8152336004820152306024820181905260448201889052906323b872dd906064016020604051808303816000875af11580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a9190613421565b61213c5760405162461bcd60e51b815260206004820152600360248201526262703360e81b60448201526064016105ff565b60016004600082825461214f91906135e8565b92505081905550604051806101600160405280886001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b0316815260200187815260200186815260200185815260200142815260200160018152602001848152602001600081526020016001151581525060036000600454815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff0219169083151502179055509050507f1c62fe307e76cccb8a5936a5a762132529c9a9d0de19ecce9ff07b3cb9bec5db60045488600360006004548152602001908152602001600020858588604051611da9969594939291906135fb565b61239460405180610160016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b5060009081526003602081815260409283902083516101608101855281546001600160a01b039081168252600183015481169382019390935260028201549092169382019390935290820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a9091015460ff16151561014082015290565b6005546001600160a01b0316331461244e57600080fd5b7f07ce702fc13ca0620c174dab22996a6d5fd9e7accb663555a4e85323692706ba8282604051611f36929190613714565b6005546001600160a01b0316331461249657600080fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6011805460ff191660011790556007546125345760405162461bcd60e51b815260206004820152600360248201526262663160e81b60448201526064016105ff565b6000848152600360205260409020600201546001600160a01b0316331480159061257857506000848152600360205260409020600101546001600160a01b03163314155b6125aa5760405162461bcd60e51b815260206004820152600360248201526231331960e91b60448201526064016105ff565b6000848152600360205260409020600701546001146125f45760405162461bcd60e51b81526004016105ff90602080825260049082015263627a663360e01b604082015260600190565b6000848152600360205260409020600a015460ff161561263f5760405162461bcd60e51b81526004016105ff9060208082526004908201526331331a3d60e11b604082015260600190565b60008481526003602052604090206005810154600690910154612662904261340e565b106126955760405162461bcd60e51b815260206004820152600360248201526218998d60ea1b60448201526064016105ff565b6000848152600360205260409081902060049081015491516323b872dd60e01b81523391810191909152306024820181905260448201929092526323b872dd906064016020604051808303816000875af11580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190613421565b61274d5760405162461bcd60e51b815260206004820152600360248201526262663560e81b60448201526064016105ff565b60008481526003602052604090819020600260078201556001810180546001600160a01b03191633179055600881018590555490517f37d2e94fceb9af358099cacf5ce7f6e421e1e3852b283f80b083bce77b4fa3cf916109fd9187916001600160a01b031690869086908990613467565b6005546001600160a01b03163314806127e257506006546001600160a01b031633145b6127eb57600080fd5b600654600160a01b900460ff161561280257600080fd5b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b17905542600755600d54600c54600e5460ff1680151560010361286057600954600d819055600c55600e805460ff191690555b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0389811682029290921780845581900482166000908152600260209081526040808320805460ff1916600190811790915560095430855290835281842096549490940490941682529390935291205583602001516001600160a01b031684600001516001600160a01b03160361290557600080fd5b60208401516001600160a01b0316301480612929575083516001600160a01b031630145b61295a5760405162461bcd60e51b8152602060048201526002602482015261399960f11b60448201526064016105ff565b306001600160a01b031684602001516001600160a01b0316036129b6576009548460c00151146129b15760405162461bcd60e51b8152602060048201526002602482015261399b60f11b60448201526064016105ff565b6129f0565b6009548460a00151146129f05760405162461bcd60e51b8152602060048201526002602482015261399b60f11b60448201526064016105ff565b600e548451602086015160408088015190516309f56ab160e11b81526001600160a01b039384166004820152918316602483015262ffffff166044820152878216606482015261010090920416906313ead562906084016020604051808303816000875af1158015612a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8a9190613730565b600f80546001600160a01b0319166001600160a01b0392831690811790915560009081526002602052604090819020805460ff19166001179055600e549051634418b22b60e11b815261010090910490911690638831645690612af190879060040161374d565b6080604051808303816000875af1158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190613811565b505050601055600f54600e54604080516001600160a01b0393841681524760208201526101009092049092168183015290517f4281de8584e29758fd60a3c920b344853e53f993984a04bc0e705d99dd01842e9181900360600190a1801515600103612bb257600d839055600c829055600e805460ff191660011790555b505050505050565b6001600160a01b038316612bcd57600080fd5b6001600160a01b038216612be057600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831615801590612c6257506001600160a01b03821615155b612c6b57600080fd5b6001600160a01b038316600090815260208190526040902054811115612cb85760405162461bcd60e51b8152602060048201526002602482015261626160f01b60448201526064016105ff565b600654600160a01b900460ff168015612cd35750600e5460ff165b8015612cf857506001600160a01b03831660009081526002602052604090205460ff16155b8015612d1d57506001600160a01b03821660009081526002602052604090205460ff16155b15612d595780600d541015612d595760405162461bcd60e51b81526020600482015260026024820152611b5d60f21b60448201526064016105ff565b600654600160a01b900460ff168015612d745750600e5460ff165b8015612d9957506001600160a01b03821660009081526002602052604090205460ff16155b15612df857600c546001600160a01b038316600090815260208190526040902054612dc59083906135e8565b1115612df85760405162461bcd60e51b81526020600482015260026024820152616d7760f01b60448201526064016105ff565b6001600160a01b038316600090815260208190526040902054612e1c90829061340e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e4c9082906135e8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612c35565b60006020808352835180602085015260005b81811015612ecb57858101830151858201604001528201612eaf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f0157600080fd5b50565b8035612f0f81612eec565b919050565b60008060408385031215612f2757600080fd5b8235612f3281612eec565b946020939093013593505050565b60008060408385031215612f5357600080fd5b50508035926020909101359150565b60008083601f840112612f7457600080fd5b50813567ffffffffffffffff811115612f8c57600080fd5b602083019150836020828501011115612fa457600080fd5b9250929050565b60008060008060608587031215612fc157600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612fe657600080fd5b612ff287828801612f62565b95989497509550505050565b60008060006060848603121561301357600080fd5b833561301e81612eec565b9250602084013561302e81612eec565b929592945050506040919091013590565b60006020828403121561305157600080fd5b5035919050565b8015158114612f0157600080fd5b60008060006060848603121561307b57600080fd5b83359250602084013561302e81613058565b600080600080600080600060c0888a0312156130a857600080fd5b87356130b381612eec565b96506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff8111156130eb57600080fd5b6130f78a828b01612f62565b989b979a50959850939692959293505050565b60006020828403121561311c57600080fd5b813561312781612eec565b9392505050565b81516001600160a01b031681526101608101602083015161315a60208401826001600160a01b03169052565b50604083015161317560408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401516131d48285018215159052565b505092915050565b600080604083850312156131ef57600080fd5b82356131fa81612eec565b9150602083013561320a81612eec565b809150509250929050565b6000806020838503121561322857600080fd5b823567ffffffffffffffff81111561323f57600080fd5b61324b85828601612f62565b90969095509350505050565b604051610160810167ffffffffffffffff8111828210171561328957634e487b7160e01b600052604160045260246000fd5b60405290565b62ffffff81168114612f0157600080fd5b8035612f0f8161328f565b8060020b8114612f0157600080fd5b8035612f0f816132ab565b60008060008385036101a08112156132dc57600080fd5b84356132e781612eec565b935060208501356132f781612eec565b9250610160603f19820181131561330d57600080fd5b613315613257565b915061332360408701612f04565b825261333160608701612f04565b6020830152613342608087016132a0565b604083015261335360a087016132ba565b606083015261336460c087016132ba565b608083015260e086013560a08301526101008087013560c08401526101208088013560e085015261014080890135838601526133a1848a01612f04565b828601526101808901358186015250505050809150509250925092565b600181811c908216806133d257607f821691505b6020821081036133f257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561058c5761058c6133f8565b60006020828403121561343357600080fd5b815161312781613058565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8581526001600160a01b038516602082015260806040820152600061349060808301858761343e565b90508260608301529695505050505050565b600080604083850312156134b557600080fd5b505080516020909101519092909150565b8051612f0f81612eec565b8051612f0f8161328f565b8051612f0f816132ab565b80516fffffffffffffffffffffffffffffffff81168114612f0f57600080fd5b6000806000806000806000806000806000806101808d8f03121561352a57600080fd5b8c516bffffffffffffffffffffffff8116811461354657600080fd5b9b5061355460208e016134c6565b9a5061356260408e016134c6565b995061357060608e016134c6565b985061357e60808e016134d1565b975061358c60a08e016134dc565b965061359a60c08e016134dc565b95506135a860e08e016134e7565b94506101008d015193506101208d015192506135c76101408e016134e7565b91506135d66101608e016134e7565b90509295989b509295989b509295989b565b8082018082111561058c5761058c6133f8565b60006101e08883526001600160a01b03881660208401526136376040840161362a89546001600160a01b031690565b6001600160a01b03169052565b60018701546001600160a01b0390811660608501526002880154166080840152600387015460a0840152600487015460c0840152600587015460e08401526006870154610100840152600787015461012084015260088701546101408401526009870154610160840152600a87015460ff1615156101808401526101a083018190526136c6818401868861343e565b915050826101c0830152979650505050505050565b808202811582820484141761058c5761058c6133f8565b60008261370f57634e487b7160e01b600052601260045260246000fd5b500490565b60208152600061372860208301848661343e565b949350505050565b60006020828403121561374257600080fd5b815161312781612eec565b81516001600160a01b031681526101608101602083015161377960208401826001600160a01b03169052565b506040830151613790604084018262ffffff169052565b5060608301516137a5606084018260020b9052565b5060808301516137ba608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151613800828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561382757600080fd5b84519350613837602086016134e7565b604086015160609096015194979096509250505056fea2646970667358221220bc389f19374db2dce63393059f03d641cf2e119f78fc4c7a6401ad7b812aedfa64736f6c6343000819003300000000000000000000000089555e629476a78705260fa650926f73d4676d5f00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

Deployed Bytecode

0x60806040526004361061018f5760003560e01c806378f8484b116100d6578063c9e014e71161007f578063f2fde38b11610059578063f2fde38b14610489578063f30b2a24146104a9578063f628146b146104c957600080fd5b8063c9e014e7146103f6578063dd62ed3e14610423578063ea0a52371461046957600080fd5b8063a9059cbb116100b0578063a9059cbb146103a1578063bcdb446b146103c1578063c7f6fea8146103d657600080fd5b806378f8484b146103445780638da5cb5b1461036457806395d89b411461038c57600080fd5b80632e1a7d4d116101385780633cad2a0a116101125780633cad2a0a146102d95780634cbe8c14146102ee57806370a082311461030e57600080fd5b80632e1a7d4d14610277578063313ce5671461029757806337b24344146102b957600080fd5b806317c96e301161016957806317c96e301461021857806318160ddd1461023857806323b872dd1461025757600080fd5b806306fdde031461019b578063095ea7b3146101c657806309d9dcc3146101f657600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b506101b06104e9565b6040516101bd9190612e9d565b60405180910390f35b3480156101d257600080fd5b506101e66101e1366004612f14565b61057b565b60405190151581526020016101bd565b34801561020257600080fd5b50610216610211366004612f40565b610592565b005b34801561022457600080fd5b50610216610233366004612fab565b610750565b34801561024457600080fd5b506009545b6040519081526020016101bd565b34801561026357600080fd5b506101e6610272366004612ffe565b610a15565b34801561028357600080fd5b5061021661029236600461303f565b610abd565b3480156102a357600080fd5b5060085460405160ff90911681526020016101bd565b3480156102c557600080fd5b506102166102d4366004613066565b6110f8565b3480156102e557600080fd5b506102166115f6565b3480156102fa57600080fd5b5061021661030936600461308d565b611a5d565b34801561031a57600080fd5b5061024961032936600461310a565b6001600160a01b031660009081526020819052604090205490565b34801561035057600080fd5b5061021661035f366004612f40565b611dc4565b34801561037057600080fd5b506005546040516001600160a01b0390911681526020016101bd565b34801561039857600080fd5b506101b0611f42565b3480156103ad57600080fd5b506101e66103bc366004612f14565b611f51565b3480156103cd57600080fd5b50610216611f5e565b3480156103e257600080fd5b506102166103f136600461308d565b611fd6565b34801561040257600080fd5b5061041661041136600461303f565b61231a565b6040516101bd919061312e565b34801561042f57600080fd5b5061024961043e3660046131dc565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561047557600080fd5b50610216610484366004613215565b612437565b34801561049557600080fd5b506102166104a436600461310a565b61247f565b3480156104b557600080fd5b506102166104c4366004612fab565b6124f2565b3480156104d557600080fd5b506102166104e43660046132c5565b6127bf565b6060600a80546104f8906133be565b80601f0160208091040260200160405190810160405280929190818152602001828054610524906133be565b80156105715780601f1061054657610100808354040283529160200191610571565b820191906000526020600020905b81548152906001019060200180831161055457829003601f168201915b5050505050905090565b6000610588338484612bba565b5060015b92915050565b6011805460ff19166001179055600082815260036020526040902060070154158015906105d15750600082815260036020819052604090912060070154105b6106085760405162461bcd60e51b815260206004820152600360248201526273643160e81b60448201526064015b60405180910390fd5b6000828152600360205260409020600581015460069091015461062b904261340e565b1061065e5760405162461bcd60e51b815260206004820152600360248201526239b21960e91b60448201526064016105ff565b6000828152600360205260409020600101546001600160a01b031633036106d25760008281526003602090815260409182902060080183905581518481529081018390527f58d5a56362e92d7dcea6a58fd13962b8e0e5fcf48794f09e1547f6924a06948a910160405180910390a1610742565b6000828152600360205260409020600201546001600160a01b031633036107425760008281526003602090815260409182902060090183905581518481529081018390527f5662df4684bb6fe102693c08536975bd679d9c6619b7f3366d9e9b0834714c70910160405180910390a15b50506011805460ff19169055565b6011805460ff191660011790556007546107925760405162461bcd60e51b815260206004820152600360248201526262733160e81b60448201526064016105ff565b6000848152600360205260409020600101546001600160a01b031633148015906107d657506000848152600360205260409020600201546001600160a01b03163314155b6108085760405162461bcd60e51b815260206004820152600360248201526231399960e91b60448201526064016105ff565b600084815260036020526040902060070154600114801561083f57506000848152600360205260409020600a015460ff1615156001145b6108715760405162461bcd60e51b815260206004820152600360248201526262733360e81b60448201526064016105ff565b60008481526003602052604090206005810154600690910154610894904261340e565b106108c75760405162461bcd60e51b8152602060048201526003602482015262189ccd60ea1b60448201526064016105ff565b60008481526003602052604090819020805460049182015492516323b872dd60e01b8152339281019290925230602483015260448201929092526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109599190613421565b61098b5760405162461bcd60e51b815260206004820152600360248201526262733560e81b60448201526064016105ff565b60008481526003602052604090819020600260078201819055810180546001600160a01b03191633179055600981018590555490517f657632ff1e3fc43186b0f328182aa4ae803d976b181ad235686b3da119f8a1cf916109fd9187916001600160a01b031690869086908990613467565b60405180910390a150506011805460ff191690555050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054821115610a6d5760405162461bcd60e51b8152602060048201526002602482015261323560f01b60448201526064016105ff565b6001600160a01b038416600090815260016020908152604080832033808552925290912054610aa8918691610aa390869061340e565b612bba565b610ab3848484612c42565b5060019392505050565b6011805460ff19166001179055600754610afe5760405162461bcd60e51b8152602060048201526002602482015261773160f01b60448201526064016105ff565b60008181526003602052604090206005810154600690910154610b21904261340e565b1015610b545760405162461bcd60e51b81526020600482015260026024820152613b9960f11b60448201526064016105ff565b60008181526003602052604090206007015415801590610b865750600081815260036020819052604090912060070154105b610bb75760405162461bcd60e51b8152602060048201526002602482015261773360f01b60448201526064016105ff565b600081815260036020526040902060070154600103610d71576000818152600360205260409020600a015460ff161515600103610cb0576000818152600360208190526040918290206001810154910154915163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152309063a9059cbb906044016020604051808303816000875af1158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190613421565b610cab5760405162461bcd60e51b81526020600482015260026024820152611dcd60f21b60448201526064016105ff565b61109d565b600081815260036020819052604091829020805460028201549190920154925163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352169063a9059cbb906044016020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613421565b610cab5760405162461bcd60e51b8152602060048201526002602482015261773560f01b60448201526064016105ff565b6000818152600360205260409020600a015460ff161515600103610f11576000818152600360208190526040918290206002810154910154915163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152309063a9059cbb906044016020604051808303816000875af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190613421565b610e4c5760405162461bcd60e51b81526020600482015260026024820152613b9b60f11b60448201526064016105ff565b6000818152600360205260409081902080546001820154600492830154935163a9059cbb60e01b81526001600160a01b03918216938101939093526024830193909352919091169063a9059cbb906044016020604051808303816000875af1158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190613421565b610cab5760405162461bcd60e51b8152602060048201526002602482015261773760f01b60448201526064016105ff565b600081815260036020526040908190206002810154600491820154925163a9059cbb60e01b8152309363a9059cbb93610f68936001600160a01b031692016001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab9190613421565b610fdc5760405162461bcd60e51b81526020600482015260026024820152610ee760f31b60448201526064016105ff565b600081815260036020819052604091829020805460018201549190920154925163a9059cbb60e01b81526001600160a01b0391821660048201526024810193909352169063a9059cbb906044016020604051808303816000875af1158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106c9190613421565b61109d5760405162461bcd60e51b8152602060048201526002602482015261773960f01b60448201526064016105ff565b60008181526003602081905260409182902060070155517f430648de173157e069201c943adb2d4e340e7cf5b27b1b09c9cb852f03d63b56906110e39083815260200190565b60405180910390a1506011805460ff19169055565b6011805460ff19166001179055600083815260036020526040902060070154158015906111375750600083815260036020819052604090912060070154105b6111695760405162461bcd60e51b815260206004820152600360248201526262643160e81b60448201526064016105ff565b6000838152600360205260409020600581015460069091015461118c904261340e565b106111bf5760405162461bcd60e51b815260206004820152600360248201526231321960e91b60448201526064016105ff565b8115156001036113da5760008381526003602052604090206008015461120d5760405162461bcd60e51b815260206004820152600360248201526262643360e81b60448201526064016105ff565b6000838152600360205260409020600101546001600160a01b0316331480159061125157506000838152600360205260409020600201546001600160a01b03163314155b6112835760405162461bcd60e51b815260206004820152600360248201526218990d60ea1b60448201526064016105ff565b60008381526003602052604090819020600181015460089091015491516323b872dd60e01b81523360048201526001600160a01b039091166024820152604481019190915230906323b872dd906064016020604051808303816000875af11580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190613421565b6113485760405162461bcd60e51b815260206004820152600360248201526262643560e81b60448201526064016105ff565b6000838152600360209081526040918290206001015482518681526001600160a01b039091169181019190915233818301526060810183905290517f8661281a60022b18b61d33579daa391cec879d924d9eadac21d4563853b7f94b9181900360800190a160008381526003602052604090206001810180546001600160a01b031916331790556008018190556115e7565b60008381526003602052604090206009015461141e5760405162461bcd60e51b815260206004820152600360248201526231321b60e91b60448201526064016105ff565b6000838152600360205260409020600101546001600160a01b0316331480159061146257506000838152600360205260409020600201546001600160a01b03163314155b6114945760405162461bcd60e51b815260206004820152600360248201526262643760e81b60448201526064016105ff565b60008381526003602052604090819020600281015460099091015491516323b872dd60e01b81523360048201526001600160a01b039091166024820152604481019190915230906323b872dd906064016020604051808303816000875af1158015611503573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115279190613421565b6115595760405162461bcd60e51b81526020600482015260036024820152620c4c8760eb1b60448201526064016105ff565b6000838152600360209081526040918290206002015482518681526001600160a01b039091169181019190915233818301526060810183905290517fb9fb6182f11a563643190aed5c83ac117eba8c31c419f332daa49889fc21c8f09181900360800190a160008381526003602052604090206002810180546001600160a01b031916331790556009018190555b50506011805460ff1916905550565b6011805460ff191660011790556007546116375760405162461bcd60e51b8152602060048201526002602482015261746360f01b60448201526064016105ff565b600e5460408051608081018252601054815230602082019081526fffffffffffffffffffffffffffffffff82840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b039081166024850152915181166044840152925190921660648201526000928392610100909104169063fc6f78659060840160408051808303816000875af11580156116db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ff91906134a2565b600e5460105460405163133f757160e31b81526004810191909152929450909250600091829161010090046001600160a01b0316906399fbab889060240161018060405180830381865afa15801561175b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177f9190613507565b5050505050505050935093505050306001600160a01b0316826001600160a01b0316036118fc5783156118485760405163a9059cbb60e01b815261dead600482015260248101859052309063a9059cbb906044016020604051808303816000875af11580156117f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118169190613421565b6118485760405162461bcd60e51b815260206004820152600360248201526263723160e81b60448201526064016105ff565b82156118f75760055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018590529082169063a9059cbb906044016020604051808303816000875af11580156118a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c59190613421565b6118f75760405162461bcd60e51b815260206004820152600360248201526231b91960e91b60448201526064016105ff565b611a4d565b821561199e5760405163a9059cbb60e01b815261dead600482015260248101849052309063a9059cbb906044016020604051808303816000875af1158015611948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196c9190613421565b61199e5760405162461bcd60e51b815260206004820152600360248201526263723360e81b60448201526064016105ff565b8315611a4d5760055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529083169063a9059cbb906044016020604051808303816000875af11580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190613421565b611a4d5760405162461bcd60e51b815260206004820152600360248201526218dc8d60ea1b60448201526064016105ff565b50506011805460ff191690555050565b6011805460ff19166001179055600754611a9f5760405162461bcd60e51b815260206004820152600360248201526263663160e81b60448201526064016105ff565b83610e101480611ab0575083615460145b80611abc57508361a8c0145b80611ac957508362015180145b80611ad657508362093a80145b80611ae35750836213c680145b80611af057508362278d00145b611b225760405162461bcd60e51b815260206004820152600360248201526231b31960e91b60448201526064016105ff565b6040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b038816906323b872dd906064016020604051808303816000875af1158015611b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b999190613421565b611bcb5760405162461bcd60e51b815260206004820152600360248201526263663360e81b60448201526064016105ff565b600160046000828254611bde91906135e8565b92505081905550604051806101600160405280886001600160a01b0316815260200160006001600160a01b03168152602001336001600160a01b0316815260200187815260200186815260200185815260200142815260200160018152602001600081526020018481526020016000151581525060036000600454815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff0219169083151502179055509050507fe0b6aba33b9336f19dfa63f93410833208d1288753058756ad753ff5c8d2bb1d60045488600360006004548152602001908152602001600020858588604051611da9969594939291906135fb565b60405180910390a150506011805460ff191690555050505050565b6005546001600160a01b031633148015611de05750600e5460ff165b611de957600080fd5b600c5461271083600954611dfd91906136db565b611e0791906136f2565b10158015611e1757506127108211155b611e475760405162461bcd60e51b81526020600482015260016024820152606160f81b60448201526064016105ff565b600d5461271082600954611e5b91906136db565b611e6591906136f2565b10158015611e7557506127108111155b611ea55760405162461bcd60e51b81526020600482015260016024820152603160f91b60448201526064016105ff565b61271082600954611eb691906136db565b611ec091906136f2565b600c5560095461271090611ed59083906136db565b611edf91906136f2565b600d5561271082148015611ef4575080612710145b15611f0457600e805460ff191690555b60408051838152602081018390527f3e470cf1ec3767d0209f5128c840997ff9b70dfe0da263b3f94eb114a05d932791015b60405180910390a15050565b6060600b80546104f8906133be565b6000610588338484612c42565b6011805460ff19166001179055478015611fc9576005546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611fbf576040519150601f19603f3d011682016040523d82523d6000602084013e611fc4565b606091505b505050505b506011805460ff19169055565b6011805460ff191660011790556007546120185760405162461bcd60e51b815260206004820152600360248201526262703160e81b60448201526064016105ff565b83610e101480612029575083615460145b8061203557508361a8c0145b8061204257508362015180145b8061204f57508362093a80145b8061205c5750836213c680145b8061206957508362278d00145b61209b5760405162461bcd60e51b815260206004820152600360248201526231381960e91b60448201526064016105ff565b6040516323b872dd60e01b8152336004820152306024820181905260448201889052906323b872dd906064016020604051808303816000875af11580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a9190613421565b61213c5760405162461bcd60e51b815260206004820152600360248201526262703360e81b60448201526064016105ff565b60016004600082825461214f91906135e8565b92505081905550604051806101600160405280886001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b0316815260200187815260200186815260200185815260200142815260200160018152602001848152602001600081526020016001151581525060036000600454815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff0219169083151502179055509050507f1c62fe307e76cccb8a5936a5a762132529c9a9d0de19ecce9ff07b3cb9bec5db60045488600360006004548152602001908152602001600020858588604051611da9969594939291906135fb565b61239460405180610160016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b5060009081526003602081815260409283902083516101608101855281546001600160a01b039081168252600183015481169382019390935260028201549092169382019390935290820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a9091015460ff16151561014082015290565b6005546001600160a01b0316331461244e57600080fd5b7f07ce702fc13ca0620c174dab22996a6d5fd9e7accb663555a4e85323692706ba8282604051611f36929190613714565b6005546001600160a01b0316331461249657600080fd5b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6011805460ff191660011790556007546125345760405162461bcd60e51b815260206004820152600360248201526262663160e81b60448201526064016105ff565b6000848152600360205260409020600201546001600160a01b0316331480159061257857506000848152600360205260409020600101546001600160a01b03163314155b6125aa5760405162461bcd60e51b815260206004820152600360248201526231331960e91b60448201526064016105ff565b6000848152600360205260409020600701546001146125f45760405162461bcd60e51b81526004016105ff90602080825260049082015263627a663360e01b604082015260600190565b6000848152600360205260409020600a015460ff161561263f5760405162461bcd60e51b81526004016105ff9060208082526004908201526331331a3d60e11b604082015260600190565b60008481526003602052604090206005810154600690910154612662904261340e565b106126955760405162461bcd60e51b815260206004820152600360248201526218998d60ea1b60448201526064016105ff565b6000848152600360205260409081902060049081015491516323b872dd60e01b81523391810191909152306024820181905260448201929092526323b872dd906064016020604051808303816000875af11580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190613421565b61274d5760405162461bcd60e51b815260206004820152600360248201526262663560e81b60448201526064016105ff565b60008481526003602052604090819020600260078201556001810180546001600160a01b03191633179055600881018590555490517f37d2e94fceb9af358099cacf5ce7f6e421e1e3852b283f80b083bce77b4fa3cf916109fd9187916001600160a01b031690869086908990613467565b6005546001600160a01b03163314806127e257506006546001600160a01b031633145b6127eb57600080fd5b600654600160a01b900460ff161561280257600080fd5b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b17905542600755600d54600c54600e5460ff1680151560010361286057600954600d819055600c55600e805460ff191690555b600e80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0389811682029290921780845581900482166000908152600260209081526040808320805460ff1916600190811790915560095430855290835281842096549490940490941682529390935291205583602001516001600160a01b031684600001516001600160a01b03160361290557600080fd5b60208401516001600160a01b0316301480612929575083516001600160a01b031630145b61295a5760405162461bcd60e51b8152602060048201526002602482015261399960f11b60448201526064016105ff565b306001600160a01b031684602001516001600160a01b0316036129b6576009548460c00151146129b15760405162461bcd60e51b8152602060048201526002602482015261399b60f11b60448201526064016105ff565b6129f0565b6009548460a00151146129f05760405162461bcd60e51b8152602060048201526002602482015261399b60f11b60448201526064016105ff565b600e548451602086015160408088015190516309f56ab160e11b81526001600160a01b039384166004820152918316602483015262ffffff166044820152878216606482015261010090920416906313ead562906084016020604051808303816000875af1158015612a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8a9190613730565b600f80546001600160a01b0319166001600160a01b0392831690811790915560009081526002602052604090819020805460ff19166001179055600e549051634418b22b60e11b815261010090910490911690638831645690612af190879060040161374d565b6080604051808303816000875af1158015612b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b349190613811565b505050601055600f54600e54604080516001600160a01b0393841681524760208201526101009092049092168183015290517f4281de8584e29758fd60a3c920b344853e53f993984a04bc0e705d99dd01842e9181900360600190a1801515600103612bb257600d839055600c829055600e805460ff191660011790555b505050505050565b6001600160a01b038316612bcd57600080fd5b6001600160a01b038216612be057600080fd5b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831615801590612c6257506001600160a01b03821615155b612c6b57600080fd5b6001600160a01b038316600090815260208190526040902054811115612cb85760405162461bcd60e51b8152602060048201526002602482015261626160f01b60448201526064016105ff565b600654600160a01b900460ff168015612cd35750600e5460ff165b8015612cf857506001600160a01b03831660009081526002602052604090205460ff16155b8015612d1d57506001600160a01b03821660009081526002602052604090205460ff16155b15612d595780600d541015612d595760405162461bcd60e51b81526020600482015260026024820152611b5d60f21b60448201526064016105ff565b600654600160a01b900460ff168015612d745750600e5460ff165b8015612d9957506001600160a01b03821660009081526002602052604090205460ff16155b15612df857600c546001600160a01b038316600090815260208190526040902054612dc59083906135e8565b1115612df85760405162461bcd60e51b81526020600482015260026024820152616d7760f01b60448201526064016105ff565b6001600160a01b038316600090815260208190526040902054612e1c90829061340e565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e4c9082906135e8565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612c35565b60006020808352835180602085015260005b81811015612ecb57858101830151858201604001528201612eaf565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f0157600080fd5b50565b8035612f0f81612eec565b919050565b60008060408385031215612f2757600080fd5b8235612f3281612eec565b946020939093013593505050565b60008060408385031215612f5357600080fd5b50508035926020909101359150565b60008083601f840112612f7457600080fd5b50813567ffffffffffffffff811115612f8c57600080fd5b602083019150836020828501011115612fa457600080fd5b9250929050565b60008060008060608587031215612fc157600080fd5b8435935060208501359250604085013567ffffffffffffffff811115612fe657600080fd5b612ff287828801612f62565b95989497509550505050565b60008060006060848603121561301357600080fd5b833561301e81612eec565b9250602084013561302e81612eec565b929592945050506040919091013590565b60006020828403121561305157600080fd5b5035919050565b8015158114612f0157600080fd5b60008060006060848603121561307b57600080fd5b83359250602084013561302e81613058565b600080600080600080600060c0888a0312156130a857600080fd5b87356130b381612eec565b96506020880135955060408801359450606088013593506080880135925060a088013567ffffffffffffffff8111156130eb57600080fd5b6130f78a828b01612f62565b989b979a50959850939692959293505050565b60006020828403121561311c57600080fd5b813561312781612eec565b9392505050565b81516001600160a01b031681526101608101602083015161315a60208401826001600160a01b03169052565b50604083015161317560408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401518184015250610140808401516131d48285018215159052565b505092915050565b600080604083850312156131ef57600080fd5b82356131fa81612eec565b9150602083013561320a81612eec565b809150509250929050565b6000806020838503121561322857600080fd5b823567ffffffffffffffff81111561323f57600080fd5b61324b85828601612f62565b90969095509350505050565b604051610160810167ffffffffffffffff8111828210171561328957634e487b7160e01b600052604160045260246000fd5b60405290565b62ffffff81168114612f0157600080fd5b8035612f0f8161328f565b8060020b8114612f0157600080fd5b8035612f0f816132ab565b60008060008385036101a08112156132dc57600080fd5b84356132e781612eec565b935060208501356132f781612eec565b9250610160603f19820181131561330d57600080fd5b613315613257565b915061332360408701612f04565b825261333160608701612f04565b6020830152613342608087016132a0565b604083015261335360a087016132ba565b606083015261336460c087016132ba565b608083015260e086013560a08301526101008087013560c08401526101208088013560e085015261014080890135838601526133a1848a01612f04565b828601526101808901358186015250505050809150509250925092565b600181811c908216806133d257607f821691505b6020821081036133f257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561058c5761058c6133f8565b60006020828403121561343357600080fd5b815161312781613058565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b8581526001600160a01b038516602082015260806040820152600061349060808301858761343e565b90508260608301529695505050505050565b600080604083850312156134b557600080fd5b505080516020909101519092909150565b8051612f0f81612eec565b8051612f0f8161328f565b8051612f0f816132ab565b80516fffffffffffffffffffffffffffffffff81168114612f0f57600080fd5b6000806000806000806000806000806000806101808d8f03121561352a57600080fd5b8c516bffffffffffffffffffffffff8116811461354657600080fd5b9b5061355460208e016134c6565b9a5061356260408e016134c6565b995061357060608e016134c6565b985061357e60808e016134d1565b975061358c60a08e016134dc565b965061359a60c08e016134dc565b95506135a860e08e016134e7565b94506101008d015193506101208d015192506135c76101408e016134e7565b91506135d66101608e016134e7565b90509295989b509295989b509295989b565b8082018082111561058c5761058c6133f8565b60006101e08883526001600160a01b03881660208401526136376040840161362a89546001600160a01b031690565b6001600160a01b03169052565b60018701546001600160a01b0390811660608501526002880154166080840152600387015460a0840152600487015460c0840152600587015460e08401526006870154610100840152600787015461012084015260088701546101408401526009870154610160840152600a87015460ff1615156101808401526101a083018190526136c6818401868861343e565b915050826101c0830152979650505050505050565b808202811582820484141761058c5761058c6133f8565b60008261370f57634e487b7160e01b600052601260045260246000fd5b500490565b60208152600061372860208301848661343e565b949350505050565b60006020828403121561374257600080fd5b815161312781612eec565b81516001600160a01b031681526101608101602083015161377960208401826001600160a01b03169052565b506040830151613790604084018262ffffff169052565b5060608301516137a5606084018260020b9052565b5060808301516137ba608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151613800828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561382757600080fd5b84519350613837602086016134e7565b604086015160609096015194979096509250505056fea2646970667358221220bc389f19374db2dce63393059f03d641cf2e119f78fc4c7a6401ad7b812aedfa64736f6c63430008190033

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

00000000000000000000000089555e629476a78705260fa650926f73d4676d5f00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064

-----Decoded View---------------
Arg [0] : params (tuple):
Arg [1] : owner (address): 0x89555E629476a78705260fa650926F73d4676d5F
Arg [2] : maxWallet (uint256): 100
Arg [3] : maxTx (uint256): 100


-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000089555e629476a78705260fa650926f73d4676d5f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.