ETH Price: $2,631.94 (+2.28%)

Token

Minions (BANANA)
 

Overview

Max Total Supply

1,000,000 BANANA

Holders

111

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BANANA

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-08
*/

// Minions first of its kind P2E TG bot game using $BANANA tokens!
// Telegram: https://t.me/TheMinionsOfficial
// Game: https://t.me/MinionsBanana_BOT

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwnr) public virtual onlyOwner {
        require(
            newOwnr != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwnr);
        _owner = newOwnr;
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

interface IUniswapV2Pair {
    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address _address) public onlyOwner {
        _whiteList[_address] = true;
    }
}

contract BANANA is Context, IERC20, LockToken {
    using SafeMath for uint256;
    address payable public marketingWallet =
        payable(0x65274b686AA817Ffa960FB28b75DB4577Bd839C3);
    address payable public devWallet =
        payable(0x4b802b55f6584fd1abB9fFD7E0c1F113af83c2a7);
    address public newOwnr = 0x4b802b55f6584fd1abB9fFD7E0c1F113af83c2a7;
    address public uniRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _feeWhitelisted;
    mapping(address => bool) private _limitWhitelisted;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    string private _name = "Minions";
    string private _symbol = "BANANA";
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * 10 ** 18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _liquidityFeeBuys = 0;
    uint256 public _marketingFeeBuys = 300;
    uint256 public _devFeeBuys = 0;
    uint256 public _totalFeeBuys =
        _liquidityFeeBuys + _marketingFeeBuys + _devFeeBuys;
    uint256[] buyFeesBackup = [_liquidityFeeBuys, _marketingFeeBuys, _devFeeBuys];
    uint256 public _liquidityFeeSells = 0;
    uint256 public _marketingFeeSells = 600;
    uint256 public _devFeeSells = 0;
    uint256 public _totalFeeSells =
        _liquidityFeeSells + _marketingFeeSells + _devFeeSells;

    uint256 public _liquidityTokens = 0;
    uint256 public _marketingTokens = 0;
    uint256 public _devTokens = 0;
    uint256 public transferTotalFee =
        _liquidityTokens + _marketingTokens + _devTokens;

    uint256 public _txLimit = _tTotal.div(100).mul(1); //x% of total supply
    uint256 public _walletLimit = _tTotal.div(100).mul(2); //x% of total supply
    uint256 private _minBalanceForSwapback = 9999 * 10 ** 18;

    IUniswapV2Router02 public immutable uniRouterContract;
    address public immutable uniPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[newOwnr] = _rTotal;
        IUniswapV2Router02 _uniRouterContract = IUniswapV2Router02(uniRouter);
        uniPair = IUniswapV2Factory(_uniRouterContract.factory())
            .createPair(address(this), _uniRouterContract.WETH());
        uniRouterContract = _uniRouterContract;
        _feeWhitelisted[newOwnr] = true;
        _feeWhitelisted[address(this)] = true;
        includeToWhiteList(newOwnr);
        _limitWhitelisted[newOwnr] = true;
        emit Transfer(address(0), newOwnr, _tTotal);
        excludeWalletsFromWhales();

        transferOwnership(newOwnr);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(_msgSender(), 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(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function _minBalanceForSwapbackAmount() public view returns (uint256) {
        return _minBalanceForSwapback;
    }

    function tokenFromReflection(
        uint256 rAmount
    ) private view returns (uint256) {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private open(from, to) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner()) {
            require(
                amount <= _txLimit,
                "Transfer amount exceeds the maxTxAmount."
            );
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            _minBalanceForSwapback;

        checkForWhale(from, to, amount);

        if (
            !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniPair
        ) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = _minBalanceForSwapback;
                swapTokens(contractTokenBalance);
            }
        }

        bool takeFee = true;

        //if any account belongs to _feeWhitelisted account then remove the fee
        if (_feeWhitelisted[from] || _feeWhitelisted[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 ___totalFeeBuys = _liquidityFeeBuys.add(_marketingFeeBuys).add(
            _devFeeBuys
        );
        uint256 ___totalFeeSells = _liquidityFeeSells.add(_marketingFeeSells).add(
            _devFeeSells
        );
        uint256 totalSwapableFees = ___totalFeeBuys.add(___totalFeeSells);
                if (totalSwapableFees == 0) {
            return;
        }

        uint256 halfLiquidityTokens = contractTokenBalance
            .mul(_liquidityFeeBuys + _liquidityFeeSells)
            .div(totalSwapableFees)
            .div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        swapTokensForEth(swapableTokens);

        uint256 newBalance = address(this).balance;
        uint256 ethForLiquidity = newBalance
            .mul(_liquidityFeeBuys + _liquidityFeeSells)
            .div(totalSwapableFees)
            .div(2);

        if (halfLiquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(halfLiquidityTokens, ethForLiquidity);
        }

        uint256 ethForMarketing = newBalance
            .mul(_marketingFeeBuys + _marketingFeeSells)
            .div(totalSwapableFees);
        if (ethForMarketing > 0) {
            marketingWallet.transfer(ethForMarketing);
        }

        uint256 ethForDev = newBalance.sub(ethForLiquidity).sub(
            ethForMarketing
        );
        if (ethForDev > 0) {
            devWallet.transfer(ethForDev);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniRouterContract.WETH();
        _approve(address(this), address(uniRouterContract), tokenAmount);
        uniRouterContract.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniRouterContract), tokenAmount);

        // add the liquidity
        uniRouterContract.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) {
            removeAllFee();
        } else {
            if (recipient == uniPair) {
                setSellFee();
            }

            if (sender != uniPair && recipient != uniPair) {
                setWalletToWalletTransferFee();
            }
        }

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tLiquidity > 0) {
            emit Transfer(sender, address(this), tLiquidity);
        }
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tLiquidity > 0) {
            emit Transfer(sender, address(this), tLiquidity);
        }
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tLiquidity > 0) {
            emit Transfer(sender, address(this), tLiquidity);
        }
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 tTransferAmount,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        emit Transfer(sender, recipient, tTransferAmount);
        if (tLiquidity > 0) {
            emit Transfer(sender, address(this), tLiquidity);
        }
    }

    function _getValues(
        uint256 tAmount
    ) private view returns (uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount) = _getRValues(
            tAmount,
            tLiquidity,
            _getRate()
        );
        return (rAmount, rTransferAmount, tTransferAmount, tLiquidity);
    }

    function _getTValues(
        uint256 tAmount
    ) private view returns (uint256, uint256) {
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tLiquidity);
        return (tTransferAmount, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tLiquidity,
        uint256 currentRate
    ) private pure returns (uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rLiquidity);
        return (rAmount, rTransferAmount);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)]) {
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        }
    }

    function calculateLiquidityFee(
        uint256 _amount
    ) private view returns (uint256) {
        uint256 fees = _liquidityFeeBuys.add(_marketingFeeBuys).add(_devFeeBuys);
        return _amount.mul(fees).div(1000);
    }

    function isExcludedFromFee(
        address account
    ) public view onlyOwner returns (bool) {
        return _feeWhitelisted[account];
    }

    function excludeFromFee(address account) public onlyOwner {
        _feeWhitelisted[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _feeWhitelisted[account] = false;
    }

    function removeAllFee() private {
        _liquidityFeeBuys = 0;
        _marketingFeeBuys = 0;
        _devFeeBuys = 0;
    }

    function restoreAllFee() private {
        _liquidityFeeBuys = buyFeesBackup[0];
        _marketingFeeBuys = buyFeesBackup[1];
        _devFeeBuys = buyFeesBackup[2];
    }

    function setSellFee() private {
        _liquidityFeeBuys = _liquidityFeeSells;
        _marketingFeeBuys = _marketingFeeSells;
        _devFeeBuys = _devFeeSells;
    }

    function setWalletToWalletTransferFee() private {
        _liquidityFeeBuys = _liquidityTokens;
        _marketingFeeBuys = _marketingTokens;
        _devFeeBuys = _devTokens;
    }

    function _setBuyFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityFeeBuys = _liquidityFee;
        _marketingFeeBuys = _marketingFee;
        _devFeeBuys = _devFee;
        buyFeesBackup = [_liquidityFeeBuys, _marketingFeeBuys, _devFeeBuys];
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        _totalFeeBuys = _liquidityFeeBuys + _marketingFeeBuys + _devFeeBuys;
        require(totalFee <= 1000, "Too High Fee");
    }

    function _setSellFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityFeeSells = _liquidityFee;
        _marketingFeeSells = _marketingFee;
        _devFeeSells = _devFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        _totalFeeSells = _liquidityFeeSells + _marketingFeeSells + _devFeeSells;
        require(totalFee <= 1000, "Too High Fee");
    }

    function _setTransferFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityTokens = _liquidityFee;
        _marketingTokens = _marketingFee;
        _devTokens = _devFee;
        transferTotalFee = _liquidityTokens + _marketingTokens + _devTokens;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        require(totalFee <= 100, "Too High Fee");
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _txLimit = maxTxAmount;
        require(_txLimit >= _tTotal.div(5), "Too low limit");
    }

    function setMinimumTokensBeforeSwap(
        uint256 __minBalanceForSwapback
    ) external onlyOwner {
        _minBalanceForSwapback = __minBalanceForSwapback;
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        marketingWallet = payable(_marketingWallet);
    }

    function setDevAWallet(address _devWallet) external onlyOwner {
        devWallet = payable(_devWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function excludeWalletsFromWhales() private {
        _limitWhitelisted[owner()] = true;
        _limitWhitelisted[address(this)] = true;
        _limitWhitelisted[uniPair] = true;
        _limitWhitelisted[devWallet] = true;
        _limitWhitelisted[marketingWallet] = true;
    }

    function checkForWhale(
        address from,
        address to,
        uint256 amount
    ) private view {
        uint256 newBalance = balanceOf(to).add(amount);
        if (!_limitWhitelisted[from] && !_limitWhitelisted[to]) {
            require(
                newBalance <= _walletLimit,
                "Exceeding max tokens limit in the wallet"
            );
        }
        if (from == uniPair && !_limitWhitelisted[to]) {
            require(
                newBalance <= _walletLimit,
                "Exceeding max tokens limit in the wallet"
            );
        }
    }

    function setExcludedFromWhale(
        address account,
        bool _enabled
    ) public onlyOwner {
        _limitWhitelisted[account] = _enabled;
    }

    function setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner {
        _walletLimit = _amount;
        require(
            _walletLimit > _tTotal.div(100).mul(1),
            "Too less limit"
        ); //min 1%
    }

    function rescueStuckBalance() public onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function triggerSwapback() public {
        uint256 allBalance = balanceOf(address(this));
        swapTokens(allBalance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwnr","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_devFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minBalanceForSwapbackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletLimit","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwnr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevAWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__minBalanceForSwapback","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":[{"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":"newOwnr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniRouterContract","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b03199081167365274b686aa817ffa960fb28b75db4577bd839c317909155600680548216734b802b55f6584fd1abb9ffd7e0c1f113af83c2a7908117909155600780548316909117815560088054909216737a250d5630b4cf539739df2c5dacb4c659f2488d1790915561010060405260c0908152664d696e696f6e7360c81b60e052601090620000a6908262000913565b5060408051808201909152600681526542414e414e4160d01b6020820152601190620000d3908262000913565b506012805460ff19168117905569d3c21bcecceda10000006013819055620000fe90600019620009f5565b6200010c9060001962000a22565b6014556000601681905561012c601781905560188290556200012f908262000a38565b6200013b919062000a38565b601955604051806060016040528060165481526020016017548152602001601854815250601a9060036200017192919062000807565b506000601b819055610258601c819055601d82905562000192908262000a38565b6200019e919062000a38565b601e556000601f81905560208190556021819055620001be818062000a38565b620001ca919062000a38565b602255601354620001ec90600190620001e5906064620004e9565b906200053c565b6023556013546200020790600290620001e5906064620004e9565b60245569021e0c0013070adc00006025556026805461ff0019166101001790553480156200023457600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003939833981519152908290a3503360009081526004602081815260408084208054600160ff199182168117909255308652828620805490911690911790556014546007546001600160a01b039081168652600984529482902055600854815163c45a015560e01b81529151941693849363c45a01559383820193909291908290030181865afa158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000316919062000a4e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038a919062000a4e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fe919062000a4e565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff199182168117909255308452919092208054909116909117905554620004549116620005ca565b600780546001600160a01b039081166000908152600d6020526040808220805460ff191660011790559254601354935192169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004b99190815260200190565b60405180910390a3620004cb62000639565b600754620004e2906001600160a01b0316620006cf565b5062000afa565b60006200053383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007cb60201b60201c565b90505b92915050565b600082600003620005505750600062000536565b60006200055e838562000a79565b9050826200056d858362000a93565b14620005335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b03163314620006155760405162461bcd60e51b81526020600482018190526024820152600080516020620039198339815191526044820152606401620005c1565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d6000620006526000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b031633146200071a5760405162461bcd60e51b81526020600482018190526024820152600080516020620039198339815191526044820152606401620005c1565b6001600160a01b038116620007815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005c1565b600080546040516001600160a01b03808516939216916000805160206200393983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008183620007ef5760405162461bcd60e51b8152600401620005c1919062000aaa565b506000620007fe848662000a93565b95945050505050565b82805482825590600052602060002090810192821562000845579160200282015b828111156200084557825182559160200191906001019062000828565b506200085392915062000857565b5090565b5b8082111562000853576000815560010162000858565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200089957607f821691505b602082108103620008ba57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200090e57600081815260208120601f850160051c81016020861015620008e95750805b601f850160051c820191505b818110156200090a57828155600101620008f5565b5050505b505050565b81516001600160401b038111156200092f576200092f6200086e565b620009478162000940845462000884565b84620008c0565b602080601f8311600181146200097f5760008415620009665750858301515b600019600386901b1c1916600185901b1785556200090a565b600085815260208120601f198616915b82811015620009b0578886015182559484019460019091019084016200098f565b5085821015620009cf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008262000a075762000a07620009df565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000536576200053662000a0c565b8082018082111562000536576200053662000a0c565b60006020828403121562000a6157600080fd5b81516001600160a01b03811681146200053357600080fd5b808202811582820484141762000536576200053662000a0c565b60008262000aa55762000aa5620009df565b500490565b600060208083528351808285015260005b8181101562000ad95785810183015185820160400152820162000abb565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a051612db362000b6660003960008181610489015281816117ba01528181611c9401528181611d3301528181611d830152611dc001526000818161079f01528181612005015281816120be015281816120fa015281816121ad01526121d40152612db36000f3fe6080604052600436106103545760003560e01c8063715018a6116101c6578063a457c2d7116100f7578063c49b9a8011610095578063ec1c14f11161006f578063ec1c14f11461097b578063ec28438a14610991578063f2fde38b146109b1578063fb201b1d146109d157600080fd5b8063c49b9a80146108f5578063dd62ed3e14610915578063ea2f0b371461095b57600080fd5b8063ade44a8f116100d1578063ade44a8f1461088a578063aee50b1e146108aa578063b70ee799146108ca578063b863864c146108df57600080fd5b8063a457c2d714610834578063a9059cbb14610854578063aa13008f1461087457600080fd5b806383ac614d116101645780638da5cb5b1161013e5780638da5cb5b146107c15780638ea5220f146107df57806395d89b41146107ff578063a0e47bf61461081457600080fd5b806383ac614d14610757578063848ad89e1461077757806384ee9d9c1461078d57600080fd5b80637560a8d9116101a05780637560a8d9146106f557806375f0a8741461070b578063794fbd2e1461072b57806383a9f0c71461074157600080fd5b8063715018a6146106aa5780637409c4ea146106bf578063749e8cb6146106d557600080fd5b8063437823ec116102a05780634e3c06b11161023e57806363553e7c1161021857806363553e7c1461063f5780636f4b6f0c146106555780636fee4f7a1461067557806370a082311461068a57600080fd5b80634e3c06b1146105df5780635342acb4146105ff5780635d098b381461061f57600080fd5b8063476643461161027a578063476643461461056b57806348990b7a1461058b5780634a74bb02146105a05780634b880e88146105bf57600080fd5b8063437823ec1461050f57806344d4225f1461053157806347535d7b1461055157600080fd5b806323b872dd1161030d57806332972e46116102e757806332972e461461047757806334302720146104c357806339509351146104d95780634197d5ca146104f957600080fd5b806323b872dd1461041f57806323e6958a1461043f578063313ce5671461045557600080fd5b806306fdde0314610360578063095ea7b31461038b5780630e2351e2146103bb57806313114a9d146103df57806318160ddd146103f45780631e25abbb1461040957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b506103756109e6565b60405161038291906128f8565b60405180910390f35b34801561039757600080fd5b506103ab6103a636600461295b565b610a78565b6040519015158152602001610382565b3480156103c757600080fd5b506103d160245481565b604051908152602001610382565b3480156103eb57600080fd5b506015546103d1565b34801561040057600080fd5b506013546103d1565b34801561041557600080fd5b506103d160205481565b34801561042b57600080fd5b506103ab61043a366004612987565b610a8f565b34801561044b57600080fd5b506103d1601b5481565b34801561046157600080fd5b5060125460405160ff9091168152602001610382565b34801561048357600080fd5b506104ab7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610382565b3480156104cf57600080fd5b506103d160195481565b3480156104e557600080fd5b506103ab6104f436600461295b565b610af8565b34801561050557600080fd5b506103d160175481565b34801561051b57600080fd5b5061052f61052a3660046129c8565b610b2e565b005b34801561053d57600080fd5b5061052f61054c3660046129e5565b610b85565b34801561055d57600080fd5b506003546103ab9060ff1681565b34801561057757600080fd5b5061052f6105863660046129c8565b610c13565b34801561059757600080fd5b506025546103d1565b3480156105ac57600080fd5b506026546103ab90610100900460ff1681565b3480156105cb57600080fd5b5061052f6105da3660046129c8565b610c5f565b3480156105eb57600080fd5b5061052f6105fa366004612a0e565b610cad565b34801561060b57600080fd5b506103ab61061a3660046129c8565b610d02565b34801561062b57600080fd5b5061052f61063a3660046129c8565b610d50565b34801561064b57600080fd5b506103d160235481565b34801561066157600080fd5b506007546104ab906001600160a01b031681565b34801561068157600080fd5b5061052f610d9c565b34801561069657600080fd5b506103d16106a53660046129c8565b610e51565b3480156106b657600080fd5b5061052f610eb0565b3480156106cb57600080fd5b506103d1601d5481565b3480156106e157600080fd5b5061052f6106f0366004612a43565b610f24565b34801561070157600080fd5b506103d160215481565b34801561071757600080fd5b506005546104ab906001600160a01b031681565b34801561073757600080fd5b506103d160185481565b34801561074d57600080fd5b506103d160165481565b34801561076357600080fd5b5061052f610772366004612a43565b610fbd565b34801561078357600080fd5b506103d1601f5481565b34801561079957600080fd5b506104ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107cd57600080fd5b506000546001600160a01b03166104ab565b3480156107eb57600080fd5b506006546104ab906001600160a01b031681565b34801561080b57600080fd5b50610375611073565b34801561082057600080fd5b506008546104ab906001600160a01b031681565b34801561084057600080fd5b506103ab61084f36600461295b565b611082565b34801561086057600080fd5b506103ab61086f36600461295b565b6110d1565b34801561088057600080fd5b506103d1601c5481565b34801561089657600080fd5b5061052f6108a5366004612a43565b6110de565b3480156108b657600080fd5b5061052f6108c53660046129e5565b611162565b3480156108d657600080fd5b5061052f611191565b3480156108eb57600080fd5b506103d160225481565b34801561090157600080fd5b5061052f610910366004612a6f565b6111a7565b34801561092157600080fd5b506103d1610930366004612a8a565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561096757600080fd5b5061052f6109763660046129c8565b611225565b34801561098757600080fd5b506103d1601e5481565b34801561099d57600080fd5b5061052f6109ac3660046129e5565b611270565b3480156109bd57600080fd5b5061052f6109cc3660046129c8565b6112ee565b3480156109dd57600080fd5b5061052f6113d8565b6060601080546109f590612ac3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612ac3565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a85338484611411565b5060015b92915050565b6000610a9c848484611535565b610aee8433610ae985604051806060016040528060288152602001612d31602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611869565b611411565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a85918590610ae990866118a3565b6000546001600160a01b03163314610b615760405162461bcd60e51b8152600401610b5890612afd565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610baf5760405162461bcd60e51b8152600401610b5890612afd565b6024819055601354610bcf90600190610bc9906064611909565b9061194b565b60245411610c105760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b58565b50565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b5890612afd565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610b5890612afd565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b5890612afd565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b8152600401610b5890612afd565b604051600090339047908381818185875af1925050503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b5050905080610c105760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b58565b6001600160a01b0381166000908152600e602052604081205460ff1615610e8e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a89906119cd565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b5890612afd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b5890612afd565b601b839055601c829055601d8190556000610f7382610f6d86866118a3565b906118a3565b9050601d54601c54601b54610f889190612b48565b610f929190612b48565b601e556103e8811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b50505050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610b5890612afd565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261101e90601a906003612898565b50600061102f82610f6d86866118a3565b90506018546017546016546110449190612b48565b61104e9190612b48565b6019556103e8811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b6060601180546109f590612ac3565b6000610a853384610ae985604051806060016040528060258152602001612d5960259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611869565b6000610a85338484611535565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b5890612afd565b601f83905560208290556021819055806111228385612b48565b61112c9190612b48565b602255600061113f82610f6d86866118a3565b90506064811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b5890612afd565b602555565b600061119c30610e51565b9050610c1081611a4a565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b5890612afd565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061121a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610b5890612afd565b60238190556013546112ad906005611909565b6023541015610c105760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b58565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03811661137d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b58565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b5890612afd565b6003805460ff19166001179055565b6001600160a01b0383166114735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b58565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b58565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff168061156257506001600160a01b03821660009081526004602052604090205460ff165b8061158557506001600160a01b03811660009081526004602052604090205460ff165b6115bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b58565b6001600160a01b0385166116205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b58565b6001600160a01b0384166116825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b58565b600083116116e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b58565b6000546001600160a01b0386811691161480159061171057506000546001600160a01b03858116911614155b15611778576023548311156117785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b58565b600061178330610e51565b602554909150811015611797878787611c17565b60265460ff161580156117b15750602654610100900460ff165b80156117ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b1561180857801561180857602554915061180882611a4a565b6001600160a01b0387166000908152600c602052604090205460019060ff168061184a57506001600160a01b0387166000908152600c602052604090205460ff165b15611853575060005b61185f88888884611d13565b5050505050505050565b6000818484111561188d5760405162461bcd60e51b8152600401610b5891906128f8565b50600061189a8486612b81565b95945050505050565b6000806118b08385612b48565b9050838110156119025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b58565b9392505050565b600061190283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f1b565b60008260000361195d57506000610a89565b60006119698385612b94565b9050826119768583612bab565b146119025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b58565b6000601454821115611a345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b58565b6000611a3e611f49565b90506119028382611909565b6026805460ff19166001179055601854601754601654600092611a72929091610f6d916118a3565b90506000611a93601d54610f6d601c54601b546118a390919063ffffffff16565b90506000611aa183836118a3565b905080600003611ab357505050611c0a565b6000611ade6002611ad884611ad8601b54601654611ad19190612b48565b8a9061194b565b90611909565b90506000611aec8683611f6c565b9050611af781611fae565b60004790506000611b216002611ad887611ad8601b54601654611b1a9190612b48565b879061194b565b9050600084118015611b335750600081115b15611b4257611b4284826121a7565b6000611b6286611ad8601c54601754611b5b9190612b48565b869061194b565b90508015611ba6576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ba4573d6000803e3d6000fd5b505b6000611bbc82611bb68686611f6c565b90611f6c565b90508015611c00576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611bfe573d6000803e3d6000fd5b505b5050505050505050505b506026805460ff19169055565b6000611c2682610f6d85610e51565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611c6b57506001600160a01b0383166000908152600d602052604090205460ff16155b15611c9257602454811115611c925760405162461bcd60e51b8152600401610b5890612bcd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611cec57506001600160a01b0383166000908152600d602052604090205460ff16155b15610fb757602454811115610fb75760405162461bcd60e51b8152600401610b5890612bcd565b80611d3157611d2c600060168190556017819055601855565b611e11565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611d8157611d81601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015611df557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611e1157611e11601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e5257506001600160a01b0383166000908152600e602052604090205460ff16155b15611e6757611e628484846122ad565b611f13565b6001600160a01b0384166000908152600e602052604090205460ff16158015611ea857506001600160a01b0383166000908152600e602052604090205460ff165b15611eb857611e62848484612406565b6001600160a01b0384166000908152600e602052604090205460ff168015611ef857506001600160a01b0383166000908152600e602052604090205460ff165b15611f0857611e628484846124a7565b611f13848484612512565b610fb761254e565b60008183611f3c5760405162461bcd60e51b8152600401610b5891906128f8565b50600061189a8486612bab565b6000806000611f566125bd565b9092509050611f658282611909565b9250505090565b600061190283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611869565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fe357611fe3612c15565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190612c2b565b8160018151811061209857612098612c15565b60200260200101906001600160a01b031690816001600160a01b0316815250506120e3307f000000000000000000000000000000000000000000000000000000000000000084611411565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612138908590600090869030904290600401612c8c565b600060405180830381600087803b15801561215257600080fd5b505af1158015612166573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161219b929190612cc8565b60405180910390a15050565b6121d2307f000000000000000000000000000000000000000000000000000000000000000084611411565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806122196000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612281573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122a69190612ce9565b5050505050565b6000806000806122bc8561273f565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122e99086611f6c565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123189085611f6c565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461234790846118a3565b6001600160a01b0387166000908152600960205260409020556123698161277d565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ae91815260200190565b60405180910390a380156123fd5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806124158561273f565b6001600160a01b038b16600090815260096020526040902054939750919550935091506124429085611f6c565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461247890836118a3565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461234790846118a3565b6000806000806124b68561273f565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124e39086611f6c565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546124429085611f6c565b6000806000806125218561273f565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123189085611f6c565b601a60008154811061256257612562612c15565b9060005260206000200154601681905550601a60018154811061258757612587612c15565b9060005260206000200154601781905550601a6002815481106125ac576125ac612c15565b600091825260209091200154601855565b6014546013546000918291825b600f5481101561270f578260096000600f84815481106125ec576125ec612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612657575081600a6000600f848154811061263057612630612c15565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57601454601354945094505050509091565b6126b360096000600f848154811061268757612687612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f6c565b92506126fb600a6000600f84815481106126cf576126cf612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f6c565b91508061270781612d17565b9150506125ca565b5060135460145461271f91611909565b821015612736576014546013549350935050509091565b90939092509050565b60008060008060008061275187612806565b9150915060008061276a8984612765611f49565b61282d565b909a909950939750919550919350505050565b6000612787611f49565b90506000612795838361194b565b306000908152600960205260409020549091506127b290826118a3565b30600090815260096020908152604080832093909355600e9052205460ff161561280157306000908152600a60205260409020546127f090846118a3565b306000908152600a60205260409020555b505050565b600080600061281484612866565b905060006128228583611f6c565b959194509092505050565b6000808061283b868561194b565b90506000612849868661194b565b905060006128578383611f6c565b92989297509195505050505050565b600080612886601854610f6d6017546016546118a390919063ffffffff16565b90506119026103e8611ad8858461194b565b8280548282559060005260206000209081019282156128d3579160200282015b828111156128d35782518255916020019190600101906128b8565b506128df9291506128e3565b5090565b5b808211156128df57600081556001016128e4565b600060208083528351808285015260005b8181101561292557858101830151858201604001528201612909565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1057600080fd5b6000806040838503121561296e57600080fd5b823561297981612946565b946020939093013593505050565b60008060006060848603121561299c57600080fd5b83356129a781612946565b925060208401356129b781612946565b929592945050506040919091013590565b6000602082840312156129da57600080fd5b813561190281612946565b6000602082840312156129f757600080fd5b5035919050565b80358015158114610d4b57600080fd5b60008060408385031215612a2157600080fd5b8235612a2c81612946565b9150612a3a602084016129fe565b90509250929050565b600080600060608486031215612a5857600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a8157600080fd5b611902826129fe565b60008060408385031215612a9d57600080fd5b8235612aa881612946565b91506020830135612ab881612946565b809150509250929050565b600181811c90821680612ad757607f821691505b602082108103612af757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8957610a89612b32565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b81810381811115610a8957610a89612b32565b8082028115828204841417610a8957610a89612b32565b600082612bc857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c3d57600080fd5b815161190281612946565b600081518084526020808501945080840160005b83811015612c815781516001600160a01b031687529582019590820190600101612c5c565b509495945050505050565b85815284602082015260a060408201526000612cab60a0830186612c48565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612ce16040830184612c48565b949350505050565b600080600060608486031215612cfe57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612d2957612d29612b32565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a8fe5932d57c6f16978963042e1ae08d3f43e1d3ee1646e6f2a3c8c4c85cd8d64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063715018a6116101c6578063a457c2d7116100f7578063c49b9a8011610095578063ec1c14f11161006f578063ec1c14f11461097b578063ec28438a14610991578063f2fde38b146109b1578063fb201b1d146109d157600080fd5b8063c49b9a80146108f5578063dd62ed3e14610915578063ea2f0b371461095b57600080fd5b8063ade44a8f116100d1578063ade44a8f1461088a578063aee50b1e146108aa578063b70ee799146108ca578063b863864c146108df57600080fd5b8063a457c2d714610834578063a9059cbb14610854578063aa13008f1461087457600080fd5b806383ac614d116101645780638da5cb5b1161013e5780638da5cb5b146107c15780638ea5220f146107df57806395d89b41146107ff578063a0e47bf61461081457600080fd5b806383ac614d14610757578063848ad89e1461077757806384ee9d9c1461078d57600080fd5b80637560a8d9116101a05780637560a8d9146106f557806375f0a8741461070b578063794fbd2e1461072b57806383a9f0c71461074157600080fd5b8063715018a6146106aa5780637409c4ea146106bf578063749e8cb6146106d557600080fd5b8063437823ec116102a05780634e3c06b11161023e57806363553e7c1161021857806363553e7c1461063f5780636f4b6f0c146106555780636fee4f7a1461067557806370a082311461068a57600080fd5b80634e3c06b1146105df5780635342acb4146105ff5780635d098b381461061f57600080fd5b8063476643461161027a578063476643461461056b57806348990b7a1461058b5780634a74bb02146105a05780634b880e88146105bf57600080fd5b8063437823ec1461050f57806344d4225f1461053157806347535d7b1461055157600080fd5b806323b872dd1161030d57806332972e46116102e757806332972e461461047757806334302720146104c357806339509351146104d95780634197d5ca146104f957600080fd5b806323b872dd1461041f57806323e6958a1461043f578063313ce5671461045557600080fd5b806306fdde0314610360578063095ea7b31461038b5780630e2351e2146103bb57806313114a9d146103df57806318160ddd146103f45780631e25abbb1461040957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b506103756109e6565b60405161038291906128f8565b60405180910390f35b34801561039757600080fd5b506103ab6103a636600461295b565b610a78565b6040519015158152602001610382565b3480156103c757600080fd5b506103d160245481565b604051908152602001610382565b3480156103eb57600080fd5b506015546103d1565b34801561040057600080fd5b506013546103d1565b34801561041557600080fd5b506103d160205481565b34801561042b57600080fd5b506103ab61043a366004612987565b610a8f565b34801561044b57600080fd5b506103d1601b5481565b34801561046157600080fd5b5060125460405160ff9091168152602001610382565b34801561048357600080fd5b506104ab7f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f777081565b6040516001600160a01b039091168152602001610382565b3480156104cf57600080fd5b506103d160195481565b3480156104e557600080fd5b506103ab6104f436600461295b565b610af8565b34801561050557600080fd5b506103d160175481565b34801561051b57600080fd5b5061052f61052a3660046129c8565b610b2e565b005b34801561053d57600080fd5b5061052f61054c3660046129e5565b610b85565b34801561055d57600080fd5b506003546103ab9060ff1681565b34801561057757600080fd5b5061052f6105863660046129c8565b610c13565b34801561059757600080fd5b506025546103d1565b3480156105ac57600080fd5b506026546103ab90610100900460ff1681565b3480156105cb57600080fd5b5061052f6105da3660046129c8565b610c5f565b3480156105eb57600080fd5b5061052f6105fa366004612a0e565b610cad565b34801561060b57600080fd5b506103ab61061a3660046129c8565b610d02565b34801561062b57600080fd5b5061052f61063a3660046129c8565b610d50565b34801561064b57600080fd5b506103d160235481565b34801561066157600080fd5b506007546104ab906001600160a01b031681565b34801561068157600080fd5b5061052f610d9c565b34801561069657600080fd5b506103d16106a53660046129c8565b610e51565b3480156106b657600080fd5b5061052f610eb0565b3480156106cb57600080fd5b506103d1601d5481565b3480156106e157600080fd5b5061052f6106f0366004612a43565b610f24565b34801561070157600080fd5b506103d160215481565b34801561071757600080fd5b506005546104ab906001600160a01b031681565b34801561073757600080fd5b506103d160185481565b34801561074d57600080fd5b506103d160165481565b34801561076357600080fd5b5061052f610772366004612a43565b610fbd565b34801561078357600080fd5b506103d1601f5481565b34801561079957600080fd5b506104ab7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107cd57600080fd5b506000546001600160a01b03166104ab565b3480156107eb57600080fd5b506006546104ab906001600160a01b031681565b34801561080b57600080fd5b50610375611073565b34801561082057600080fd5b506008546104ab906001600160a01b031681565b34801561084057600080fd5b506103ab61084f36600461295b565b611082565b34801561086057600080fd5b506103ab61086f36600461295b565b6110d1565b34801561088057600080fd5b506103d1601c5481565b34801561089657600080fd5b5061052f6108a5366004612a43565b6110de565b3480156108b657600080fd5b5061052f6108c53660046129e5565b611162565b3480156108d657600080fd5b5061052f611191565b3480156108eb57600080fd5b506103d160225481565b34801561090157600080fd5b5061052f610910366004612a6f565b6111a7565b34801561092157600080fd5b506103d1610930366004612a8a565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561096757600080fd5b5061052f6109763660046129c8565b611225565b34801561098757600080fd5b506103d1601e5481565b34801561099d57600080fd5b5061052f6109ac3660046129e5565b611270565b3480156109bd57600080fd5b5061052f6109cc3660046129c8565b6112ee565b3480156109dd57600080fd5b5061052f6113d8565b6060601080546109f590612ac3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612ac3565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a85338484611411565b5060015b92915050565b6000610a9c848484611535565b610aee8433610ae985604051806060016040528060288152602001612d31602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611869565b611411565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a85918590610ae990866118a3565b6000546001600160a01b03163314610b615760405162461bcd60e51b8152600401610b5890612afd565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610baf5760405162461bcd60e51b8152600401610b5890612afd565b6024819055601354610bcf90600190610bc9906064611909565b9061194b565b60245411610c105760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b58565b50565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b5890612afd565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610b5890612afd565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b5890612afd565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b8152600401610b5890612afd565b604051600090339047908381818185875af1925050503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b5050905080610c105760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b58565b6001600160a01b0381166000908152600e602052604081205460ff1615610e8e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a89906119cd565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b5890612afd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b5890612afd565b601b839055601c829055601d8190556000610f7382610f6d86866118a3565b906118a3565b9050601d54601c54601b54610f889190612b48565b610f929190612b48565b601e556103e8811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b50505050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610b5890612afd565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261101e90601a906003612898565b50600061102f82610f6d86866118a3565b90506018546017546016546110449190612b48565b61104e9190612b48565b6019556103e8811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b6060601180546109f590612ac3565b6000610a853384610ae985604051806060016040528060258152602001612d5960259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611869565b6000610a85338484611535565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b5890612afd565b601f83905560208290556021819055806111228385612b48565b61112c9190612b48565b602255600061113f82610f6d86866118a3565b90506064811115610fb75760405162461bcd60e51b8152600401610b5890612b5b565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b5890612afd565b602555565b600061119c30610e51565b9050610c1081611a4a565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b5890612afd565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061121a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610b5890612afd565b60238190556013546112ad906005611909565b6023541015610c105760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b58565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610b5890612afd565b6001600160a01b03811661137d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b58565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b5890612afd565b6003805460ff19166001179055565b6001600160a01b0383166114735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b58565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b58565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff168061156257506001600160a01b03821660009081526004602052604090205460ff165b8061158557506001600160a01b03811660009081526004602052604090205460ff165b6115bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b58565b6001600160a01b0385166116205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b58565b6001600160a01b0384166116825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b58565b600083116116e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b58565b6000546001600160a01b0386811691161480159061171057506000546001600160a01b03858116911614155b15611778576023548311156117785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b58565b600061178330610e51565b602554909150811015611797878787611c17565b60265460ff161580156117b15750602654610100900460ff165b80156117ef57507f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f77706001600160a01b0316876001600160a01b031614155b1561180857801561180857602554915061180882611a4a565b6001600160a01b0387166000908152600c602052604090205460019060ff168061184a57506001600160a01b0387166000908152600c602052604090205460ff165b15611853575060005b61185f88888884611d13565b5050505050505050565b6000818484111561188d5760405162461bcd60e51b8152600401610b5891906128f8565b50600061189a8486612b81565b95945050505050565b6000806118b08385612b48565b9050838110156119025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b58565b9392505050565b600061190283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f1b565b60008260000361195d57506000610a89565b60006119698385612b94565b9050826119768583612bab565b146119025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b58565b6000601454821115611a345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b58565b6000611a3e611f49565b90506119028382611909565b6026805460ff19166001179055601854601754601654600092611a72929091610f6d916118a3565b90506000611a93601d54610f6d601c54601b546118a390919063ffffffff16565b90506000611aa183836118a3565b905080600003611ab357505050611c0a565b6000611ade6002611ad884611ad8601b54601654611ad19190612b48565b8a9061194b565b90611909565b90506000611aec8683611f6c565b9050611af781611fae565b60004790506000611b216002611ad887611ad8601b54601654611b1a9190612b48565b879061194b565b9050600084118015611b335750600081115b15611b4257611b4284826121a7565b6000611b6286611ad8601c54601754611b5b9190612b48565b869061194b565b90508015611ba6576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ba4573d6000803e3d6000fd5b505b6000611bbc82611bb68686611f6c565b90611f6c565b90508015611c00576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611bfe573d6000803e3d6000fd5b505b5050505050505050505b506026805460ff19169055565b6000611c2682610f6d85610e51565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611c6b57506001600160a01b0383166000908152600d602052604090205460ff16155b15611c9257602454811115611c925760405162461bcd60e51b8152600401610b5890612bcd565b7f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f77706001600160a01b0316846001600160a01b0316148015611cec57506001600160a01b0383166000908152600d602052604090205460ff16155b15610fb757602454811115610fb75760405162461bcd60e51b8152600401610b5890612bcd565b80611d3157611d2c600060168190556017819055601855565b611e11565b7f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f77706001600160a01b0316836001600160a01b031603611d8157611d81601b54601655601c54601755601d54601855565b7f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f77706001600160a01b0316846001600160a01b031614158015611df557507f000000000000000000000000d2100f36958aa9e165dfb360bea7fb67d09f77706001600160a01b0316836001600160a01b031614155b15611e1157611e11601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e5257506001600160a01b0383166000908152600e602052604090205460ff16155b15611e6757611e628484846122ad565b611f13565b6001600160a01b0384166000908152600e602052604090205460ff16158015611ea857506001600160a01b0383166000908152600e602052604090205460ff165b15611eb857611e62848484612406565b6001600160a01b0384166000908152600e602052604090205460ff168015611ef857506001600160a01b0383166000908152600e602052604090205460ff165b15611f0857611e628484846124a7565b611f13848484612512565b610fb761254e565b60008183611f3c5760405162461bcd60e51b8152600401610b5891906128f8565b50600061189a8486612bab565b6000806000611f566125bd565b9092509050611f658282611909565b9250505090565b600061190283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611869565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fe357611fe3612c15565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190612c2b565b8160018151811061209857612098612c15565b60200260200101906001600160a01b031690816001600160a01b0316815250506120e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611411565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612138908590600090869030904290600401612c8c565b600060405180830381600087803b15801561215257600080fd5b505af1158015612166573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161219b929190612cc8565b60405180910390a15050565b6121d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611411565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806122196000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612281573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122a69190612ce9565b5050505050565b6000806000806122bc8561273f565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122e99086611f6c565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123189085611f6c565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461234790846118a3565b6001600160a01b0387166000908152600960205260409020556123698161277d565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123ae91815260200190565b60405180910390a380156123fd5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806124158561273f565b6001600160a01b038b16600090815260096020526040902054939750919550935091506124429085611f6c565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461247890836118a3565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461234790846118a3565b6000806000806124b68561273f565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124e39086611f6c565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546124429085611f6c565b6000806000806125218561273f565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123189085611f6c565b601a60008154811061256257612562612c15565b9060005260206000200154601681905550601a60018154811061258757612587612c15565b9060005260206000200154601781905550601a6002815481106125ac576125ac612c15565b600091825260209091200154601855565b6014546013546000918291825b600f5481101561270f578260096000600f84815481106125ec576125ec612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612657575081600a6000600f848154811061263057612630612c15565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57601454601354945094505050509091565b6126b360096000600f848154811061268757612687612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f6c565b92506126fb600a6000600f84815481106126cf576126cf612c15565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f6c565b91508061270781612d17565b9150506125ca565b5060135460145461271f91611909565b821015612736576014546013549350935050509091565b90939092509050565b60008060008060008061275187612806565b9150915060008061276a8984612765611f49565b61282d565b909a909950939750919550919350505050565b6000612787611f49565b90506000612795838361194b565b306000908152600960205260409020549091506127b290826118a3565b30600090815260096020908152604080832093909355600e9052205460ff161561280157306000908152600a60205260409020546127f090846118a3565b306000908152600a60205260409020555b505050565b600080600061281484612866565b905060006128228583611f6c565b959194509092505050565b6000808061283b868561194b565b90506000612849868661194b565b905060006128578383611f6c565b92989297509195505050505050565b600080612886601854610f6d6017546016546118a390919063ffffffff16565b90506119026103e8611ad8858461194b565b8280548282559060005260206000209081019282156128d3579160200282015b828111156128d35782518255916020019190600101906128b8565b506128df9291506128e3565b5090565b5b808211156128df57600081556001016128e4565b600060208083528351808285015260005b8181101561292557858101830151858201604001528201612909565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1057600080fd5b6000806040838503121561296e57600080fd5b823561297981612946565b946020939093013593505050565b60008060006060848603121561299c57600080fd5b83356129a781612946565b925060208401356129b781612946565b929592945050506040919091013590565b6000602082840312156129da57600080fd5b813561190281612946565b6000602082840312156129f757600080fd5b5035919050565b80358015158114610d4b57600080fd5b60008060408385031215612a2157600080fd5b8235612a2c81612946565b9150612a3a602084016129fe565b90509250929050565b600080600060608486031215612a5857600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a8157600080fd5b611902826129fe565b60008060408385031215612a9d57600080fd5b8235612aa881612946565b91506020830135612ab881612946565b809150509250929050565b600181811c90821680612ad757607f821691505b602082108103612af757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8957610a89612b32565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b81810381811115610a8957610a89612b32565b8082028115828204841417610a8957610a89612b32565b600082612bc857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c3d57600080fd5b815161190281612946565b600081518084526020808501945080840160005b83811015612c815781516001600160a01b031687529582019590820190600101612c5c565b509495945050505050565b85815284602082015260a060408201526000612cab60a0830186612c48565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612ce16040830184612c48565b949350505050565b600080600060608486031215612cfe57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612d2957612d29612b32565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201a8fe5932d57c6f16978963042e1ae08d3f43e1d3ee1646e6f2a3c8c4c85cd8d64736f6c63430008130033

Deployed Bytecode Sourcemap

6211:21854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9499:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10461:186;;;;;;;;;;-1:-1:-1;10461:186:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10461:186:0;1023:187:1;8167:53:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;8167:53:0;1215:177:1;11811:87:0;;;;;;;;;;-1:-1:-1;11880:10:0;;11811:87;;9776:95;;;;;;;;;;-1:-1:-1;9856:7:0;;9776:95;;7912:35;;;;;;;;;;;;;;;;10655:446;;;;;;;;;;-1:-1:-1;10655:446:0;;;;;:::i;:::-;;:::i;7638:37::-;;;;;;;;;;;;;;;;9685:83;;;;;;;;;;-1:-1:-1;9751:9:0;;9685:83;;9751:9;;;;2000:36:1;;1988:2;1973:18;9685:83:0;1858:184:1;8373:32:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2211:32:1;;;2193:51;;2181:2;2166:18;8373:32:0;2047:203:1;7456:91:0;;;;;;;;;;;;;;;;11109:293;;;;;;;;;;-1:-1:-1;11109:293:0;;;;;:::i;:::-;;:::i;7374:38::-;;;;;;;;;;;;;;;;23139:108;;;;;;;;;;-1:-1:-1;23139:108:0;;;;;:::i;:::-;;:::i;:::-;;27466:231;;;;;;;;;;-1:-1:-1;27466:231:0;;;;;:::i;:::-;;:::i;5675:26::-;;;;;;;;;;-1:-1:-1;5675:26:0;;;;;;;;26085:112;;;;;;;;;;-1:-1:-1;26085:112:0;;;;;:::i;:::-;;:::i;11906:118::-;;;;;;;;;;-1:-1:-1;11994:22:0;;11906:118;;8442:40;;;;;;;;;;-1:-1:-1;8442:40:0;;;;;;;;;;;6095:109;;;;;;;;;;-1:-1:-1;6095:109:0;;;;;:::i;:::-;;:::i;27298:160::-;;;;;;;;;;-1:-1:-1;27298:160:0;;;;;:::i;:::-;;:::i;22984:147::-;;;;;;;;;;-1:-1:-1;22984:147:0;;;;;:::i;:::-;;:::i;25942:135::-;;;;;;;;;;-1:-1:-1;25942:135:0;;;;;:::i;:::-;;:::i;8090:49::-;;;;;;;;;;;;;;;;6507:67;;;;;;;;;;-1:-1:-1;6507:67:0;;;;-1:-1:-1;;;;;6507:67:0;;;27705:181;;;;;;;;;;;;;:::i;9879:198::-;;;;;;;;;;-1:-1:-1;9879:198:0;;;;;:::i;:::-;;:::i;3702:148::-;;;;;;;;;;;;;:::i;7728:31::-;;;;;;;;;;;;;;;;24622:478;;;;;;;;;;-1:-1:-1;24622:478:0;;;;;:::i;:::-;;:::i;7954:29::-;;;;;;;;;;;;;;;;6297:101;;;;;;;;;;-1:-1:-1;6297:101:0;;;;-1:-1:-1;;;;;6297:101:0;;;7419:30;;;;;;;;;;;;;;;;7331:36;;;;;;;;;;;;;;;;24066:548;;;;;;;;;;-1:-1:-1;24066:548:0;;;;;:::i;:::-;;:::i;7870:35::-;;;;;;;;;;;;;;;;8313:53;;;;;;;;;;;;;;;3488:79;;;;;;;;;;-1:-1:-1;3526:7:0;3553:6;-1:-1:-1;;;;;3553:6:0;3488:79;;6405:95;;;;;;;;;;-1:-1:-1;6405:95:0;;;;-1:-1:-1;;;;;6405:95:0;;;9590:87;;;;;;;;;;;;;:::i;6581:69::-;;;;;;;;;;-1:-1:-1;6581:69:0;;;;-1:-1:-1;;;;;6581:69:0;;;11410:393;;;;;;;;;;-1:-1:-1;11410:393:0;;;;;:::i;:::-;;:::i;10085:192::-;;;;;;;;;;-1:-1:-1;10085:192:0;;;;;:::i;:::-;;:::i;7682:39::-;;;;;;;;;;;;;;;;25108:471;;;;;;;;;;-1:-1:-1;25108:471:0;;;;;:::i;:::-;;:::i;25763:171::-;;;;;;;;;;-1:-1:-1;25763:171:0;;;;;:::i;:::-;;:::i;27894:131::-;;;;;;;;;;;;;:::i;7990:91::-;;;;;;;;;;;;;;;;26205:171;;;;;;;;;;-1:-1:-1;26205:171:0;;;;;:::i;:::-;;:::i;10285:168::-;;;;;;;;;;-1:-1:-1;10285:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;10418:18:0;;;10391:7;10418:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10285:168;23255:107;;;;;;;;;;-1:-1:-1;23255:107:0;;;;;:::i;:::-;;:::i;7766:95::-;;;;;;;;;;;;;;;;25587:168;;;;;;;;;;-1:-1:-1;25587:168:0;;;;;:::i;:::-;;:::i;3858:277::-;;;;;;;;;;-1:-1:-1;3858:277:0;;;;;:::i;:::-;;:::i;6015:72::-;;;;;;;;;;;;;:::i;9499:83::-;9536:13;9569:5;9562:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9499:83;:::o;10461:186::-;10561:4;10578:39;348:10;10601:7;10610:6;10578:8;:39::i;:::-;-1:-1:-1;10635:4:0;10461:186;;;;;:::o;10655:446::-;10787:4;10804:36;10814:6;10822:9;10833:6;10804:9;:36::i;:::-;10851:220;10874:6;348:10;10922:138;10978:6;10922:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10922:19:0;;;;;;:11;:19;;;;;;;;348:10;10922:33;;;;;;;;;;:37;:138::i;:::-;10851:8;:220::i;:::-;-1:-1:-1;11089:4:0;10655:446;;;;;:::o;11109:293::-;348:10;11222:4;11311:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11311:34:0;;;;;;;;;;11222:4;;11239:133;;11289:7;;11311:50;;11350:10;11311:38;:50::i;23139:108::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23208:24:0::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;23208:31:0::1;23235:4;23208:31;::::0;;23139:108::o;27466:231::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;27545:12:::1;:22:::0;;;27615:7:::1;::::0;:23:::1;::::0;27636:1:::1;::::0;27615:16:::1;::::0;27627:3:::1;27615:11;:16::i;:::-;:20:::0;::::1;:23::i;:::-;27600:12;;:38;27578:102;;;::::0;-1:-1:-1;;;27578:102:0;;5482:2:1;27578:102:0::1;::::0;::::1;5464:21:1::0;5521:2;5501:18;;;5494:30;-1:-1:-1;;;5540:18:1;;;5533:44;5594:18;;27578:102:0::1;5280:338:1::0;27578:102:0::1;27466:231:::0;:::o;26085:112::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;26158:9:::1;:31:::0;;-1:-1:-1;;;;;;26158:31:0::1;-1:-1:-1::0;;;;;26158:31:0;;;::::1;::::0;;;::::1;::::0;;26085:112::o;6095:109::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6169:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;6169:27:0::1;6192:4;6169:27;::::0;;6095:109::o;27298:160::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27413:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;27413:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27298:160::o;22984:147::-;23075:4;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23099:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;3685:1;22984:147:::0;;;:::o;25942:135::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;26026:15:::1;:43:::0;;-1:-1:-1;;;;;;26026:43:0::1;-1:-1:-1::0;;;;;26026:43:0;;;::::1;::::0;;;::::1;::::0;;25942:135::o;27705:181::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;27782:49:::1;::::0;27764:12:::1;::::0;27782:10:::1;::::0;27805:21:::1;::::0;27764:12;27782:49;27764:12;27782:49;27805:21;27782:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27763:68;;;27850:7;27842:36;;;::::0;-1:-1:-1;;;27842:36:0;;6035:2:1;27842:36:0::1;::::0;::::1;6017:21:1::0;6074:2;6054:18;;;6047:30;-1:-1:-1;;;6093:18:1;;;6086:46;6149:18;;27842:36:0::1;5833:340:1::0;9879:198:0;-1:-1:-1;;;;;9969:20:0;;9945:7;9969:20;;;:11;:20;;;;;;;;9965:49;;;-1:-1:-1;;;;;;9998:16:0;;;;;:7;:16;;;;;;;9879:198::o;9965:49::-;-1:-1:-1;;;;;10052:16:0;;;;;;:7;:16;;;;;;10032:37;;:19;:37::i;3702:148::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;3809:1:::1;3793:6:::0;;3772:40:::1;::::0;-1:-1:-1;;;;;3793:6:0;;::::1;::::0;3772:40:::1;::::0;3809:1;;3772:40:::1;3840:1;3823:19:::0;;-1:-1:-1;;;;;;3823:19:0::1;::::0;;3702:148::o;24622:478::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;24771:18:::1;:34:::0;;;24816:18:::1;:34:::0;;;24861:12:::1;:22:::0;;;-1:-1:-1;24913:45:0::1;24876:7:::0;24913:32:::1;24792:13:::0;24837;24913:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;24894:64;;25028:12;;25007:18;;24986;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24969:14;:71:::0;25071:4:::1;25059:16:::0;::::1;;25051:41;;;;-1:-1:-1::0;;;25051:41:0::1;;;;;;;:::i;:::-;24760:340;24622:478:::0;;;:::o;24066:548::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;24214:17:::1;:33:::0;;;24258:17:::1;:33:::0;;;24302:11:::1;:21:::0;;;24334:67:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:67:::1;;:::i;:::-;-1:-1:-1::0;24412:16:0::1;24431:45;24468:7:::0;24431:32:::1;:13:::0;24449;24431:17:::1;:32::i;:45::-;24412:64;;24543:11;;24523:17;;24503;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;24487:13;:67:::0;24585:4:::1;24573:16:::0;::::1;;24565:41;;;;-1:-1:-1::0;;;24565:41:0::1;;;;;;;:::i;9590:87::-:0;9629:13;9662:7;9655:14;;;;;:::i;11410:393::-;11528:4;11545:228;348:10;11595:7;11617:145;11674:15;11617:145;;;;;;;;;;;;;;;;;348:10;11617:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11617:34:0;;;;;;;;;;;;:38;:145::i;10085:192::-;10188:4;10205:42;348:10;10229:9;10240:6;10205:9;:42::i;25108:471::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;25261:16:::1;:32:::0;;;25304:16:::1;:32:::0;;;25347:10:::1;:20:::0;;;25360:7;25397:35:::1;25323:13:::0;25280;25397:35:::1;:::i;:::-;:48;;;;:::i;:::-;25378:16;:67:::0;25456:16:::1;25475:45;25512:7:::0;25475:32:::1;:13:::0;25493;25475:17:::1;:32::i;:45::-;25456:64;;25551:3;25539:8;:15;;25531:40;;;;-1:-1:-1::0;;;25531:40:0::1;;;;;;;:::i;25763:171::-:0;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;25878:22:::1;:48:::0;25763:171::o;27894:131::-;27939:18;27960:24;27978:4;27960:9;:24::i;:::-;27939:45;;27995:22;28006:10;27995;:22::i;26205:171::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;26282:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;26282:32:0;;::::1;;::::0;;26330:38:::1;::::0;::::1;::::0;::::1;::::0;26306:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;26330:38:0::1;;;;;;;;26205:171:::0;:::o;23255:107::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23322:24:0::1;23349:5;23322:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;23322:32:0::1;::::0;;23255:107::o;25587:168::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;25662:8:::1;:22:::0;;;25715:7:::1;::::0;:14:::1;::::0;25727:1:::1;25715:11;:14::i;:::-;25703:8;;:26;;25695:52;;;::::0;-1:-1:-1;;;25695:52:0;;6983:2:1;25695:52:0::1;::::0;::::1;6965:21:1::0;7022:2;7002:18;;;6995:30;-1:-1:-1;;;7041:18:1;;;7034:43;7094:18;;25695:52:0::1;6781:337:1::0;3858:277:0;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3960:21:0;::::1;3938:109;;;::::0;-1:-1:-1;;;3938:109:0;;7325:2:1;3938:109:0::1;::::0;::::1;7307:21:1::0;7364:2;7344:18;;;7337:30;7403:34;7383:18;;;7376:62;-1:-1:-1;;;7454:18:1;;;7447:36;7500:19;;3938:109:0::1;7123:402:1::0;3938:109:0::1;4084:6;::::0;;4063:37:::1;::::0;-1:-1:-1;;;;;4063:37:0;;::::1;::::0;4084:6;::::1;::::0;4063:37:::1;::::0;::::1;4111:6;:16:::0;;-1:-1:-1;;;;;;4111:16:0::1;-1:-1:-1::0;;;;;4111:16:0;;;::::1;::::0;;;::::1;::::0;;3858:277::o;6015:72::-;3615:6;;-1:-1:-1;;;;;3615:6:0;348:10;3615:22;3607:67;;;;-1:-1:-1;;;3607:67:0;;;;;;;:::i;:::-;6066:6:::1;:13:::0;;-1:-1:-1;;6066:13:0::1;6075:4;6066:13;::::0;;6015:72::o;12347:335::-;-1:-1:-1;;;;;12440:19:0;;12432:68;;;;-1:-1:-1;;;12432:68:0;;7732:2:1;12432:68:0;;;7714:21:1;7771:2;7751:18;;;7744:30;7810:34;7790:18;;;7783:62;-1:-1:-1;;;7861:18:1;;;7854:34;7905:19;;12432:68:0;7530:400:1;12432:68:0;-1:-1:-1;;;;;12519:21:0;;12511:68;;;;-1:-1:-1;;;12511:68:0;;8137:2:1;12511:68:0;;;8119:21:1;8176:2;8156:18;;;8149:30;8215:34;8195:18;;;8188:62;-1:-1:-1;;;8266:18:1;;;8259:32;8308:19;;12511:68:0;7935:398:1;12511:68:0;-1:-1:-1;;;;;12590:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12642:32;;1361:25:1;;;12642:32:0;;1334:18:1;12642:32:0;;;;;;;12347:335;;;:::o;12690:1321::-;5817:6;;12798:4;;12804:2;;5817:6;;;:26;;-1:-1:-1;;;;;;5827:16:0;;;;;;:10;:16;;;;;;;;5817:26;:44;;;-1:-1:-1;;;;;;5847:14:0;;;;;;:10;:14;;;;;;;;5817:44;5809:65;;;;-1:-1:-1;;;5809:65:0;;8540:2:1;5809:65:0;;;8522:21:1;8579:1;8559:18;;;8552:29;-1:-1:-1;;;8597:18:1;;;8590:38;8645:18;;5809:65:0;8338:331:1;5809:65:0;-1:-1:-1;;;;;12827:18:0;::::1;12819:68;;;::::0;-1:-1:-1;;;12819:68:0;;8876:2:1;12819:68:0::1;::::0;::::1;8858:21:1::0;8915:2;8895:18;;;8888:30;8954:34;8934:18;;;8927:62;-1:-1:-1;;;9005:18:1;;;8998:35;9050:19;;12819:68:0::1;8674:401:1::0;12819:68:0::1;-1:-1:-1::0;;;;;12906:16:0;::::1;12898:64;;;::::0;-1:-1:-1;;;12898:64:0;;9282:2:1;12898:64:0::1;::::0;::::1;9264:21:1::0;9321:2;9301:18;;;9294:30;9360:34;9340:18;;;9333:62;-1:-1:-1;;;9411:18:1;;;9404:33;9454:19;;12898:64:0::1;9080:399:1::0;12898:64:0::1;12990:1;12981:6;:10;12973:64;;;::::0;-1:-1:-1;;;12973:64:0;;9686:2:1;12973:64:0::1;::::0;::::1;9668:21:1::0;9725:2;9705:18;;;9698:30;9764:34;9744:18;;;9737:62;-1:-1:-1;;;9815:18:1;;;9808:39;9864:19;;12973:64:0::1;9484:405:1::0;12973:64:0::1;3526:7:::0;3553:6;-1:-1:-1;;;;;13052:15:0;;::::1;3553:6:::0;;13052:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3526:7:0;3553:6;-1:-1:-1;;;;;13071:13:0;;::::1;3553:6:::0;;13071:13:::1;;13052:32;13048:185;;;13137:8;;13127:6;:18;;13101:120;;;::::0;-1:-1:-1;;;13101:120:0;;10096:2:1;13101:120:0::1;::::0;::::1;10078:21:1::0;10135:2;10115:18;;;10108:30;10174:34;10154:18;;;10147:62;-1:-1:-1;;;10225:18:1;;;10218:38;10273:19;;13101:120:0::1;9894:404:1::0;13101:120:0::1;13245:28;13276:24;13294:4;13276:9;:24::i;:::-;13379:22;::::0;13245:55;;-1:-1:-1;13342:59:0;::::1;;13414:31;13428:4:::0;13434:2;13438:6;13414:13:::1;:31::i;:::-;13477:16;::::0;::::1;;13476:17;:42:::0;::::1;;;-1:-1:-1::0;13497:21:0::1;::::0;::::1;::::0;::::1;;;13476:42;:61;;;;;13530:7;-1:-1:-1::0;;;;;13522:15:0::1;:4;-1:-1:-1::0;;;;;13522:15:0::1;;;13476:61;13458:277;;;13568:23;13564:160;;;13635:22;;13612:45;;13676:32;13687:20;13676:10;:32::i;:::-;-1:-1:-1::0;;;;;13864:21:0;::::1;13747:12;13864:21:::0;;;:15:::1;:21;::::0;;;;;13762:4:::1;::::0;13864:21:::1;;::::0;:44:::1;;-1:-1:-1::0;;;;;;13889:19:0;::::1;;::::0;;;:15:::1;:19;::::0;;;;;::::1;;13864:44;13860:92;;;-1:-1:-1::0;13935:5:0::1;13860:92;13962:41;13977:4;13983:2;13987:6;13995:7;13962:14;:41::i;:::-;12808:1203;;;12690:1321:::0;;;;;:::o;1779:226::-;1899:7;1935:12;1927:6;;;;1919:29;;;;-1:-1:-1;;;1919:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1959:9:0;1971:5;1975:1;1971;:5;:::i;:::-;1959:17;1779:226;-1:-1:-1;;;;;1779:226:0:o;1446:181::-;1504:7;;1536:5;1540:1;1536;:5;:::i;:::-;1524:17;;1565:1;1560;:6;;1552:46;;;;-1:-1:-1;;;1552:46:0;;10638:2:1;1552:46:0;;;10620:21:1;10677:2;10657:18;;;10650:30;10716:29;10696:18;;;10689:57;10763:18;;1552:46:0;10436:351:1;1552:46:0;1618:1;1446:181;-1:-1:-1;;;1446:181:0:o;2271:132::-;2329:7;2356:39;2360:1;2363;2356:39;;;;;;;;;;;;;;;;;:3;:39::i;2013:250::-;2071:7;2095:1;2100;2095:6;2091:47;;-1:-1:-1;2125:1:0;2118:8;;2091:47;2150:9;2162:5;2166:1;2162;:5;:::i;:::-;2150:17;-1:-1:-1;2195:1:0;2186:5;2190:1;2150:17;2186:5;:::i;:::-;:10;2178:56;;;;-1:-1:-1;;;2178:56:0;;11389:2:1;2178:56:0;;;11371:21:1;11428:2;11408:18;;;11401:30;11467:34;11447:18;;;11440:62;-1:-1:-1;;;11518:18:1;;;11511:31;11559:19;;2178:56:0;11187:397:1;12032:307:0;12116:7;12169;;12158;:18;;12136:110;;;;-1:-1:-1;;;12136:110:0;;11791:2:1;12136:110:0;;;11773:21:1;11830:2;11810:18;;;11803:30;11869:34;11849:18;;;11842:62;-1:-1:-1;;;11920:18:1;;;11913:40;11970:19;;12136:110:0;11589:406:1;12136:110:0;12257:19;12279:10;:8;:10::i;:::-;12257:32;-1:-1:-1;12307:24:0;:7;12257:32;12307:11;:24::i;14019:1576::-;8780:16;:23;;-1:-1:-1;;8780:23:0;8799:4;8780:23;;;14185:11:::1;::::0;14148:17:::1;::::0;14126::::1;::::0;8780:16;;14126:81:::1;::::0;14185:11;;14126:40:::1;::::0;:21:::1;:40::i;:81::-;14100:107;;14218:24;14245:84;14306:12;;14245:42;14268:18;;14245;;:22;;:42;;;;:::i;:84::-;14218:111:::0;-1:-1:-1;14340:25:0::1;14368:37;:15:::0;14218:111;14368:19:::1;:37::i;:::-;14340:65;;14428:17;14449:1;14428:22:::0;14424:61:::1;;14467:7;;;;;14424:61;14497:27;14527:136;14661:1;14527:115;14624:17;14527:78;14586:18;;14566:17;;:38;;;;:::i;:::-;14527:20:::0;;:38:::1;:78::i;:::-;:96:::0;::::1;:115::i;:136::-;14497:166:::0;-1:-1:-1;14674:22:0::1;14699:45;:20:::0;14497:166;14699:24:::1;:45::i;:::-;14674:70;;14755:32;14772:14;14755:16;:32::i;:::-;14800:18;14821:21;14800:42;;14853:23;14879:126;15003:1;14879:105;14966:17;14879:68;14928:18;;14908:17;;:38;;;;:::i;:::-;14879:10:::0;;:28:::1;:68::i;:126::-;14853:152;;15044:1;15022:19;:23;:46;;;;;15067:1;15049:15;:19;15022:46;15018:129;;;15085:50;15098:19;15119:15;15085:12;:50::i;:::-;15159:23;15185:105;15272:17;15185:68;15234:18;;15214:17;;:38;;;;:::i;:::-;15185:10:::0;;:28:::1;:68::i;:105::-;15159:131:::0;-1:-1:-1;15305:19:0;;15301:93:::1;;15341:15;::::0;:41:::1;::::0;-1:-1:-1;;;;;15341:15:0;;::::1;::::0;:41;::::1;;;::::0;15366:15;;15341::::1;:41:::0;:15;:41;15366:15;15341;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15301:93;15406:17;15426:76;15476:15:::0;15426:31:::1;:10:::0;15441:15;15426:14:::1;:31::i;:::-;:35:::0;::::1;:76::i;:::-;15406:96:::0;-1:-1:-1;15517:13:0;;15513:75:::1;;15547:9;::::0;:29:::1;::::0;-1:-1:-1;;;;;15547:9:0;;::::1;::::0;:29;::::1;;;::::0;15566:9;;15547::::1;:29:::0;:9;:29;15566:9;15547;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15513:75;14089:1506;;;;;;;;;8814:1;-1:-1:-1::0;8826:16:0;:24;;-1:-1:-1;;8826:24:0;;;14019:1576::o;26680:610::-;26803:18;26824:25;26842:6;26824:13;26834:2;26824:9;:13::i;:25::-;-1:-1:-1;;;;;26865:23:0;;;;;;:17;:23;;;;;;26803:46;;-1:-1:-1;26865:23:0;;26864:24;:50;;;;-1:-1:-1;;;;;;26893:21:0;;;;;;:17;:21;;;;;;;;26892:22;26864:50;26860:211;;;26971:12;;26957:10;:26;;26931:128;;;;-1:-1:-1;;;26931:128:0;;;;;;;:::i;:::-;27093:7;-1:-1:-1;;;;;27085:15:0;:4;-1:-1:-1;;;;;27085:15:0;;:41;;;;-1:-1:-1;;;;;;27105:21:0;;;;;;:17;:21;;;;;;;;27104:22;27085:41;27081:202;;;27183:12;;27169:10;:26;;27143:128;;;;-1:-1:-1;;;27143:128:0;;;;;;;:::i;16664:953::-;16820:7;16815:288;;16844:14;23433:1;23413:17;:21;;;23445:17;:21;;;23477:11;:15;23370:130;16844:14;16815:288;;;16908:7;-1:-1:-1;;;;;16895:20:0;:9;-1:-1:-1;;;;;16895:20:0;;16891:73;;16936:12;23753:18;;23733:17;:38;23802:18;;23782:17;:38;23845:12;;23831:11;:26;23692:173;16936:12;16994:7;-1:-1:-1;;;;;16984:17:0;:6;-1:-1:-1;;;;;16984:17:0;;;:41;;;;;17018:7;-1:-1:-1;;;;;17005:20:0;:9;-1:-1:-1;;;;;17005:20:0;;;16984:41;16980:112;;;17046:30;23952:16;;23932:17;:36;23999:16;;23979:17;:36;24040:10;;24026:11;:24;23873:185;17046:30;-1:-1:-1;;;;;17119:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;17143:22:0;;;;;;:11;:22;;;;;;;;17142:23;17119:46;17115:467;;;17182:48;17204:6;17212:9;17223:6;17182:21;:48::i;:::-;17115:467;;;-1:-1:-1;;;;;17253:19:0;;;;;;:11;:19;;;;;;;;17252:20;:46;;;;-1:-1:-1;;;;;;17276:22:0;;;;;;:11;:22;;;;;;;;17252:46;17248:334;;;17315:46;17335:6;17343:9;17354:6;17315:19;:46::i;17248:334::-;-1:-1:-1;;;;;17383:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;17406:22:0;;;;;;:11;:22;;;;;;;;17383:45;17379:203;;;17445:48;17467:6;17475:9;17486:6;17445:21;:48::i;17379:203::-;17526:44;17544:6;17552:9;17563:6;17526:17;:44::i;:::-;17594:15;:13;:15::i;2411:312::-;2531:7;2566:12;2559:5;2551:28;;;;-1:-1:-1;;;2551:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2590:9:0;2602:5;2606:1;2602;:5;:::i;21584:164::-;21626:7;21647:15;21664;21683:19;:17;:19::i;:::-;21646:56;;-1:-1:-1;21646:56:0;-1:-1:-1;21720:20:0;21646:56;;21720:11;:20::i;:::-;21713:27;;;;21584:164;:::o;1635:136::-;1693:7;1720:43;1724:1;1727;1720:43;;;;;;;;;;;;;;;;;:3;:43::i;15603:528::-;15693:16;;;15707:1;15693:16;;;;;;;;15669:21;;15693:16;;;;;;;;;;-1:-1:-1;15693:16:0;15669:40;;15738:4;15720;15725:1;15720:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15720:23:0;;;-1:-1:-1;;;;;15720:23:0;;;;;15764:17;-1:-1:-1;;;;;15764:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15754:4;15759:1;15754:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;15754:34:0;;;-1:-1:-1;;;;;15754:34:0;;;;;15799:64;15816:4;15831:17;15851:11;15799:8;:64::i;:::-;15874:198;;-1:-1:-1;;;15874:198:0;;-1:-1:-1;;;;;15874:17:0;:68;;;;:198;;15957:11;;15983:1;;15999:4;;16026;;16046:15;;15874:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16088:35;16105:11;16118:4;16088:35;;;;;;;:::i;:::-;;;;;;;;15658:473;15603:528;:::o;16139:517::-;16287:64;16304:4;16319:17;16339:11;16287:8;:64::i;:::-;16394:17;-1:-1:-1;;;;;16394:33:0;;16435:9;16468:4;16488:11;16514:1;16557;16600:7;3526;3553:6;-1:-1:-1;;;;;3553:6:0;;3488:79;16600:7;16394:254;;;;;;-1:-1:-1;;;;;;16394:254:0;;;-1:-1:-1;;;;;14678:15:1;;;16394:254:0;;;14660:34:1;14710:18;;;14703:34;;;;14753:18;;;14746:34;;;;14796:18;;;14789:34;14860:15;;;14839:19;;;14832:44;16622:15:0;14892:19:1;;;14885:35;14594:19;;16394:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16139:517;;:::o;18998:703::-;19149:15;19179:23;19217;19255:18;19287:19;19298:7;19287:10;:19::i;:::-;-1:-1:-1;;;;;19335:15:0;;;;;;:7;:15;;;;;;19134:172;;-1:-1:-1;19134:172:0;;-1:-1:-1;19134:172:0;-1:-1:-1;19134:172:0;-1:-1:-1;19335:28:0;;19355:7;19335:19;:28::i;:::-;-1:-1:-1;;;;;19317:15:0;;;;;;:7;:15;;;;;;;;:46;;;;19392:7;:15;;;;:28;;19412:7;19392:19;:28::i;:::-;-1:-1:-1;;;;;19374:15:0;;;;;;;:7;:15;;;;;;:46;;;;19452:18;;;;;;;:39;;19475:15;19452:22;:39::i;:::-;-1:-1:-1;;;;;19431:18:0;;;;;;:7;:18;;;;;:60;19502:26;19517:10;19502:14;:26::i;:::-;19561:9;-1:-1:-1;;;;;19544:44:0;19553:6;-1:-1:-1;;;;;19544:44:0;;19572:15;19544:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;19544:44:0;;;;;;;;19603:14;;19599:95;;19639:43;;1361:25:1;;;19664:4:0;;-1:-1:-1;;;;;19639:43:0;;;;;1349:2:1;1334:18;19639:43:0;;;;;;;19599:95;19123:578;;;;18998:703;;;:::o;18275:715::-;18424:15;18454:23;18492;18530:18;18562:19;18573:7;18562:10;:19::i;:::-;-1:-1:-1;;;;;18610:15:0;;;;;;:7;:15;;;;;;18409:172;;-1:-1:-1;18409:172:0;;-1:-1:-1;18409:172:0;-1:-1:-1;18409:172:0;-1:-1:-1;18610:28:0;;18409:172;18610:19;:28::i;:::-;-1:-1:-1;;;;;18592:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;18670:18;;;;;:7;:18;;;;;:39;;18693:15;18670:22;:39::i;:::-;-1:-1:-1;;;;;18649:18:0;;;;;;:7;:18;;;;;;;;:60;;;;18741:7;:18;;;;:39;;18764:15;18741:22;:39::i;19709:774::-;19860:15;19890:23;19928;19966:18;19998:19;20009:7;19998:10;:19::i;:::-;-1:-1:-1;;;;;20046:15:0;;;;;;:7;:15;;;;;;19845:172;;-1:-1:-1;19845:172:0;;-1:-1:-1;19845:172:0;-1:-1:-1;19845:172:0;-1:-1:-1;20046:28:0;;20066:7;20046:19;:28::i;:::-;-1:-1:-1;;;;;20028:15:0;;;;;;:7;:15;;;;;;;;:46;;;;20103:7;:15;;;;:28;;20123:7;20103:19;:28::i;17625:642::-;17772:15;17802:23;17840;17878:18;17910:19;17921:7;17910:10;:19::i;:::-;-1:-1:-1;;;;;17958:15:0;;;;;;:7;:15;;;;;;17757:172;;-1:-1:-1;17757:172:0;;-1:-1:-1;17757:172:0;-1:-1:-1;17757:172:0;-1:-1:-1;17958:28:0;;17757:172;17958:19;:28::i;23508:176::-;23572:13;23586:1;23572:16;;;;;;;;:::i;:::-;;;;;;;;;23552:17;:36;;;;23619:13;23633:1;23619:16;;;;;;;;:::i;:::-;;;;;;;;;23599:17;:36;;;;23660:13;23674:1;23660:16;;;;;;;;:::i;:::-;;;;;;;;;;;23646:11;:30;23508:176::o;21756:605::-;21854:7;;21890;;21807;;;;;21908:338;21932:9;:16;21928:20;;21908:338;;;22016:7;21992;:21;22000:9;22010:1;22000:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22000:12:0;21992:21;;;;;;;;;;;;;:31;;:83;;;22068:7;22044;:21;22052:9;22062:1;22052:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22052:12:0;22044:21;;;;;;;;;;;;;:31;21992:83;21970:146;;;22099:7;;22108;;22091:25;;;;;;;21756:605;;:::o;21970:146::-;22141:34;22153:7;:21;22161:9;22171:1;22161:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22161:12:0;22153:21;;;;;;;;;;;;;22141:7;;:11;:34::i;:::-;22131:44;;22200:34;22212:7;:21;22220:9;22230:1;22220:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22220:12:0;22212:21;;;;;;;;;;;;;22200:7;;:11;:34::i;:::-;22190:44;-1:-1:-1;21950:3:0;;;;:::i;:::-;;;;21908:338;;;-1:-1:-1;22282:7:0;;22270;;:20;;:11;:20::i;:::-;22260:7;:30;22256:61;;;22300:7;;22309;;22292:25;;;;;;21756:605;;:::o;22256:61::-;22336:7;;22345;;-1:-1:-1;21756:605:0;-1:-1:-1;21756:605:0:o;20491:421::-;20566:7;20575;20584;20593;20614:23;20639:18;20661:20;20673:7;20661:11;:20::i;:::-;20613:68;;;;20693:15;20710:23;20737:94;20763:7;20785:10;20810;:8;:10::i;:::-;20737:11;:94::i;:::-;20692:139;;;;-1:-1:-1;20876:15:0;;-1:-1:-1;20893:10:0;;-1:-1:-1;20491:421:0;;-1:-1:-1;;;;20491:421:0:o;22369:368::-;22432:19;22454:10;:8;:10::i;:::-;22432:32;-1:-1:-1;22475:18:0;22496:27;:10;22432:32;22496:14;:27::i;:::-;22575:4;22559:22;;;;:7;:22;;;;;;22475:48;;-1:-1:-1;22559:38:0;;22475:48;22559:26;:38::i;:::-;22550:4;22534:22;;;;:7;:22;;;;;;;;:63;;;;22612:11;:26;;;;;;22608:122;;;22696:4;22680:22;;;;:7;:22;;;;;;:38;;22707:10;22680:26;:38::i;:::-;22671:4;22655:22;;;;:7;:22;;;;;:63;22608:122;22421:316;;22369:368;:::o;20920:271::-;20996:7;21005;21025:18;21046:30;21068:7;21046:21;:30::i;:::-;21025:51;-1:-1:-1;21087:23:0;21113;:7;21025:51;21113:11;:23::i;:::-;21087:49;21172:10;;-1:-1:-1;20920:271:0;;-1:-1:-1;;;20920:271:0:o;21199:377::-;21334:7;;;21381:24;:7;21393:11;21381;:24::i;:::-;21363:42;-1:-1:-1;21416:18:0;21437:27;:10;21452:11;21437:14;:27::i;:::-;21416:48;-1:-1:-1;21475:23:0;21501;:7;21416:48;21501:11;:23::i;:::-;21543:7;;;;-1:-1:-1;21199:377:0;;-1:-1:-1;;;;;;21199:377:0:o;22745:231::-;22831:7;22851:12;22866:57;22911:11;;22866:40;22888:17;;22866;;:21;;:40;;;;:::i;:57::-;22851:72;-1:-1:-1;22941:27:0;22963:4;22941:17;:7;22851:72;22941:11;:17::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2255:247::-;2314:6;2367:2;2355:9;2346:7;2342:23;2338:32;2335:52;;;2383:1;2380;2373:12;2335:52;2422:9;2409:23;2441:31;2466:5;2441:31;:::i;2507:180::-;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;-1:-1:-1;2658:23:1;;2507:180;-1:-1:-1;2507:180:1:o;2692:160::-;2757:20;;2813:13;;2806:21;2796:32;;2786:60;;2842:1;2839;2832:12;2857:315;2922:6;2930;2983:2;2971:9;2962:7;2958:23;2954:32;2951:52;;;2999:1;2996;2989:12;2951:52;3038:9;3025:23;3057:31;3082:5;3057:31;:::i;:::-;3107:5;-1:-1:-1;3131:35:1;3162:2;3147:18;;3131:35;:::i;:::-;3121:45;;2857:315;;;;;:::o;3177:316::-;3254:6;3262;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;-1:-1:-1;;3362:23:1;;;3432:2;3417:18;;3404:32;;-1:-1:-1;3483:2:1;3468:18;;;3455:32;;3177:316;-1:-1:-1;3177:316:1:o;3956:180::-;4012:6;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;4104:26;4120:9;4104:26;:::i;4141:388::-;4209:6;4217;4270:2;4258:9;4249:7;4245:23;4241:32;4238:52;;;4286:1;4283;4276:12;4238:52;4325:9;4312:23;4344:31;4369:5;4344:31;:::i;:::-;4394:5;-1:-1:-1;4451:2:1;4436:18;;4423:32;4464:33;4423:32;4464:33;:::i;:::-;4516:7;4506:17;;;4141:388;;;;;:::o;4534:380::-;4613:1;4609:12;;;;4656;;;4677:61;;4731:4;4723:6;4719:17;4709:27;;4677:61;4784:2;4776:6;4773:14;4753:18;4750:38;4747:161;;4830:10;4825:3;4821:20;4818:1;4811:31;4865:4;4862:1;4855:15;4893:4;4890:1;4883:15;4747:161;;4534:380;;;:::o;4919:356::-;5121:2;5103:21;;;5140:18;;;5133:30;5199:34;5194:2;5179:18;;5172:62;5266:2;5251:18;;4919:356::o;6178:127::-;6239:10;6234:3;6230:20;6227:1;6220:31;6270:4;6267:1;6260:15;6294:4;6291:1;6284:15;6310:125;6375:9;;;6396:10;;;6393:36;;;6409:18;;:::i;6440:336::-;6642:2;6624:21;;;6681:2;6661:18;;;6654:30;-1:-1:-1;;;6715:2:1;6700:18;;6693:42;6767:2;6752:18;;6440:336::o;10303:128::-;10370:9;;;10391:11;;;10388:37;;;10405:18;;:::i;10792:168::-;10865:9;;;10896;;10913:15;;;10907:22;;10893:37;10883:71;;10934:18;;:::i;10965:217::-;11005:1;11031;11021:132;;11075:10;11070:3;11066:20;11063:1;11056:31;11110:4;11107:1;11100:15;11138:4;11135:1;11128:15;11021:132;-1:-1:-1;11167:9:1;;10965:217::o;12000:404::-;12202:2;12184:21;;;12241:2;12221:18;;;12214:30;12280:34;12275:2;12260:18;;12253:62;-1:-1:-1;;;12346:2:1;12331:18;;12324:38;12394:3;12379:19;;12000:404::o;12541:127::-;12602:10;12597:3;12593:20;12590:1;12583:31;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12673:251;12743:6;12796:2;12784:9;12775:7;12771:23;12767:32;12764:52;;;12812:1;12809;12802:12;12764:52;12844:9;12838:16;12863:31;12888:5;12863:31;:::i;12929:461::-;12982:3;13020:5;13014:12;13047:6;13042:3;13035:19;13073:4;13102:2;13097:3;13093:12;13086:19;;13139:2;13132:5;13128:14;13160:1;13170:195;13184:6;13181:1;13178:13;13170:195;;;13249:13;;-1:-1:-1;;;;;13245:39:1;13233:52;;13305:12;;;;13340:15;;;;13281:1;13199:9;13170:195;;;-1:-1:-1;13381:3:1;;12929:461;-1:-1:-1;;;;;12929:461:1:o;13395:582::-;13694:6;13683:9;13676:25;13737:6;13732:2;13721:9;13717:18;13710:34;13780:3;13775:2;13764:9;13760:18;13753:31;13657:4;13801:57;13853:3;13842:9;13838:19;13830:6;13801:57;:::i;:::-;-1:-1:-1;;;;;13894:32:1;;;;13889:2;13874:18;;13867:60;-1:-1:-1;13958:3:1;13943:19;13936:35;13793:65;13395:582;-1:-1:-1;;;13395:582:1:o;13982:332::-;14189:6;14178:9;14171:25;14232:2;14227;14216:9;14212:18;14205:30;14152:4;14252:56;14304:2;14293:9;14289:18;14281:6;14252:56;:::i;:::-;14244:64;13982:332;-1:-1:-1;;;;13982:332:1:o;14931:306::-;15019:6;15027;15035;15088:2;15076:9;15067:7;15063:23;15059:32;15056:52;;;15104:1;15101;15094:12;15056:52;15133:9;15127:16;15117:26;;15183:2;15172:9;15168:18;15162:25;15152:35;;15227:2;15216:9;15212:18;15206:25;15196:35;;14931:306;;;;;:::o;15242:135::-;15281:3;15302:17;;;15299:43;;15322:18;;:::i;:::-;-1:-1:-1;15369:1:1;15358:13;;15242:135::o

Swarm Source

ipfs://1a8fe5932d57c6f16978963042e1ae08d3f43e1d3ee1646e6f2a3c8c4c85cd8d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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