BNB Price: $635.61 (+0.98%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve948150572026-04-26 15:58:214 hrs ago1777219101IN
0x1ABF9CB0...0Ee338956
0 BNB0.000006950.15
Approve948033092026-04-26 14:30:056 hrs ago1777213805IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
Approve947987342026-04-26 13:55:436 hrs ago1777211743IN
0x1ABF9CB0...0Ee338956
0 BNB0.000006950.15
Approve945354952026-04-25 4:56:3939 hrs ago1777092999IN
0x1ABF9CB0...0Ee338956
0 BNB0.000003720.08
Approve942801612026-04-23 20:58:582 days ago1776977938IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001740.07204667
Approve942038862026-04-23 11:26:203 days ago1776943580IN
0x1ABF9CB0...0Ee338956
0 BNB0.000002610.0565
Approve940407572026-04-22 15:01:134 days ago1776870073IN
0x1ABF9CB0...0Ee338956
0 BNB0.000003050.06565
Approve938472982026-04-21 14:48:065 days ago1776782886IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
Approve938329202026-04-21 13:00:055 days ago1776776405IN
0x1ABF9CB0...0Ee338956
0 BNB0.000003080.0663065
Approve932110242026-04-18 7:10:128 days ago1776496212IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001290.05342217
Approve931713002026-04-18 2:11:518 days ago1776478311IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve931712602026-04-18 2:11:338 days ago1776478293IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
Approve930649022026-04-17 12:52:589 days ago1776430378IN
0x1ABF9CB0...0Ee338956
0 BNB0.000003020.065
Approve928870612026-04-16 14:37:3310 days ago1776350253IN
0x1ABF9CB0...0Ee338956
0 BNB0.000003050.06565
Approve928007182026-04-16 3:48:5210 days ago1776311332IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve928003462026-04-16 3:46:0410 days ago1776311164IN
0x1ABF9CB0...0Ee338956
0 BNB0.00000170.065
Approve928003102026-04-16 3:45:4810 days ago1776311148IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve928002802026-04-16 3:45:3510 days ago1776311135IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve928002522026-04-16 3:45:2210 days ago1776311122IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
Approve926368082026-04-15 7:16:4211 days ago1776237402IN
0x1ABF9CB0...0Ee338956
0 BNB0.00000510.11
Approve926324552026-04-15 6:44:0111 days ago1776235441IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve926324282026-04-15 6:43:4911 days ago1776235429IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve926323972026-04-15 6:43:3511 days ago1776235415IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001720.06565
Approve926323672026-04-15 6:43:2211 days ago1776235402IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
Approve926214402026-04-15 5:21:2011 days ago1776230480IN
0x1ABF9CB0...0Ee338956
0 BNB0.000001590.06565
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
948150572026-04-26 15:58:214 hrs ago1777219101
0x1ABF9CB0...0Ee338956
0.00248667 BNB
948150572026-04-26 15:58:214 hrs ago1777219101
0x1ABF9CB0...0Ee338956
0.00248667 BNB
947987382026-04-26 13:55:456 hrs ago1777211745
0x1ABF9CB0...0Ee338956
0.00198894 BNB
947987382026-04-26 13:55:456 hrs ago1777211745
0x1ABF9CB0...0Ee338956
0.00198894 BNB
940407792026-04-22 15:01:234 days ago1776870083
0x1ABF9CB0...0Ee338956
0.00203504 BNB
940407792026-04-22 15:01:234 days ago1776870083
0x1ABF9CB0...0Ee338956
0.00203504 BNB
936346762026-04-20 12:11:316 days ago1776687091
0x1ABF9CB0...0Ee338956
0.00123859 BNB
936346762026-04-20 12:11:316 days ago1776687091
0x1ABF9CB0...0Ee338956
0.00123859 BNB
933406062026-04-18 23:23:257 days ago1776554605
0x1ABF9CB0...0Ee338956
0.00120154 BNB
933406062026-04-18 23:23:257 days ago1776554605
0x1ABF9CB0...0Ee338956
0.00120154 BNB
926368082026-04-15 7:16:4211 days ago1776237402
0x1ABF9CB0...0Ee338956
0.00298208 BNB
926368082026-04-15 7:16:4211 days ago1776237402
0x1ABF9CB0...0Ee338956
0.00298208 BNB
924056222026-04-14 2:20:4812 days ago1776133248
0x1ABF9CB0...0Ee338956
0.00680514 BNB
924056222026-04-14 2:20:4812 days ago1776133248
0x1ABF9CB0...0Ee338956
0.00680514 BNB
924028042026-04-14 1:59:3912 days ago1776131979
0x1ABF9CB0...0Ee338956
0.00113826 BNB
924028042026-04-14 1:59:3912 days ago1776131979
0x1ABF9CB0...0Ee338956
0.00113826 BNB
922865802026-04-13 11:26:5213 days ago1776079612
0x1ABF9CB0...0Ee338956
0.00282275 BNB
922865802026-04-13 11:26:5213 days ago1776079612
0x1ABF9CB0...0Ee338956
0.00282275 BNB
922482822026-04-13 6:38:3113 days ago1776062311
0x1ABF9CB0...0Ee338956
0.00234074 BNB
922482822026-04-13 6:38:3113 days ago1776062311
0x1ABF9CB0...0Ee338956
0.00234074 BNB
922238662026-04-13 3:34:5713 days ago1776051297
0x1ABF9CB0...0Ee338956
0.00250119 BNB
922238662026-04-13 3:34:5713 days ago1776051297
0x1ABF9CB0...0Ee338956
0.00250119 BNB
922221092026-04-13 3:21:4513 days ago1776050505
0x1ABF9CB0...0Ee338956
0.0031532 BNB
922221092026-04-13 3:21:4513 days ago1776050505
0x1ABF9CB0...0Ee338956
0.0031532 BNB
920689612026-04-12 8:11:3414 days ago1775981494
0x1ABF9CB0...0Ee338956
0.00256438 BNB
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xCB1cE2a3...CF0bcdc48
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
BIANZHI

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 4 : bianzhijia.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";


// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}


interface ISwapRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

interface ISwapFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function feeTo() external view returns (address);
}

interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function kLast() external view returns (uint);
    function totalSupply() external view returns (uint256);
    function sync() external;
}

contract TokenDistributor {
    constructor(address token) {
        // Approve the maximum possible amount to the deployer for distribution operations
        TransferHelper.safeApprove(token, msg.sender, type(uint256).max);
    }
}
interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract BuybackDistributor is Ownable {
    ISwapRouter public router;
    address public buybackToken;

    uint256 public totalBnbSpent;
    uint256 public totalTokensBought;

    event WithdrawBNB(address indexed to, uint256 amount);
    event WithdrawToken(address indexed token, address indexed to, uint256 amount);

    event BuybackExecuted(
        address indexed caller,
        uint256 bnbIn,
        uint256 tokensOut,
        address indexed to
    );

    constructor() Ownable(msg.sender) {
        router = ISwapRouter(block.chainid == 56 ? 0x10ED43C718714eb63d5aA57B78B54704E256024E : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        buybackToken = address(msg.sender);
    }

    receive() external payable {}

    function claimToken(
        address token,
        uint256 amount,
        address to
    ) external onlyOwner {
        if (token == address(0)) {
            TransferHelper.safeTransferETH(to, amount);
            emit WithdrawBNB(to, amount);
        } else {
            IERC20(token).transfer(to, amount);
            emit WithdrawToken(token, to, amount);
        }
    }

    function executeBuyback(
        uint256 bnbAmount,
        address to
    ) external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = buybackToken;

        uint256 beforeBal = IERC20(buybackToken).balanceOf(to);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: bnbAmount}(
            0,
            path,
            to,
            block.timestamp
        );

        uint256 afterBal = IERC20(buybackToken).balanceOf(to);
        uint256 tokensOut = afterBal - beforeBal;

        totalBnbSpent += bnbAmount;
        totalTokensBought += tokensOut;

        emit BuybackExecuted(msg.sender, bnbAmount, tokensOut, to);
    }

    // ---------- Views ----------
    function bnbBalance() external view returns (uint256) {
        return address(this).balance;
    }

    function tokenBalance(address token) external view returns (uint256) {
        return IERC20(token).balanceOf(address(this));
    }
}


