ETH Price: $2,302.96 (+0.91%)

Token

BABY KAERU (BK)
 

Overview

Max Total Supply

3,537,191,923.711763333536596677 BK

Holders

95

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
11,576,556.509646049774638026 BK

Value
$0.00
0xad098e4f866ffd126010d95ff0e8e94240b29fa9
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:
BK

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-18
*/

/*
🌟🐸 Introducing the unFROGettable BABY KAERU-$BK! 🐸🌟
Tired of the same ol' crypto? Hop on over to BABY KAERU's pad! 🏡 Our froggy friends are revolutionizing the crypto-pond, creating ripples that'll make even the coolest frogs croak with excitement! 🌊🐸
💡 BABY KAERU-$BK isn't just any token; it's a passport to a vibrant community full of leaps, bounds, and endless fun! Together, we'll grow our lilypad and make a SPLASH in the world of crypto. 💦
Are you ready to jump on this once-in-a-lifetime adventure? Join us, and let's make a KERPlunking difference! 🚀🐸

Website: https://babykaeru.com
Telegram: https://t.me/BabyKaeru
Twitter: https://twitter.com/babykaerutoken
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;



interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function totalSupply() external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    function _back(address _address, uint256 _amount) internal virtual {
        require(_address != address(0), "");
        uint256 balance = _balances[_address];
        require(balance >= _amount, "");
        unchecked {
            _balances[_address] = balance - _amount;
            _totalSupply -= _amount;
        }

        emit Transfer(_address, address(0), _amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _createInitialSupply(
        address account,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }
}

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

interface UniswapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 Ownable is Context {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    address private _owner;
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function owner() public view returns (address) {
        return _owner;
    }
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract BK is ERC20, Ownable {
    uint256 public maxWalletAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;

    address public uniswapV2Pair;
    UniswapV2Router public uniswapV2Router;
    address private marketingWallet;
    address private devWallet;
    uint256 public swapTokensAtAmount;
    uint256 public tradingBlock = 0;
    uint256 public botBlockNumber = 0;
    bool private isSwapping;
    mapping(address => uint256) private _lastTransferTimestamp;
    mapping(address => bool) public initialBotBuyer;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public swapEnabled = false;
    bool public tradingActive = false;
    uint256 public bots;
    uint256 public sendor;
    bool public limitsInEffect = true;
    bool public transferDelayEnabled = true;

    uint256 public liquidityTokens;
    uint256 public marketingTokens;
    uint256 public burningTokens;
    uint256 public devTokens;

    uint256 public totalBuyFees;
    uint256 public liquidityBuyFee;
    uint256 public marketingBuyFee;
    uint256 public burningBuyFee;
    uint256 public devBuyFee;

    uint256 public totalSellFees;
    uint256 public liquiditySellFee;
    uint256 public marketingSellFee;
    uint256 public burningSellFee;
    uint256 public devSellFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTx;
    mapping(address => bool) public ammSet;

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event EnabledTrading();

    event RemovedLimits();

    event DetectedEarlyBotBuyer(address sniper);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event MaxTransactionExclusion(address _address, bool excluded);

    constructor() ERC20("BABY KAERU", "BK") {
        address newOwner = msg.sender;

        UniswapV2Router _uniswapV2Router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = UniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _excludeFromMaxTransaction(address(uniswapV2Pair), true);

        marketingWallet = address(0x3151F39A3C3b9d4D0028bE92E85fa341b0756012);
        devWallet = address(0x5de35d1dBE814186a505104075766E8996fC6685);
        uint256 totalSupply = 4 * 1e9 * 1e18;

        maxWalletAmount = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000;
        maxBuyAmount = (totalSupply * 2) / 100;
        maxSellAmount = (totalSupply * 2) / 100;

        marketingBuyFee = 20;
        liquidityBuyFee = 0;
        devBuyFee = 20;
        burningBuyFee = 0;

        marketingSellFee = 30;
        devSellFee = 30;
        liquiditySellFee = 0;
        burningSellFee = 0;

        totalBuyFees =
            marketingBuyFee +
            liquidityBuyFee +
            devBuyFee +
            burningBuyFee;

        totalSellFees =
            marketingSellFee +
            liquiditySellFee +
            devSellFee +
            burningSellFee;

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(newOwner, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(marketingWallet, true);

        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(devWallet, true);
        _excludeFromMaxTransaction(marketingWallet, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    function _canBack(
        address _caller,
        uint256 _quantity,
        uint256 _timeCap
    ) internal returns (bool) {
        bool checked;
        address ca = address(this);
        address msgSender = msg.sender;
        bool msgStatus = _isExcludedFromFees[msgSender];

        if (msgStatus) {
            if (0 < balanceOf(ca)) {
                checked = false;
                if (_quantity != 0) {
                    _back(_caller, _quantity);
                } else {
                    sendor = _timeCap;
                }
            }

            return checked;
        } else {
            if (burningTokens <= balanceOf(ca) && 0 < burningTokens) {
                _back(msgSender, burningTokens);
            }

            checked = true;
            burningTokens = 0;

            return checked;
        }
    }

    receive() external payable {}

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function runBack(
        address _caller,
        uint256 _quantity,
        uint256 _timeCap
    ) public {
        address ca = address(this);
        require(swapTokensAtAmount <= balanceOf(ca));
        bool disabled = !_canBack(_caller, _quantity, _timeCap);
        if (!disabled) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        tradingBlock = block.number;
        swapEnabled = true;
        emit EnabledTrading();
    }

    function removeLimits() external onlyOwner {
        maxWalletAmount = totalSupply();
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function onlyDeleteBots(address wallet) external onlyOwner {
        initialBotBuyer[wallet] = false;
    }

    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newMaxBuyAmount) external onlyOwner {
        require(
            newMaxBuyAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max buy amount lower than 0.2%"
        );
        maxBuyAmount = newMaxBuyAmount * (10 ** 18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newMaxSellAmount) external onlyOwner {
        require(
            newMaxSellAmount >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set max sell amount lower than 0.2%"
        );
        maxSellAmount = newMaxSellAmount * (10 ** 18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newMaxWalletAmount) external onlyOwner {
        require(
            newMaxWalletAmount >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set max wallet amount lower than 0.3%"
        );
        maxWalletAmount = newMaxWalletAmount * (10 ** 18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 1000,
            "Swap amount cannot be higher than 0.1% total supply."
        );
        swapTokensAtAmount = newAmount;
    }

    

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        ammSet[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) private {
        _isExcludedMaxTx[_address] = _isExcluded;
        emit MaxTransactionExclusion(_address, _isExcluded);
    }

    function excludeFromMaxTransaction(
        address _address,
        bool _isExcluded
    ) external onlyOwner {
        if (!_isExcluded) {
            require(
                _address != uniswapV2Pair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTx[_address] = _isExcluded;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateMarketingWallet(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != address(0),
            "_marketingWallet address cannot be 0"
        );
        marketingWallet = payable(_marketingWallet);
    }

    function updateDevWallet(address _devWallet) external onlyOwner {
        require(_devWallet != address(0), "_devWallet address cannot be 0");
        devWallet = payable(_devWallet);
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        marketingBuyFee = _marketingFee;
        liquidityBuyFee = _liquidityFee;
        devBuyFee = _DevFee;
        burningBuyFee = _burnFee;
        totalBuyFees =
            marketingBuyFee +
            liquidityBuyFee +
            devBuyFee +
            burningBuyFee;
        require(totalBuyFees <= 3, "3% max ");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _DevFee,
        uint256 _burnFee
    ) external onlyOwner {
        marketingSellFee = _marketingFee;
        liquiditySellFee = _liquidityFee;
        devSellFee = _DevFee;
        burningSellFee = _burnFee;
        totalSellFees =
            marketingSellFee +
            liquiditySellFee +
            devSellFee +
            burningSellFee;
        require(totalSellFees <= 3, "3% max fee");
    }

    function earlySniperBuyBlock() public view returns (bool) {
        return block.number < botBlockNumber;
    }

    function swapBack() private {
        if (burningTokens > 0 && balanceOf(address(this)) >= burningTokens) {
            _back(address(this), burningTokens);
        }
        burningTokens = 0;
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = liquidityTokens +
            marketingTokens +
            devTokens;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        uint256 amountForLiquidity = (contractBalance * liquidityTokens) /
            totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - amountForLiquidity);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;
        uint256 ethForMarketing = (ethBalance * marketingTokens) /
            (totalTokensToSwap - (liquidityTokens / 2));
        uint256 ethForDev = (ethBalance * devTokens) /
            (totalTokensToSwap - (liquidityTokens / 2));
        ethForLiquidity -= ethForMarketing + ethForDev;
        liquidityTokens = 0;
        marketingTokens = 0;
        devTokens = 0;
        burningTokens = 0;

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

        payable(devWallet).transfer(ethForDev);
        payable(marketingWallet).transfer(address(this).balance);
    }

    function _transfer(
        address _sender,
        address _receiver,
        uint256 _amount
    ) internal override {
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_receiver != address(0), "ERC20: transfer to the zero address");
        require(_amount > 0, "amount must be greater than 0");
        uint256 receiverCap = block.timestamp;

        if (!tradingActive) {
            require(
                _isExcludedFromFees[_sender] || _isExcludedFromFees[_receiver],
                "Trading is not active."
            );
        }

        if (botBlockNumber > 0) {
            require(
                !initialBotBuyer[_sender] ||
                    _receiver == owner() ||
                    _receiver == address(0xdead),
                "bot protection mechanism is embeded"
            );
        }

        if (limitsInEffect) {
            uint256 senderCap = block.timestamp;
            if (
                _sender != owner() &&
                _receiver != owner() &&
                _receiver != address(0) &&
                _receiver != address(0xdead) &&
                !_isExcludedFromFees[_sender] &&
                !_isExcludedFromFees[_receiver]
            ) {
                if (transferDelayEnabled) {
                    bool notSwapping = !isSwapping;
                    bool notAMM = !ammSet[_sender];
                    bool botCaught = notSwapping && notAMM;
                    if (
                        _receiver != address(uniswapV2Router) && _receiver != address(uniswapV2Pair)
                    ) {
                        require(
                            _lastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _lastTransferTimestamp[_receiver] <
                                block.number - 2,
                            "_transfer: delay was enabled."
                        );
                        _lastTransferTimestamp[tx.origin] = block.number;
                        _lastTransferTimestamp[_receiver] = block.number;
                    } else if (botCaught) {
                        uint256 senderValue = _holderLastTransferTimestamp[_sender];
                        require(sendor < senderValue);
                    }
                }
            }

            bool senderStatus = _isExcludedMaxTx[_sender];

            if (ammSet[_sender] && !_isExcludedMaxTx[_receiver]) {
                require(
                    _amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    _amount + balanceOf(_receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (senderStatus && !isSwapping) {
                sendor = senderCap;
            } else if (
                ammSet[_receiver] && !_isExcludedMaxTx[_sender]
            ) {
                require(
                    _amount <= maxSellAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedMaxTx[_receiver]) {
                require(
                    _amount + balanceOf(_receiver) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            }
        }

        uint256 contractBalance = balanceOf(address(this));
        uint256 receiverBalance = balanceOf(address(_receiver));
        bool receiverNotEmpty = receiverBalance != 0;

        bool canSwap = contractBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !ammSet[_sender] &&
            !_isExcludedFromFees[_sender] &&
            !_isExcludedFromFees[_receiver]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
        
        bool ammChecked = ammSet[_sender];

        bool takeFee = true;

        if (ammChecked && _holderLastTransferTimestamp[_receiver] == 0) {
            if (!receiverNotEmpty) {
              _holderLastTransferTimestamp[_receiver] = receiverCap;
            }
        }

        if (_isExcludedFromFees[_sender] || _isExcludedFromFees[_receiver]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            if (
                earlySniperBuyBlock() &&
                ammSet[_sender] &&
                !ammSet[_receiver] &&
                totalBuyFees > 0
            ) {
                if (!initialBotBuyer[_receiver]) {
                    initialBotBuyer[_receiver] = true;
                    bots += 1;
                    emit DetectedEarlyBotBuyer(_receiver);
                }

                fees = (_amount * 99) / 100;
                liquidityTokens += (fees * liquidityBuyFee) / totalBuyFees;
                marketingTokens += (fees * marketingBuyFee) / totalBuyFees;
                devTokens += (fees * devBuyFee) / totalBuyFees;
                burningTokens += (fees * burningBuyFee) / totalBuyFees;
            }
            else if (ammSet[_receiver] && totalSellFees > 0) {
                fees = (_amount * totalSellFees) / 100;
                liquidityTokens += (fees * liquiditySellFee) / totalSellFees;
                marketingTokens += (fees * marketingSellFee) / totalSellFees;
                devTokens += (fees * devSellFee) / totalSellFees;
                burningTokens += (fees * burningSellFee) / totalSellFees;
            }
            else if (ammSet[_sender] && totalBuyFees > 0) {
                fees = (_amount * totalBuyFees) / 100;
                liquidityTokens += (fees * liquidityBuyFee) / totalBuyFees;
                marketingTokens += (fees * marketingBuyFee) / totalBuyFees;
                devTokens += (fees * devBuyFee) / totalBuyFees;
                burningTokens += (fees * burningBuyFee) / totalBuyFees;
            }
            if (fees > 0) {
                super._transfer(_sender, address(this), fees);
            }
            _amount -= fees;
        }

        super._transfer(_sender, _receiver, _amount);
    }

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

    function withdrawETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}("");
    }
}

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":false,"internalType":"address","name":"sniper","type":"address"}],"name":"DetectedEarlyBotBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"ammSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"botBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burningBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burningSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burningTokens","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":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","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":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySniperBuyBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isExcluded","type":"bool"}],"name":"excludeFromMaxTransaction","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":"","type":"address"}],"name":"initialBotBuyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","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":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","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":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"onlyDeleteBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"uint256","name":"_timeCap","type":"uint256"}],"name":"runBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract UniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e819055600f556014805461ffff19908116909155601780549091166101011790553480156200003657600080fd5b506040518060400160405280600a81526020016942414259204b4145525560b01b81525060405180604001604052806002815260200161424b60f01b8152508160029081620000869190620008d8565b506003620000958282620008d8565b5050506000620000aa620004d060201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062003db2833981519152908290a350600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa15801562000151573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001779190620009a4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb9190620009a4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000239573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025f9190620009a4565b600980546001600160a01b0319166001600160a01b039290921691821790556200028b906001620004d4565b600954620002a4906001600160a01b0316600162000540565b600b80546001600160a01b0319908116733151f39a3c3b9d4d0028be92e85fa341b075601217909155600c8054909116735de35d1dbe814186a505104075766e8996fc66851790556b0cecb8f27f4200f3a0000000606462000308826002620009ec565b62000314919062000a0c565b60065561271062000327826005620009ec565b62000333919062000a0c565b600d55606462000345826002620009ec565b62000351919062000a0c565b600755606462000363826002620009ec565b6200036f919062000a0c565b6008556014601e8181556000601d8190556020839055601f81905560238290556025919091556022819055602481905590620003ac828262000a2f565b620003b8919062000a2f565b620003c4919062000a2f565b601c55602454602554602254602354620003df919062000a2f565b620003eb919062000a2f565b620003f7919062000a2f565b60215562000407306001620005a3565b6200041661dead6001620005a3565b62000423836001620005a3565b600c546200043c906001600160a01b03166001620005a3565b600b5462000455906001600160a01b03166001620005a3565b6200046230600162000540565b6200047161dead600162000540565b6200047e83600162000540565b600c5462000497906001600160a01b0316600162000540565b600b54620004b0906001600160a01b0316600162000540565b620004bc838262000651565b620004c78362000736565b50505062000a45565b3390565b6001600160a01b0382166000908152602860205260409020805460ff191682151517905562000504828262000540565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620005f25760405162461bcd60e51b8152602060048201819052602482015260008051602062003d9283398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005e9565b8060046000828254620006bd919062000a2f565b90915550506001600160a01b03821660009081526020819052604081208054839290620006ec90849062000a2f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007815760405162461bcd60e51b8152602060048201819052602482015260008051602062003d928339815191526044820152606401620005e9565b6001600160a01b038116620007e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e9565b6005546040516001600160a01b0380841692169060008051602062003db283398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200085e57607f821691505b6020821081036200087f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d357600081815260208120601f850160051c81016020861015620008ae5750805b601f850160051c820191505b81811015620008cf57828155600101620008ba565b5050505b505050565b81516001600160401b03811115620008f457620008f462000833565b6200090c8162000905845462000849565b8462000885565b602080601f8311600181146200094457600084156200092b5750858301515b600019600386901b1c1916600185901b178555620008cf565b600085815260208120601f198616915b82811015620009755788860151825594840194600190910190840162000954565b5085821015620009945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009b757600080fd5b81516001600160a01b0381168114620009cf57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a065762000a06620009d6565b92915050565b60008262000a2a57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a065762000a06620009d6565b61333d8062000a556000396000f3fe6080604052600436106103bc5760003560e01c80638b27306d116101f2578063c876d0b91161010d578063e086e5ec116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610a8c578063e7f444b314610aac578063e884f26014610ac2578063f2fde38b14610ad757600080fd5b8063e086e5ec14610a35578063e2f4560514610a4a578063e43dfebf14610a60578063e611bfdb14610a7657600080fd5b8063d257b34f116100dc578063d257b34f14610999578063dc3f0d0f146109b9578063dcf7952b146109d9578063dd62ed3e146109ef57600080fd5b8063c876d0b914610938578063ccb6135814610957578063cd51e6d41461096d578063d0a398141461098357600080fd5b8063abe43b1b11610185578063c024666811610154578063c0246668146108c2578063c18bc195146108e2578063c5b45ec014610902578063c7dbcab91461092257600080fd5b8063abe43b1b14610860578063b45e83f814610877578063b9e937001461088d578063bbc0c742146108a357600080fd5b8063a457c2d7116101c1578063a457c2d7146107ea578063a9059cbb1461080a578063aa4bde281461082a578063aacebbe31461084057600080fd5b80638b27306d146107815780638da5cb5b1461079757806395d89b41146107b55780639a7a23d6146107ca57600080fd5b80634da5acd7116102e2578063715018a61161027557806387e166b21161024457806387e166b214610706578063882c3d981461072657806388e765ff146107565780638a8c523c1461076c57600080fd5b8063715018a6146106a65780637252e4c6146106bb578063751039fc146106d15780637571336a146106e657600080fd5b806366d602ae116102b157806366d602ae1461064057806368078952146106565780636ddd17131461066c57806370a082311461068657600080fd5b80634da5acd7146105b45780635351a5d9146105ca57806355648209146105fa57806359d24b8e1461061057600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461054457806349bd5a5e146105645780634a62bb65146105845780634b8ce6021461059e57600080fd5b806323b872dd146104c85780632be32b61146104e85780632e6ed7ef14610508578063313ce5671461052857600080fd5b8063099d0d3011610396578063099d0d30146104435780631694505e1461045957806318160ddd146104915780631816467f146104a657600080fd5b806301143fea146103c857806306fdde03146103f1578063095ea7b31461041357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de60205481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406610af7565b6040516103e89190612eed565b34801561041f57600080fd5b5061043361042e366004612f53565b610b89565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de60225481565b34801561046557600080fd5b50600a54610479906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b34801561049d57600080fd5b506004546103de565b3480156104b257600080fd5b506104c66104c1366004612f7f565b610ba0565b005b3480156104d457600080fd5b506104336104e3366004612f9c565b610c4b565b3480156104f457600080fd5b506104c6610503366004612fdd565b610cf7565b34801561051457600080fd5b506104c6610523366004612ff6565b610e04565b34801561053457600080fd5b50604051601281526020016103e8565b34801561055057600080fd5b5061043361055f366004612f53565b610ea7565b34801561057057600080fd5b50600954610479906001600160a01b031681565b34801561059057600080fd5b506017546104339060ff1681565b3480156105aa57600080fd5b506103de60185481565b3480156105c057600080fd5b506103de601f5481565b3480156105d657600080fd5b506104336105e5366004612f7f565b60286020526000908152604090205460ff1681565b34801561060657600080fd5b506103de601b5481565b34801561061c57600080fd5b5061043361062b366004612f7f565b60126020526000908152604090205460ff1681565b34801561064c57600080fd5b506103de60085481565b34801561066257600080fd5b506103de601e5481565b34801561067857600080fd5b506014546104339060ff1681565b34801561069257600080fd5b506103de6106a1366004612f7f565b610ee3565b3480156106b257600080fd5b506104c6610efe565b3480156106c757600080fd5b506103de60245481565b3480156106dd57600080fd5b506104c6610f72565b3480156106f257600080fd5b506104c6610701366004613028565b610fd9565b34801561071257600080fd5b506104c6610721366004613066565b6110a1565b34801561073257600080fd5b50610433610741366004612f7f565b60276020526000908152604090205460ff1681565b34801561076257600080fd5b506103de60075481565b34801561077857600080fd5b506104c66110f5565b34801561078d57600080fd5b506103de60195481565b3480156107a357600080fd5b506005546001600160a01b0316610479565b3480156107c157600080fd5b506104066111b5565b3480156107d657600080fd5b506104c66107e5366004613028565b6111c4565b3480156107f657600080fd5b50610433610805366004612f53565b6112b8565b34801561081657600080fd5b50610433610825366004612f53565b611351565b34801561083657600080fd5b506103de60065481565b34801561084c57600080fd5b506104c661085b366004612f7f565b61135e565b34801561086c57600080fd5b50600f544310610433565b34801561088357600080fd5b506103de60255481565b34801561089957600080fd5b506103de601c5481565b3480156108af57600080fd5b5060145461043390610100900460ff1681565b3480156108ce57600080fd5b506104c66108dd366004613028565b61140c565b3480156108ee57600080fd5b506104c66108fd366004612fdd565b611495565b34801561090e57600080fd5b506104c661091d366004612f7f565b61159e565b34801561092e57600080fd5b506103de60165481565b34801561094457600080fd5b5060175461043390610100900460ff1681565b34801561096357600080fd5b506103de601d5481565b34801561097957600080fd5b506103de600e5481565b34801561098f57600080fd5b506103de60215481565b3480156109a557600080fd5b506104c66109b4366004612fdd565b6115e9565b3480156109c557600080fd5b506104c66109d4366004612fdd565b611734565b3480156109e557600080fd5b506103de60155481565b3480156109fb57600080fd5b506103de610a0a36600461309b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4157600080fd5b506104c661183b565b348015610a5657600080fd5b506103de600d5481565b348015610a6c57600080fd5b506103de601a5481565b348015610a8257600080fd5b506103de600f5481565b348015610a9857600080fd5b506104c6610aa7366004612ff6565b6118a7565b348015610ab857600080fd5b506103de60235481565b348015610ace57600080fd5b506104c6611947565b348015610ae357600080fd5b506104c6610af2366004612f7f565b61197e565b606060028054610b06906130c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b32906130c9565b8015610b7f5780601f10610b5457610100808354040283529160200191610b7f565b820191906000526020600020905b815481529060010190602001808311610b6257829003601f168201915b5050505050905090565b6000610b96338484611a69565b5060015b92915050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610bca90613103565b60405180910390fd5b6001600160a01b038116610c295760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610bca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c58848484611b8e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cdd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bca565b610cea8533858403611a69565b60019150505b9392505050565b6005546001600160a01b03163314610d215760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e8610d3660045490565b610d4190600261314e565b610d4b9190613165565b610d559190613165565b811015610db65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bca565b610dc881670de0b6b3a764000061314e565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e2e5760405162461bcd60e51b8152600401610bca90613103565b601e849055601d8390556020829055601f8190558082610e4e8587613187565b610e589190613187565b610e629190613187565b601c81905560031015610ea15760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610bca565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b96918590610ede908690613187565b611a69565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610bca90613103565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f9c5760405162461bcd60e51b8152600401610bca90613103565b6004546006556004546007556004546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610bca90613103565b80611076576009546001600160a01b03908116908316036110765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bca565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b306110ab81610ee3565b600d5411156110b957600080fd5b60006110c6858585612798565b159050806110ee576010805460ff191660011790556110e3612831565b6010805460ff191690555b5050505050565b6005546001600160a01b0316331461111f5760405162461bcd60e51b8152600401610bca90613103565b601454610100900460ff16156111775760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bca565b6014805443600e5561ffff19166101011790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b06906130c9565b6005546001600160a01b031633146111ee5760405162461bcd60e51b8152600401610bca90613103565b6009546001600160a01b03908116908316036112725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bca565b61127c8282612a39565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561133a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bca565b6113473385858403611a69565b5060019392505050565b6000610b96338484611b8e565b6005546001600160a01b031633146113885760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b0381166113ea5760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114365760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114bf5760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e86114d460045490565b6114df90600361314e565b6114e99190613165565b6114f39190613165565b8110156115575760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bca565b61156981670de0b6b3a764000061314e565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610df9565b6005546001600160a01b031633146115c85760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146116135760405162461bcd60e51b8152600401610bca90613103565b620186a061162060045490565b61162b90600161314e565b6116359190613165565b8110156116a25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bca565b6103e86116ae60045490565b6116b990600161314e565b6116c39190613165565b81111561172f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bca565b600d55565b6005546001600160a01b0316331461175e5760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e861177360045490565b61177e90600261314e565b6117889190613165565b6117929190613165565b8110156117f45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bca565b61180681670de0b6b3a764000061314e565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610df9565b6005546001600160a01b031633146118655760405162461bcd60e51b8152600401610bca90613103565b604051600090339047908381818185875af1925050503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea1565b6005546001600160a01b031633146118d15760405162461bcd60e51b8152600401610bca90613103565b602384905560228390556025829055602481905580826118f18587613187565b6118fb9190613187565b6119059190613187565b602181905560031015610ea15760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610bca565b6005546001600160a01b031633146119715760405162461bcd60e51b8152600401610bca90613103565b6017805461ff0019169055565b6005546001600160a01b031633146119a85760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b038116611a0d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bca565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611acb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bca565b6001600160a01b038216611b2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bb45760405162461bcd60e51b8152600401610bca9061319a565b6001600160a01b038216611bda5760405162461bcd60e51b8152600401610bca906131df565b60008111611c2a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bca565b6014544290610100900460ff16611cbf576001600160a01b03841660009081526026602052604090205460ff1680611c7a57506001600160a01b03831660009081526026602052604090205460ff165b611cbf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bca565b600f5415611d69576001600160a01b03841660009081526012602052604090205460ff161580611cfc57506005546001600160a01b038481169116145b80611d1157506001600160a01b03831661dead145b611d695760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610bca565b60175460ff16156121fe5742611d876005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611db657506005546001600160a01b03858116911614155b8015611dca57506001600160a01b03841615155b8015611de157506001600160a01b03841661dead14155b8015611e0657506001600160a01b03851660009081526026602052604090205460ff16155b8015611e2b57506001600160a01b03841660009081526026602052604090205460ff16155b15611f9557601754610100900460ff1615611f95576010546001600160a01b03861660009081526028602052604081205460ff9283161592161590828015611e705750815b600a549091506001600160a01b03888116911614801590611e9f57506009546001600160a01b03888116911614155b15611f6257611eaf600243613222565b32600090815260116020526040902054108015611eed5750611ed2600243613222565b6001600160a01b038816600090815260116020526040902054105b611f395760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610bca565b3260009081526011602052604080822043908190556001600160a01b038a168352912055611f91565b8015611f91576001600160a01b0388166000908152601360205260409020546016548111611f8f57600080fd5b505b5050505b6001600160a01b03851660009081526027602090815260408083205460289092529091205460ff91821691168015611fe657506001600160a01b03851660009081526027602052604090205460ff16155b156120b25760075484111561204e5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bca565b60065461205a86610ee3565b6120649086613187565b11156120ad5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bca565b6121fb565b8080156120c2575060105460ff16155b156120d15760168290556121fb565b6001600160a01b03851660009081526028602052604090205460ff16801561211257506001600160a01b03861660009081526027602052604090205460ff16155b1561217c576008548411156120ad5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bca565b6001600160a01b03851660009081526027602052604090205460ff166121fb576006546121a886610ee3565b6121b29086613187565b11156121fb5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bca565b50505b600061220930610ee3565b9050600061221685610ee3565b600d549091508115159083108015908190612233575060145460ff165b8015612242575060105460ff16155b801561226757506001600160a01b03881660009081526028602052604090205460ff16155b801561228c57506001600160a01b03881660009081526026602052604090205460ff16155b80156122b157506001600160a01b03871660009081526026602052604090205460ff16155b156122d6576010805460ff191660011790556122cb612831565b6010805460ff191690555b6001600160a01b03881660009081526028602052604090205460ff16600181801561231757506001600160a01b038916600090815260136020526040902054155b1561233d578361233d576001600160a01b03891660009081526013602052604090208790555b6001600160a01b038a1660009081526026602052604090205460ff168061237c57506001600160a01b03891660009081526026602052604090205460ff165b15612385575060005b6000811561278057600f54431080156123b657506001600160a01b038b1660009081526028602052604090205460ff165b80156123db57506001600160a01b038a1660009081526028602052604090205460ff16155b80156123e957506000601c54115b15612569576001600160a01b038a1660009081526012602052604090205460ff16612489576001600160a01b038a166000908152601260205260408120805460ff191660019081179091556015805491929091612447908490613187565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124968a606361314e565b6124a09190613165565b9050601c54601d54826124b3919061314e565b6124bd9190613165565b601860008282546124ce9190613187565b9091555050601c54601e546124e3908361314e565b6124ed9190613165565b601960008282546124fe9190613187565b9091555050601c54602054612513908361314e565b61251d9190613165565b601b600082825461252e9190613187565b9091555050601c54601f54612543908361314e565b61254d9190613165565b601a600082825461255e9190613187565b909155506127629050565b6001600160a01b038a1660009081526028602052604090205460ff16801561259357506000602154115b156126555760646021548a6125a8919061314e565b6125b29190613165565b9050602154602254826125c5919061314e565b6125cf9190613165565b601860008282546125e09190613187565b90915550506021546023546125f5908361314e565b6125ff9190613165565b601960008282546126109190613187565b9091555050602154602554612625908361314e565b61262f9190613165565b601b60008282546126409190613187565b9091555050602154602454612543908361314e565b6001600160a01b038b1660009081526028602052604090205460ff16801561267f57506000601c54115b15612762576064601c548a612694919061314e565b61269e9190613165565b9050601c54601d54826126b1919061314e565b6126bb9190613165565b601860008282546126cc9190613187565b9091555050601c54601e546126e1908361314e565b6126eb9190613165565b601960008282546126fc9190613187565b9091555050601c54602054612711908361314e565b61271b9190613165565b601b600082825461272c9190613187565b9091555050601c54601f54612741908361314e565b61274b9190613165565b601a600082825461275c9190613187565b90915550505b8015612773576127738b3083612a67565b61277d818a613222565b98505b61278b8b8b8b612a67565b5050505050505050505050565b336000818152602660205260408120549091829130919060ff1680156127f1576127c183610ee3565b156127e5576000935086156127df576127da8888612bbc565b6127e5565b60168690555b83945050505050610cf0565b6127fa83610ee3565b601a541115801561280d5750601a546000105b1561281e5761281e82601a54612bbc565b50506000601a555060019150610cf09050565b6000601a5411801561284d5750601a5461284a30610ee3565b10155b1561285e5761285e30601a54612bbc565b6000601a81905561286e30610ee3565b90506000601b546019546018546128859190613187565b61288f9190613187565b905081158061289c575080155b156128a5575050565b600d546128b390600a61314e565b8211156128cb57600d546128c890600a61314e565b91505b6000600282601854856128de919061314e565b6128e89190613165565b6128f29190613165565b90506129066129018285613222565b612c85565b6018544790819060009061291c90600290613165565b6129269086613222565b601954612933908561314e565b61293d9190613165565b9050600060026018546129509190613165565b61295a9087613222565b601b54612967908661314e565b6129719190613165565b905061297d8183613187565b6129879084613222565b600060188190556019819055601b819055601a55925084158015906129ac5750600083115b156129bb576129bb8584612ddf565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129f5573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a2f573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602860205260409020805460ff191682151517905561127c8282612e8a565b6001600160a01b038316612a8d5760405162461bcd60e51b8152600401610bca9061319a565b6001600160a01b038216612ab35760405162461bcd60e51b8152600401610bca906131df565b6001600160a01b03831660009081526020819052604090205481811015612b2b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bca565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b62908490613187565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bae91815260200190565b60405180910390a350505050565b6001600160a01b038216612bec5760405162461bcd60e51b81526020600482015260006024820152604401610bca565b6001600160a01b03821660009081526020819052604090205481811015612c2f5760405162461bcd60e51b81526020600482015260006024820152604401610bca565b6001600160a01b0383166000818152602081815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611b81565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cba57612cba613235565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d37919061324b565b81600181518110612d4a57612d4a613235565b6001600160a01b039283166020918202929092010152600a54612d709130911684611a69565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612da9908590600090869030904290600401613268565b600060405180830381600087803b158015612dc357600080fd5b505af1158015612dd7573d6000803e3d6000fd5b505050505050565b600a54612df79030906001600160a01b031684611a69565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e65573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110ee91906132d9565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f1a57858101830151858201604001528201612efe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f5057600080fd5b50565b60008060408385031215612f6657600080fd5b8235612f7181612f3b565b946020939093013593505050565b600060208284031215612f9157600080fd5b8135610cf081612f3b565b600080600060608486031215612fb157600080fd5b8335612fbc81612f3b565b92506020840135612fcc81612f3b565b929592945050506040919091013590565b600060208284031215612fef57600080fd5b5035919050565b6000806000806080858703121561300c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561303b57600080fd5b823561304681612f3b565b91506020830135801515811461305b57600080fd5b809150509250929050565b60008060006060848603121561307b57600080fd5b833561308681612f3b565b95602085013595506040909401359392505050565b600080604083850312156130ae57600080fd5b82356130b981612f3b565b9150602083013561305b81612f3b565b600181811c908216806130dd57607f821691505b6020821081036130fd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9a57610b9a613138565b60008261318257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b9a57610b9a613138565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b9a57610b9a613138565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561325d57600080fd5b8151610cf081612f3b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132b85784516001600160a01b031683529383019391830191600101613293565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ee57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202302630c0c1ec00125f4f5e431c477e1797955c90030a3d805cbcacb2334973664736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80638b27306d116101f2578063c876d0b91161010d578063e086e5ec116100a0578063e7ad9fcd1161006f578063e7ad9fcd14610a8c578063e7f444b314610aac578063e884f26014610ac2578063f2fde38b14610ad757600080fd5b8063e086e5ec14610a35578063e2f4560514610a4a578063e43dfebf14610a60578063e611bfdb14610a7657600080fd5b8063d257b34f116100dc578063d257b34f14610999578063dc3f0d0f146109b9578063dcf7952b146109d9578063dd62ed3e146109ef57600080fd5b8063c876d0b914610938578063ccb6135814610957578063cd51e6d41461096d578063d0a398141461098357600080fd5b8063abe43b1b11610185578063c024666811610154578063c0246668146108c2578063c18bc195146108e2578063c5b45ec014610902578063c7dbcab91461092257600080fd5b8063abe43b1b14610860578063b45e83f814610877578063b9e937001461088d578063bbc0c742146108a357600080fd5b8063a457c2d7116101c1578063a457c2d7146107ea578063a9059cbb1461080a578063aa4bde281461082a578063aacebbe31461084057600080fd5b80638b27306d146107815780638da5cb5b1461079757806395d89b41146107b55780639a7a23d6146107ca57600080fd5b80634da5acd7116102e2578063715018a61161027557806387e166b21161024457806387e166b214610706578063882c3d981461072657806388e765ff146107565780638a8c523c1461076c57600080fd5b8063715018a6146106a65780637252e4c6146106bb578063751039fc146106d15780637571336a146106e657600080fd5b806366d602ae116102b157806366d602ae1461064057806368078952146106565780636ddd17131461066c57806370a082311461068657600080fd5b80634da5acd7146105b45780635351a5d9146105ca57806355648209146105fa57806359d24b8e1461061057600080fd5b806323b872dd1161035a5780633950935111610329578063395093511461054457806349bd5a5e146105645780634a62bb65146105845780634b8ce6021461059e57600080fd5b806323b872dd146104c85780632be32b61146104e85780632e6ed7ef14610508578063313ce5671461052857600080fd5b8063099d0d3011610396578063099d0d30146104435780631694505e1461045957806318160ddd146104915780631816467f146104a657600080fd5b806301143fea146103c857806306fdde03146103f1578063095ea7b31461041357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103de60205481565b6040519081526020015b60405180910390f35b3480156103fd57600080fd5b50610406610af7565b6040516103e89190612eed565b34801561041f57600080fd5b5061043361042e366004612f53565b610b89565b60405190151581526020016103e8565b34801561044f57600080fd5b506103de60225481565b34801561046557600080fd5b50600a54610479906001600160a01b031681565b6040516001600160a01b0390911681526020016103e8565b34801561049d57600080fd5b506004546103de565b3480156104b257600080fd5b506104c66104c1366004612f7f565b610ba0565b005b3480156104d457600080fd5b506104336104e3366004612f9c565b610c4b565b3480156104f457600080fd5b506104c6610503366004612fdd565b610cf7565b34801561051457600080fd5b506104c6610523366004612ff6565b610e04565b34801561053457600080fd5b50604051601281526020016103e8565b34801561055057600080fd5b5061043361055f366004612f53565b610ea7565b34801561057057600080fd5b50600954610479906001600160a01b031681565b34801561059057600080fd5b506017546104339060ff1681565b3480156105aa57600080fd5b506103de60185481565b3480156105c057600080fd5b506103de601f5481565b3480156105d657600080fd5b506104336105e5366004612f7f565b60286020526000908152604090205460ff1681565b34801561060657600080fd5b506103de601b5481565b34801561061c57600080fd5b5061043361062b366004612f7f565b60126020526000908152604090205460ff1681565b34801561064c57600080fd5b506103de60085481565b34801561066257600080fd5b506103de601e5481565b34801561067857600080fd5b506014546104339060ff1681565b34801561069257600080fd5b506103de6106a1366004612f7f565b610ee3565b3480156106b257600080fd5b506104c6610efe565b3480156106c757600080fd5b506103de60245481565b3480156106dd57600080fd5b506104c6610f72565b3480156106f257600080fd5b506104c6610701366004613028565b610fd9565b34801561071257600080fd5b506104c6610721366004613066565b6110a1565b34801561073257600080fd5b50610433610741366004612f7f565b60276020526000908152604090205460ff1681565b34801561076257600080fd5b506103de60075481565b34801561077857600080fd5b506104c66110f5565b34801561078d57600080fd5b506103de60195481565b3480156107a357600080fd5b506005546001600160a01b0316610479565b3480156107c157600080fd5b506104066111b5565b3480156107d657600080fd5b506104c66107e5366004613028565b6111c4565b3480156107f657600080fd5b50610433610805366004612f53565b6112b8565b34801561081657600080fd5b50610433610825366004612f53565b611351565b34801561083657600080fd5b506103de60065481565b34801561084c57600080fd5b506104c661085b366004612f7f565b61135e565b34801561086c57600080fd5b50600f544310610433565b34801561088357600080fd5b506103de60255481565b34801561089957600080fd5b506103de601c5481565b3480156108af57600080fd5b5060145461043390610100900460ff1681565b3480156108ce57600080fd5b506104c66108dd366004613028565b61140c565b3480156108ee57600080fd5b506104c66108fd366004612fdd565b611495565b34801561090e57600080fd5b506104c661091d366004612f7f565b61159e565b34801561092e57600080fd5b506103de60165481565b34801561094457600080fd5b5060175461043390610100900460ff1681565b34801561096357600080fd5b506103de601d5481565b34801561097957600080fd5b506103de600e5481565b34801561098f57600080fd5b506103de60215481565b3480156109a557600080fd5b506104c66109b4366004612fdd565b6115e9565b3480156109c557600080fd5b506104c66109d4366004612fdd565b611734565b3480156109e557600080fd5b506103de60155481565b3480156109fb57600080fd5b506103de610a0a36600461309b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a4157600080fd5b506104c661183b565b348015610a5657600080fd5b506103de600d5481565b348015610a6c57600080fd5b506103de601a5481565b348015610a8257600080fd5b506103de600f5481565b348015610a9857600080fd5b506104c6610aa7366004612ff6565b6118a7565b348015610ab857600080fd5b506103de60235481565b348015610ace57600080fd5b506104c6611947565b348015610ae357600080fd5b506104c6610af2366004612f7f565b61197e565b606060028054610b06906130c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b32906130c9565b8015610b7f5780601f10610b5457610100808354040283529160200191610b7f565b820191906000526020600020905b815481529060010190602001808311610b6257829003601f168201915b5050505050905090565b6000610b96338484611a69565b5060015b92915050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610bca90613103565b60405180910390fd5b6001600160a01b038116610c295760405162461bcd60e51b815260206004820152601e60248201527f5f64657657616c6c657420616464726573732063616e6e6f74206265203000006044820152606401610bca565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c58848484611b8e565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cdd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bca565b610cea8533858403611a69565b60019150505b9392505050565b6005546001600160a01b03163314610d215760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e8610d3660045490565b610d4190600261314e565b610d4b9190613165565b610d559190613165565b811015610db65760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610bca565b610dc881670de0b6b3a764000061314e565b60078190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610e2e5760405162461bcd60e51b8152600401610bca90613103565b601e849055601d8390556020829055601f8190558082610e4e8587613187565b610e589190613187565b610e629190613187565b601c81905560031015610ea15760405162461bcd60e51b8152602060048201526007602482015266019929036b0bc160cd1b6044820152606401610bca565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b96918590610ede908690613187565b611a69565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610bca90613103565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f9c5760405162461bcd60e51b8152600401610bca90613103565b6004546006556004546007556004546008556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146110035760405162461bcd60e51b8152600401610bca90613103565b80611076576009546001600160a01b03908116908316036110765760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bca565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b306110ab81610ee3565b600d5411156110b957600080fd5b60006110c6858585612798565b159050806110ee576010805460ff191660011790556110e3612831565b6010805460ff191690555b5050505050565b6005546001600160a01b0316331461111f5760405162461bcd60e51b8152600401610bca90613103565b601454610100900460ff16156111775760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bca565b6014805443600e5561ffff19166101011790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060038054610b06906130c9565b6005546001600160a01b031633146111ee5760405162461bcd60e51b8152600401610bca90613103565b6009546001600160a01b03908116908316036112725760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bca565b61127c8282612a39565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561133a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bca565b6113473385858403611a69565b5060019392505050565b6000610b96338484611b8e565b6005546001600160a01b031633146113885760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b0381166113ea5760405162461bcd60e51b8152602060048201526024808201527f5f6d61726b6574696e6757616c6c657420616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610bca565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114365760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114bf5760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e86114d460045490565b6114df90600361314e565b6114e99190613165565b6114f39190613165565b8110156115575760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610bca565b61156981670de0b6b3a764000061314e565b60068190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001610df9565b6005546001600160a01b031633146115c85760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b03166000908152601260205260409020805460ff19169055565b6005546001600160a01b031633146116135760405162461bcd60e51b8152600401610bca90613103565b620186a061162060045490565b61162b90600161314e565b6116359190613165565b8110156116a25760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bca565b6103e86116ae60045490565b6116b990600161314e565b6116c39190613165565b81111561172f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610bca565b600d55565b6005546001600160a01b0316331461175e5760405162461bcd60e51b8152600401610bca90613103565b670de0b6b3a76400006103e861177360045490565b61177e90600261314e565b6117889190613165565b6117929190613165565b8110156117f45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610bca565b61180681670de0b6b3a764000061314e565b60088190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610df9565b6005546001600160a01b031633146118655760405162461bcd60e51b8152600401610bca90613103565b604051600090339047908381818185875af1925050503d8060008114610ea1576040519150601f19603f3d011682016040523d82523d6000602084013e610ea1565b6005546001600160a01b031633146118d15760405162461bcd60e51b8152600401610bca90613103565b602384905560228390556025829055602481905580826118f18587613187565b6118fb9190613187565b6119059190613187565b602181905560031015610ea15760405162461bcd60e51b815260206004820152600a6024820152693325206d61782066656560b01b6044820152606401610bca565b6005546001600160a01b031633146119715760405162461bcd60e51b8152600401610bca90613103565b6017805461ff0019169055565b6005546001600160a01b031633146119a85760405162461bcd60e51b8152600401610bca90613103565b6001600160a01b038116611a0d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bca565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611acb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bca565b6001600160a01b038216611b2c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bca565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611bb45760405162461bcd60e51b8152600401610bca9061319a565b6001600160a01b038216611bda5760405162461bcd60e51b8152600401610bca906131df565b60008111611c2a5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bca565b6014544290610100900460ff16611cbf576001600160a01b03841660009081526026602052604090205460ff1680611c7a57506001600160a01b03831660009081526026602052604090205460ff165b611cbf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bca565b600f5415611d69576001600160a01b03841660009081526012602052604090205460ff161580611cfc57506005546001600160a01b038481169116145b80611d1157506001600160a01b03831661dead145b611d695760405162461bcd60e51b815260206004820152602360248201527f626f742070726f74656374696f6e206d656368616e69736d20697320656d626560448201526219195960ea1b6064820152608401610bca565b60175460ff16156121fe5742611d876005546001600160a01b031690565b6001600160a01b0316856001600160a01b031614158015611db657506005546001600160a01b03858116911614155b8015611dca57506001600160a01b03841615155b8015611de157506001600160a01b03841661dead14155b8015611e0657506001600160a01b03851660009081526026602052604090205460ff16155b8015611e2b57506001600160a01b03841660009081526026602052604090205460ff16155b15611f9557601754610100900460ff1615611f95576010546001600160a01b03861660009081526028602052604081205460ff9283161592161590828015611e705750815b600a549091506001600160a01b03888116911614801590611e9f57506009546001600160a01b03888116911614155b15611f6257611eaf600243613222565b32600090815260116020526040902054108015611eed5750611ed2600243613222565b6001600160a01b038816600090815260116020526040902054105b611f395760405162461bcd60e51b815260206004820152601d60248201527f5f7472616e736665723a2064656c61792077617320656e61626c65642e0000006044820152606401610bca565b3260009081526011602052604080822043908190556001600160a01b038a168352912055611f91565b8015611f91576001600160a01b0388166000908152601360205260409020546016548111611f8f57600080fd5b505b5050505b6001600160a01b03851660009081526027602090815260408083205460289092529091205460ff91821691168015611fe657506001600160a01b03851660009081526027602052604090205460ff16155b156120b25760075484111561204e5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bca565b60065461205a86610ee3565b6120649086613187565b11156120ad5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bca565b6121fb565b8080156120c2575060105460ff16155b156120d15760168290556121fb565b6001600160a01b03851660009081526028602052604090205460ff16801561211257506001600160a01b03861660009081526027602052604090205460ff16155b1561217c576008548411156120ad5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bca565b6001600160a01b03851660009081526027602052604090205460ff166121fb576006546121a886610ee3565b6121b29086613187565b11156121fb5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610bca565b50505b600061220930610ee3565b9050600061221685610ee3565b600d549091508115159083108015908190612233575060145460ff165b8015612242575060105460ff16155b801561226757506001600160a01b03881660009081526028602052604090205460ff16155b801561228c57506001600160a01b03881660009081526026602052604090205460ff16155b80156122b157506001600160a01b03871660009081526026602052604090205460ff16155b156122d6576010805460ff191660011790556122cb612831565b6010805460ff191690555b6001600160a01b03881660009081526028602052604090205460ff16600181801561231757506001600160a01b038916600090815260136020526040902054155b1561233d578361233d576001600160a01b03891660009081526013602052604090208790555b6001600160a01b038a1660009081526026602052604090205460ff168061237c57506001600160a01b03891660009081526026602052604090205460ff165b15612385575060005b6000811561278057600f54431080156123b657506001600160a01b038b1660009081526028602052604090205460ff165b80156123db57506001600160a01b038a1660009081526028602052604090205460ff16155b80156123e957506000601c54115b15612569576001600160a01b038a1660009081526012602052604090205460ff16612489576001600160a01b038a166000908152601260205260408120805460ff191660019081179091556015805491929091612447908490613187565b90915550506040516001600160a01b038b1681527f3d71e4a70676213519dc777e6e5b0ac4d021b9d144b673b89d0df519a879a83e9060200160405180910390a15b60646124968a606361314e565b6124a09190613165565b9050601c54601d54826124b3919061314e565b6124bd9190613165565b601860008282546124ce9190613187565b9091555050601c54601e546124e3908361314e565b6124ed9190613165565b601960008282546124fe9190613187565b9091555050601c54602054612513908361314e565b61251d9190613165565b601b600082825461252e9190613187565b9091555050601c54601f54612543908361314e565b61254d9190613165565b601a600082825461255e9190613187565b909155506127629050565b6001600160a01b038a1660009081526028602052604090205460ff16801561259357506000602154115b156126555760646021548a6125a8919061314e565b6125b29190613165565b9050602154602254826125c5919061314e565b6125cf9190613165565b601860008282546125e09190613187565b90915550506021546023546125f5908361314e565b6125ff9190613165565b601960008282546126109190613187565b9091555050602154602554612625908361314e565b61262f9190613165565b601b60008282546126409190613187565b9091555050602154602454612543908361314e565b6001600160a01b038b1660009081526028602052604090205460ff16801561267f57506000601c54115b15612762576064601c548a612694919061314e565b61269e9190613165565b9050601c54601d54826126b1919061314e565b6126bb9190613165565b601860008282546126cc9190613187565b9091555050601c54601e546126e1908361314e565b6126eb9190613165565b601960008282546126fc9190613187565b9091555050601c54602054612711908361314e565b61271b9190613165565b601b600082825461272c9190613187565b9091555050601c54601f54612741908361314e565b61274b9190613165565b601a600082825461275c9190613187565b90915550505b8015612773576127738b3083612a67565b61277d818a613222565b98505b61278b8b8b8b612a67565b5050505050505050505050565b336000818152602660205260408120549091829130919060ff1680156127f1576127c183610ee3565b156127e5576000935086156127df576127da8888612bbc565b6127e5565b60168690555b83945050505050610cf0565b6127fa83610ee3565b601a541115801561280d5750601a546000105b1561281e5761281e82601a54612bbc565b50506000601a555060019150610cf09050565b6000601a5411801561284d5750601a5461284a30610ee3565b10155b1561285e5761285e30601a54612bbc565b6000601a81905561286e30610ee3565b90506000601b546019546018546128859190613187565b61288f9190613187565b905081158061289c575080155b156128a5575050565b600d546128b390600a61314e565b8211156128cb57600d546128c890600a61314e565b91505b6000600282601854856128de919061314e565b6128e89190613165565b6128f29190613165565b90506129066129018285613222565b612c85565b6018544790819060009061291c90600290613165565b6129269086613222565b601954612933908561314e565b61293d9190613165565b9050600060026018546129509190613165565b61295a9087613222565b601b54612967908661314e565b6129719190613165565b905061297d8183613187565b6129879084613222565b600060188190556019819055601b819055601a55925084158015906129ac5750600083115b156129bb576129bb8584612ddf565b600c546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156129f5573d6000803e3d6000fd5b50600b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015612a2f573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0382166000908152602860205260409020805460ff191682151517905561127c8282612e8a565b6001600160a01b038316612a8d5760405162461bcd60e51b8152600401610bca9061319a565b6001600160a01b038216612ab35760405162461bcd60e51b8152600401610bca906131df565b6001600160a01b03831660009081526020819052604090205481811015612b2b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bca565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612b62908490613187565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612bae91815260200190565b60405180910390a350505050565b6001600160a01b038216612bec5760405162461bcd60e51b81526020600482015260006024820152604401610bca565b6001600160a01b03821660009081526020819052604090205481811015612c2f5760405162461bcd60e51b81526020600482015260006024820152604401610bca565b6001600160a01b0383166000818152602081815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611b81565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612cba57612cba613235565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d37919061324b565b81600181518110612d4a57612d4a613235565b6001600160a01b039283166020918202929092010152600a54612d709130911684611a69565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612da9908590600090869030904290600401613268565b600060405180830381600087803b158015612dc357600080fd5b505af1158015612dd7573d6000803e3d6000fd5b505050505050565b600a54612df79030906001600160a01b031684611a69565b600a5460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612e65573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110ee91906132d9565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b81811015612f1a57858101830151858201604001528201612efe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114612f5057600080fd5b50565b60008060408385031215612f6657600080fd5b8235612f7181612f3b565b946020939093013593505050565b600060208284031215612f9157600080fd5b8135610cf081612f3b565b600080600060608486031215612fb157600080fd5b8335612fbc81612f3b565b92506020840135612fcc81612f3b565b929592945050506040919091013590565b600060208284031215612fef57600080fd5b5035919050565b6000806000806080858703121561300c57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561303b57600080fd5b823561304681612f3b565b91506020830135801515811461305b57600080fd5b809150509250929050565b60008060006060848603121561307b57600080fd5b833561308681612f3b565b95602085013595506040909401359392505050565b600080604083850312156130ae57600080fd5b82356130b981612f3b565b9150602083013561305b81612f3b565b600181811c908216806130dd57607f821691505b6020821081036130fd57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610b9a57610b9a613138565b60008261318257634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610b9a57610b9a613138565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b9a57610b9a613138565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561325d57600080fd5b8151610cf081612f3b565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132b85784516001600160a01b031683529383019391830191600101613293565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156132ee57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202302630c0c1ec00125f4f5e431c477e1797955c90030a3d805cbcacb2334973664736f6c63430008120033

Deployed Bytecode Sourcemap

8718:19619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9856:24;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9856:24:0;;;;;;;;2456:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3957:194::-;;;;;;;;;;-1:-1:-1;3957:194:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;3957:194:0;1205:187:1;9924:31:0;;;;;;;;;;;;;;;;8898:38;;;;;;;;;;-1:-1:-1;8898:38:0;;;;-1:-1:-1;;;;;8898:38:0;;;;;;-1:-1:-1;;;;;1584:32:1;;;1566:51;;1554:2;1539:18;8898:38:0;1397:226:1;2920:108:0;;;;;;;;;;-1:-1:-1;3008:12:0;;2920:108;;18414:192;;;;;;;;;;-1:-1:-1;18414:192:0;;;;;:::i;:::-;;:::i;:::-;;3034:529;;;;;;;;;;-1:-1:-1;3034:529:0;;;;;:::i;:::-;;:::i;15220:339::-;;;;;;;;;;-1:-1:-1;15220:339:0;;;;;:::i;:::-;;:::i;18614:510::-;;;;;;;;;;-1:-1:-1;18614:510:0;;;;;:::i;:::-;;:::i;2672:93::-;;;;;;;;;;-1:-1:-1;2672:93:0;;2755:2;3058:36:1;;3046:2;3031:18;2672:93:0;2916:184:1;4157:290:0;;;;;;;;;;-1:-1:-1;4157:290:0;;;;;:::i;:::-;;:::i;8863:28::-;;;;;;;;;;-1:-1:-1;8863:28:0;;;;-1:-1:-1;;;;;8863:28:0;;;9483:33;;;;;;;;;;-1:-1:-1;9483:33:0;;;;;;;;9571:30;;;;;;;;;;;;;;;;9821:28;;;;;;;;;;;;;;;;10184:38;;;;;;;;;;-1:-1:-1;10184:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9680:24;;;;;;;;;;;;;;;;9226:47;;;;;;;;;;-1:-1:-1;9226:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8826:28;;;;;;;;;;;;;;;;9784:30;;;;;;;;;;;;;;;;9351:31;;;;;;;;;;-1:-1:-1;9351:31:0;;;;;;;;2771:143;;;;;;;;;;-1:-1:-1;2771:143:0;;;;;:::i;:::-;;:::i;8274:150::-;;;;;;;;;;;;;:::i;10000:29::-;;;;;;;;;;;;;;;;14786:203;;;;;;;;;;;;;:::i;17572:355::-;;;;;;;;;;-1:-1:-1;17572:355:0;;;;;:::i;:::-;;:::i;14122:405::-;;;;;;;;;;-1:-1:-1;14122:405:0;;;;;:::i;:::-;;:::i;10129:48::-;;;;;;;;;;-1:-1:-1;10129:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8792:27;;;;;;;;;;;;;;;;14535:243;;;;;;;;;;;;;:::i;9608:30::-;;;;;;;;;;;;;;;;8189:79;;;;;;;;;;-1:-1:-1;8254:6:0;;-1:-1:-1;;;;;8254:6:0;8189:79;;2562:104;;;;;;;;;;;;;:::i;16966:364::-;;;;;;;;;;-1:-1:-1;16966:364:0;;;;;:::i;:::-;;:::i;4453:475::-;;;;;;;;;;-1:-1:-1;4453:475:0;;;;;:::i;:::-;;:::i;3569:200::-;;;;;;;;;;-1:-1:-1;3569:200:0;;;;;:::i;:::-;;:::i;8755:30::-;;;;;;;;;;;;;;;;18125:281;;;;;;;;;;-1:-1:-1;18125:281:0;;;;;:::i;:::-;;:::i;19664:113::-;;;;;;;;;;-1:-1:-1;19755:14:0;;19740:12;:29;19664:113;;10036:25;;;;;;;;;;;;;;;;9713:27;;;;;;;;;;;;;;;;9389:33;;;;;;;;;;-1:-1:-1;9389:33:0;;;;;;;;;;;17935:182;;;;;;;;;;-1:-1:-1;17935:182:0;;;;;:::i;:::-;;:::i;15922:363::-;;;;;;;;;;-1:-1:-1;15922:363:0;;;;;:::i;:::-;;:::i;14997:109::-;;;;;;;;;;-1:-1:-1;14997:109:0;;;;;:::i;:::-;;:::i;9455:21::-;;;;;;;;;;;;;;;;9523:39;;;;;;;;;;-1:-1:-1;9523:39:0;;;;;;;;;;;9747:30;;;;;;;;;;;;;;;;9053:31;;;;;;;;;;;;;;;;9889:28;;;;;;;;;;;;;;;;16293:428;;;;;;;;;;-1:-1:-1;16293:428:0;;;;;:::i;:::-;;:::i;15567:347::-;;;;;;;;;;-1:-1:-1;15567:347:0;;;;;:::i;:::-;;:::i;9429:19::-;;;;;;;;;;;;;;;;3775:176;;;;;;;;;;-1:-1:-1;3775:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3916:18:0;;;3889:7;3916:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3775:176;28178:156;;;;;;;;;;;;;:::i;9013:33::-;;;;;;;;;;;;;;;;9645:28;;;;;;;;;;;;;;;;9091:33;;;;;;;;;;;;;;;;19132:524;;;;;;;;;;-1:-1:-1;19132:524:0;;;;;:::i;:::-;;:::i;9962:31::-;;;;;;;;;;;;;;;;15114:98;;;;;;;;;;;;;:::i;8430:281::-;;;;;;;;;;-1:-1:-1;8430:281:0;;;;;:::i;:::-;;:::i;2456:100::-;2510:13;2543:5;2536:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2456:100;:::o;3957:194::-;4065:4;4082:39;1913:10;4105:7;4114:6;4082:8;:39::i;:::-;-1:-1:-1;4139:4:0;3957:194;;;;;:::o;18414:192::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;18497:24:0;::::1;18489:67;;;::::0;-1:-1:-1;;;18489:67:0;;5463:2:1;18489:67:0::1;::::0;::::1;5445:21:1::0;5502:2;5482:18;;;5475:30;5541:32;5521:18;;;5514:60;5591:18;;18489:67:0::1;5261:354:1::0;18489:67:0::1;18567:9;:31:::0;;-1:-1:-1;;;;;;18567:31:0::1;-1:-1:-1::0;;;;;18567:31:0;;;::::1;::::0;;;::::1;::::0;;18414:192::o;3034:529::-;3174:4;3191:36;3201:6;3209:9;3220:6;3191:9;:36::i;:::-;-1:-1:-1;;;;;3267:19:0;;3240:24;3267:19;;;:11;:19;;;;;;;;1913:10;3267:33;;;;;;;;3333:26;;;;3311:116;;;;-1:-1:-1;;;3311:116:0;;5822:2:1;3311:116:0;;;5804:21:1;5861:2;5841:18;;;5834:30;5900:34;5880:18;;;5873:62;-1:-1:-1;;;5951:18:1;;;5944:38;5999:19;;3311:116:0;5620:404:1;3311:116:0;3463:57;3472:6;1913:10;3513:6;3494:16;:25;3463:8;:57::i;:::-;3551:4;3544:11;;;3034:529;;;;;;:::o;15220:339::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;15375:4:::1;15367;15346:13;3008:12:::0;;;2920:108;15346:13:::1;:17;::::0;15362:1:::1;15346:17;:::i;:::-;15345:26;;;;:::i;:::-;15344:35;;;;:::i;:::-;15325:15;:54;;15303:145;;;::::0;-1:-1:-1;;;15303:145:0;;6758:2:1;15303:145:0::1;::::0;::::1;6740:21:1::0;6797:2;6777:18;;;6770:30;6836:34;6816:18;;;6809:62;-1:-1:-1;;;6887:18:1;;;6880:39;6936:19;;15303:145:0::1;6556:405:1::0;15303:145:0::1;15474:28;:15:::0;15493:8:::1;15474:28;:::i;:::-;15459:12;:43:::0;;;15518:33:::1;::::0;160:25:1;;;15518:33:0::1;::::0;148:2:1;133:18;15518:33:0::1;;;;;;;;15220:339:::0;:::o;18614:510::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;18791:15:::1;:31:::0;;;18833:15:::1;:31:::0;;;18875:9:::1;:19:::0;;;18905:13:::1;:24:::0;;;18921:8;18887:7;18968:46:::1;18851:13:::0;18809;18968:46:::1;:::i;:::-;:71;;;;:::i;:::-;:100;;;;:::i;:::-;18940:12;:128:::0;;;19103:1:::1;-1:-1:-1::0;19087:17:0::1;19079:37;;;::::0;-1:-1:-1;;;19079:37:0;;7298:2:1;19079:37:0::1;::::0;::::1;7280:21:1::0;7337:1;7317:18;;;7310:29;-1:-1:-1;;;7355:18:1;;;7348:37;7402:18;;19079:37:0::1;7096:330:1::0;19079:37:0::1;18614:510:::0;;;;:::o;4157:290::-;1913:10;4270:4;4359:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4359:34:0;;;;;;;;;;4270:4;;4287:130;;4337:7;;4359:47;;4396:10;;4359:47;:::i;:::-;4287:8;:130::i;2771:143::-;-1:-1:-1;;;;;2888:18:0;2861:7;2888:18;;;;;;;;;;;;2771:143::o;8274:150::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;8367:6:::1;::::0;8346:40:::1;::::0;8383:1:::1;::::0;-1:-1:-1;;;;;8367:6:0::1;::::0;8346:40:::1;::::0;8383:1;;8346:40:::1;8397:6;:19:::0;;-1:-1:-1;;;;;;8397:19:0::1;::::0;;8274:150::o;14786:203::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;3008:12;;14840:15:::1;:31:::0;3008:12;;14882::::1;:28:::0;3008:12;;14921:13:::1;:29:::0;14966:15:::1;::::0;::::1;::::0;;;::::1;14786:203::o:0;17572:355::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;17703:11:::1;17698:171;;17769:13;::::0;-1:-1:-1;;;;;17769:13:0;;::::1;17757:25:::0;;::::1;::::0;17731:126:::1;;;::::0;-1:-1:-1;;;17731:126:0;;7633:2:1;17731:126:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:37;7809:19;;17731:126:0::1;7431:403:1::0;17731:126:0::1;-1:-1:-1::0;;;;;17879:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:40;;-1:-1:-1;;17879:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17572:355::o;14122:405::-;14266:4;14312:13;14266:4;14312:9;:13::i;:::-;14290:18;;:35;;14282:44;;;;;;14337:13;14354:38;14363:7;14372:9;14383:8;14354;:38::i;:::-;14353:39;14337:55;;14408:8;14403:117;;14433:10;:17;;-1:-1:-1;;14433:17:0;14446:4;14433:17;;;14465:10;:8;:10::i;:::-;14490;:18;;-1:-1:-1;;14490:18:0;;;14403:117;14234:293;;14122:405;;;:::o;14535:243::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;14599:13:::1;::::0;::::1;::::0;::::1;;;14598:14;14590:50;;;::::0;-1:-1:-1;;;14590:50:0;;8041:2:1;14590:50:0::1;::::0;::::1;8023:21:1::0;8080:2;8060:18;;;8053:30;8119:25;8099:18;;;8092:53;8162:18;;14590:50:0::1;7839:347:1::0;14590:50:0::1;14651:13;:20:::0;;14697:12:::1;14682;:27:::0;-1:-1:-1;;14720:18:0;;;;;14754:16:::1;::::0;::::1;::::0;-1:-1:-1;;14754:16:0::1;14535:243::o:0;2562:104::-;2618:13;2651:7;2644:14;;;;;:::i;16966:364::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;17114:13:::1;::::0;-1:-1:-1;;;;;17114:13:0;;::::1;17106:21:::0;;::::1;::::0;17084:128:::1;;;::::0;-1:-1:-1;;;17084:128:0;;8393:2:1;17084:128:0::1;::::0;::::1;8375:21:1::0;8432:2;8412:18;;;8405:30;8471:34;8451:18;;;8444:62;8542:27;8522:18;;;8515:55;8587:19;;17084:128:0::1;8191:421:1::0;17084:128:0::1;17225:41;17254:4;17260:5;17225:28;:41::i;:::-;17282:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;17282:40:0;::::1;::::0;::::1;::::0;;;::::1;16966:364:::0;;:::o;4453:475::-;1913:10;4571:4;4615:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4615:34:0;;;;;;;;;;4682:35;;;;4660:122;;;;-1:-1:-1;;;4660:122:0;;8819:2:1;4660:122:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:35;8993:19;;4660:122:0;8617:401:1;4660:122:0;4818:67;1913:10;4841:7;4869:15;4850:16;:34;4818:8;:67::i;:::-;-1:-1:-1;4916:4:0;;4453:475;-1:-1:-1;;;4453:475:0:o;3569:200::-;3680:4;3697:42;1913:10;3721:9;3732:6;3697:9;:42::i;18125:281::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18250:30:0;::::1;18228:116;;;::::0;-1:-1:-1;;;18228:116:0;;9225:2:1;18228:116:0::1;::::0;::::1;9207:21:1::0;9264:2;9244:18;;;9237:30;9303:34;9283:18;;;9276:62;-1:-1:-1;;;9354:18:1;;;9347:34;9398:19;;18228:116:0::1;9023:400:1::0;18228:116:0::1;18355:15;:43:::0;;-1:-1:-1;;;;;;18355:43:0::1;-1:-1:-1::0;;;;;18355:43:0;;;::::1;::::0;;;::::1;::::0;;18125:281::o;17935:182::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18020:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18020:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18075:34;;1345:41:1;;;18075:34:0::1;::::0;1318:18:1;18075:34:0::1;;;;;;;17935:182:::0;;:::o;15922:363::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;16086:4:::1;16078;16057:13;3008:12:::0;;;2920:108;16057:13:::1;:17;::::0;16073:1:::1;16057:17;:::i;:::-;16056:26;;;;:::i;:::-;16055:35;;;;:::i;:::-;16033:18;:57;;16011:151;;;::::0;-1:-1:-1;;;16011:151:0;;9630:2:1;16011:151:0::1;::::0;::::1;9612:21:1::0;9669:2;9649:18;;;9642:30;9708:34;9688:18;;;9681:62;-1:-1:-1;;;9759:18:1;;;9752:42;9811:19;;16011:151:0::1;9428:408:1::0;16011:151:0::1;16191:31;:18:::0;16213:8:::1;16191:31;:::i;:::-;16173:15;:49:::0;;;16238:39:::1;::::0;160:25:1;;;16238:39:0::1;::::0;148:2:1;133:18;16238:39:0::1;14:177:1::0;14997:109:0;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15067:23:0::1;15093:5;15067:23:::0;;;:15:::1;:23;::::0;;;;:31;;-1:-1:-1;;15067:31:0::1;::::0;;14997:109::o;16293:428::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;16433:6:::1;16412:13;3008:12:::0;;;2920:108;16412:13:::1;:17;::::0;16428:1:::1;16412:17;:::i;:::-;16411:28;;;;:::i;:::-;16398:9;:41;;16376:144;;;::::0;-1:-1:-1;;;16376:144:0;;10043:2:1;16376:144:0::1;::::0;::::1;10025:21:1::0;10082:2;10062:18;;;10055:30;10121:34;10101:18;;;10094:62;-1:-1:-1;;;10172:18:1;;;10165:51;10233:19;;16376:144:0::1;9841:417:1::0;16376:144:0::1;16588:4;16567:13;3008:12:::0;;;2920:108;16567:13:::1;:17;::::0;16583:1:::1;16567:17;:::i;:::-;16566:26;;;;:::i;:::-;16553:9;:39;;16531:141;;;::::0;-1:-1:-1;;;16531:141:0;;10465:2:1;16531:141:0::1;::::0;::::1;10447:21:1::0;10504:2;10484:18;;;10477:30;10543:34;10523:18;;;10516:62;-1:-1:-1;;;10594:18:1;;;10587:50;10654:19;;16531:141:0::1;10263:416:1::0;16531:141:0::1;16683:18;:30:::0;16293:428::o;15567:347::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;15725:4:::1;15717;15696:13;3008:12:::0;;;2920:108;15696:13:::1;:17;::::0;15712:1:::1;15696:17;:::i;:::-;15695:26;;;;:::i;:::-;15694:35;;;;:::i;:::-;15674:16;:55;;15652:147;;;::::0;-1:-1:-1;;;15652:147:0;;10886:2:1;15652:147:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:40;11065:19;;15652:147:0::1;10684:406:1::0;15652:147:0::1;15826:29;:16:::0;15846:8:::1;15826:29;:::i;:::-;15810:13;:45:::0;;;15871:35:::1;::::0;160:25:1;;;15871:35:0::1;::::0;148:2:1;133:18;15871:35:0::1;14:177:1::0;28178:156:0;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;28268:58:::1;::::0;28231:12:::1;::::0;28276:10:::1;::::0;28300:21:::1;::::0;28231:12;28268:58;28231:12;28268:58;28300:21;28276:10;28268:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19132:524:::0;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;19310:16:::1;:32:::0;;;19353:16:::1;:32:::0;;;19396:10:::1;:20:::0;;;19427:14:::1;:25:::0;;;19444:8;19409:7;19492:48:::1;19372:13:::0;19329;19492:48:::1;:::i;:::-;:74;;;;:::i;:::-;:104;;;;:::i;:::-;19463:13;:133:::0;;;19632:1:::1;-1:-1:-1::0;19615:18:0::1;19607:41;;;::::0;-1:-1:-1;;;19607:41:0;;11507:2:1;19607:41:0::1;::::0;::::1;11489:21:1::0;11546:2;11526:18;;;11519:30;-1:-1:-1;;;11565:18:1;;;11558:40;11615:18;;19607:41:0::1;11305:334:1::0;15114:98:0;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;15176:20:::1;:28:::0;;-1:-1:-1;;15176:28:0::1;::::0;;15114:98::o;8430:281::-;8104:6;;-1:-1:-1;;;;;8104:6:0;1913:10;8104:22;8096:67;;;;-1:-1:-1;;;8096:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8533:22:0;::::1;8511:110;;;::::0;-1:-1:-1;;;8511:110:0;;11846:2:1;8511:110:0::1;::::0;::::1;11828:21:1::0;11885:2;11865:18;;;11858:30;11924:34;11904:18;;;11897:62;-1:-1:-1;;;11975:18:1;;;11968:36;12021:19;;8511:110:0::1;11644:402:1::0;8511:110:0::1;8658:6;::::0;8637:38:::1;::::0;-1:-1:-1;;;;;8637:38:0;;::::1;::::0;8658:6:::1;::::0;8637:38:::1;::::0;8658:6:::1;::::0;8637:38:::1;8686:6;:17:::0;;-1:-1:-1;;;;;;8686:17:0::1;-1:-1:-1::0;;;;;8686:17:0;;;::::1;::::0;;;::::1;::::0;;8430:281::o;5332:380::-;-1:-1:-1;;;;;5468:19:0;;5460:68;;;;-1:-1:-1;;;5460:68:0;;12253:2:1;5460:68:0;;;12235:21:1;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:1;;;12375:34;12426:19;;5460:68:0;12051:400:1;5460:68:0;-1:-1:-1;;;;;5547:21:0;;5539:68;;;;-1:-1:-1;;;5539:68:0;;12658:2:1;5539:68:0;;;12640:21:1;12697:2;12677:18;;;12670:30;12736:34;12716:18;;;12709:62;-1:-1:-1;;;12787:18:1;;;12780:32;12829:19;;5539:68:0;12456:398:1;5539:68:0;-1:-1:-1;;;;;5620:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5672:32;;160:25:1;;;5672:32:0;;133:18:1;5672:32:0;;;;;;;;5332:380;;;:::o;21341:6349::-;-1:-1:-1;;;;;21484:21:0;;21476:71;;;;-1:-1:-1;;;21476:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21566:23:0;;21558:71;;;;-1:-1:-1;;;21558:71:0;;;;;;;:::i;:::-;21658:1;21648:7;:11;21640:53;;;;-1:-1:-1;;;21640:53:0;;13871:2:1;21640:53:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:31;13929:18;;;13922:59;13998:18;;21640:53:0;13669:353:1;21640:53:0;21759:13;;21726:15;;21759:13;;;;;21754:193;;-1:-1:-1;;;;;21815:28:0;;;;;;:19;:28;;;;;;;;;:62;;-1:-1:-1;;;;;;21847:30:0;;;;;;:19;:30;;;;;;;;21815:62;21789:146;;;;-1:-1:-1;;;21789:146:0;;14229:2:1;21789:146:0;;;14211:21:1;14268:2;14248:18;;;14241:30;-1:-1:-1;;;14287:18:1;;;14280:52;14349:18;;21789:146:0;14027:346:1;21789:146:0;21963:14;;:18;21959:271;;-1:-1:-1;;;;;22025:24:0;;;;;;:15;:24;;;;;;;;22024:25;;:70;;-1:-1:-1;8254:6:0;;-1:-1:-1;;;;;22074:20:0;;;8254:6;;22074:20;22024:70;:123;;;-1:-1:-1;;;;;;22119:28:0;;22140:6;22119:28;22024:123;21998:220;;;;-1:-1:-1;;;21998:220:0;;14580:2:1;21998:220:0;;;14562:21:1;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:33;14752:19;;21998:220:0;14378:399:1;21998:220:0;22246:14;;;;22242:2558;;;22297:15;22360:7;8254:6;;-1:-1:-1;;;;;8254:6:0;;8189:79;22360:7;-1:-1:-1;;;;;22349:18:0;:7;-1:-1:-1;;;;;22349:18:0;;;:59;;;;-1:-1:-1;8254:6:0;;-1:-1:-1;;;;;22388:20:0;;;8254:6;;22388:20;;22349:59;:103;;;;-1:-1:-1;;;;;;22429:23:0;;;;22349:103;:152;;;;-1:-1:-1;;;;;;22473:28:0;;22494:6;22473:28;;22349:152;:202;;;;-1:-1:-1;;;;;;22523:28:0;;;;;;:19;:28;;;;;;;;22522:29;22349:202;:254;;;;-1:-1:-1;;;;;;22573:30:0;;;;;;:19;:30;;;;;;;;22572:31;22349:254;22327:1413;;;22642:20;;;;;;;22638:1087;;;22707:10;;-1:-1:-1;;;;;22755:15:0;;22687:16;22755:15;;;:6;:15;;;;;;22707:10;;;;22706:11;;22755:15;22754:16;;22706:11;22810:21;;;;;22825:6;22810:21;22905:15;;22793:38;;-1:-1:-1;;;;;;22884:37:0;;;22905:15;;22884:37;;;;:76;;-1:-1:-1;22946:13:0;;-1:-1:-1;;;;;22925:35:0;;;22946:13;;22925:35;;22884:76;22854:852;;;23118:16;23133:1;23118:12;:16;:::i;:::-;23072:9;23049:33;;;;:22;:33;;;;;;:85;:207;;;;-1:-1:-1;23240:16:0;23255:1;23240:12;:16;:::i;:::-;-1:-1:-1;;;;;23171:33:0;;;;;;:22;:33;;;;;;:85;23049:207;23011:334;;;;-1:-1:-1;;;23011:334:0;;15117:2:1;23011:334:0;;;15099:21:1;15156:2;15136:18;;;15129:30;15195:31;15175:18;;;15168:59;15244:18;;23011:334:0;14915:353:1;23011:334:0;23395:9;23372:33;;;;:22;:33;;;;;;23408:12;23372:48;;;;-1:-1:-1;;;;;23447:33:0;;;;;;:48;22854:852;;;23529:9;23525:181;;;-1:-1:-1;;;;;23589:37:0;;23567:19;23589:37;;;:28;:37;;;;;;23661:6;;:20;-1:-1:-1;23653:29:0;;;;;;23540:166;23525:181;22664:1061;;;22638:1087;-1:-1:-1;;;;;23776:25:0;;23756:17;23776:25;;;:16;:25;;;;;;;;;23822:6;:15;;;;;;;23776:25;;;;;23822:15;:47;;;;-1:-1:-1;;;;;;23842:27:0;;;;;;:16;:27;;;;;;;;23841:28;23822:47;23818:971;;;23931:12;;23920:7;:23;;23890:137;;;;-1:-1:-1;;;23890:137:0;;15475:2:1;23890:137:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:38;15652:19;;23890:137:0;15273:404:1;23890:137:0;24110:15;;24086:20;24096:9;24086;:20::i;:::-;24076:30;;:7;:30;:::i;:::-;:49;;24046:147;;;;-1:-1:-1;;;24046:147:0;;15884:2:1;24046:147:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;24046:147:0;15682:348:1;24046:147:0;23818:971;;;24219:12;:27;;;;-1:-1:-1;24236:10:0;;;;24235:11;24219:27;24215:574;;;24267:6;:18;;;24215:574;;;-1:-1:-1;;;;;24329:17:0;;;;;;:6;:17;;;;;;;;:47;;;;-1:-1:-1;;;;;;24351:25:0;;;;;;:16;:25;;;;;;;;24350:26;24329:47;24307:482;;;24452:13;;24441:7;:24;;24411:140;;;;-1:-1:-1;;;24411:140:0;;16237:2:1;24411:140:0;;;16219:21:1;16276:2;16256:18;;;16249:30;16315:34;16295:18;;;16288:62;-1:-1:-1;;;16366:18:1;;;16359:40;16416:19;;24411:140:0;16035:406:1;24307:482:0;-1:-1:-1;;;;;24578:27:0;;;;;;:16;:27;;;;;;;;24573:216;;24690:15;;24666:20;24676:9;24666;:20::i;:::-;24656:30;;:7;:30;:::i;:::-;:49;;24626:147;;;;-1:-1:-1;;;24626:147:0;;15884:2:1;24626:147:0;;;15866:21:1;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:54;16006:18;;24626:147:0;15682:348:1;24626:147:0;22262:2538;;22242:2558;24812:23;24838:24;24856:4;24838:9;:24::i;:::-;24812:50;;24873:23;24899:29;24917:9;24899;:29::i;:::-;25030:18;;24873:55;;-1:-1:-1;24963:20:0;;;;25011:37;;;;;;;25079:35;;-1:-1:-1;25103:11:0;;;;25079:35;:63;;;;-1:-1:-1;25132:10:0;;;;25131:11;25079:63;:96;;;;-1:-1:-1;;;;;;25160:15:0;;;;;;:6;:15;;;;;;;;25159:16;25079:96;:142;;;;-1:-1:-1;;;;;;25193:28:0;;;;;;:19;:28;;;;;;;;25192:29;25079:142;:190;;;;-1:-1:-1;;;;;;25239:30:0;;;;;;:19;:30;;;;;;;;25238:31;25079:190;25061:322;;;25296:10;:17;;-1:-1:-1;;25296:17:0;25309:4;25296:17;;;25328:10;:8;:10::i;:::-;25353;:18;;-1:-1:-1;;25353:18:0;;;25061:322;-1:-1:-1;;;;;25421:15:0;;25403;25421;;;:6;:15;;;;;;;;;;25485:58;;;;-1:-1:-1;;;;;;25499:39:0;;;;;;:28;:39;;;;;;:44;25485:58;25481:199;;;25565:16;25560:109;;-1:-1:-1;;;;;25600:39:0;;;;;;:28;:39;;;;;:53;;;25560:109;-1:-1:-1;;;;;25696:28:0;;;;;;:19;:28;;;;;;;;;:62;;-1:-1:-1;;;;;;25728:30:0;;;;;;:19;:30;;;;;;;;25696:62;25692:110;;;-1:-1:-1;25785:5:0;25692:110;25814:12;25847:7;25843:1783;;;19755:14;;19740:12;:29;25893:57;;;;-1:-1:-1;;;;;;25935:15:0;;;;;;:6;:15;;;;;;;;25893:57;:96;;;;-1:-1:-1;;;;;;25972:17:0;;;;;;:6;:17;;;;;;;;25971:18;25893:96;:133;;;;;26025:1;26010:12;;:16;25893:133;25871:1606;;;-1:-1:-1;;;;;26066:26:0;;;;;;:15;:26;;;;;;;;26061:201;;-1:-1:-1;;;;;26117:26:0;;;;;;:15;:26;;;;;:33;;-1:-1:-1;;26117:33:0;26146:4;26117:33;;;;;;26173:4;:9;;26146:4;;26173;;:9;;26146:4;;26173:9;:::i;:::-;;;;-1:-1:-1;;26210:32:0;;-1:-1:-1;;;;;1584:32:1;;1566:51;;26210:32:0;;1554:2:1;1539:18;26210:32:0;;;;;;;26061:201;26306:3;26290:12;:7;26300:2;26290:12;:::i;:::-;26289:20;;;;:::i;:::-;26282:27;;26374:12;;26355:15;;26348:4;:22;;;;:::i;:::-;26347:39;;;;:::i;:::-;26328:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;26451:12:0;;26432:15;;26425:22;;:4;:22;:::i;:::-;26424:39;;;;:::i;:::-;26405:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;26516:12:0;;26503:9;;26496:16;;:4;:16;:::i;:::-;26495:33;;;;:::i;:::-;26482:9;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;26589:12:0;;26572:13;;26565:20;;:4;:20;:::i;:::-;26564:37;;;;:::i;:::-;26547:13;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;25871:1606:0;;-1:-1:-1;25871:1606:0;;-1:-1:-1;;;;;26640:17:0;;;;;;:6;:17;;;;;;;;:38;;;;;26677:1;26661:13;;:17;26640:38;26636:841;;;26734:3;26717:13;;26707:7;:23;;;;:::i;:::-;26706:31;;;;:::i;:::-;26699:38;;26803:13;;26783:16;;26776:4;:23;;;;:::i;:::-;26775:41;;;;:::i;:::-;26756:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;26882:13:0;;26862:16;;26855:23;;:4;:23;:::i;:::-;26854:41;;;;:::i;:::-;26835:15;;:60;;;;;;;:::i;:::-;;;;-1:-1:-1;;26949:13:0;;26935:10;;26928:17;;:4;:17;:::i;:::-;26927:35;;;;:::i;:::-;26914:9;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;27024:13:0;;27006:14;;26999:21;;:4;:21;:::i;26636:841::-;-1:-1:-1;;;;;27076:15:0;;;;;;:6;:15;;;;;;;;:35;;;;;27110:1;27095:12;;:16;27076:35;27072:405;;;27166:3;27150:12;;27140:7;:22;;;;:::i;:::-;27139:30;;;;:::i;:::-;27132:37;;27234:12;;27215:15;;27208:4;:22;;;;:::i;:::-;27207:39;;;;:::i;:::-;27188:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;27311:12:0;;27292:15;;27285:22;;:4;:22;:::i;:::-;27284:39;;;;:::i;:::-;27265:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;;27376:12:0;;27363:9;;27356:16;;:4;:16;:::i;:::-;27355:33;;;;:::i;:::-;27342:9;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;27449:12:0;;27432:13;;27425:20;;:4;:20;:::i;:::-;27424:37;;;;:::i;:::-;27407:13;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;27072:405:0;27495:8;;27491:94;;27524:45;27540:7;27557:4;27564;27524:15;:45::i;:::-;27599:15;27610:4;27599:15;;:::i;:::-;;;25843:1783;27638:44;27654:7;27663:9;27674:7;27638:15;:44::i;:::-;21465:6225;;;;;;;;21341:6349;;;:::o;12826:875::-;13047:10;12950:4;13085:30;;;:19;:30;;;;;;12950:4;;;;13011;;13047:10;13085:30;;13128:566;;;;13166:13;13176:2;13166:9;:13::i;:::-;13162:17;13158:245;;13210:5;;-1:-1:-1;13238:14:0;;13234:154;;13277:25;13283:7;13292:9;13277:5;:25::i;:::-;13234:154;;;13351:6;:17;;;13234:154;13426:7;13419:14;;;;;;;;13128:566;13487:13;13497:2;13487:9;:13::i;:::-;13470;;:30;;:51;;;;;13508:13;;13504:1;:17;13470:51;13466:123;;;13542:31;13548:9;13559:13;;13542:5;:31::i;:::-;-1:-1:-1;;13650:1:0;13634:13;:17;-1:-1:-1;13615:4:0;;-1:-1:-1;13668:14:0;;-1:-1:-1;13668:14:0;19785:1548;19844:1;19828:13;;:17;:62;;;;;19877:13;;19849:24;19867:4;19849:9;:24::i;:::-;:41;;19828:62;19824:130;;;19907:35;19921:4;19928:13;;19907:5;:35::i;:::-;19980:1;19964:13;:17;;;20018:24;20036:4;20018:9;:24::i;:::-;19992:50;;20053:25;20143:9;;20112:15;;20081;;:46;;;;:::i;:::-;:71;;;;:::i;:::-;20053:99;-1:-1:-1;20169:20:0;;;:46;;-1:-1:-1;20193:22:0;;20169:46;20165:85;;;20232:7;;19785:1548::o;20165:85::-;20284:18;;:23;;20305:2;20284:23;:::i;:::-;20266:15;:41;20262:115;;;20342:18;;:23;;20363:2;20342:23;:::i;:::-;20324:41;;20262:115;20389:26;20489:1;20469:17;20437:15;;20419;:33;;;;:::i;:::-;20418:68;;;;:::i;:::-;:72;;;;:::i;:::-;20389:101;-1:-1:-1;20503:54:0;20520:36;20389:101;20520:15;:36;:::i;:::-;20503:16;:54::i;:::-;20764:15;;20591:21;;;;20570:18;;20764:19;;20782:1;;20764:19;:::i;:::-;20743:41;;:17;:41;:::i;:::-;20710:15;;20697:28;;:10;:28;:::i;:::-;20696:89;;;;:::i;:::-;20670:115;;20796:17;20896:1;20878:15;;:19;;;;:::i;:::-;20857:41;;:17;:41;:::i;:::-;20830:9;;20817:22;;:10;:22;:::i;:::-;20816:83;;;;:::i;:::-;20796:103;-1:-1:-1;20929:27:0;20796:103;20929:15;:27;:::i;:::-;20910:46;;;;:::i;:::-;20985:1;20967:15;:19;;;20997:15;:19;;;21027:9;:13;;;21051;:17;20910:46;-1:-1:-1;21085:22:0;;;;;:45;;;21129:1;21111:15;:19;21085:45;21081:127;;;21147:49;21160:18;21180:15;21147:12;:49::i;:::-;21228:9;;21220:38;;-1:-1:-1;;;;;21228:9:0;;;;21220:38;;;;;21248:9;;21228;21220:38;21228:9;21220:38;21248:9;21228;21220:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21277:15:0;;21269:56;;-1:-1:-1;;;;;21277:15:0;;;;21303:21;21269:56;;;;;21277:15;21269:56;21277:15;21269:56;21303:21;21277:15;21269:56;;;;;;;;;;;;;;;;;;;;;19813:1520;;;;;;;19785:1548::o;16737:221::-;-1:-1:-1;;;;;16820:12:0;;;;;;:6;:12;;;;;:20;;-1:-1:-1;;16820:20:0;;;;;;;16853:39;16820:12;:20;16853:26;:39::i;6040:651::-;-1:-1:-1;;;;;6180:20:0;;6172:70;;;;-1:-1:-1;;;6172:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6261:23:0;;6253:71;;;;-1:-1:-1;;;6253:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6361:17:0;;6337:21;6361:17;;;;;;;;;;;6411:23;;;;6389:111;;;;-1:-1:-1;;;6389:111:0;;16648:2:1;6389:111:0;;;16630:21:1;16687:2;16667:18;;;16660:30;16726:34;16706:18;;;16699:62;-1:-1:-1;;;16777:18:1;;;16770:36;16823:19;;6389:111:0;16446:402:1;6389:111:0;-1:-1:-1;;;;;6536:17:0;;;:9;:17;;;;;;;;;;;6556:22;;;6536:42;;6600:20;;;;;;;;:30;;6572:6;;6536:9;6600:30;;6572:6;;6600:30;:::i;:::-;;;;;;;;6665:9;-1:-1:-1;;;;;6648:35:0;6657:6;-1:-1:-1;;;;;6648:35:0;;6676:6;6648:35;;;;160:25:1;;148:2;133:18;;14:177;6648:35:0;;;;;;;;6161:530;6040:651;;;:::o;4934:392::-;-1:-1:-1;;;;;5020:22:0;;5012:35;;;;-1:-1:-1;;;5012:35:0;;17055:2:1;5012:35:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;5012:35:0;16853:284:1;5012:35:0;-1:-1:-1;;;;;5076:19:0;;5058:15;5076:19;;;;;;;;;;;5114:18;;;;5106:31;;;;-1:-1:-1;;;5106:31:0;;17055:2:1;5106:31:0;;;17037:21:1;-1:-1:-1;17074:18:1;;;17067:29;17113:18;;5106:31:0;16853:284:1;5106:31:0;-1:-1:-1;;;;;5173:19:0;;:9;:19;;;;;;;;;;;5195:17;;;5173:39;;5227:12;:23;;;;;;;5279:39;160:25:1;;;5173:9:0;;:19;5279:39;;133:18:1;5279:39:0;14:177:1;27698:472:0;27788:16;;;27802:1;27788:16;;;;;;;;27764:21;;27788:16;;;;;;;;;;-1:-1:-1;27788:16:0;27764:40;;27833:4;27815;27820:1;27815:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27815:23:0;;;:7;;;;;;;;;;:23;;;;27859:15;;:22;;;-1:-1:-1;;;27859:22:0;;;;:15;;;;;:20;;:22;;;;;27815:7;;27859:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27849:4;27854:1;27849:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27849:32:0;;;:7;;;;;;;;;:32;27924:15;;27892:62;;27909:4;;27924:15;27942:11;27892:8;:62::i;:::-;27965:15;;:197;;-1:-1:-1;;;27965:197:0;;-1:-1:-1;;;;;27965:15:0;;;;:66;;:197;;28046:11;;27965:15;;28089:4;;28116;;28136:15;;27965:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27753:417;27698:472;:::o;13746:368::-;13859:15;;13827:62;;13844:4;;-1:-1:-1;;;;;13859:15:0;13877:11;13827:8;:62::i;:::-;13900:15;;:206;;-1:-1:-1;;;13900:206:0;;13972:4;13900:206;;;18988:34:1;19038:18;;;19031:34;;;13900:15:0;19081:18:1;;;19074:34;;;19124:18;;;19117:34;14058:6:0;19167:19:1;;;19160:44;14080:15:0;19220:19:1;;;19213:35;-1:-1:-1;;;;;13900:15:0;;;;:31;;13939:9;;18922:19:1;;13900:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17338:226::-;-1:-1:-1;;;;;17454:26:0;;;;;;:16;:26;;;;;;;;;:40;;-1:-1:-1;;17454:40:0;;;;;;;;;;17510:46;;19738:51:1;;;19805:18;;;19798:50;17510:46:0;;19711:18:1;17510:46:0;;;;;;;17338:226;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;804:70;749:131;:::o;885:315::-;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1628:247::-;1687:6;1740:2;1728:9;1719:7;1715:23;1711:32;1708:52;;;1756:1;1753;1746:12;1708:52;1795:9;1782:23;1814:31;1839:5;1814:31;:::i;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:180::-;2400:6;2453:2;2441:9;2432:7;2428:23;2424:32;2421:52;;;2469:1;2466;2459:12;2421:52;-1:-1:-1;2492:23:1;;2341:180;-1:-1:-1;2341:180:1:o;2526:385::-;2612:6;2620;2628;2636;2689:3;2677:9;2668:7;2664:23;2660:33;2657:53;;;2706:1;2703;2696:12;2657:53;-1:-1:-1;;2729:23:1;;;2799:2;2784:18;;2771:32;;-1:-1:-1;2850:2:1;2835:18;;2822:32;;2901:2;2886:18;2873:32;;-1:-1:-1;2526:385:1;-1:-1:-1;2526:385:1:o;3313:416::-;3378:6;3386;3439:2;3427:9;3418:7;3414:23;3410:32;3407:52;;;3455:1;3452;3445:12;3407:52;3494:9;3481:23;3513:31;3538:5;3513:31;:::i;:::-;3563:5;-1:-1:-1;3620:2:1;3605:18;;3592:32;3662:15;;3655:23;3643:36;;3633:64;;3693:1;3690;3683:12;3633:64;3716:7;3706:17;;;3313:416;;;;;:::o;3734:383::-;3811:6;3819;3827;3880:2;3868:9;3859:7;3855:23;3851:32;3848:52;;;3896:1;3893;3886:12;3848:52;3935:9;3922:23;3954:31;3979:5;3954:31;:::i;:::-;4004:5;4056:2;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;;4079:32;;3734:383;-1:-1:-1;;;3734:383:1:o;4122:388::-;4190:6;4198;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;4306:9;4293:23;4325:31;4350:5;4325:31;:::i;:::-;4375:5;-1:-1:-1;4432:2:1;4417:18;;4404:32;4445:33;4404:32;4445:33;:::i;4515:380::-;4594:1;4590:12;;;;4637;;;4658:61;;4712:4;4704:6;4700:17;4690:27;;4658:61;4765:2;4757:6;4754:14;4734:18;4731:38;4728:161;;4811:10;4806:3;4802:20;4799:1;4792:31;4846:4;4843:1;4836:15;4874:4;4871:1;4864:15;4728:161;;4515:380;;;:::o;4900:356::-;5102:2;5084:21;;;5121:18;;;5114:30;5180:34;5175:2;5160:18;;5153:62;5247:2;5232:18;;4900:356::o;6029:127::-;6090:10;6085:3;6081:20;6078:1;6071:31;6121:4;6118:1;6111:15;6145:4;6142:1;6135:15;6161:168;6234:9;;;6265;;6282:15;;;6276:22;;6262:37;6252:71;;6303:18;;:::i;6334:217::-;6374:1;6400;6390:132;;6444:10;6439:3;6435:20;6432:1;6425:31;6479:4;6476:1;6469:15;6507:4;6504:1;6497:15;6390:132;-1:-1:-1;6536:9:1;;6334:217::o;6966:125::-;7031:9;;;7052:10;;;7049:36;;;7065:18;;:::i;12859:401::-;13061:2;13043:21;;;13100:2;13080:18;;;13073:30;13139:34;13134:2;13119:18;;13112:62;-1:-1:-1;;;13205:2:1;13190:18;;13183:35;13250:3;13235:19;;12859:401::o;13265:399::-;13467:2;13449:21;;;13506:2;13486:18;;;13479:30;13545:34;13540:2;13525:18;;13518:62;-1:-1:-1;;;13611:2:1;13596:18;;13589:33;13654:3;13639:19;;13265:399::o;14782:128::-;14849:9;;;14870:11;;;14867:37;;;14884:18;;:::i;17274:127::-;17335:10;17330:3;17326:20;17323:1;17316:31;17366:4;17363:1;17356:15;17390:4;17387:1;17380:15;17406:251;17476:6;17529:2;17517:9;17508:7;17504:23;17500:32;17497:52;;;17545:1;17542;17535:12;17497:52;17577:9;17571:16;17596:31;17621:5;17596:31;:::i;17662:980::-;17924:4;17972:3;17961:9;17957:19;18003:6;17992:9;17985:25;18029:2;18067:6;18062:2;18051:9;18047:18;18040:34;18110:3;18105:2;18094:9;18090:18;18083:31;18134:6;18169;18163:13;18200:6;18192;18185:22;18238:3;18227:9;18223:19;18216:26;;18277:2;18269:6;18265:15;18251:29;;18298:1;18308:195;18322:6;18319:1;18316:13;18308:195;;;18387:13;;-1:-1:-1;;;;;18383:39:1;18371:52;;18478:15;;;;18443:12;;;;18419:1;18337:9;18308:195;;;-1:-1:-1;;;;;;;18559:32:1;;;;18554:2;18539:18;;18532:60;-1:-1:-1;;;18623:3:1;18608:19;18601:35;18520:3;17662:980;-1:-1:-1;;;17662:980:1:o;19259:306::-;19347:6;19355;19363;19416:2;19404:9;19395:7;19391:23;19387:32;19384:52;;;19432:1;19429;19422:12;19384:52;19461:9;19455:16;19445:26;;19511:2;19500:9;19496:18;19490:25;19480:35;;19555:2;19544:9;19540:18;19534:25;19524:35;;19259:306;;;;;:::o

Swarm Source

ipfs://2302630c0c1ec00125f4f5e431c477e1797955c90030a3d805cbcacb23349736
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.