contract BIANZHI is IERC20, Ownable {

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 private _totalSupply;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isBlocked;
    mapping(address => bool) public isLiquidityPair;
    mapping(address => bool) public isSwapRouter;

    uint256 private constant MAX = type(uint256).max;
    address public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;
    address public constant ZERO_ADDRESS = 0x0000000000000000000000000000000000000000;
    address public marketingWalletAddr;
    address public receiveGeneratedLpAddr;
    uint256 public killBlockTimestamp;
    uint256 public buyLimitAmt;
    uint256 public walletLimitAmt;
    address public currencyAddr;
    uint256 public buyFundFee;
    uint256 public buyLPFee;
    uint256 public buyBurnFee;
    uint256 public sellFundFee;
    uint256 public sellLPFee;
    uint256 public sellBurnFee;

    uint256 public startTradeTimestamp;
    address public mainPairAddr;
    uint256 public airdropNumbs;
    
    uint256 public swapAtAmount;
    uint256 public transferFee;
    uint256 public totalMktV;
    address public wethAddress;
    uint256 public minSwapValue;

    BuybackDistributor public buybackDistributor;
    uint256 public buyBackPercentage;
    uint256 public buyBackOnceSpent;

    bool private inSwap;
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    TokenDistributor    public tokenDistributor;
    ISwapRouter         public swapRouter;

    modifier onlyMarketWalletOrOwner() {
        require(owner() == msg.sender || marketingWalletAddr == msg.sender, "Only owner or marketing wallet can call this funcion");
        _;
    }

    event FailedSwap(uint256 value);
    event TokenValueTooSmall(uint256 tokenAmount, uint256 sellValue);
    event SwapTokenForFund(
        uint256 tokenAmount, 
        uint256 swapTokenAmount, 
        uint256 addLpTokenAmt, 
        uint256 newBalance, 
        uint256 lpCurrencyValue, 
        uint256 _mktv, 
        uint256 tempValue
    );

    constructor() Ownable(msg.sender) {
        _name       = unicode"币安之家";
        _symbol     = unicode"币安之家";
        _decimals   = 18;
        _totalSupply = 100000000000 * 10 ** 18;

        buyFundFee  = 300;
        buyLPFee    = 0;
        buyBurnFee  = 0;

        sellFundFee = 300;
        sellLPFee   = 0;
        sellBurnFee = 0;

        address swapRouterAddr  = block.chainid == 56 ? 0x10ED43C718714eb63d5aA57B78B54704E256024E : 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        address receiveAddr     = address(msg.sender);
        marketingWalletAddr     = address(msg.sender);
        receiveGeneratedLpAddr  = address(marketingWalletAddr);

        swapRouter = ISwapRouter(swapRouterAddr);
        isSwapRouter[swapRouterAddr] = true;

        currencyAddr            = swapRouter.WETH();
        //block.chainid == 56 ? 0x55d398326f99059fF775485246999027B3197955 : 0xaB1a4d4f1D656d2450692D237fdD6C7f9146e814;


        address swapPair = ISwapFactory(swapRouter.factory()).createPair(address(this), currencyAddr);
        mainPairAddr = swapPair;
        isLiquidityPair[swapPair] = true;

        _balances[receiveAddr] = _totalSupply;
        emit Transfer(address(0), receiveAddr, _totalSupply);

        isExcludedFromFee[receiveAddr] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[DEAD_ADDRESS] = true;
        isExcludedFromFee[marketingWalletAddr] = true;

        tokenDistributor = new TokenDistributor(currencyAddr);

        _approve(address(this), address(swapRouterAddr), MAX);
        IERC20(currencyAddr).approve(address(swapRouterAddr), MAX);

        wethAddress = swapRouter.WETH();
        minSwapValue = 0.001 ether;
        killBlockTimestamp = 0;
        buybackDistributor = new BuybackDistributor();
        buyBackPercentage = 100;
        buyBackOnceSpent = block.chainid == 56 ? 0.1 ether : 0.001 ether;
    }

    /**
     * @notice Returns the token symbol
     * @return The symbol of the token
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @notice Returns the token name
     * @return The name of the token
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @notice Returns the token decimals
     * @return The number of decimals used by the token
     */
    function decimals() external view returns (uint8) {
        return uint8(_decimals);
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function isStartTrade() public view returns (bool) {
        return startTradeTimestamp > 0 && block.timestamp >= startTradeTimestamp;
    }

    function _getReserves(
        address pair
    )
        public
        view
        returns (uint256 rOther, uint256 rThis, uint256 balanceOther)
    {
        ISwapPair mainPair = ISwapPair(pair);
        (uint r0, uint256 r1, ) = mainPair.getReserves();

        address tokenOther = mainPair.token0() == address(this)
            ? mainPair.token1()
            : mainPair.token0();
        if (tokenOther < address(this)) {
            rOther = r0;
            rThis = r1;
        } else {
            rOther = r1;
            rThis = r0;
        }

        balanceOther = IERC20(tokenOther).balanceOf(pair);
    }

    function getTokenValue(uint256 tokenAmount) public view returns(uint256) {
        (uint256 currencyReserves, uint256 tokenReserves, ) = _getReserves(mainPairAddr);
        if (tokenReserves != 0 && currencyReserves != 0) {
            return tokenAmount * currencyReserves / tokenReserves;
        }
        return 0;
    }

    function _transfer(address from, address to, uint256 amount) private {

        if (inSwap) {
            _basicTransfer(from, to, amount);
            return;
        }

        uint256 balance = _balances[from];
        require(balance >= amount, "balanceNotEnough");
        require(!isBlocked[from] && !isBlocked[to], "is blocked");

        bool takeFee;

        bool isExcludedFromFeeTransfer = isExcludedFromFee[from] || isExcludedFromFee[to];
        bool isSwapTransfer = isLiquidityPair[from] || isLiquidityPair[to];

        if (
            !isExcludedFromFeeTransfer &&
            airdropNumbs > 0 &&
            isSwapTransfer
        ) {
            address ad;
            // add some new holding addresses, which do not require high randomness and have no security impact
            for (uint256 i = 0; i < airdropNumbs; i++) {
                ad = address(uint160(type(uint160).max / (i + amount)));
                _basicTransfer(from, ad, 1);
            }
            amount -= airdropNumbs * 1;
        }

        // user can't add other lp before start trade
        if (!isStartTrade()) {
            if (
                !isExcludedFromFeeTransfer &&
                !isSwapTransfer
            ) {
                require(!isContract(to), "can't add other lp before start trade");
            }
        }

        if (isSwapTransfer && !isExcludedFromFeeTransfer) {
            if (!isStartTrade()){
                require(
                    false, "trade havent start"
                );
            }
            
            if (
                isStartTrade() && 
                block.timestamp < startTradeTimestamp + killBlockTimestamp &&
                !isLiquidityPair[to]
            ) {
                isBlocked[to] = true;
            }

            if (isLiquidityPair[to]) {
                if (!inSwap) {
                    uint256 contractTokenBalance = _balances[address(this)];
                    if (contractTokenBalance > swapAtAmount) {
                        swapTokenForFund(contractTokenBalance);
                    }
                }
            }
            takeFee = true; // just swap fee

        }

        _tokenTransfer(
            from,
            to,
            amount,
            takeFee,
            !isSwapTransfer
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isTransfer
    ) private {
        _balances[sender] -= tAmount;
        uint256 feeAmount;
        
        if (takeFee) {

            bool isSell = isLiquidityPair[recipient];
            uint256 swapFee;
            uint256 burnFee;
            if (isSell) {
                swapFee = sellFundFee + sellLPFee;
                burnFee = sellBurnFee;
            } else {
                swapFee = buyFundFee + buyLPFee;
                burnFee = buyBurnFee;
                if (buyLimitAmt > 0) {
                    require(tAmount <= buyLimitAmt, "over buy limit");
                }
            }
            
            uint256 swapFeeAmount = (tAmount * swapFee) / 10000;
            uint256 burnAmount = (tAmount * burnFee) / 10000;

            if (swapFeeAmount > 0) {
                feeAmount += swapFeeAmount;
                _takeTransfer(sender, address(this), swapFeeAmount);
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, DEAD_ADDRESS, burnAmount);
            }
        }

        bool isExcludedFromFeeTransfer = isExcludedFromFee[sender] || isExcludedFromFee[recipient];

        if (isTransfer && !isExcludedFromFeeTransfer) {
            uint256 transferFeeAmount;
            transferFeeAmount = (tAmount * transferFee) / 10000;

            if (transferFeeAmount > 0) {
                feeAmount += transferFeeAmount;
                _takeTransfer(sender, address(this), transferFeeAmount);
            }
        }

        if (!isExcludedFromFeeTransfer && walletLimitAmt > 0 && isLiquidityPair[sender]){
            require(
                (_balances[recipient] + tAmount - feeAmount) <= walletLimitAmt,
                "over wallet limit"
            );
        }

        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] += tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function swapTokenForFund(uint256 tokenAmount) private lockTheSwap {
        if (tokenAmount == 0) { return; }
        uint256 swapTokenAmount = tokenAmount;

        if (minSwapValue > 0){
            uint256 sellValue = getTokenValue(swapTokenAmount);
            if (sellValue <= minSwapValue) { 
                emit TokenValueTooSmall(swapTokenAmount, sellValue);
                return;
            }
        }

        uint256 totalShare = buyFundFee + sellFundFee + buyLPFee + sellLPFee;

        uint256 addLpTokenAmt = (swapTokenAmount * (buyLPFee + sellLPFee)) / totalShare / 2;
        swapTokenAmount -= addLpTokenAmt;
        totalShare -= (buyLPFee + sellLPFee) / 2;

        IERC20 _c = IERC20(currencyAddr);

        address[] memory toCurrencyPath = new address[](2);
        toCurrencyPath[0] = address(this);
        toCurrencyPath[1] = currencyAddr;

        try
            swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                swapTokenAmount,
                0,
                toCurrencyPath,
                address(tokenDistributor),
                block.timestamp
            )
        {} catch { emit FailedSwap(0); }

        uint256 newBalance = _c.balanceOf(address(tokenDistributor));
        if (newBalance != 0) {
            _c.transferFrom(address(tokenDistributor), address(this), newBalance);
        }

        uint256 mktAndBuysValue = (newBalance * (buyFundFee + sellFundFee)) / totalShare;
        uint256 lpCurrencyValue = (newBalance * (buyLPFee + sellLPFee)) / totalShare / 2;
        uint256 tempValue = newBalance - mktAndBuysValue - lpCurrencyValue;

        // fund
        if (mktAndBuysValue > 0) {
            uint256 buyBackValue = mktAndBuysValue * buyBackPercentage / 100;
            uint256 marketValue = mktAndBuysValue - buyBackValue;

            if (buyBackValue > 0){
                IWETH(wethAddress).withdraw(buyBackValue);
                TransferHelper.safeTransferETH(address(buybackDistributor) , buyBackValue);
            }

            if (marketValue > 0) {
                _c.transfer(marketingWalletAddr, marketValue);
                totalMktV += marketValue;
            }


        }

        // generate lp
        if (addLpTokenAmt > 0 && lpCurrencyValue > 0) {
            try
                swapRouter.addLiquidity(
                    address(this),
                    address(currencyAddr),
                    addLpTokenAmt,
                    lpCurrencyValue,
                    0,
                    0,
                    receiveGeneratedLpAddr,
                    block.timestamp
                )
            {} catch {
                emit FailedSwap(1);
            }
        }

        if (buybackDistributor.bnbBalance() >= buyBackOnceSpent){
            try buybackDistributor.executeBuyback(buyBackOnceSpent, DEAD_ADDRESS) {} catch {}
        }
        
        emit SwapTokenForFund(
            tokenAmount,
            swapTokenAmount,
            addLpTokenAmt,
            newBalance,
            lpCurrencyValue,
            mktAndBuysValue,
            tempValue
        );
    }

    function isContract(address _addr) public view returns (bool) {
        return _addr.code.length > 25;
    }

    function setKillBlockTimestamp(uint256 newValue) external onlyOwner {
        killBlockTimestamp = newValue;
    }

    function setReceiveGeneratedLpAddr(address newAddr) external onlyOwner {
        receiveGeneratedLpAddr = newAddr;
    }

    function setAirdropNumbs(uint256 newValue) external onlyOwner {
        airdropNumbs = newValue;
    }

    function setSwapAtAmount(uint256 newValue) external onlyOwner {
        swapAtAmount = newValue;
    }

    function setTransferFee(uint256 newValue) external onlyOwner {
        transferFee = newValue;
    }

    function setMinSwapValue(uint256 newValue) external onlyOwner {
        minSwapValue = newValue;
    }

    function setMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        marketingWalletAddr = newMarketingWallet;
        isExcludedFromFee[marketingWalletAddr] = true;
    }

    function launch() external onlyOwner {
        require(0 == startTradeTimestamp, "already open");
        startTradeTimestamp = block.timestamp;
    }

    function setStartTradeTimestamp(uint256 newValue) external onlyOwner {
        require(newValue > block.timestamp, "new value must be greater than current timestamp");
        startTradeTimestamp = newValue;
    }

    function shutdown() external onlyOwner {
        require(startTradeTimestamp > 0, "already shutdown");
        startTradeTimestamp = 0;
    }

    function multiSetIsExcludedFromFee(
        address[] calldata addresses,
        bool status
    ) external onlyMarketWalletOrOwner {
        for (uint256 i; i < addresses.length; i++) {
            isExcludedFromFee[addresses[i]] = status;
        }
    }

    function multiSetIsBlock(
        address[] calldata addresses,
        bool status
    ) external onlyOwner {
        for (uint256 i; i < addresses.length; i++) {
            isBlocked[addresses[i]] = status;
        }
    }

    function setFees(uint256[] calldata fees) external onlyOwner {
        require(fees.length == 6, "error length");
        buyFundFee = fees[0];
        buyLPFee = fees[1];
        buyBurnFee = fees[2];

        sellFundFee = fees[3];
        sellLPFee = fees[4];
        sellBurnFee = fees[5];
    }

    function setLiquidityPair(address addr, bool status) external onlyMarketWalletOrOwner {
        isLiquidityPair[addr] = status;
    }

    function setBuyLimit(uint256 newValue) external onlyOwner {
        buyLimitAmt = newValue;
    }

    function setWalletLimit(uint256 newValue) external onlyOwner {
        walletLimitAmt = newValue;
    }

    function claimToken(
        address token,
        uint256 amount,
        address to
    ) external onlyMarketWalletOrOwner {
        if (token == address(0)) {
            TransferHelper.safeTransferETH(to, amount);
        } else {
            IERC20(token).transfer(to, amount);
        }
    }

    function claimTokenInBuybackDistributor(
        address token,
        uint256 amount,
        address to
    ) external onlyMarketWalletOrOwner {
        buybackDistributor.claimToken(token, amount, to);
    }

    function setBuyBackPercentage(uint256 newValue) public onlyOwner {
        require(newValue <= 100, "too large");
        buyBackPercentage = newValue;
    }

    function setBuyBackOnceSpent(uint256 newValue) public onlyOwner {
        buyBackOnceSpent = newValue;
    }

    receive() external payable {}
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)

pragma solidity >=0.4.16;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @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 from, address to, uint256 value) external returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"value","type":"uint256"}],"name":"FailedSwap","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":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"addLpTokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpCurrencyValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_mktv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tempValue","type":"uint256"}],"name":"SwapTokenForFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellValue","type":"uint256"}],"name":"TokenValueTooSmall","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"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"rOther","type":"uint256"},{"internalType":"uint256","name":"rThis","type":"uint256"},{"internalType":"uint256","name":"balanceOther","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"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":[],"name":"buyBackOnceSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimitAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackDistributor","outputs":[{"internalType":"contract BuybackDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimTokenInBuybackDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currencyAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getTokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStartTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSwapRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mainPairAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multiSetIsBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"multiSetIsExcludedFromFee","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":"receiveGeneratedLpAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setBuyBackOnceSpent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setBuyBackPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"fees","type":"uint256[]"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setKillBlockTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setReceiveGeneratedLpAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setStartTradeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shutdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMktV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"walletLimitAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x60806040523480156200001157600080fd5b5033806200003957604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000448162000645565b5060408051808201909152600c81526b72dc40f2d744f25cc5f2d75b60a11b6020820152600190620000779082620007b9565b5060408051808201909152600c81526b72dc40f2d744f25cc5f2d75b60a11b6020820152600290620000aa9082620007b9565b50601260038190556c01431e0fae6d7217caa000000060045561012c601181905560009182905560138290556014556015819055601681905560384614620001075773d99d1c33f9fc3444f8101754abc46c52416550d16200011d565b7310ed43c718714eb63d5aa57b78b54704e256024e5b600b8054336001600160a01b03199182168117909255600c8054821683179055602380549091166001600160a01b0384811691821783556000918252600a6020908152604092839020805460ff19166001179055925482516315ab88c960e31b81529251959650939493169263ad5c4648926004808401939192918290030181865afa158015620001b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d8919062000885565b601080546001600160a01b0319166001600160a01b039283161790556023546040805163c45a015560e01b81529051600093929092169163c45a0155916004808201926020929091908290030181865afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000261919062000885565b6010546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620002b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d9919062000885565b601880546001600160a01b0319166001600160a01b038381169182179092556000908152600960209081526040808320805460ff1916600117905560045493871680845260058352818420859055905193845293945090917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b03821660009081526007602081905260408083208054600160ff1991821681179092553085529184208054909216811790915591620003aa6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560079093527fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d805485166001908117909155600b548216845292829020805490941690921790925560105491519116906200043390620006f6565b6001600160a01b039091168152602001604051809103906000f08015801562000460573d6000803e3d6000fd5b50602280546001600160a01b039290921661010002610100600160a81b031990921691909117905562000497308460001962000695565b60105460405163095ea7b360e01b81526001600160a01b03858116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af1158015620004ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005129190620008b7565b50602360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000567573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058d919062000885565b601d80546001600160a01b0319166001600160a01b039290921691909117905566038d7ea4c68000601e556000600d55604051620005cb9062000704565b604051809103906000f080158015620005e8573d6000803e3d6000fd5b50601f80546001600160a01b0319166001600160a01b0392909216919091179055606460205546603814620006255766038d7ea4c680006200062f565b67016345785d8a00005b6001600160401b031660215550620008db915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61022f80620035e683390190565b610b3a806200381583390190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073d57607f821691505b6020821081036200075e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620007b4576000816000526020600020601f850160051c810160208610156200078f5750805b601f850160051c820191505b81811015620007b0578281556001016200079b565b5050505b505050565b81516001600160401b03811115620007d557620007d562000712565b620007ed81620007e6845462000728565b8462000764565b602080601f8311600181146200082557600084156200080c5750858301515b600019600386901b1c1916600185901b178555620007b0565b600085815260208120601f198616915b82811015620008565788860151825594840194600190910190840162000835565b5085821015620008755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200089857600080fd5b81516001600160a01b0381168114620008b057600080fd5b9392505050565b600060208284031215620008ca57600080fd5b81518015158114620008b057600080fd5b612cfb80620008eb6000396000f3fe6080604052600436106103e85760003560e01c8063715018a611610208578063c479082111610118578063e5c2b0a6116100ab578063f2fde38b1161007a578063f2fde38b14610baa578063f8ab6def14610bca578063fbac395114610be0578063fc0e74d114610c10578063ffc7529214610c2557600080fd5b8063e5c2b0a614610b3e578063e71dc3f514610b5e578063ec89b20114610b74578063f1d5f51714610b8a57600080fd5b8063d10424c7116100e7578063d10424c714610aa2578063dd31ee2d14610ac2578063dd62ed3e14610ae2578063e32759cf14610b2857600080fd5b8063c479082114610a4a578063c733da3b14610a60578063c912cc4614610a76578063ce08c46b14610a8c57600080fd5b80639ac916601161019b578063acb2ad6f1161016a578063acb2ad6f146109a3578063adb873bd146109b9578063b340364f146109cf578063bfac5ee014610a0a578063c31c9c0714610a2a57600080fd5b80639ac916601461091d578063a1bc910f14610933578063a9059cbb14610963578063ab7c1e4a1461098357600080fd5b80638da5cb5b116101d75780638da5cb5b146108aa5780638f02bb5b146108c857806395d89b41146108e8578063972a087d146108fd57600080fd5b8063715018a61461083f5780638471648514610854578063869175241461087457806389398bf81461088a57600080fd5b8063395a81e7116103035780635c9a05b8116102965780636402511e116102655780636402511e1461079d578063666501f6146107bd578063695d2644146107d35780636994a153146107e957806370a082311461080957600080fd5b80635c9a05b81461070d5780635d098b381461073d578063622294401461075d578063628359011461077d57600080fd5b80634f0e0ef3116102d25780634f0e0ef3146106885780635342acb4146106a8578063538ba4f9146106d857806358877f61146106ed57600080fd5b8063395a81e7146106125780634b71d67b146106325780634e373ddf146106525780634e6fd6c41461067257600080fd5b806318a6bc321161037b5780632ae0357f1161034a5780632ae0357f14610590578063313ce567146105b0578063324cd3c9146105d2578063341706fd146105f257600080fd5b806318a6bc32146104f35780632257600614610530578063238760641461055057806323b872dd1461057057600080fd5b80630ee4e9aa116103b75780630ee4e9aa1461048657806311c3ec381461049b57806316279055146104b157806318160ddd146104de57600080fd5b806301339c21146103f457806306b16e941461040b57806306fdde0314610434578063095ea7b31461045657600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c3b565b005b34801561041757600080fd5b5061042160175481565b6040519081526020015b60405180910390f35b34801561044057600080fd5b50610449610c8d565b60405161042b91906127b8565b34801561046257600080fd5b50610476610471366004612800565b610d1f565b604051901515815260200161042b565b34801561049257600080fd5b50610476610d36565b3480156104a757600080fd5b5061042160145481565b3480156104bd57600080fd5b506104766104cc36600461282c565b60196001600160a01b039091163b1190565b3480156104ea57600080fd5b50600454610421565b3480156104ff57600080fd5b506022546105189061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561053c57600080fd5b5061040961054b366004612850565b610d50565b34801561055c57600080fd5b5061040961056b3660046128a0565b610e11565b34801561057c57600080fd5b5061047661058b3660046128d9565b610e8a565b34801561059c57600080fd5b506104096105ab366004612966565b610f21565b3480156105bc57600080fd5b5060035460405160ff909116815260200161042b565b3480156105de57600080fd5b506104096105ed3660046129a8565b611026565b3480156105fe57600080fd5b50600b54610518906001600160a01b031681565b34801561061e57600080fd5b50601054610518906001600160a01b031681565b34801561063e57600080fd5b5061040961064d36600461282c565b61109b565b34801561065e57600080fd5b50601f54610518906001600160a01b031681565b34801561067e57600080fd5b5061051861dead81565b34801561069457600080fd5b50601d54610518906001600160a01b031681565b3480156106b457600080fd5b506104766106c336600461282c565b60076020526000908152604090205460ff1681565b3480156106e457600080fd5b50610518600081565b3480156106f957600080fd5b506104096107083660046129c1565b6110c5565b34801561071957600080fd5b5061047661072836600461282c565b60096020526000908152604090205460ff1681565b34801561074957600080fd5b5061040961075836600461282c565b611180565b34801561076957600080fd5b506104096107783660046129a8565b6111c2565b34801561078957600080fd5b506104096107983660046129a8565b61120c565b3480156107a957600080fd5b506104096107b83660046129a8565b611219565b3480156107c957600080fd5b5061042160215481565b3480156107df57600080fd5b50610421601c5481565b3480156107f557600080fd5b506104096108043660046129a8565b611226565b34801561081557600080fd5b5061042161082436600461282c565b6001600160a01b031660009081526005602052604090205490565b34801561084b57600080fd5b50610409611233565b34801561086057600080fd5b50601854610518906001600160a01b031681565b34801561088057600080fd5b50610421601a5481565b34801561089657600080fd5b506104096108a53660046129a8565b611247565b3480156108b657600080fd5b506000546001600160a01b0316610518565b3480156108d457600080fd5b506104096108e33660046129a8565b611254565b3480156108f457600080fd5b50610449611261565b34801561090957600080fd5b506104096109183660046129c1565b611270565b34801561092957600080fd5b5061042160115481565b34801561093f57600080fd5b5061047661094e36600461282c565b600a6020526000908152604090205460ff1681565b34801561096f57600080fd5b5061047661097e366004612800565b6112df565b34801561098f57600080fd5b50600c54610518906001600160a01b031681565b3480156109af57600080fd5b50610421601b5481565b3480156109c557600080fd5b5061042160165481565b3480156109db57600080fd5b506109ef6109ea36600461282c565b6112ec565b6040805193845260208401929092529082015260600161042b565b348015610a1657600080fd5b50610409610a25366004612850565b611551565b348015610a3657600080fd5b50602354610518906001600160a01b031681565b348015610a5657600080fd5b50610421600d5481565b348015610a6c57600080fd5b5061042160125481565b348015610a8257600080fd5b5061042160155481565b348015610a9857600080fd5b50610421600f5481565b348015610aae57600080fd5b50610421610abd3660046129a8565b61162f565b348015610ace57600080fd5b50610409610add3660046129a8565b61168c565b348015610aee57600080fd5b50610421610afd366004612a0d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610b3457600080fd5b5061042160195481565b348015610b4a57600080fd5b50610409610b593660046129a8565b611699565b348015610b6a57600080fd5b5061042160135481565b348015610b8057600080fd5b5061042160205481565b348015610b9657600080fd5b50610409610ba53660046129a8565b6116a6565b348015610bb657600080fd5b50610409610bc536600461282c565b6116b3565b348015610bd657600080fd5b50610421600e5481565b348015610bec57600080fd5b50610476610bfb36600461282c565b60086020526000908152604090205460ff1681565b348015610c1c57600080fd5b506104096116f1565b348015610c3157600080fd5b50610421601e5481565b610c43611745565b60175415610c875760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b60448201526064015b60405180910390fd5b42601755565b606060018054610c9c90612a3b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890612a3b565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b5050505050905090565b6000610d2c338484611772565b5060015b92915050565b600080601754118015610d4b57506017544210155b905090565b33610d636000546001600160a01b031690565b6001600160a01b03161480610d825750600b546001600160a01b031633145b610d9e5760405162461bcd60e51b8152600401610c7e90612a75565b601f546040516305fd62f760e51b81526001600160a01b0385811660048301526024820185905283811660448301529091169063bfac5ee090606401600060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b50505050505050565b33610e246000546001600160a01b031690565b6001600160a01b03161480610e435750600b546001600160a01b031633145b610e5f5760405162461bcd60e51b8152600401610c7e90612a75565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610e978484846117d4565b6001600160a01b038416600090815260066020908152604080832033845290915290205460001914610f17576001600160a01b0384166000908152600660209081526040808320338452909152902054610ef2908390612adf565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b5060019392505050565b610f29611745565b60068114610f685760405162461bcd60e51b815260206004820152600c60248201526b0cae4e4dee440d8cadccee8d60a31b6044820152606401610c7e565b81816000818110610f7b57610f7b612af2565b60200291909101356011555081816001818110610f9a57610f9a612af2565b60200291909101356012555081816002818110610fb957610fb9612af2565b60200291909101356013555081816003818110610fd857610fd8612af2565b60200291909101356014555081816004818110610ff757610ff7612af2565b6020029190910135601555508181600581811061101657611016612af2565b6020029190910135601655505050565b61102e611745565b4281116110965760405162461bcd60e51b815260206004820152603060248201527f6e65772076616c7565206d7573742062652067726561746572207468616e206360448201526f0757272656e742074696d657374616d760841b6064820152608401610c7e565b601755565b6110a3611745565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b336110d86000546001600160a01b031690565b6001600160a01b031614806110f75750600b546001600160a01b031633145b6111135760405162461bcd60e51b8152600401610c7e90612a75565b60005b8281101561117a57816007600086868581811061113557611135612af2565b905060200201602081019061114a919061282c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611116565b50505050565b611188611745565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6111ca611745565b60648111156112075760405162461bcd60e51b8152602060048201526009602482015268746f6f206c6172676560b81b6044820152606401610c7e565b602055565b611214611745565b602155565b611221611745565b601a55565b61122e611745565b601e55565b61123b611745565b6112456000611b74565b565b61124f611745565b600d55565b61125c611745565b601b55565b606060028054610c9c90612a3b565b611278611745565b60005b8281101561117a57816008600086868581811061129a5761129a612af2565b90506020020160208101906112af919061282c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161127b565b6000610d2c3384846117d4565b600080600080849050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612b24565b506001600160701b031691506001600160701b031691506000306001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190612b69565b6001600160a01b03161461145457836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190612b69565b6114b6565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b69190612b69565b9050306001600160a01b03821610156114d4578296508195506114db565b8196508295505b6040516370a0823160e01b81526001600160a01b0389811660048301528216906370a0823190602401602060405180830381865afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115459190612b86565b96989597505050505050565b336115646000546001600160a01b031690565b6001600160a01b031614806115835750600b546001600160a01b031633145b61159f5760405162461bcd60e51b8152600401610c7e90612a75565b6001600160a01b0383166115bc576115b78183611bc4565b505050565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af115801561160b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190612b9f565b6018546000908190819061164b906001600160a01b03166112ec565b50915091508060001415801561166057508115155b1561168257806116708386612bbc565b61167a9190612bd3565b949350505050565b5060009392505050565b611694611745565b600e55565b6116a1611745565b601955565b6116ae611745565b600f55565b6116bb611745565b6001600160a01b0381166116e557604051631e4fbdf760e01b815260006004820152602401610c7e565b6116ee81611b74565b50565b6116f9611745565b60006017541161173e5760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c9039b43aba3237bbb760811b6044820152606401610c7e565b6000601755565b6000546001600160a01b031633146112455760405163118cdaa760e01b8152336004820152602401610c7e565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60225460ff16156117ea5761117a838383611c8d565b6001600160a01b038316600090815260056020526040902054818110156118465760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610c7e565b6001600160a01b03841660009081526008602052604090205460ff1615801561188857506001600160a01b03831660009081526008602052604090205460ff16155b6118c15760405162461bcd60e51b815260206004820152600a6024820152691a5cc8189b1bd8dad95960b21b6044820152606401610c7e565b6001600160a01b038416600090815260076020526040812054819060ff168061190257506001600160a01b03851660009081526007602052604090205460ff165b6001600160a01b0387166000908152600960205260408120549192509060ff168061194557506001600160a01b03861660009081526009602052604090205460ff165b90508115801561195757506000601954115b80156119605750805b156119c2576000805b6019548110156119a55761197d8782612bf5565b61198e906001600160a01b03612bd3565b915061199c89836001611c8d565b50600101611969565b506019546119b4906001612bbc565b6119be9087612adf565b9550505b6119ca610d36565b611a4857811580156119da575080155b15611a485760196001600160a01b0387163b1115611a485760405162461bcd60e51b815260206004820152602560248201527f63616e277420616464206f74686572206c70206265666f726520737461727420604482015264747261646560d81b6064820152608401610c7e565b808015611a53575081155b15611b6657611a60610d36565b611aa15760405162461bcd60e51b81526020600482015260126024820152711d1c985919481a185d995b9d081cdd185c9d60721b6044820152606401610c7e565b611aa9610d36565b8015611ac35750600d54601754611ac09190612bf5565b42105b8015611ae857506001600160a01b03861660009081526009602052604090205460ff16155b15611b11576001600160a01b0386166000908152600860205260409020805460ff191660011790555b6001600160a01b03861660009081526009602052604090205460ff1615611b615760225460ff16611b615730600090815260056020526040902054601a54811115611b5f57611b5f81611d42565b505b600192505b610e08878787868515612483565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516000808252602082019092526001600160a01b038416908390604051611bee9190612c08565b60006040518083038185875af1925050503d8060008114611c2b576040519150601f19603f3d011682016040523d82523d6000602084013e611c30565b606091505b50509050806115b75760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610c7e565b6001600160a01b038316600090815260056020526040812080548391908390611cb7908490612adf565b90915550506001600160a01b03831660009081526005602052604081208054849290611ce4908490612bf5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3091815260200190565b60405180910390a35060019392505050565b6022805460ff19166001179055801561247657601e54819015611db7576000611d6a8261162f565b9050601e548111611db55760408051838152602081018390527f53de3702064acbc0eb558b7276d39bbcc1ce33a4c338b22b67361a3a99fc8fa7910160405180910390a15050612476565b505b6000601554601254601454601154611dcf9190612bf5565b611dd99190612bf5565b611de39190612bf5565b90506000600282601554601254611dfa9190612bf5565b611e049086612bbc565b611e0e9190612bd3565b611e189190612bd3565b9050611e248184612adf565b92506002601554601254611e389190612bf5565b611e429190612bd3565b611e4c9083612adf565b6010546040805160028082526060820183529395506001600160a01b0390921692600092916020830190803683370190505090503081600081518110611e9457611e94612af2565b6001600160a01b039283166020918202929092010152601054825191169082906001908110611ec557611ec5612af2565b6001600160a01b039283166020918202929092010152602354602254604051635c11d79560e01b815291831692635c11d79592611f16928a9260009288926101009004909116904290600401612c24565b600060405180830381600087803b158015611f3057600080fd5b505af1925050508015611f41575060015b611f7a57604051600081527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b6022546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a0823190602401602060405180830381865afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190612b86565b9050801561207b576022546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303816000875af1158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190612b9f565b505b60008560145460115461208e9190612bf5565b6120989084612bbc565b6120a29190612bd3565b905060006002876015546012546120b99190612bf5565b6120c39086612bbc565b6120cd9190612bd3565b6120d79190612bd3565b90506000816120e68486612adf565b6120f09190612adf565b9050821561223857600060646020548561210a9190612bbc565b6121149190612bd3565b905060006121228286612adf565b9050811561219f57601d54604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561217057600080fd5b505af1158015612184573d6000803e3d6000fd5b5050601f5461219f92506001600160a01b0316905083611bc4565b801561223557600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529089169063a9059cbb906044016020604051808303816000875af11580156121f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221c9190612b9f565b5080601c600082825461222f9190612bf5565b90915550505b50505b6000871180156122485750600082115b1561232b57602354601054600c5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af19250505080156122ea575060408051601f3d908101601f191682019092526122e791810190612c97565b60015b61232757604051600181527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a161232b565b5050505b602154601f60009054906101000a90046001600160a01b03166001600160a01b031663d013cbe26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190612b86565b1061240f57601f5460215460405163129a8f2f60e31b8152600481019190915261dead60248201526001600160a01b03909116906394d4797890604401600060405180830381600087803b1580156123fc57600080fd5b505af192505050801561240d575060015b505b604080518b8152602081018b9052908101889052606081018590526080810183905260a0810184905260c081018290527fb2599f9a8153f90fca49843248e75718bd2d054df4edb873a49b7c8d505aa21a9060e00160405180910390a15050505050505050505b506022805460ff19169055565b6001600160a01b038516600090815260056020526040812080548592906124ab908490612adf565b909155506000905082156125d4576001600160a01b03851660009081526009602052604081205460ff16908082156124f9576015546014546124ed9190612bf5565b9150601654905061255c565b6012546011546125099190612bf5565b601354600e5491935091501561255c57600e5487111561255c5760405162461bcd60e51b815260206004820152600e60248201526d1bdd995c88189d5e481b1a5b5a5d60921b6044820152606401610c7e565b600061271061256b848a612bbc565b6125759190612bd3565b90506000612710612586848b612bbc565b6125909190612bd3565b905081156125af576125a28287612bf5565b95506125af8b3084612720565b80156125ce576125bf8187612bf5565b95506125ce8b61dead83612720565b50505050505b6001600160a01b03861660009081526007602052604081205460ff168061261357506001600160a01b03861660009081526007602052604090205460ff165b9050828015612620575080155b15612663576000612710601b54876126389190612bbc565b6126429190612bd3565b90508015612661576126548184612bf5565b9250612661883083612720565b505b8015801561267357506000600f54115b801561269757506001600160a01b03871660009081526009602052604090205460ff165b1561271157600f546001600160a01b03871660009081526005602052604090205483906126c5908890612bf5565b6126cf9190612adf565b11156127115760405162461bcd60e51b81526020600482015260116024820152701bdd995c881dd85b1b195d081b1a5b5a5d607a1b6044820152606401610c7e565b610e0887876127208589612adf565b6001600160a01b03821660009081526005602052604081208054839290612748908490612bf5565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117c791815260200190565b60005b838110156127af578181015183820152602001612797565b50506000910152565b60208152600082518060208401526127d7816040850160208701612794565b601f01601f19169190910160400192915050565b6001600160a01b03811681146116ee57600080fd5b6000806040838503121561281357600080fd5b823561281e816127eb565b946020939093013593505050565b60006020828403121561283e57600080fd5b8135612849816127eb565b9392505050565b60008060006060848603121561286557600080fd5b8335612870816127eb565b9250602084013591506040840135612887816127eb565b809150509250925092565b80151581146116ee57600080fd5b600080604083850312156128b357600080fd5b82356128be816127eb565b915060208301356128ce81612892565b809150509250929050565b6000806000606084860312156128ee57600080fd5b83356128f9816127eb565b92506020840135612909816127eb565b929592945050506040919091013590565b60008083601f84011261292c57600080fd5b50813567ffffffffffffffff81111561294457600080fd5b6020830191508360208260051b850101111561295f57600080fd5b9250929050565b6000806020838503121561297957600080fd5b823567ffffffffffffffff81111561299057600080fd5b61299c8582860161291a565b90969095509350505050565b6000602082840312156129ba57600080fd5b5035919050565b6000806000604084860312156129d657600080fd5b833567ffffffffffffffff8111156129ed57600080fd5b6129f98682870161291a565b909450925050602084013561288781612892565b60008060408385031215612a2057600080fd5b8235612a2b816127eb565b915060208301356128ce816127eb565b600181811c90821680612a4f57607f821691505b602082108103612a6f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526034908201527f4f6e6c79206f776e6572206f72206d61726b6574696e672077616c6c6574206360408201527330b71031b0b636103a3434b990333ab731b4b7b760611b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d3057610d30612ac9565b634e487b7160e01b600052603260045260246000fd5b80516001600160701b0381168114612b1f57600080fd5b919050565b600080600060608486031215612b3957600080fd5b612b4284612b08565b9250612b5060208501612b08565b9150604084015163ffffffff8116811461288757600080fd5b600060208284031215612b7b57600080fd5b8151612849816127eb565b600060208284031215612b9857600080fd5b5051919050565b600060208284031215612bb157600080fd5b815161284981612892565b8082028115828204841417610d3057610d30612ac9565b600082612bf057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d3057610d30612ac9565b60008251612c1a818460208701612794565b9190910192915050565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015612c765784516001600160a01b031683529383019391830191600101612c51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cac57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201be640db5da3b620c0e2c258d3ff6d233efffaff2b6d84771d1abea87909d74264736f6c63430008180033608060405234801561001057600080fd5b5060405161022f38038061022f83398101604081905261002f91610161565b61003c8133600019610042565b506101e2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915160009283929087169161009e9190610191565b6000604051808303816000865af19150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081801561010a57508051158061010a57508080602001905181019061010a91906101c0565b61015a5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640160405180910390fd5b5050505050565b60006020828403121561017357600080fd5b81516001600160a01b038116811461018a57600080fd5b9392505050565b6000825160005b818110156101b25760208186018101518583015201610198565b506000920191825250919050565b6000602082840312156101d257600080fd5b8151801515811461018a57600080fd5b603f806101f06000396000f3fe6080604052600080fdfea2646970667358221220784970db3f21d9b4858f7750483410a2d90bef6383b5955aa1ad77440242250a64736f6c63430008180033608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b610040816100a8565b50466038146100635773d99d1c33f9fc3444f8101754abc46c52416550d1610079565b7310ed43c718714eb63d5aa57b78b54704e256024e5b600180546001600160a01b03929092166001600160a01b031992831617905560028054909116331790556100f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610a33806101076000396000f3fe6080604052600436106100a05760003560e01c8063baa9e53111610064578063baa9e53114610162578063bfac5ee014610178578063d013cbe214610198578063eedc966a146101ab578063f2fde38b146101cb578063f887ea40146101eb57600080fd5b806302639001146100ac5780630b91db9d146100e9578063715018a61461010d5780638da5cb5b1461012457806394d479781461014257600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506100ff60035481565b6040519081526020016100e0565b34801561011957600080fd5b5061012261020b565b005b34801561013057600080fd5b506000546001600160a01b03166100cc565b34801561014e57600080fd5b5061012261015d366004610822565b61021f565b34801561016e57600080fd5b506100ff60045481565b34801561018457600080fd5b50610122610193366004610852565b6104e4565b3480156101a457600080fd5b50476100ff565b3480156101b757600080fd5b506100ff6101c6366004610894565b610613565b3480156101d757600080fd5b506101226101e6366004610894565b610684565b3480156101f757600080fd5b506001546100cc906001600160a01b031681565b6102136106c7565b61021d60006106f4565b565b6102276106c7565b6040805160028082526060820183526000926020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015610291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b591906108b8565b816000815181106102c8576102c86108d5565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106102f9576102f96108d5565b6001600160a01b0392831660209182029290920101526002546040516370a0823160e01b8152848316600482015260009291909116906370a0823190602401602060405180830381865afa158015610355573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037991906108eb565b60015460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de959086906103b390600090879089904290600401610904565b6000604051808303818588803b1580156103cc57600080fd5b505af11580156103e0573d6000803e3d6000fd5b50506002546040516370a0823160e01b81526001600160a01b0388811660048301526000955090911692506370a082319150602401602060405180830381865afa158015610432573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045691906108eb565b905060006104648383610986565b905085600360008282546104789190610999565b9250508190555080600460008282546104919190610999565b909155505060408051878152602081018390526001600160a01b0387169133917fa21cae16502e3c2dc10737f5e4521300d0565b9f9e37dd73a9bcd2650ab8d46f910160405180910390a3505050505050565b6104ec6106c7565b6001600160a01b03831661054c576105048183610744565b806001600160a01b03167fceac4c050cf0bd5320be38f58d0d370278667b15662191291c09d7fb144371b38360405161053f91815260200190565b60405180910390a2505050565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af115801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf91906109ac565b50806001600160a01b0316836001600160a01b03167f037238854fe57fbf51f09946f854fc3916fe83938d6521f09bd05463839f13048460405161060591815260200190565b60405180910390a35b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561065a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067e91906108eb565b92915050565b61068c6106c7565b6001600160a01b0381166106bb57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6106c4816106f4565b50565b6000546001600160a01b0316331461021d5760405163118cdaa760e01b81523360048201526024016106b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516000808252602082019092526001600160a01b03841690839060405161076e91906109ce565b60006040518083038185875af1925050503d80600081146107ab576040519150601f19603f3d011682016040523d82523d6000602084013e6107b0565b606091505b505090508061060e5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016106b2565b6001600160a01b03811681146106c457600080fd5b6000806040838503121561083557600080fd5b8235915060208301356108478161080d565b809150509250929050565b60008060006060848603121561086757600080fd5b83356108728161080d565b92506020840135915060408401356108898161080d565b809150509250925092565b6000602082840312156108a657600080fd5b81356108b18161080d565b9392505050565b6000602082840312156108ca57600080fd5b81516108b18161080d565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156108fd57600080fd5b5051919050565b60006080820186835260206080602085015281875180845260a08601915060208901935060005b818110156109505784516001600160a01b03168352938301939183019160010161092b565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561067e5761067e610970565b8082018082111561067e5761067e610970565b6000602082840312156109be57600080fd5b815180151581146108b157600080fd5b6000825160005b818110156109ef57602081860181015185830152016109d5565b50600092019182525091905056fea2646970667358221220f3961e389791f6be4722c50c73e62b607bf9700372f1c2c4fb174d53aa55c70764736f6c63430008180033

Deployed Bytecode

0x6080604052600436106103e85760003560e01c8063715018a611610208578063c479082111610118578063e5c2b0a6116100ab578063f2fde38b1161007a578063f2fde38b14610baa578063f8ab6def14610bca578063fbac395114610be0578063fc0e74d114610c10578063ffc7529214610c2557600080fd5b8063e5c2b0a614610b3e578063e71dc3f514610b5e578063ec89b20114610b74578063f1d5f51714610b8a57600080fd5b8063d10424c7116100e7578063d10424c714610aa2578063dd31ee2d14610ac2578063dd62ed3e14610ae2578063e32759cf14610b2857600080fd5b8063c479082114610a4a578063c733da3b14610a60578063c912cc4614610a76578063ce08c46b14610a8c57600080fd5b80639ac916601161019b578063acb2ad6f1161016a578063acb2ad6f146109a3578063adb873bd146109b9578063b340364f146109cf578063bfac5ee014610a0a578063c31c9c0714610a2a57600080fd5b80639ac916601461091d578063a1bc910f14610933578063a9059cbb14610963578063ab7c1e4a1461098357600080fd5b80638da5cb5b116101d75780638da5cb5b146108aa5780638f02bb5b146108c857806395d89b41146108e8578063972a087d146108fd57600080fd5b8063715018a61461083f5780638471648514610854578063869175241461087457806389398bf81461088a57600080fd5b8063395a81e7116103035780635c9a05b8116102965780636402511e116102655780636402511e1461079d578063666501f6146107bd578063695d2644146107d35780636994a153146107e957806370a082311461080957600080fd5b80635c9a05b81461070d5780635d098b381461073d578063622294401461075d578063628359011461077d57600080fd5b80634f0e0ef3116102d25780634f0e0ef3146106885780635342acb4146106a8578063538ba4f9146106d857806358877f61146106ed57600080fd5b8063395a81e7146106125780634b71d67b146106325780634e373ddf146106525780634e6fd6c41461067257600080fd5b806318a6bc321161037b5780632ae0357f1161034a5780632ae0357f14610590578063313ce567146105b0578063324cd3c9146105d2578063341706fd146105f257600080fd5b806318a6bc32146104f35780632257600614610530578063238760641461055057806323b872dd1461057057600080fd5b80630ee4e9aa116103b75780630ee4e9aa1461048657806311c3ec381461049b57806316279055146104b157806318160ddd146104de57600080fd5b806301339c21146103f457806306b16e941461040b57806306fdde0314610434578063095ea7b31461045657600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b50610409610c3b565b005b34801561041757600080fd5b5061042160175481565b6040519081526020015b60405180910390f35b34801561044057600080fd5b50610449610c8d565b60405161042b91906127b8565b34801561046257600080fd5b50610476610471366004612800565b610d1f565b604051901515815260200161042b565b34801561049257600080fd5b50610476610d36565b3480156104a757600080fd5b5061042160145481565b3480156104bd57600080fd5b506104766104cc36600461282c565b60196001600160a01b039091163b1190565b3480156104ea57600080fd5b50600454610421565b3480156104ff57600080fd5b506022546105189061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161042b565b34801561053c57600080fd5b5061040961054b366004612850565b610d50565b34801561055c57600080fd5b5061040961056b3660046128a0565b610e11565b34801561057c57600080fd5b5061047661058b3660046128d9565b610e8a565b34801561059c57600080fd5b506104096105ab366004612966565b610f21565b3480156105bc57600080fd5b5060035460405160ff909116815260200161042b565b3480156105de57600080fd5b506104096105ed3660046129a8565b611026565b3480156105fe57600080fd5b50600b54610518906001600160a01b031681565b34801561061e57600080fd5b50601054610518906001600160a01b031681565b34801561063e57600080fd5b5061040961064d36600461282c565b61109b565b34801561065e57600080fd5b50601f54610518906001600160a01b031681565b34801561067e57600080fd5b5061051861dead81565b34801561069457600080fd5b50601d54610518906001600160a01b031681565b3480156106b457600080fd5b506104766106c336600461282c565b60076020526000908152604090205460ff1681565b3480156106e457600080fd5b50610518600081565b3480156106f957600080fd5b506104096107083660046129c1565b6110c5565b34801561071957600080fd5b5061047661072836600461282c565b60096020526000908152604090205460ff1681565b34801561074957600080fd5b5061040961075836600461282c565b611180565b34801561076957600080fd5b506104096107783660046129a8565b6111c2565b34801561078957600080fd5b506104096107983660046129a8565b61120c565b3480156107a957600080fd5b506104096107b83660046129a8565b611219565b3480156107c957600080fd5b5061042160215481565b3480156107df57600080fd5b50610421601c5481565b3480156107f557600080fd5b506104096108043660046129a8565b611226565b34801561081557600080fd5b5061042161082436600461282c565b6001600160a01b031660009081526005602052604090205490565b34801561084b57600080fd5b50610409611233565b34801561086057600080fd5b50601854610518906001600160a01b031681565b34801561088057600080fd5b50610421601a5481565b34801561089657600080fd5b506104096108a53660046129a8565b611247565b3480156108b657600080fd5b506000546001600160a01b0316610518565b3480156108d457600080fd5b506104096108e33660046129a8565b611254565b3480156108f457600080fd5b50610449611261565b34801561090957600080fd5b506104096109183660046129c1565b611270565b34801561092957600080fd5b5061042160115481565b34801561093f57600080fd5b5061047661094e36600461282c565b600a6020526000908152604090205460ff1681565b34801561096f57600080fd5b5061047661097e366004612800565b6112df565b34801561098f57600080fd5b50600c54610518906001600160a01b031681565b3480156109af57600080fd5b50610421601b5481565b3480156109c557600080fd5b5061042160165481565b3480156109db57600080fd5b506109ef6109ea36600461282c565b6112ec565b6040805193845260208401929092529082015260600161042b565b348015610a1657600080fd5b50610409610a25366004612850565b611551565b348015610a3657600080fd5b50602354610518906001600160a01b031681565b348015610a5657600080fd5b50610421600d5481565b348015610a6c57600080fd5b5061042160125481565b348015610a8257600080fd5b5061042160155481565b348015610a9857600080fd5b50610421600f5481565b348015610aae57600080fd5b50610421610abd3660046129a8565b61162f565b348015610ace57600080fd5b50610409610add3660046129a8565b61168c565b348015610aee57600080fd5b50610421610afd366004612a0d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610b3457600080fd5b5061042160195481565b348015610b4a57600080fd5b50610409610b593660046129a8565b611699565b348015610b6a57600080fd5b5061042160135481565b348015610b8057600080fd5b5061042160205481565b348015610b9657600080fd5b50610409610ba53660046129a8565b6116a6565b348015610bb657600080fd5b50610409610bc536600461282c565b6116b3565b348015610bd657600080fd5b50610421600e5481565b348015610bec57600080fd5b50610476610bfb36600461282c565b60086020526000908152604090205460ff1681565b348015610c1c57600080fd5b506104096116f1565b348015610c3157600080fd5b50610421601e5481565b610c43611745565b60175415610c875760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b60448201526064015b60405180910390fd5b42601755565b606060018054610c9c90612a3b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890612a3b565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b5050505050905090565b6000610d2c338484611772565b5060015b92915050565b600080601754118015610d4b57506017544210155b905090565b33610d636000546001600160a01b031690565b6001600160a01b03161480610d825750600b546001600160a01b031633145b610d9e5760405162461bcd60e51b8152600401610c7e90612a75565b601f546040516305fd62f760e51b81526001600160a01b0385811660048301526024820185905283811660448301529091169063bfac5ee090606401600060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b50505050505050565b33610e246000546001600160a01b031690565b6001600160a01b03161480610e435750600b546001600160a01b031633145b610e5f5760405162461bcd60e51b8152600401610c7e90612a75565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610e978484846117d4565b6001600160a01b038416600090815260066020908152604080832033845290915290205460001914610f17576001600160a01b0384166000908152600660209081526040808320338452909152902054610ef2908390612adf565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b5060019392505050565b610f29611745565b60068114610f685760405162461bcd60e51b815260206004820152600c60248201526b0cae4e4dee440d8cadccee8d60a31b6044820152606401610c7e565b81816000818110610f7b57610f7b612af2565b60200291909101356011555081816001818110610f9a57610f9a612af2565b60200291909101356012555081816002818110610fb957610fb9612af2565b60200291909101356013555081816003818110610fd857610fd8612af2565b60200291909101356014555081816004818110610ff757610ff7612af2565b6020029190910135601555508181600581811061101657611016612af2565b6020029190910135601655505050565b61102e611745565b4281116110965760405162461bcd60e51b815260206004820152603060248201527f6e65772076616c7565206d7573742062652067726561746572207468616e206360448201526f0757272656e742074696d657374616d760841b6064820152608401610c7e565b601755565b6110a3611745565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b336110d86000546001600160a01b031690565b6001600160a01b031614806110f75750600b546001600160a01b031633145b6111135760405162461bcd60e51b8152600401610c7e90612a75565b60005b8281101561117a57816007600086868581811061113557611135612af2565b905060200201602081019061114a919061282c565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611116565b50505050565b611188611745565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b6111ca611745565b60648111156112075760405162461bcd60e51b8152602060048201526009602482015268746f6f206c6172676560b81b6044820152606401610c7e565b602055565b611214611745565b602155565b611221611745565b601a55565b61122e611745565b601e55565b61123b611745565b6112456000611b74565b565b61124f611745565b600d55565b61125c611745565b601b55565b606060028054610c9c90612a3b565b611278611745565b60005b8281101561117a57816008600086868581811061129a5761129a612af2565b90506020020160208101906112af919061282c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905560010161127b565b6000610d2c3384846117d4565b600080600080849050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135a9190612b24565b506001600160701b031691506001600160701b031691506000306001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113df9190612b69565b6001600160a01b03161461145457836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144f9190612b69565b6114b6565b836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611492573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b69190612b69565b9050306001600160a01b03821610156114d4578296508195506114db565b8196508295505b6040516370a0823160e01b81526001600160a01b0389811660048301528216906370a0823190602401602060405180830381865afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115459190612b86565b96989597505050505050565b336115646000546001600160a01b031690565b6001600160a01b031614806115835750600b546001600160a01b031633145b61159f5760405162461bcd60e51b8152600401610c7e90612a75565b6001600160a01b0383166115bc576115b78183611bc4565b505050565b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af115801561160b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190612b9f565b6018546000908190819061164b906001600160a01b03166112ec565b50915091508060001415801561166057508115155b1561168257806116708386612bbc565b61167a9190612bd3565b949350505050565b5060009392505050565b611694611745565b600e55565b6116a1611745565b601955565b6116ae611745565b600f55565b6116bb611745565b6001600160a01b0381166116e557604051631e4fbdf760e01b815260006004820152602401610c7e565b6116ee81611b74565b50565b6116f9611745565b60006017541161173e5760405162461bcd60e51b815260206004820152601060248201526f30b63932b0b23c9039b43aba3237bbb760811b6044820152606401610c7e565b6000601755565b6000546001600160a01b031633146112455760405163118cdaa760e01b8152336004820152602401610c7e565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60225460ff16156117ea5761117a838383611c8d565b6001600160a01b038316600090815260056020526040902054818110156118465760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610c7e565b6001600160a01b03841660009081526008602052604090205460ff1615801561188857506001600160a01b03831660009081526008602052604090205460ff16155b6118c15760405162461bcd60e51b815260206004820152600a6024820152691a5cc8189b1bd8dad95960b21b6044820152606401610c7e565b6001600160a01b038416600090815260076020526040812054819060ff168061190257506001600160a01b03851660009081526007602052604090205460ff165b6001600160a01b0387166000908152600960205260408120549192509060ff168061194557506001600160a01b03861660009081526009602052604090205460ff165b90508115801561195757506000601954115b80156119605750805b156119c2576000805b6019548110156119a55761197d8782612bf5565b61198e906001600160a01b03612bd3565b915061199c89836001611c8d565b50600101611969565b506019546119b4906001612bbc565b6119be9087612adf565b9550505b6119ca610d36565b611a4857811580156119da575080155b15611a485760196001600160a01b0387163b1115611a485760405162461bcd60e51b815260206004820152602560248201527f63616e277420616464206f74686572206c70206265666f726520737461727420604482015264747261646560d81b6064820152608401610c7e565b808015611a53575081155b15611b6657611a60610d36565b611aa15760405162461bcd60e51b81526020600482015260126024820152711d1c985919481a185d995b9d081cdd185c9d60721b6044820152606401610c7e565b611aa9610d36565b8015611ac35750600d54601754611ac09190612bf5565b42105b8015611ae857506001600160a01b03861660009081526009602052604090205460ff16155b15611b11576001600160a01b0386166000908152600860205260409020805460ff191660011790555b6001600160a01b03861660009081526009602052604090205460ff1615611b615760225460ff16611b615730600090815260056020526040902054601a54811115611b5f57611b5f81611d42565b505b600192505b610e08878787868515612483565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516000808252602082019092526001600160a01b038416908390604051611bee9190612c08565b60006040518083038185875af1925050503d8060008114611c2b576040519150601f19603f3d011682016040523d82523d6000602084013e611c30565b606091505b50509050806115b75760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610c7e565b6001600160a01b038316600090815260056020526040812080548391908390611cb7908490612adf565b90915550506001600160a01b03831660009081526005602052604081208054849290611ce4908490612bf5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d3091815260200190565b60405180910390a35060019392505050565b6022805460ff19166001179055801561247657601e54819015611db7576000611d6a8261162f565b9050601e548111611db55760408051838152602081018390527f53de3702064acbc0eb558b7276d39bbcc1ce33a4c338b22b67361a3a99fc8fa7910160405180910390a15050612476565b505b6000601554601254601454601154611dcf9190612bf5565b611dd99190612bf5565b611de39190612bf5565b90506000600282601554601254611dfa9190612bf5565b611e049086612bbc565b611e0e9190612bd3565b611e189190612bd3565b9050611e248184612adf565b92506002601554601254611e389190612bf5565b611e429190612bd3565b611e4c9083612adf565b6010546040805160028082526060820183529395506001600160a01b0390921692600092916020830190803683370190505090503081600081518110611e9457611e94612af2565b6001600160a01b039283166020918202929092010152601054825191169082906001908110611ec557611ec5612af2565b6001600160a01b039283166020918202929092010152602354602254604051635c11d79560e01b815291831692635c11d79592611f16928a9260009288926101009004909116904290600401612c24565b600060405180830381600087803b158015611f3057600080fd5b505af1925050508015611f41575060015b611f7a57604051600081527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a15b6022546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a0823190602401602060405180830381865afa158015611fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fef9190612b86565b9050801561207b576022546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd906064016020604051808303816000875af1158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190612b9f565b505b60008560145460115461208e9190612bf5565b6120989084612bbc565b6120a29190612bd3565b905060006002876015546012546120b99190612bf5565b6120c39086612bbc565b6120cd9190612bd3565b6120d79190612bd3565b90506000816120e68486612adf565b6120f09190612adf565b9050821561223857600060646020548561210a9190612bbc565b6121149190612bd3565b905060006121228286612adf565b9050811561219f57601d54604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561217057600080fd5b505af1158015612184573d6000803e3d6000fd5b5050601f5461219f92506001600160a01b0316905083611bc4565b801561223557600b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529089169063a9059cbb906044016020604051808303816000875af11580156121f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221c9190612b9f565b5080601c600082825461222f9190612bf5565b90915550505b50505b6000871180156122485750600082115b1561232b57602354601054600c5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e3370090610104016060604051808303816000875af19250505080156122ea575060408051601f3d908101601f191682019092526122e791810190612c97565b60015b61232757604051600181527f83644ada0485c363aadd15d858d1380165d61512d4c2af82d8d579e89ec2ab019060200160405180910390a161232b565b5050505b602154601f60009054906101000a90046001600160a01b03166001600160a01b031663d013cbe26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a59190612b86565b1061240f57601f5460215460405163129a8f2f60e31b8152600481019190915261dead60248201526001600160a01b03909116906394d4797890604401600060405180830381600087803b1580156123fc57600080fd5b505af192505050801561240d575060015b505b604080518b8152602081018b9052908101889052606081018590526080810183905260a0810184905260c081018290527fb2599f9a8153f90fca49843248e75718bd2d054df4edb873a49b7c8d505aa21a9060e00160405180910390a15050505050505050505b506022805460ff19169055565b6001600160a01b038516600090815260056020526040812080548592906124ab908490612adf565b909155506000905082156125d4576001600160a01b03851660009081526009602052604081205460ff16908082156124f9576015546014546124ed9190612bf5565b9150601654905061255c565b6012546011546125099190612bf5565b601354600e5491935091501561255c57600e5487111561255c5760405162461bcd60e51b815260206004820152600e60248201526d1bdd995c88189d5e481b1a5b5a5d60921b6044820152606401610c7e565b600061271061256b848a612bbc565b6125759190612bd3565b90506000612710612586848b612bbc565b6125909190612bd3565b905081156125af576125a28287612bf5565b95506125af8b3084612720565b80156125ce576125bf8187612bf5565b95506125ce8b61dead83612720565b50505050505b6001600160a01b03861660009081526007602052604081205460ff168061261357506001600160a01b03861660009081526007602052604090205460ff165b9050828015612620575080155b15612663576000612710601b54876126389190612bbc565b6126429190612bd3565b90508015612661576126548184612bf5565b9250612661883083612720565b505b8015801561267357506000600f54115b801561269757506001600160a01b03871660009081526009602052604090205460ff165b1561271157600f546001600160a01b03871660009081526005602052604090205483906126c5908890612bf5565b6126cf9190612adf565b11156127115760405162461bcd60e51b81526020600482015260116024820152701bdd995c881dd85b1b195d081b1a5b5a5d607a1b6044820152606401610c7e565b610e0887876127208589612adf565b6001600160a01b03821660009081526005602052604081208054839290612748908490612bf5565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117c791815260200190565b60005b838110156127af578181015183820152602001612797565b50506000910152565b60208152600082518060208401526127d7816040850160208701612794565b601f01601f19169190910160400192915050565b6001600160a01b03811681146116ee57600080fd5b6000806040838503121561281357600080fd5b823561281e816127eb565b946020939093013593505050565b60006020828403121561283e57600080fd5b8135612849816127eb565b9392505050565b60008060006060848603121561286557600080fd5b8335612870816127eb565b9250602084013591506040840135612887816127eb565b809150509250925092565b80151581146116ee57600080fd5b600080604083850312156128b357600080fd5b82356128be816127eb565b915060208301356128ce81612892565b809150509250929050565b6000806000606084860312156128ee57600080fd5b83356128f9816127eb565b92506020840135612909816127eb565b929592945050506040919091013590565b60008083601f84011261292c57600080fd5b50813567ffffffffffffffff81111561294457600080fd5b6020830191508360208260051b850101111561295f57600080fd5b9250929050565b6000806020838503121561297957600080fd5b823567ffffffffffffffff81111561299057600080fd5b61299c8582860161291a565b90969095509350505050565b6000602082840312156129ba57600080fd5b5035919050565b6000806000604084860312156129d657600080fd5b833567ffffffffffffffff8111156129ed57600080fd5b6129f98682870161291a565b909450925050602084013561288781612892565b60008060408385031215612a2057600080fd5b8235612a2b816127eb565b915060208301356128ce816127eb565b600181811c90821680612a4f57607f821691505b602082108103612a6f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526034908201527f4f6e6c79206f776e6572206f72206d61726b6574696e672077616c6c6574206360408201527330b71031b0b636103a3434b990333ab731b4b7b760611b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d3057610d30612ac9565b634e487b7160e01b600052603260045260246000fd5b80516001600160701b0381168114612b1f57600080fd5b919050565b600080600060608486031215612b3957600080fd5b612b4284612b08565b9250612b5060208501612b08565b9150604084015163ffffffff8116811461288757600080fd5b600060208284031215612b7b57600080fd5b8151612849816127eb565b600060208284031215612b9857600080fd5b5051919050565b600060208284031215612bb157600080fd5b815161284981612892565b8082028115828204841417610d3057610d30612ac9565b600082612bf057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d3057610d30612ac9565b60008251612c1a818460208701612794565b9190910192915050565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015612c765784516001600160a01b031683529383019391830191600101612c51565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cac57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212201be640db5da3b620c0e2c258d3ff6d233efffaff2b6d84771d1abea87909d74264736f6c63430008180033

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.