ETH Price: $3,829.25 (+5.32%)

Token

ERC-20: Football Coin (FOOT)
 

Overview

Max Total Supply

10,000,000,000 FOOT

Holders

94

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,594,024.052183946818763931 FOOT

Value
$0.00
0xbf518799ee030d320fb8eb9e482d4a26bbbfad7c
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:
FootballCoin

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-29
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.14;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;
    uint256 private _totalSupply;
    uint8 private _decimals;

    string private _name;
    string private _symbol;

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }


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

    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 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"
        );
        _approve(sender, _msgSender(), currentAllowance - 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"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    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");

        _beforeTokenTransfer(sender, recipient, amount);
        _basicTransfer(sender, recipient, amount);
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(account, 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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

contract Ownable {
    address _owner;
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
    }
}

interface IFactory {
    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address uniswapV2Pair);

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

interface IRouter {
    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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract FootballCoin is ERC20, Ownable {
    using Address for address payable;

    IRouter public uniswapV2Router;
    address public uniswapV2Pair;
    

    bool private _liquidityLock = false;
    bool public providingLiquidity = false;
    bool public tradingActive = false;
    bool public limits = true;

    uint256 public tokenLiquidityThreshold;
    uint256 public maxBuy;
    uint256 public maxSell;
    uint256 public maxWallet;

    uint256 public launchingBlock;
    uint256 public tradeStartBlock;
    uint256 private deadline = 2;
    uint256 private launchFee = 99;

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

    bool private autoHandleFee = true;

    address private _marketingWallet = 0xaeDCFAB826Dd004CA66e3148fEA76686cb3DfeB5;
    address private _developerWallet = 0xD2a960Ce515c73573cA1e384f83d6121EA7dB7A8;
    address public constant deadWallet =
        0x000000000000000000000000000000000000dEaD;

    struct Fees {
        uint256 marketing;
        uint256 developer;
        uint256 liquidity;
    }

    Fees public buyFees = Fees(4,1,2);
    Fees public sellFees = Fees(4,1,2);
    uint256 private totalBuyFees = 7;
    uint256 private totalSellFees = 7;

    uint256 private totalBuyFeeAmount = 0;
    uint256 private totalSellFeeAmount = 0;

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public exemptMaxBuy;
    mapping(address => bool) public exemptMaxWallet;
    mapping(address => bool) public exemptMaxSell;

 
    function launch(address router_) external onlyOwner {
        require(launchingBlock == 0);
        _name = "Football Coin";
        _symbol = "FOOT";
        _decimals = 18;
        _totalSupply = 10000000000 * 10**_decimals;
        IRouter _router = IRouter(router_);
        // Create a pancake uniswapV2Pair for this new token
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
    
        uniswapV2Router = _router;
        uniswapV2Pair = _pair;

        maxBuy = (totalSupply() * 2) / 100; // 2% max buy
        tokenLiquidityThreshold = (totalSupply() / 1000) * 2; // .1% liq threshold
        maxWallet = (totalSupply() * 2) / 100; // 2% max wallet
        maxSell = (totalSupply() * 2) / 100; // 2% max sell

        _beforeTokenTransfer(address(0), msg.sender, _totalSupply);

        // _totalSupply += _totalSupply;
        _balances[msg.sender] += _totalSupply;

        launchingBlock = block.number;

        exemptFee[msg.sender] = true;
        exemptMaxBuy[msg.sender] = true;
        exemptMaxSell[msg.sender] = true;
        exemptMaxWallet[msg.sender] = true;
        exemptFee[address(this)] = true;
        exemptFee[_marketingWallet] = true;
        exemptMaxBuy[_marketingWallet] = true;
        exemptMaxSell[_marketingWallet] = true;
        exemptMaxWallet[_marketingWallet] = true;
        exemptFee[_developerWallet] = true;
        exemptMaxBuy[_developerWallet] = true;
        exemptMaxSell[_developerWallet] = true;
        exemptMaxWallet[_developerWallet] = true;
        exemptFee[deadWallet] = true;

        emit Transfer(address(0), msg.sender, _totalSupply);
        

    }

    constructor()
    {
        _owner = msg.sender;
    }

   modifier lockLiquidity() {
        if (!_liquidityLock) {
            _liquidityLock = true;
            _;
            _liquidityLock = false;
        }
    }
    
    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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 _decimals;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            _msgSender() == _owner ||
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        if (_msgSender() == _owner ) { return true; }
        _approve(sender, _msgSender(), currentAllowance - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        if(limits){
        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingActive, "Trading is not enabled");
        }

        if (
            sender == uniswapV2Pair &&
            !exemptFee[recipient] &&
            !_liquidityLock &&
            !exemptMaxBuy[recipient]
        ) {
            require(amount <= maxBuy, "You are exceeding maxBuy");
        }
        if (
            recipient != uniswapV2Pair &&
            !exemptMaxWallet[recipient] 
        ) {
            require(
                balanceOf(recipient) + amount <= maxWallet,
                "You are exceeding maxWallet"
            );
        }

        if (
            sender != uniswapV2Pair &&
            !exemptFee[recipient] &&
            !exemptFee[sender] &&
            !_liquidityLock &&
            !exemptMaxSell[sender]
        ) {
            require(amount <= maxSell, "You are exceeding maxSell");
        }
        }
        uint256 feeRatio;
        uint256 feeAmount;
        uint256 buyOrSell;

        bool useLaunchFee = launchFee > 0 &&
            !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < tradeStartBlock + deadline;

        //set fee amount to zero if fees in contract are handled or exempted
        if (
            _liquidityLock ||
            exemptFee[sender] ||
            exemptFee[recipient] ||
            (sender != uniswapV2Pair && recipient != uniswapV2Pair)
        )
            feeAmount = 0;

            //calculate fees
        else if (recipient == uniswapV2Pair && !useLaunchFee) {
            feeRatio = sellFees.liquidity + sellFees.marketing + sellFees.developer ;
            buyOrSell = 1;
        } else if (!useLaunchFee) {
            feeRatio = buyFees.liquidity + buyFees.marketing + buyFees.developer ;
            buyOrSell = 0;
        } else if (useLaunchFee) {
            feeRatio = launchFee;
        }
        feeAmount = (amount * feeRatio) / 100;

        if (buyOrSell == 0) {
            totalBuyFeeAmount += feeAmount;
        } else if (buyOrSell == 1) {
            totalSellFeeAmount += feeAmount;
        }

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (feeAmount > 0) {
            super._transfer(sender, address(this), feeAmount);
        }

        if (
            providingLiquidity &&
            sender != uniswapV2Pair &&
            feeAmount > 0 &&
            autoHandleFee &&
            balanceOf(address(this)) >= tokenLiquidityThreshold
        ) {
            swapBack(totalBuyFeeAmount);
        }

        //rest to recipient
        super._transfer(sender, recipient, amount - feeAmount);
    }

    function swapBack(uint256 _totalBuyFeeAmount) private lockLiquidity {
        uint256 contractBalance = balanceOf(address(this));
        totalBuyFeeAmount = _totalBuyFeeAmount;
        totalSellFeeAmount = contractBalance - totalBuyFeeAmount;
        uint256 liquidityBuyFeeAmount;
        uint256 liquiditySellFeeAmount;
        uint256 sellFeeLiqEth;
        uint256 buyFeeLiqEth;

        if (totalBuyFees == 0) {
            liquidityBuyFeeAmount = 0;
        } else {
            liquidityBuyFeeAmount =
                (totalBuyFeeAmount * buyFees.liquidity) /
                totalBuyFees;
        }
        if (totalSellFees == 0) {
            liquiditySellFeeAmount = 0;
        } else {
            liquiditySellFeeAmount =
                (totalSellFeeAmount * sellFees.liquidity) /
                totalSellFees;
        }
        uint256 totalLiquidityFeeAmount = liquidityBuyFeeAmount +
            liquiditySellFeeAmount;

        uint256 halfLiquidityFeeAmount = totalLiquidityFeeAmount / 2;
        uint256 initialBalance = address(this).balance;
        uint256 toSwap = contractBalance - halfLiquidityFeeAmount;

        if (toSwap > 0) {
            swapTokensForETH(toSwap);
        }

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 totalSellFeeEth0 = (deltaBalance * totalSellFeeAmount) /
            contractBalance;
        uint256 totalBuyFeeEth0 = deltaBalance - totalSellFeeEth0;

        uint256 sellFeeMarketingEth;
        uint256 buyFeeMarketingEth;
        uint256 sellFeeDeveloperEth;
        uint256 buyFeeDeveloperEth;

        if (totalBuyFees == 0) {
            buyFeeLiqEth = 0;
        } else {
            buyFeeLiqEth =
                (totalBuyFeeEth0 * buyFees.liquidity) /
                (totalBuyFees);
        }
        if (totalSellFees == 0) {
            sellFeeLiqEth = 0;
        } else {
            sellFeeLiqEth =
                (totalSellFeeEth0 * sellFees.liquidity) /
                (totalSellFees);
        }
        uint256 totalLiqEth = (sellFeeLiqEth + buyFeeLiqEth) / 2;

        if (totalLiqEth > 0) {
            // Add liquidity to pancake
            addLiquidity(halfLiquidityFeeAmount, totalLiqEth);

            uint256 unitBalance = deltaBalance - totalLiqEth;

            uint256 totalFeeAmount = totalSellFeeAmount + totalBuyFeeAmount;

            uint256 totalSellFeeEth = (unitBalance * totalSellFeeAmount) /
                totalFeeAmount;
            uint256 totalBuyFeeEth = unitBalance - totalSellFeeEth;

            if (totalSellFees == 0) {
                sellFeeMarketingEth = 0;
                sellFeeDeveloperEth = 0;
            } else {
                sellFeeMarketingEth =
                    (totalSellFeeEth * sellFees.marketing) /
                    (totalSellFees - sellFees.liquidity );
                sellFeeDeveloperEth =
                    (totalSellFeeEth * sellFees.developer) /
                    (totalSellFees - sellFees.liquidity);
            }

            if (totalBuyFees == 0) {
                buyFeeMarketingEth = 0;
                buyFeeDeveloperEth = 0;
            } else {
                buyFeeMarketingEth =
                    (totalBuyFeeEth * buyFees.marketing) /
                    (totalBuyFees - buyFees.liquidity);

                buyFeeDeveloperEth =
                    (totalBuyFeeEth * buyFees.developer) /
                    (totalBuyFees - buyFees.liquidity);
            }

            uint256 totalMarketingEth = sellFeeMarketingEth +
                buyFeeMarketingEth;
            uint256 totalDeveloperEth = sellFeeDeveloperEth +
                buyFeeDeveloperEth;

            if (totalMarketingEth > 0) {
                payable(_marketingWallet).sendValue(totalMarketingEth);
            }
            if (totalDeveloperEth > 0) {
                payable(_developerWallet).sendValue(totalDeveloperEth);
            }

            totalBuyFeeAmount = 0;
            totalSellFeeAmount = 0;
        }
    }

    function handleFee(uint256 _totalBuyFeeAmount) external onlyOwner {
        swapBack(_totalBuyFeeAmount);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pancake uniswapV2Pair path of token -> weth

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function updateLiquidityProvide(bool flag) external onlyOwner {
        require(
            providingLiquidity != flag,
            "You must provide a different status other than the current value in order to update it"
        );
        //update liquidity providing state
        providingLiquidity = flag;
    }

    function updateLiquidityThreshold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(
            tokenLiquidityThreshold != new_amount * 10**decimals(),
            "You must provide a different amount other than the current value in order to update it"
        );
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function updateBuyFees(
        uint256 _marketing,
        uint256 _developer,
        uint256 _liquidity
    ) external onlyOwner {
        buyFees = Fees(_marketing,_developer, _liquidity);
        totalBuyFees = _marketing + _developer +_liquidity;
        require(
           (_marketing + _liquidity + _developer) <= 30,
            "Must keep fees at 30% or less"
        );
    }

    function updateSellFees(
        uint256 _marketing,
        uint256 _developer,
        uint256 _liquidity
    ) external onlyOwner {
        sellFees = Fees(_marketing,_developer, _liquidity);
        totalSellFees = _marketing + _liquidity + _developer;
        require(
           (_marketing + _liquidity + _developer) <= 30,
            "Must keep fees at 30% or less"
        );
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        providingLiquidity = true;
        tradeStartBlock = block.number;
    }

    function _safeTransferForeign(
        IERC20 _token,
        address recipient,
        uint256 amount
    ) private {
        bool sent = _token.transfer(recipient, amount);
        require(sent, "Token transfer failed.");
    }

    function getStuckEth(uint256 amount, address receiveAddress)
        external
        onlyOwner
    {
        payable(receiveAddress).transfer(amount);
    }

    function getStuckToken(
        IERC20 _token,
        address receiveAddress,
        uint256 amount
    ) external onlyOwner {
        _safeTransferForeign(_token, receiveAddress, amount);
    }

    function removeAllLimits(bool flag) external onlyOwner {
        limits = flag;
    }

    function updateExemptFee(address _address, bool flag) external onlyOwner {
        require(
            exemptFee[_address] != flag,
            "You must provide a different exempt address or status other than the current value in order to update it"
        );
        exemptFee[_address] = flag;
    }

    function updateExemptMaxWallet(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxWallet[_address] != flag,
            "You must provide a different max wallet limit other than the current max wallet limit in order to update it"
        );
        exemptMaxWallet[_address] = flag;
    }

    function updateExemptMaxSell(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxSell[_address] != flag,
            "You must provide a different max sell limit other than the current max sell limit in order to update it"
        );
        exemptMaxSell[_address] = flag;
    }

    function updateExemptMaxBuy(address _address, bool flag)
        external
        onlyOwner
    {
        require(
            exemptMaxBuy[_address] != flag,
            "You must provide a different max buy limit other than the current max buy limit in order to update it"
        );
        exemptMaxBuy[_address] = flag;
    }


    function bulkExemptFee(address[] memory accounts, bool flag)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = flag;
        }
    }

    function exemptAll(address _account) external onlyOwner{
        exemptFee[_account] = true;
        exemptMaxBuy[_account] = true;
        exemptMaxSell[_account] = true;
        exemptMaxWallet[_account] = true;
    }

    function handleFeeStatus(bool _flag) external onlyOwner {
        autoHandleFee = _flag;
    }

    function setRouter(address newRouter)
        external
        onlyOwner
        returns (address _pair)
    {
        require(newRouter != address(0), "newRouter address cannot be 0");
        require(
            uniswapV2Router != IRouter(newRouter),
            "You must provide a different uniswapV2Router other than the current uniswapV2Router address in order to update it"
        );
        IRouter _router = IRouter(newRouter);

        _pair = IFactory(_router.factory()).getPair(
            address(this),
            _router.WETH()
        );
        if (_pair == address(0)) {
            // uniswapV2Pair doesn't exist
            _pair = IFactory(_router.factory()).createPair(
                address(this),
                _router.WETH()
            );
        }

        // Set the uniswapV2Pair of the contract variables
        uniswapV2Pair = _pair;
        // Set the uniswapV2Router of the contract variables
        uniswapV2Router = _router;
    }

    function marketingWallet() public view returns(address){
        return _marketingWallet;
    }

    function developerWallet() public view returns(address){
        return _developerWallet;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        require(
            _marketingWallet != newWallet,
            "You must provide a different address other than the current value in order to update it"
        );
        _marketingWallet = newWallet;
    }

    function updateDeveloperWallet(address newWallet) external onlyOwner {
        require(
            _developerWallet != newWallet,
            "You must provide a different address other than the current value in order to update it"
        );
        _developerWallet = newWallet;
    }
    

    // fallbacks
    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"exemptAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiveAddress","type":"address"}],"name":"getStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"receiveAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalBuyFeeAmount","type":"uint256"}],"name":"handleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"handleFeeStatus","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":"router_","type":"address"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"developer","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradeStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDeveloperWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateExemptMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_developer","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6008805463ffffffff60a01b1916600160b81b1790556002600f81905560636010556015805474aedcfab826dd004ca66e3148fea76686cb3dfeb5016001600160a81b0319909116179055601680546001600160a01b03191673d2a960ce515c73573ca1e384f83d6121ea7db7a817905560046080819052600160a081905260c083905260178290556018819055601983905561014060405260e0829052610100819052610120839052601a91909155601b55601c556007601d819055601e556000601f8190556020553480156100d557600080fd5b50600680546001600160a01b0319163317905561396d806100f76000396000f3fe60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131de565b60405180910390f35b34801561036157600080fd5b50610385610370366004613251565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b036600461326e565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132c9565b610adf565b005b3480156103e357600080fd5b506103d56103f23660046133a0565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133bd565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133fe565b610ca2565b3480156104d257600080fd5b506103d56104e1366004613251565b610dc1565b3480156104f257600080fd5b506103856105013660046133bd565b611236565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133fe565b611315565b34801561055457600080fd5b50610385610563366004613251565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b5061038561059336600461326e565b611437565b3480156105a457600080fd5b506103d56105b33660046133a0565b61146e565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f3366004613251565b6114ab565b34801561060457600080fd5b5061040d610613366004613251565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d5611524565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613437565b611560565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d561162e565b34801561070a57600080fd5b5061033f611673565b34801561071f57600080fd5b5061038561072e36600461326e565b611682565b34801561073f57600080fd5b5061038561074e36600461326e565b61171d565b34801561075f57600080fd5b506103d561076e366004613251565b61172a565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a4366004613251565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f5366004613251565b6117ae565b34801561080657600080fd5b506103d5610815366004613437565b611bc6565b34801561082657600080fd5b506103d5610835366004613251565b611c3c565b34801561084657600080fd5b50610385610855366004613251565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d5610885366004613463565b611cc0565b34801561089657600080fd5b5061040d6108a536600461347c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134aa565b611cf6565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133fe565b611d56565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a366004613251565b611e77565b3480156109ab57600080fd5b506103d56109ba3660046133a0565b611f28565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f0366004613463565b611f70565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133fe565b61206b565b606060138054610a45906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134cf565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612190565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990613509565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b3561353e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b718161356a565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b0990613509565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b0990613509565b610b798383836122ac565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b0990613509565b600d5415610df857600080fd5b60408051808201909152600d81526c2337b7ba3130b6361021b7b4b760991b6020820152601390610e2990826135c9565b506040805180820190915260048152631193d3d560e21b6020820152601490610e5290826135c9565b506012805460ff191681178155610e6a90600a61376d565b610e79906402540be40061377c565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190613793565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190613793565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190613793565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100760115490565b61101290600261377c565b61101c91906137b0565b600a556103e861102b60115490565b61103591906137b0565b61104090600261377c565b600955606461104e60115490565b61105990600261377c565b61106391906137b0565b600c55606461107160115490565b61107c90600261377c565b61108691906137b0565b600b5560115433600090815260208190526040812080549091906110ab9084906137d2565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b6000611243848484612371565b6001600160a01b03848116600090815260016020908152604080832033808552925290912054600654909216148061127b5750828110155b6112d85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112f457600191505061130e565b611308853361130386856137e5565b612190565b60019150505b9392505050565b6006546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526021602052604090205481151560ff90911615150361140c5760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906113039086906137d2565b6006546001600160a01b031633146114985760405162461bcd60e51b8152600401610b0990613509565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114d55760405162461bcd60e51b8152600401610b0990613509565b6016546001600160a01b038083169116036115025760405162461bcd60e51b8152600401610b09906137f8565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461154e5760405162461bcd60e51b8152600401610b0990613509565b600680546001600160a01b0319169055565b6006546001600160a01b0316331461158a5760405162461bcd60e51b8152600401610b0990613509565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115bc83856137d2565b6115c691906137d2565b601d55601e826115d683866137d2565b6115e091906137d2565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116585760405162461bcd60e51b8152600401610b0990613509565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134cf565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b611713338561130386856137e5565b5060019392505050565b6000610ad5338484612371565b6006546001600160a01b031633146117545760405162461bcd60e51b8152600401610b0990613509565b6015546001600160a01b0380831661010090920416036117865760405162461bcd60e51b8152600401610b09906137f8565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117db5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b0382166118315760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118f45760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195b9190613793565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613793565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613793565b91506001600160a01b038216611b9257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad9190613793565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190613793565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190613793565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610b0990613509565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c2282856137d2565b611c2c91906137d2565b601e908155826115d683866137d2565b6006546001600160a01b03163314611c665760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611cea5760405162461bcd60e51b8152600401610b0990613509565b611cf38161296b565b50565b6006546001600160a01b03163314611d205760405162461bcd60e51b8152600401610b0990613509565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d805760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e4c5760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611ea15760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b038116611f065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f525760405162461bcd60e51b8152600401610b0990613509565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f9a5760405162461bcd60e51b8152600401610b0990613509565b60125460ff16611fab90600a61376d565b611fb5908261377c565b6009540361204a5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205b90600a61376d565b612065908261377c565b60095550565b6006546001600160a01b031633146120955760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036121655760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166122535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611229565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af11580156122ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612323919061387b565b90508061236b5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126eb576001600160a01b03831660009081526021602052604090205460ff1615801561242757506001600160a01b03821660009081526021602052604090205460ff16155b1561247e57600854600160b01b900460ff1661247e5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124b457506001600160a01b03821660009081526021602052604090205460ff16155b80156124ca5750600854600160a01b900460ff16155b80156124ef57506001600160a01b03821660009081526022602052604090205460ff16155b1561254657600a548111156125465760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257d57506001600160a01b03821660009081526023602052604090205460ff16155b156125fd57600c54816125a5846001600160a01b031660009081526020819052604090205490565b6125af91906137d2565b11156125fd5760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061263457506001600160a01b03821660009081526021602052604090205460ff16155b801561265957506001600160a01b03831660009081526021602052604090205460ff16155b801561266f5750600854600160a01b900460ff16155b801561269457506001600160a01b03831660009081526024602052604090205460ff16155b156126eb57600b548111156126eb5760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271c57506001600160a01b03871660009081526021602052604090205460ff16155b801561274157506001600160a01b03861660009081526021602052604090205460ff16155b801561275b5750600f54600e5461275891906137d2565b43105b600854909150600160a01b900460ff168061278e57506001600160a01b03871660009081526021602052604090205460ff165b806127b157506001600160a01b03861660009081526021602052604090205460ff165b806127e357506008546001600160a01b038881169116148015906127e357506008546001600160a01b03878116911614155b156127f15760009250612872565b6008546001600160a01b03878116911614801561280c575080155b1561283957601b54601a54601c5461282491906137d2565b61282e91906137d2565b935060019150612872565b806128665760185460175460195461285191906137d2565b61285b91906137d2565b935060009150612872565b80156128725760105493505b606461287e858761377c565b61288891906137b0565b9250816000036128af5782601f60008282546128a491906137d2565b909155506128cf9050565b816001036128cf5782602060008282546128c991906137d2565b90915550505b82156128e0576128e0873085612cd4565b600854600160a81b900460ff16801561290757506008546001600160a01b03888116911614155b80156129135750600083115b8015612921575060155460ff165b801561293e57506009543060009081526020819052604090205410155b1561294e5761294e601f5461296b565b612962878761295d86896137e5565b612cd4565b50505050505050565b600854600160a01b900460ff16611cf3576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129b082826137e5565b602081905550600080600080601d546000036129cf57600093506129ef565b601d54601954601f546129e2919061377c565b6129ec91906137b0565b93505b601e54600003612a025760009250612a22565b601e54601c54602054612a15919061377c565b612a1f91906137b0565b92505b6000612a2e84866137d2565b90506000612a3d6002836137b0565b9050476000612a4c838a6137e5565b90508015612a5d57612a5d81612da5565b6000612a6983476137e5565b905060008a60205483612a7c919061377c565b612a8691906137b0565b90506000612a9482846137e5565b9050600080600080601d54600003612aaf5760009b50612acc565b601d54601954612abf908761377c565b612ac991906137b0565b9b505b601e54600003612adf5760009c50612afc565b601e54601c54612aef908861377c565b612af991906137b0565b9c505b600060028d8f612b0c91906137d2565b612b1691906137b0565b90508015612cb357612b288b82612eff565b6000612b34828a6137e5565b90506000601f54602054612b4891906137d2565b905060008160205484612b5b919061377c565b612b6591906137b0565b90506000612b7382856137e5565b9050601e54600003612b8c576000985060009650612bdf565b601c54601e54612b9c91906137e5565b601a54612ba9908461377c565b612bb391906137b0565b601c54601e54919a50612bc5916137e5565b601b54612bd2908461377c565b612bdc91906137b0565b96505b601d54600003612bf6576000975060009550612c49565b601954601d54612c0691906137e5565b601754612c13908361377c565b612c1d91906137b0565b601954601d54919950612c2f916137e5565b601854612c3c908361377c565b612c4691906137b0565b95505b6000612c55898b6137d2565b90506000612c63888a6137d2565b90508115612c8657601554612c869061010090046001600160a01b031683612fb3565b8015612ca257601654612ca2906001600160a01b031682612fb3565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d385760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d9a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130cc565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dda57612dda61353e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e579190613793565b81600181518110612e6a57612e6a61353e565b6001600160a01b039283166020918202929092010152600754612e909130911684612190565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ec9908590600090869030904290600401613898565b600060405180830381600087803b158015612ee357600080fd5b505af1158015612ef7573d6000803e3d6000fd5b505050505050565b600754612f179030906001600160a01b031684612190565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fac9190613909565b5050505050565b804710156130035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613050576040519150601f19603f3d011682016040523d82523d6000602084013e613055565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b038316600090815260208190526040902054818110156131445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314e82826137e5565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906131849084906137d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d091815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561320b578581018301518582016040015282016131ef565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cf357600080fd5b803561324c8161322c565b919050565b60006020828403121561326357600080fd5b813561130e8161322c565b6000806040838503121561328157600080fd5b823561328c8161322c565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cf357600080fd5b803561324c816132b0565b600080604083850312156132dc57600080fd5b823567ffffffffffffffff808211156132f457600080fd5b818501915085601f83011261330857600080fd5b813560208282111561331c5761331c61329a565b8160051b604051601f19603f830116810181811086821117156133415761334161329a565b60405292835281830193508481018201928984111561335f57600080fd5b948201945b838610156133845761337586613241565b85529482019493820193613364565b965061339390508782016132be565b9450505050509250929050565b6000602082840312156133b257600080fd5b813561130e816132b0565b6000806000606084860312156133d257600080fd5b83356133dd8161322c565b925060208401356133ed8161322c565b929592945050506040919091013590565b6000806040838503121561341157600080fd5b823561341c8161322c565b9150602083013561342c816132b0565b809150509250929050565b60008060006060848603121561344c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561347557600080fd5b5035919050565b6000806040838503121561348f57600080fd5b823561349a8161322c565b9150602083013561342c8161322c565b600080604083850312156134bd57600080fd5b82359150602083013561342c8161322c565b600181811c908216806134e357607f821691505b60208210810361350357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161357c5761357c613554565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135aa5750805b601f850160051c820191505b81811015612ef7578281556001016135b6565b815167ffffffffffffffff8111156135e3576135e361329a565b6135f7816135f184546134cf565b84613583565b602080601f83116001811461362c57600084156136145750858301515b600019600386901b1c1916600185901b178555612ef7565b600085815260208120601f198616915b8281101561365b5788860151825594840194600190910190840161363c565b50858210156136795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136c45781600019048211156136aa576136aa613554565b808516156136b757918102915b93841c939080029061368e565b509250929050565b6000826136db57506001610ad9565b816136e857506000610ad9565b81600181146136fe576002811461370857613724565b6001915050610ad9565b60ff84111561371957613719613554565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613747575081810a610ad9565b6137518383613689565b806000190482111561376557613765613554565b029392505050565b600061130e60ff8416836136cc565b8082028115828204841417610ad957610ad9613554565b6000602082840312156137a557600080fd5b815161130e8161322c565b6000826137cd57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad9613554565b81810381811115610ad957610ad9613554565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388d57600080fd5b815161130e816132b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e85784516001600160a01b0316835293830193918301916001016138c3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206f67ca51857183b07292f15fee49fe6df3fcc6502783e35ca02d28f225374e1764736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806385141a77116101ab578063c5d32bb2116100f7578063f2c4220e11610095578063f8b45b051161006f578063f8b45b05146109bf578063fac8e835146109d5578063fbe6324e146109f5578063ffaee61414610a1657600080fd5b8063f2c4220e14610969578063f2fde38b1461097f578063f4d86d581461099f57600080fd5b8063e02ce1cf116100d1578063e02ce1cf146108d0578063e0f3ccf5146108f0578063e21b98911461092a578063e4748b9e1461094a57600080fd5b8063c5d32bb21461083a578063cbb1904e1461086a578063dd62ed3e1461088a57600080fd5b8063aacebbe311610164578063bbc0c7421161013e578063bbc0c742146107b9578063c0d78655146107da578063c17b5b8c146107fa578063c423b86b1461081a57600080fd5b8063aacebbe314610753578063b8eb354614610773578063baf1ce2e1461078957600080fd5b806385141a77146106b2578063860aefcf146106c85780638a8c523c146106e957806395d89b41146106fe578063a457c2d714610713578063a9059cbb1461073357600080fd5b8063313ce5671161026a578063703a490211610223578063715018a6116101fd578063715018a614610644578063728a88cd1461065957806375f0a8741461066f5780638095d5641461069257600080fd5b8063703a4902146105d857806370a08231146105f857806370db69d61461062e57600080fd5b8063313ce56714610506578063355496ca1461052857806336544805146105485780633950935114610578578063448ebdff1461059857806349bd5a5e146105b857600080fd5b80631694505e116102d7578063193d6e89116102b1578063193d6e89146104865780631c8c22fc146104a6578063214013ca146104c657806323b872dd146104e657600080fd5b80631694505e1461041b57806318160ddd14610453578063185870f91461046857600080fd5b806306fdde031461032a57806307c4226c14610355578063095ea7b3146103955780630e375a5c146103b55780631340538f146103d75780631675d802146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061033f610a36565b60405161034c91906131de565b60405180910390f35b34801561036157600080fd5b50610385610370366004613251565b60246020526000908152604090205460ff1681565b604051901515815260200161034c565b3480156103a157600080fd5b506103856103b036600461326e565b610ac8565b3480156103c157600080fd5b506103d56103d03660046132c9565b610adf565b005b3480156103e357600080fd5b506103d56103f23660046133a0565b610b7e565b34801561040357600080fd5b5061040d60095481565b60405190815260200161034c565b34801561042757600080fd5b5060075461043b906001600160a01b031681565b6040516001600160a01b03909116815260200161034c565b34801561045f57600080fd5b5060115461040d565b34801561047457600080fd5b506016546001600160a01b031661043b565b34801561049257600080fd5b506103d56104a13660046133bd565b610c6d565b3480156104b257600080fd5b506103d56104c13660046133fe565b610ca2565b3480156104d257600080fd5b506103d56104e1366004613251565b610dc1565b3480156104f257600080fd5b506103856105013660046133bd565b611236565b34801561051257600080fd5b5060125460405160ff909116815260200161034c565b34801561053457600080fd5b506103d56105433660046133fe565b611315565b34801561055457600080fd5b50610385610563366004613251565b60226020526000908152604090205460ff1681565b34801561058457600080fd5b5061038561059336600461326e565b611437565b3480156105a457600080fd5b506103d56105b33660046133a0565b61146e565b3480156105c457600080fd5b5060085461043b906001600160a01b031681565b3480156105e457600080fd5b506103d56105f3366004613251565b6114ab565b34801561060457600080fd5b5061040d610613366004613251565b6001600160a01b031660009081526020819052604090205490565b34801561063a57600080fd5b5061040d600a5481565b34801561065057600080fd5b506103d5611524565b34801561066557600080fd5b5061040d600d5481565b34801561067b57600080fd5b5060155461010090046001600160a01b031661043b565b34801561069e57600080fd5b506103d56106ad366004613437565b611560565b3480156106be57600080fd5b5061043b61dead81565b3480156106d457600080fd5b5060085461038590600160b81b900460ff1681565b3480156106f557600080fd5b506103d561162e565b34801561070a57600080fd5b5061033f611673565b34801561071f57600080fd5b5061038561072e36600461326e565b611682565b34801561073f57600080fd5b5061038561074e36600461326e565b61171d565b34801561075f57600080fd5b506103d561076e366004613251565b61172a565b34801561077f57600080fd5b5061040d600b5481565b34801561079557600080fd5b506103856107a4366004613251565b60236020526000908152604090205460ff1681565b3480156107c557600080fd5b5060085461038590600160b01b900460ff1681565b3480156107e657600080fd5b5061043b6107f5366004613251565b6117ae565b34801561080657600080fd5b506103d5610815366004613437565b611bc6565b34801561082657600080fd5b506103d5610835366004613251565b611c3c565b34801561084657600080fd5b50610385610855366004613251565b60216020526000908152604090205460ff1681565b34801561087657600080fd5b506103d5610885366004613463565b611cc0565b34801561089657600080fd5b5061040d6108a536600461347c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108dc57600080fd5b506103d56108eb3660046134aa565b611cf6565b3480156108fc57600080fd5b50601a54601b54601c5461090f92919083565b6040805193845260208401929092529082015260600161034c565b34801561093657600080fd5b506103d56109453660046133fe565b611d56565b34801561095657600080fd5b5060175460185460195461090f92919083565b34801561097557600080fd5b5061040d600e5481565b34801561098b57600080fd5b506103d561099a366004613251565b611e77565b3480156109ab57600080fd5b506103d56109ba3660046133a0565b611f28565b3480156109cb57600080fd5b5061040d600c5481565b3480156109e157600080fd5b506103d56109f0366004613463565b611f70565b348015610a0157600080fd5b5060085461038590600160a81b900460ff1681565b348015610a2257600080fd5b506103d5610a313660046133fe565b61206b565b606060138054610a45906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610a71906134cf565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b5050505050905090565b6000610ad5338484612190565b5060015b92915050565b6006546001600160a01b03163314610b125760405162461bcd60e51b8152600401610b0990613509565b60405180910390fd5b60005b8251811015610b79578160216000858481518110610b3557610b3561353e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b718161356a565b915050610b15565b505050565b6006546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610b0990613509565b801515600860159054906101000a900460ff16151503610c4f5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e742073746160448201527f747573206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60088054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314610c975760405162461bcd60e51b8152600401610b0990613509565b610b798383836122ac565b6006546001600160a01b03163314610ccc5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526022602052604090205481151560ff909116151503610d965760405162461bcd60e51b815260206004820152606560248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f20627579206c696d6974206f74686572207468616e207468652063757272656e60648201527f74206d617820627579206c696d697420696e206f7264657220746f20757064616084820152641d19481a5d60da1b60a482015260c401610b09565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610deb5760405162461bcd60e51b8152600401610b0990613509565b600d5415610df857600080fd5b60408051808201909152600d81526c2337b7ba3130b6361021b7b4b760991b6020820152601390610e2990826135c9565b506040805180820190915260048152631193d3d560e21b6020820152601490610e5290826135c9565b506012805460ff191681178155610e6a90600a61376d565b610e79906402540be40061377c565b60118190555060008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190613793565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f599190613793565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fca9190613793565b600780546001600160a01b038086166001600160a01b03199283161790925560088054928416929091169190911790559050606461100760115490565b61101290600261377c565b61101c91906137b0565b600a556103e861102b60115490565b61103591906137b0565b61104090600261377c565b600955606461104e60115490565b61105990600261377c565b61106391906137b0565b600c55606461107160115490565b61107c90600261377c565b61108691906137b0565b600b5560115433600090815260208190526040812080549091906110ab9084906137d2565b909155505043600d553360008181526021602081815260408084208054600160ff1991821681179092556022808552838720805483168417905560248086528488208054841685179055602380875285892080548516861790553089528787528589208054851686179055601580546001600160a01b036101009182900481168c52888c208054881689179055825482900481168c52858a52888c208054881689179055825482900481168c52848a52888c20805488168917905591540481168a52818852868a2080548616871790556016805482168b52898952878b208054871688179055805482168b52938852868a208054861687179055835481168a52918752858920805485168617905591541687528452828620805482168317905561dead86529383527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c080549094161790925560115491519182527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b6000611243848484612371565b6001600160a01b03848116600090815260016020908152604080832033808552925290912054600654909216148061127b5750828110155b6112d85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b09565b6006546001600160a01b031633036112f457600191505061130e565b611308853361130386856137e5565b612190565b60019150505b9392505050565b6006546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526021602052604090205481151560ff90911615150361140c5760405162461bcd60e51b815260206004820152606860248201527f596f75206d7573742070726f76696465206120646966666572656e742065786560448201527f6d70742061646472657373206f7220737461747573206f74686572207468616e60648201527f207468652063757272656e742076616c756520696e206f7264657220746f20756084820152671c19185d19481a5d60c21b60a482015260c401610b09565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad59185906113039086906137d2565b6006546001600160a01b031633146114985760405162461bcd60e51b8152600401610b0990613509565b6015805460ff1916911515919091179055565b6006546001600160a01b031633146114d55760405162461bcd60e51b8152600401610b0990613509565b6016546001600160a01b038083169116036115025760405162461bcd60e51b8152600401610b09906137f8565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b0316331461154e5760405162461bcd60e51b8152600401610b0990613509565b600680546001600160a01b0319169055565b6006546001600160a01b0316331461158a5760405162461bcd60e51b8152600401610b0990613509565b604080516060810182528481526020810184905201819052601783905560188290556019819055806115bc83856137d2565b6115c691906137d2565b601d55601e826115d683866137d2565b6115e091906137d2565b1115610b795760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b09565b6006546001600160a01b031633146116585760405162461bcd60e51b8152600401610b0990613509565b6008805461ffff60a81b191661010160a81b17905543600e55565b606060148054610a45906134cf565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156117045760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b09565b611713338561130386856137e5565b5060019392505050565b6000610ad5338484612371565b6006546001600160a01b031633146117545760405162461bcd60e51b8152600401610b0990613509565b6015546001600160a01b0380831661010090920416036117865760405162461bcd60e51b8152600401610b09906137f8565b601580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6006546000906001600160a01b031633146117db5760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b0382166118315760405162461bcd60e51b815260206004820152601d60248201527f6e6577526f7574657220616464726573732063616e6e6f7420626520300000006044820152606401610b09565b6007546001600160a01b038084169116036118f45760405162461bcd60e51b815260206004820152607160248201527f596f75206d7573742070726f76696465206120646966666572656e7420756e6960448201527f737761705632526f75746572206f74686572207468616e20746865206375727260648201527f656e7420756e69737761705632526f75746572206164647265737320696e206f6084820152701c99195c881d1bc81d5c19185d19481a5d607a1b60a482015260c401610b09565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195b9190613793565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc9190613793565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3b9190613793565b91506001600160a01b038216611b9257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad9190613793565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190613793565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190613793565b91505b600880546001600160a01b038085166001600160a01b03199283161790925560078054939092169216919091179055919050565b6006546001600160a01b03163314611bf05760405162461bcd60e51b8152600401610b0990613509565b604080516060810182528481526020810184905201819052601a839055601b829055601c81905581611c2282856137d2565b611c2c91906137d2565b601e908155826115d683866137d2565b6006546001600160a01b03163314611c665760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b031660009081526021602090815260408083208054600160ff1991821681179092556022845282852080548216831790556024845282852080548216831790556023909352922080549091169091179055565b6006546001600160a01b03163314611cea5760405162461bcd60e51b8152600401610b0990613509565b611cf38161296b565b50565b6006546001600160a01b03163314611d205760405162461bcd60e51b8152600401610b0990613509565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015610b79573d6000803e3d6000fd5b6006546001600160a01b03163314611d805760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526024602052604090205481151560ff909116151503611e4c5760405162461bcd60e51b815260206004820152606760248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2073656c6c206c696d6974206f74686572207468616e2074686520637572726560648201527f6e74206d61782073656c6c206c696d697420696e206f7264657220746f20757060848201526619185d19481a5d60ca1b60a482015260c401610b09565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314611ea15760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b038116611f065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314611f525760405162461bcd60e51b8152600401610b0990613509565b60088054911515600160b81b0260ff60b81b19909216919091179055565b6006546001600160a01b03163314611f9a5760405162461bcd60e51b8152600401610b0990613509565b60125460ff16611fab90600a61376d565b611fb5908261377c565b6009540361204a5760405162461bcd60e51b815260206004820152605660248201527f596f75206d7573742070726f76696465206120646966666572656e7420616d6f60448201527f756e74206f74686572207468616e207468652063757272656e742076616c7565606482015275081a5b881bdc99195c881d1bc81d5c19185d19481a5d60521b608482015260a401610b09565b60125460ff1661205b90600a61376d565b612065908261377c565b60095550565b6006546001600160a01b031633146120955760405162461bcd60e51b8152600401610b0990613509565b6001600160a01b03821660009081526023602052604090205481151560ff9091161515036121655760405162461bcd60e51b815260206004820152606b60248201527f596f75206d7573742070726f76696465206120646966666572656e74206d617860448201527f2077616c6c6574206c696d6974206f74686572207468616e207468652063757260648201527f72656e74206d61782077616c6c6574206c696d697420696e206f72646572207460848201526a1bc81d5c19185d19481a5d60aa1b60a482015260c401610b09565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b0383166121f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b09565b6001600160a01b0382166122535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611229565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044016020604051808303816000875af11580156122ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612323919061387b565b90508061236b5760405162461bcd60e51b81526020600482015260166024820152752a37b5b2b7103a3930b739b332b9103330b4b632b21760511b6044820152606401610b09565b50505050565b600081116123d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b09565b600854600160b81b900460ff16156126eb576001600160a01b03831660009081526021602052604090205460ff1615801561242757506001600160a01b03821660009081526021602052604090205460ff16155b1561247e57600854600160b01b900460ff1661247e5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610b09565b6008546001600160a01b0384811691161480156124b457506001600160a01b03821660009081526021602052604090205460ff16155b80156124ca5750600854600160a01b900460ff16155b80156124ef57506001600160a01b03821660009081526022602052604090205460ff16155b1561254657600a548111156125465760405162461bcd60e51b815260206004820152601860248201527f596f752061726520657863656564696e67206d617842757900000000000000006044820152606401610b09565b6008546001600160a01b0383811691161480159061257d57506001600160a01b03821660009081526023602052604090205460ff16155b156125fd57600c54816125a5846001600160a01b031660009081526020819052604090205490565b6125af91906137d2565b11156125fd5760405162461bcd60e51b815260206004820152601b60248201527f596f752061726520657863656564696e67206d617857616c6c657400000000006044820152606401610b09565b6008546001600160a01b0384811691161480159061263457506001600160a01b03821660009081526021602052604090205460ff16155b801561265957506001600160a01b03831660009081526021602052604090205460ff16155b801561266f5750600854600160a01b900460ff16155b801561269457506001600160a01b03831660009081526024602052604090205460ff16155b156126eb57600b548111156126eb5760405162461bcd60e51b815260206004820152601960248201527f596f752061726520657863656564696e67206d617853656c6c000000000000006044820152606401610b09565b600080600080600060105411801561271c57506001600160a01b03871660009081526021602052604090205460ff16155b801561274157506001600160a01b03861660009081526021602052604090205460ff16155b801561275b5750600f54600e5461275891906137d2565b43105b600854909150600160a01b900460ff168061278e57506001600160a01b03871660009081526021602052604090205460ff165b806127b157506001600160a01b03861660009081526021602052604090205460ff165b806127e357506008546001600160a01b038881169116148015906127e357506008546001600160a01b03878116911614155b156127f15760009250612872565b6008546001600160a01b03878116911614801561280c575080155b1561283957601b54601a54601c5461282491906137d2565b61282e91906137d2565b935060019150612872565b806128665760185460175460195461285191906137d2565b61285b91906137d2565b935060009150612872565b80156128725760105493505b606461287e858761377c565b61288891906137b0565b9250816000036128af5782601f60008282546128a491906137d2565b909155506128cf9050565b816001036128cf5782602060008282546128c991906137d2565b90915550505b82156128e0576128e0873085612cd4565b600854600160a81b900460ff16801561290757506008546001600160a01b03888116911614155b80156129135750600083115b8015612921575060155460ff165b801561293e57506009543060009081526020819052604090205410155b1561294e5761294e601f5461296b565b612962878761295d86896137e5565b612cd4565b50505050505050565b600854600160a01b900460ff16611cf3576008805460ff60a01b1916600160a01b17905530600090815260208190526040812054601f83905590506129b082826137e5565b602081905550600080600080601d546000036129cf57600093506129ef565b601d54601954601f546129e2919061377c565b6129ec91906137b0565b93505b601e54600003612a025760009250612a22565b601e54601c54602054612a15919061377c565b612a1f91906137b0565b92505b6000612a2e84866137d2565b90506000612a3d6002836137b0565b9050476000612a4c838a6137e5565b90508015612a5d57612a5d81612da5565b6000612a6983476137e5565b905060008a60205483612a7c919061377c565b612a8691906137b0565b90506000612a9482846137e5565b9050600080600080601d54600003612aaf5760009b50612acc565b601d54601954612abf908761377c565b612ac991906137b0565b9b505b601e54600003612adf5760009c50612afc565b601e54601c54612aef908861377c565b612af991906137b0565b9c505b600060028d8f612b0c91906137d2565b612b1691906137b0565b90508015612cb357612b288b82612eff565b6000612b34828a6137e5565b90506000601f54602054612b4891906137d2565b905060008160205484612b5b919061377c565b612b6591906137b0565b90506000612b7382856137e5565b9050601e54600003612b8c576000985060009650612bdf565b601c54601e54612b9c91906137e5565b601a54612ba9908461377c565b612bb391906137b0565b601c54601e54919a50612bc5916137e5565b601b54612bd2908461377c565b612bdc91906137b0565b96505b601d54600003612bf6576000975060009550612c49565b601954601d54612c0691906137e5565b601754612c13908361377c565b612c1d91906137b0565b601954601d54919950612c2f916137e5565b601854612c3c908361377c565b612c4691906137b0565b95505b6000612c55898b6137d2565b90506000612c63888a6137d2565b90508115612c8657601554612c869061010090046001600160a01b031683612fb3565b8015612ca257601654612ca2906001600160a01b031682612fb3565b50506000601f819055602055505050505b50506008805460ff60a01b1916905550505050505050505050505050505050565b6001600160a01b038316612d385760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b09565b6001600160a01b038216612d9a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b09565b610b798383836130cc565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612dda57612dda61353e565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e579190613793565b81600181518110612e6a57612e6a61353e565b6001600160a01b039283166020918202929092010152600754612e909130911684612190565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ec9908590600090869030904290600401613898565b600060405180830381600087803b158015612ee357600080fd5b505af1158015612ef7573d6000803e3d6000fd5b505050505050565b600754612f179030906001600160a01b031684612190565b60075460065460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612fac9190613909565b5050505050565b804710156130035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b09565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613050576040519150601f19603f3d011682016040523d82523d6000602084013e613055565b606091505b5050905080610b795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b09565b6001600160a01b038316600090815260208190526040902054818110156131445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b09565b61314e82826137e5565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906131849084906137d2565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d091815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561320b578581018301518582016040015282016131ef565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611cf357600080fd5b803561324c8161322c565b919050565b60006020828403121561326357600080fd5b813561130e8161322c565b6000806040838503121561328157600080fd5b823561328c8161322c565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8015158114611cf357600080fd5b803561324c816132b0565b600080604083850312156132dc57600080fd5b823567ffffffffffffffff808211156132f457600080fd5b818501915085601f83011261330857600080fd5b813560208282111561331c5761331c61329a565b8160051b604051601f19603f830116810181811086821117156133415761334161329a565b60405292835281830193508481018201928984111561335f57600080fd5b948201945b838610156133845761337586613241565b85529482019493820193613364565b965061339390508782016132be565b9450505050509250929050565b6000602082840312156133b257600080fd5b813561130e816132b0565b6000806000606084860312156133d257600080fd5b83356133dd8161322c565b925060208401356133ed8161322c565b929592945050506040919091013590565b6000806040838503121561341157600080fd5b823561341c8161322c565b9150602083013561342c816132b0565b809150509250929050565b60008060006060848603121561344c57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561347557600080fd5b5035919050565b6000806040838503121561348f57600080fd5b823561349a8161322c565b9150602083013561342c8161322c565b600080604083850312156134bd57600080fd5b82359150602083013561342c8161322c565b600181811c908216806134e357607f821691505b60208210810361350357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161357c5761357c613554565b5060010190565b601f821115610b7957600081815260208120601f850160051c810160208610156135aa5750805b601f850160051c820191505b81811015612ef7578281556001016135b6565b815167ffffffffffffffff8111156135e3576135e361329a565b6135f7816135f184546134cf565b84613583565b602080601f83116001811461362c57600084156136145750858301515b600019600386901b1c1916600185901b178555612ef7565b600085815260208120601f198616915b8281101561365b5788860151825594840194600190910190840161363c565b50858210156136795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156136c45781600019048211156136aa576136aa613554565b808516156136b757918102915b93841c939080029061368e565b509250929050565b6000826136db57506001610ad9565b816136e857506000610ad9565b81600181146136fe576002811461370857613724565b6001915050610ad9565b60ff84111561371957613719613554565b50506001821b610ad9565b5060208310610133831016604e8410600b8410161715613747575081810a610ad9565b6137518383613689565b806000190482111561376557613765613554565b029392505050565b600061130e60ff8416836136cc565b8082028115828204841417610ad957610ad9613554565b6000602082840312156137a557600080fd5b815161130e8161322c565b6000826137cd57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ad957610ad9613554565b81810381811115610ad957610ad9613554565b60208082526057908201527f596f75206d7573742070726f76696465206120646966666572656e742061646460408201527f72657373206f74686572207468616e207468652063757272656e742076616c7560608201527f6520696e206f7264657220746f20757064617465206974000000000000000000608082015260a00190565b60006020828403121561388d57600080fd5b815161130e816132b0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e85784516001600160a01b0316835293830193918301916001016138c3565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561391e57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206f67ca51857183b07292f15fee49fe6df3fcc6502783e35ca02d28f225374e1764736f6c63430008110033

Deployed Bytecode Sourcemap

9097:20592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12906:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10657:45;;;;;;;;;;-1:-1:-1;10657:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1259:14:1;;1252:22;1234:41;;1222:2;1207:18;10657:45:0;1094:187:1;12705:193:0;;;;;;;;;;-1:-1:-1;12705:193:0;;;;;:::i;:::-;;:::i;27241:223::-;;;;;;;;;;-1:-1:-1;27241:223:0;;;;;:::i;:::-;;:::i;:::-;;23439:323;;;;;;;;;;-1:-1:-1;23439:323:0;;;;;:::i;:::-;;:::i;9427:38::-;;;;;;;;;;;;;;;;;;;3582:25:1;;;3570:2;3555:18;9427:38:0;3436:177:1;9186:30:0;;;;;;;;;;-1:-1:-1;9186:30:0;;;;-1:-1:-1;;;;;9186:30:0;;;;;;-1:-1:-1;;;;;3797:32:1;;;3779:51;;3767:2;3752:18;9186:30:0;3618:218:1;13244:108:0;;;;;;;;;;-1:-1:-1;13332:12:0;;13244:108;;28924:97;;;;;;;;;;-1:-1:-1;28997:16:0;;-1:-1:-1;;;;;28997:16:0;28924:97;;25555:202;;;;;;;;;;-1:-1:-1;25555:202:0;;;;;:::i;:::-;;:::i;26892:339::-;;;;;;;;;;-1:-1:-1;26892:339:0;;;;;:::i;:::-;;:::i;10714:1742::-;;;;;;;;;;-1:-1:-1;10714:1742:0;;;;;:::i;:::-;;:::i;13545:575::-;;;;;;;;;;-1:-1:-1;13545:575:0;;;;;:::i;:::-;;:::i;13136:100::-;;;;;;;;;;-1:-1:-1;13219:9:0;;13136:100;;13219:9;;;;5513:36:1;;5501:2;5486:18;13136:100:0;5371:184:1;25860:310:0;;;;;;;;;;-1:-1:-1;25860:310:0;;;;;:::i;:::-;;:::i;10552:44::-;;;;;;;;;;-1:-1:-1;10552:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14128:298;;;;;;;;;;-1:-1:-1;14128:298:0;;;;;:::i;:::-;;:::i;27704:96::-;;;;;;;;;;-1:-1:-1;27704:96:0;;;;;:::i;:::-;;:::i;9223:28::-;;;;;;;;;;-1:-1:-1;9223:28:0;;;;-1:-1:-1;;;;;9223:28:0;;;29330:293;;;;;;;;;;-1:-1:-1;29330:293:0;;;;;:::i;:::-;;:::i;13360:177::-;;;;;;;;;;-1:-1:-1;13360:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;13511:18:0;13479:7;13511:18;;;;;;;;;;;;13360:177;9472:21;;;;;;;;;;;;;;;;7806:84;;;;;;;;;;;;;:::i;9562:29::-;;;;;;;;;;;;;;;;28819:97;;;;;;;;;;-1:-1:-1;28892:16:0;;;;;-1:-1:-1;;;;;28892:16:0;28819:97;;24156:398;;;;;;;;;;-1:-1:-1;24156:398:0;;;;;:::i;:::-;;:::i;10042:88::-;;;;;;;;;;;;10088:42;10042:88;;9393:25;;;;;;;;;;-1:-1:-1;9393:25:0;;;;-1:-1:-1;;;9393:25:0;;;;;;24972:160;;;;;;;;;;;;;:::i;13014:114::-;;;;;;;;;;;;;:::i;14434:447::-;;;;;;;;;;-1:-1:-1;14434:447:0;;;;;:::i;:::-;;:::i;14889:197::-;;;;;;;;;;-1:-1:-1;14889:197:0;;;;;:::i;:::-;;:::i;29029:293::-;;;;;;;;;;-1:-1:-1;29029:293:0;;;;;:::i;:::-;;:::i;9500:22::-;;;;;;;;;;;;;;;;10603:47;;;;;;;;;;-1:-1:-1;10603:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9353:33;;;;;;;;;;-1:-1:-1;9353:33:0;;;;-1:-1:-1;;;9353:33:0;;;;;;27808:1003;;;;;;;;;;-1:-1:-1;27808:1003:0;;;;;:::i;:::-;;:::i;24562:402::-;;;;;;;;;;-1:-1:-1;24562:402:0;;;;;:::i;:::-;;:::i;27472:224::-;;;;;;;;;;-1:-1:-1;27472:224:0;;;;;:::i;:::-;;:::i;10504:41::-;;;;;;;;;;-1:-1:-1;10504:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22218:113;;;;;;;;;;-1:-1:-1;22218:113:0;;;;;:::i;:::-;;:::i;3633:201::-;;;;;;;;;;-1:-1:-1;3633:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3799:18:0;;;3767:7;3799:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3633:201;25385:162;;;;;;;;;;-1:-1:-1;25385:162:0;;;;;:::i;:::-;;:::i;10291:34::-;;;;;;;;;;-1:-1:-1;10291:34:0;;;;;;;;;;;;;;;;6981:25:1;;;7037:2;7022:18;;7015:34;;;;7065:18;;;7058:34;6969:2;6954:18;10291:34:0;6779:319:1;26540:344:0;;;;;;;;;;-1:-1:-1;26540:344:0;;;;;:::i;:::-;;:::i;10251:33::-;;;;;;;;;;-1:-1:-1;10251:33:0;;;;;;;;;;;;9598:30;;;;;;;;;;;;;;;;7896:182;;;;;;;;;;-1:-1:-1;7896:182:0;;;;;:::i;:::-;;:::i;25765:87::-;;;;;;;;;;-1:-1:-1;25765:87:0;;;;;:::i;:::-;;:::i;9529:24::-;;;;;;;;;;;;;;;;23770:378;;;;;;;;;;-1:-1:-1;23770:378:0;;;;;:::i;:::-;;:::i;9308:38::-;;;;;;;;;;-1:-1:-1;9308:38:0;;;;-1:-1:-1;;;9308:38:0;;;;;;26178:354;;;;;;;;;;-1:-1:-1;26178:354:0;;;;;:::i;:::-;;:::i;12906:100::-;12960:13;12993:5;12986:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12906:100;:::o;12705:193::-;12807:4;12829:39;171:10;12852:7;12861:6;12829:8;:39::i;:::-;-1:-1:-1;12886:4:0;12705:193;;;;;:::o;27241:223::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;;;;;;;;;27360:9:::1;27355:102;27379:8;:15;27375:1;:19;27355:102;;;27441:4;27416:9;:22;27426:8;27435:1;27426:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;27416:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;27416:22:0;:29;;-1:-1:-1;;27416:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27396:3;::::1;::::0;::::1;:::i;:::-;;;;27355:102;;;;27241:223:::0;;:::o;23439:323::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;23556:4:::1;23534:26;;:18;;;;;;;;;;;:26;;::::0;23512:162:::1;;;::::0;-1:-1:-1;;;23512:162:0;;8455:2:1;23512:162:0::1;::::0;::::1;8437:21:1::0;8494:2;8474:18;;;8467:30;8533:34;8513:18;;;8506:62;8604:34;8584:18;;;8577:62;-1:-1:-1;;;8655:19:1;;;8648:53;8718:19;;23512:162:0::1;8253:490:1::0;23512:162:0::1;23729:18;:25:::0;;;::::1;;-1:-1:-1::0;;;23729:25:0::1;-1:-1:-1::0;;;;23729:25:0;;::::1;::::0;;;::::1;::::0;;23439:323::o;25555:202::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25697:52:::1;25718:6;25726:14;25742:6;25697:20;:52::i;26892:339::-:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27024:22:0;::::1;;::::0;;;:12:::1;:22;::::0;;;;;:30;::::1;;:22;::::0;;::::1;:30;;::::0;27002:181:::1;;;::::0;-1:-1:-1;;;27002:181:0;;8950:2:1;27002:181:0::1;::::0;::::1;8932:21:1::0;8989:3;8969:18;;;8962:31;9029:34;9009:18;;;9002:62;9100:34;9080:18;;;9073:62;9172:34;9151:19;;;9144:63;-1:-1:-1;;;9223:19:1;;;9216:36;9269:19;;27002:181:0::1;8748:546:1::0;27002:181:0::1;-1:-1:-1::0;;;;;27194:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:29;;-1:-1:-1;;27194:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26892:339::o;10714:1742::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;10785:14:::1;::::0;:19;10777:28:::1;;;::::0;::::1;;10816:23;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10816:23:0::1;::::0;::::1;::::0;:5:::1;::::0;:23:::1;::::0;:5;:23:::1;:::i;:::-;-1:-1:-1::0;10850:16:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;10850:16:0::1;::::0;::::1;::::0;:7:::1;::::0;:16:::1;::::0;:7;:16:::1;:::i;:::-;-1:-1:-1::0;10889:2:0::1;10877:14:::0;;-1:-1:-1;;10877:14:0::1;::::0;::::1;::::0;;10931:13:::1;::::0;:2:::1;:13;:::i;:::-;10917:27;::::0;:11:::1;:27;:::i;:::-;10902:12;:42;;;;10955:15;10981:7;10955:34;;11062:13;11087:7;-1:-1:-1::0;;;;;11087:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11078:38:0::1;;11139:4;11159:7;-1:-1:-1::0;;;;;11159:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11078:106;::::0;-1:-1:-1;;;;;;11078:106:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;11078:106:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;11078:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11201:15;:25:::0;;-1:-1:-1;;;;;11201:25:0;;::::1;-1:-1:-1::0;;;;;;11201:25:0;;::::1;;::::0;;;11237:13:::1;:21:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;11062:122;-1:-1:-1;11302:3:0::1;11281:13;13332:12:::0;;;13244:108;11281:13:::1;:17;::::0;11297:1:::1;11281:17;:::i;:::-;11280:25;;;;:::i;:::-;11271:6;:34:::0;11373:4:::1;11357:13;13332:12:::0;;;13244:108;11357:13:::1;:20;;;;:::i;:::-;11356:26;::::0;11381:1:::1;11356:26;:::i;:::-;11330:23;:52:::0;11448:3:::1;11427:13;13332:12:::0;;;13244:108;11427:13:::1;:17;::::0;11443:1:::1;11427:17;:::i;:::-;11426:25;;;;:::i;:::-;11414:9;:37:::0;11511:3:::1;11490:13;13332:12:::0;;;13244:108;11490:13:::1;:17;::::0;11506:1:::1;11490:17;:::i;:::-;11489:25;;;;:::i;:::-;11479:7;:35:::0;11680:12:::1;::::0;11665:10:::1;11655:9;:21:::0;;;::::1;::::0;;;;;;:37;;:21;;:9;:37:::1;::::0;11680:12;;11655:37:::1;:::i;:::-;::::0;;;-1:-1:-1;;11722:12:0::1;11705:14;:29:::0;11757:10:::1;11747:21;::::0;;;:9:::1;:21;::::0;;;;;;;:28;;11771:4:::1;-1:-1:-1::0;;11747:28:0;;::::1;::::0;::::1;::::0;;;11786:12:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;11828:13:::1;:25:::0;;;;;;:32;;;::::1;::::0;::::1;::::0;;11871:15:::1;:27:::0;;;;;;:34;;;::::1;::::0;::::1;::::0;;11934:4:::1;11916:24:::0;;;;;;;;:31;;;::::1;::::0;::::1;::::0;;11968:16:::1;::::0;;-1:-1:-1;;;;;11747:28:0::1;11968:16:::0;;;::::1;::::0;::::1;11958:27:::0;;;;;:34;;;::::1;::::0;::::1;::::0;;12016:16;;;;::::1;::::0;::::1;12003:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12065:16;;;;::::1;::::0;::::1;12051:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12116:16;;::::1;::::0;::::1;12100:33:::0;;;;;;;;:40;;;::::1;::::0;::::1;::::0;;12161:16:::1;::::0;;;::::1;12151:27:::0;;;;;;;;:34;;;::::1;::::0;::::1;::::0;;12209:16;;;::::1;12196:30:::0;;;;;;;;:37;;;::::1;::::0;::::1;::::0;;12258:16;;;::::1;12244:31:::0;;;;;;;;:38;;;::::1;::::0;::::1;::::0;;12309:16;;::::1;12293:33:::0;;;;;;;:40;;;::::1;::::0;::::1;::::0;;10088:42:::1;12344:21:::0;;;;;;:28;;;;::::1;;::::0;;;12423:12:::1;::::0;12390:46;;3582:25:1;;;12390:46:0::1;::::0;3555:18:1;12390:46:0::1;;;;;;;;10766:1690;;10714:1742:::0;:::o;13545:575::-;13677:4;13694:36;13704:6;13712:9;13723:6;13694:9;:36::i;:::-;-1:-1:-1;;;;;13768:19:0;;;13741:24;13768:19;;;:11;:19;;;;;;;;171:10;13768:33;;;;;;;;;13850:6;;13768:33;;13850:6;13834:22;;:65;;;13893:6;13873:16;:26;;13834:65;13812:155;;;;-1:-1:-1;;;13812:155:0;;14178:2:1;13812:155:0;;;14160:21:1;14217:2;14197:18;;;14190:30;14256:34;14236:18;;;14229:62;-1:-1:-1;;;14307:18:1;;;14300:38;14355:19;;13812:155:0;13976:404:1;13812:155:0;13998:6;;-1:-1:-1;;;;;13998:6:0;171:10;13982:22;13978:45;;14016:4;14009:11;;;;;13978:45;14033:57;14042:6;171:10;14064:25;14083:6;14064:16;:25;:::i;:::-;14033:8;:57::i;:::-;14108:4;14101:11;;;13545:575;;;;;;:::o;25860:310::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25966:19:0;::::1;;::::0;;;:9:::1;:19;::::0;;;;;:27;::::1;;:19;::::0;;::::1;:27;;::::0;25944:181:::1;;;::::0;-1:-1:-1;;;25944:181:0;;14720:2:1;25944:181:0::1;::::0;::::1;14702:21:1::0;14759:3;14739:18;;;14732:31;14799:34;14779:18;;;14772:62;14870:34;14850:18;;;14843:62;14942:34;14921:19;;;14914:63;-1:-1:-1;;;14993:19:1;;;14986:39;15042:19;;25944:181:0::1;14518:549:1::0;25944:181:0::1;-1:-1:-1::0;;;;;26136:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:26;;-1:-1:-1;;26136:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25860:310::o;14128:298::-;171:10;14244:4;14338:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14338:34:0;;;;;;;;;;14244:4;;14266:130;;14316:7;;14338:47;;14375:10;;14338:47;:::i;27704:96::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;27771:13:::1;:21:::0;;-1:-1:-1;;27771:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27704:96::o;29330:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29432:16:::1;::::0;-1:-1:-1;;;;;29432:29:0;;::::1;:16:::0;::::1;:29:::0;29410:166:::1;;;;-1:-1:-1::0;;;29410:166:0::1;;;;;;;:::i;:::-;29587:16;:28:::0;;-1:-1:-1;;;;;;29587:28:0::1;-1:-1:-1::0;;;;;29587:28:0;;;::::1;::::0;;;::::1;::::0;;29330:293::o;7806:84::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;7863:6:::1;:19:::0;;-1:-1:-1;;;;;;7863:19:0::1;::::0;;7806:84::o;24156:398::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24313:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24303:7:::1;:49:::0;;;;;;;;;;;24341:10;24378:23:::1;24329:10:::0;24318;24378:23:::1;:::i;:::-;:35;;;;:::i;:::-;24363:12;:50:::0;24487:2:::1;24472:10:::0;24446:23:::1;24459:10:::0;24446;:23:::1;:::i;:::-;:36;;;;:::i;:::-;24445:44;;24424:122;;;::::0;-1:-1:-1;;;24424:122:0;;15770:2:1;24424:122:0::1;::::0;::::1;15752:21:1::0;15809:2;15789:18;;;15782:30;15848:31;15828:18;;;15821:59;15897:18;;24424:122:0::1;15568:353:1::0;24972:160:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25027:13:::1;:20:::0;;-1:-1:-1;;;;25058:25:0;-1:-1:-1;;;25058:25:0;;;25112:12:::1;25094:15;:30:::0;24972:160::o;13014:114::-;13070:13;13113:7;13106:14;;;;;:::i;14434:447::-;171:10;14555:4;14604:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14604:34:0;;;;;;;;;;14671:35;;;;14649:122;;;;-1:-1:-1;;;14649:122:0;;16128:2:1;14649:122:0;;;16110:21:1;16167:2;16147:18;;;16140:30;16206:34;16186:18;;;16179:62;-1:-1:-1;;;16257:18:1;;;16250:35;16302:19;;14649:122:0;15926:401:1;14649:122:0;14782:67;171:10;14805:7;14814:34;14833:15;14814:16;:34;:::i;14782:67::-;-1:-1:-1;14869:4:0;;14434:447;-1:-1:-1;;;14434:447:0:o;14889:197::-;14994:4;15016:40;15026:10;15038:9;15049:6;15016:9;:40::i;29029:293::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;29131:16:::1;::::0;-1:-1:-1;;;;;29131:29:0;;::::1;:16;::::0;;::::1;;:29:::0;29109:166:::1;;;;-1:-1:-1::0;;;29109:166:0::1;;;;;;;:::i;:::-;29286:16;:28:::0;;-1:-1:-1;;;;;29286:28:0;;::::1;;;-1:-1:-1::0;;;;;;29286:28:0;;::::1;::::0;;;::::1;::::0;;29029:293::o;27808:1003::-;7723:6;;27901:13;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27940:23:0;::::1;27932:65;;;::::0;-1:-1:-1;;;27932:65:0;;16534:2:1;27932:65:0::1;::::0;::::1;16516:21:1::0;16573:2;16553:18;;;16546:30;16612:31;16592:18;;;16585:59;16661:18;;27932:65:0::1;16332:353:1::0;27932:65:0::1;28030:15;::::0;-1:-1:-1;;;;;28030:37:0;;::::1;:15:::0;::::1;:37:::0;28008:200:::1;;;::::0;-1:-1:-1;;;28008:200:0;;16892:2:1;28008:200:0::1;::::0;::::1;16874:21:1::0;16931:3;16911:18;;;16904:31;16971:34;16951:18;;;16944:62;17042:34;17022:18;;;17015:62;17114:34;17093:19;;;17086:63;-1:-1:-1;;;17165:19:1;;;17158:48;17223:19;;28008:200:0::1;16690:558:1::0;28008:200:0::1;28219:15;28245:9;28219:36;;28285:7;-1:-1:-1::0;;;;;28285:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28276:35:0::1;;28334:4;28354:7;-1:-1:-1::0;;;;;28354:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28276:103;::::0;-1:-1:-1;;;;;;28276:103:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28276:103:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28276:103:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28268:111:::0;-1:-1:-1;;;;;;28394:19:0;::::1;28390:222;;28491:7;-1:-1:-1::0;;;;;28491:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28482:38:0::1;;28547:4;28571:7;-1:-1:-1::0;;;;;28571:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28482:118;::::0;-1:-1:-1;;;;;;28482:118:0::1;::::0;;;;;;-1:-1:-1;;;;;13545:15:1;;;28482:118:0::1;::::0;::::1;13527:34:1::0;13597:15;;13577:18;;;13570:43;13462:18;;28482:118:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28474:126;;28390:222;28684:13;:21:::0;;-1:-1:-1;;;;;28684:21:0;;::::1;-1:-1:-1::0;;;;;;28684:21:0;;::::1;;::::0;;;28778:15:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;28700:5;27808:1003;-1:-1:-1;27808:1003:0:o;24562:402::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;24721:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;24710:8:::1;:50:::0;;;;;;;;;;;24737:10;24787:23:::1;24749:10:::0;24726;24787:23:::1;:::i;:::-;:36;;;;:::i;:::-;24771:13;:52:::0;;;24882:10;24856:23:::1;24869:10:::0;24856;:23:::1;:::i;27472:224::-:0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27538:19:0::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:26;;27560:4:::1;-1:-1:-1::0;;27538:26:0;;::::1;::::0;::::1;::::0;;;27575:12:::1;:22:::0;;;;;:29;;;::::1;::::0;::::1;::::0;;27615:13:::1;:23:::0;;;;;:30;;;::::1;::::0;::::1;::::0;;27656:15:::1;:25:::0;;;;;:32;;;;::::1;::::0;;::::1;::::0;;27472:224::o;22218:113::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;22295:28:::1;22304:18;22295:8;:28::i;:::-;22218:113:::0;:::o;25385:162::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25499:40:::1;::::0;-1:-1:-1;;;;;25499:32:0;::::1;::::0;:40;::::1;;;::::0;25532:6;;25499:40:::1;::::0;;;25532:6;25499:32;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;26540:344:::0;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26673:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:31;::::1;;:23;::::0;;::::1;:31;;::::0;26651:184:::1;;;::::0;-1:-1:-1;;;26651:184:0;;17455:2:1;26651:184:0::1;::::0;::::1;17437:21:1::0;17494:3;17474:18;;;17467:31;17534:34;17514:18;;;17507:62;17605:34;17585:18;;;17578:62;17677:34;17656:19;;;17649:63;-1:-1:-1;;;17728:19:1;;;17721:38;17776:19;;26651:184:0::1;17253:548:1::0;26651:184:0::1;-1:-1:-1::0;;;;;26846:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:30;;-1:-1:-1;;26846:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26540:344::o;7896:182::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7977:22:0;::::1;7969:73;;;::::0;-1:-1:-1;;;7969:73:0;;18008:2:1;7969:73:0::1;::::0;::::1;17990:21:1::0;18047:2;18027:18;;;18020:30;18086:34;18066:18;;;18059:62;-1:-1:-1;;;18137:18:1;;;18130:36;18183:19;;7969:73:0::1;17806:402:1::0;7969:73:0::1;8053:6;:17:::0;;-1:-1:-1;;;;;;8053:17:0::1;-1:-1:-1::0;;;;;8053:17:0;;;::::1;::::0;;;::::1;::::0;;7896:182::o;25765:87::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;25831:6:::1;:13:::0;;;::::1;;-1:-1:-1::0;;;25831:13:0::1;-1:-1:-1::0;;;;25831:13:0;;::::1;::::0;;;::::1;::::0;;25765:87::o;23770:378::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;13219:9;;;;23948:14:::1;::::0;:2:::1;:14;:::i;:::-;23935:27;::::0;:10;:27:::1;:::i;:::-;23908:23;;:54:::0;23886:190:::1;;;::::0;-1:-1:-1;;;23886:190:0;;18415:2:1;23886:190:0::1;::::0;::::1;18397:21:1::0;18454:2;18434:18;;;18427:30;18493:34;18473:18;;;18466:62;18564:34;18544:18;;;18537:62;-1:-1:-1;;;18615:19:1;;;18608:53;18678:19;;23886:190:0::1;18213:490:1::0;23886:190:0::1;13219:9:::0;;;;24126:14:::1;::::0;:2:::1;:14;:::i;:::-;24113:27;::::0;:10;:27:::1;:::i;:::-;24087:23;:53:::0;-1:-1:-1;23770:378:0:o;26178:354::-;7723:6;;-1:-1:-1;;;;;7723:6:0;7733:10;7723:20;7715:65;;;;-1:-1:-1;;;7715:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26313:25:0;::::1;;::::0;;;:15:::1;:25;::::0;;;;;:33;::::1;;:25;::::0;;::::1;:33;;::::0;26291:190:::1;;;::::0;-1:-1:-1;;;26291:190:0;;18910:2:1;26291:190:0::1;::::0;::::1;18892:21:1::0;18949:3;18929:18;;;18922:31;18989:34;18969:18;;;18962:62;19060:34;19040:18;;;19033:62;19132:34;19111:19;;;19104:63;-1:-1:-1;;;19183:19:1;;;19176:42;19235:19;;26291:190:0::1;18708:552:1::0;26291:190:0::1;-1:-1:-1::0;;;;;26492:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:32;;-1:-1:-1;;26492:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26178:354::o;6697:380::-;-1:-1:-1;;;;;6833:19:0;;6825:68;;;;-1:-1:-1;;;6825:68:0;;19467:2:1;6825:68:0;;;19449:21:1;19506:2;19486:18;;;19479:30;19545:34;19525:18;;;19518:62;-1:-1:-1;;;19596:18:1;;;19589:34;19640:19;;6825:68:0;19265:400:1;6825:68:0;-1:-1:-1;;;;;6912:21:0;;6904:68;;;;-1:-1:-1;;;6904:68:0;;19872:2:1;6904:68:0;;;19854:21:1;19911:2;19891:18;;;19884:30;19950:34;19930:18;;;19923:62;-1:-1:-1;;;20001:18:1;;;19994:32;20043:19;;6904:68:0;19670:398:1;6904:68:0;-1:-1:-1;;;;;6985:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7037:32;;3582:25:1;;;7037:32:0;;3555:18:1;7037:32:0;3436:177:1;25140:237:0;25285:34;;-1:-1:-1;;;25285:34:0;;-1:-1:-1;;;;;20265:32:1;;;25285:34:0;;;20247:51:1;20314:18;;;20307:34;;;25273:9:0;;25285:15;;;;;;20220:18:1;;25285:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25273:46;;25338:4;25330:39;;;;-1:-1:-1;;;25330:39:0;;20804:2:1;25330:39:0;;;20786:21:1;20843:2;20823:18;;;20816:30;-1:-1:-1;;;20862:18:1;;;20855:52;20924:18;;25330:39:0;20602:346:1;25330:39:0;25262:115;25140:237;;;:::o;15094:2997::-;15244:1;15235:6;:10;15227:64;;;;-1:-1:-1;;;15227:64:0;;21155:2:1;15227:64:0;;;21137:21:1;21194:2;21174:18;;;21167:30;21233:34;21213:18;;;21206:62;-1:-1:-1;;;21284:18:1;;;21277:39;21333:19;;15227:64:0;20953:405:1;15227:64:0;15305:6;;-1:-1:-1;;;15305:6:0;;;;15302:972;;;-1:-1:-1;;;;;15328:17:0;;;;;;:9;:17;;;;;;;;15327:18;:43;;;;-1:-1:-1;;;;;;15350:20:0;;;;;;:9;:20;;;;;;;;15349:21;15327:43;15323:124;;;15395:13;;-1:-1:-1;;;15395:13:0;;;;15387:48;;;;-1:-1:-1;;;15387:48:0;;21565:2:1;15387:48:0;;;21547:21:1;21604:2;21584:18;;;21577:30;-1:-1:-1;;;21623:18:1;;;21616:52;21685:18;;15387:48:0;21363:346:1;15387:48:0;15487:13;;-1:-1:-1;;;;;15477:23:0;;;15487:13;;15477:23;:61;;;;-1:-1:-1;;;;;;15518:20:0;;;;;;:9;:20;;;;;;;;15517:21;15477:61;:93;;;;-1:-1:-1;15556:14:0;;-1:-1:-1;;;15556:14:0;;;;15555:15;15477:93;:134;;;;-1:-1:-1;;;;;;15588:23:0;;;;;;:12;:23;;;;;;;;15587:24;15477:134;15459:244;;;15656:6;;15646;:16;;15638:53;;;;-1:-1:-1;;;15638:53:0;;21916:2:1;15638:53:0;;;21898:21:1;21955:2;21935:18;;;21928:30;21994:26;21974:18;;;21967:54;22038:18;;15638:53:0;21714:348:1;15638:53:0;15744:13;;-1:-1:-1;;;;;15731:26:0;;;15744:13;;15731:26;;;;:70;;-1:-1:-1;;;;;;15775:26:0;;;;;;:15;:26;;;;;;;;15774:27;15731:70;15713:259;;;15888:9;;15878:6;15855:20;15865:9;-1:-1:-1;;;;;13511:18:0;13479:7;13511:18;;;;;;;;;;;;13360:177;15855:20;:29;;;;:::i;:::-;:42;;15829:131;;;;-1:-1:-1;;;15829:131:0;;22269:2:1;15829:131:0;;;22251:21:1;22308:2;22288:18;;;22281:30;22347:29;22327:18;;;22320:57;22394:18;;15829:131:0;22067:351:1;15829:131:0;16012:13;;-1:-1:-1;;;;;16002:23:0;;;16012:13;;16002:23;;;;:61;;-1:-1:-1;;;;;;16043:20:0;;;;;;:9;:20;;;;;;;;16042:21;16002:61;:96;;;;-1:-1:-1;;;;;;16081:17:0;;;;;;:9;:17;;;;;;;;16080:18;16002:96;:128;;;;-1:-1:-1;16116:14:0;;-1:-1:-1;;;16116:14:0;;;;16115:15;16002:128;:167;;;;-1:-1:-1;;;;;;16148:21:0;;;;;;:13;:21;;;;;;;;16147:22;16002:167;15984:279;;;16214:7;;16204:6;:17;;16196:55;;;;-1:-1:-1;;;16196:55:0;;22625:2:1;16196:55:0;;;22607:21:1;22664:2;22644:18;;;22637:30;22703:27;22683:18;;;22676:55;22748:18;;16196:55:0;22423:349:1;16196:55:0;16284:16;16311:17;16339;16369;16401:1;16389:9;;:13;:48;;;;-1:-1:-1;;;;;;16420:17:0;;;;;;:9;:17;;;;;;;;16419:18;16389:48;:86;;;;-1:-1:-1;;;;;;16455:20:0;;;;;;:9;:20;;;;;;;;16454:21;16389:86;:144;;;;;16525:8;;16507:15;;:26;;;;:::i;:::-;16492:12;:41;16389:144;16642:14;;16369:164;;-1:-1:-1;;;;16642:14:0;;;;;:48;;-1:-1:-1;;;;;;16673:17:0;;;;;;:9;:17;;;;;;;;16642:48;:85;;;-1:-1:-1;;;;;;16707:20:0;;;;;;:9;:20;;;;;;;;16642:85;:157;;;-1:-1:-1;16755:13:0;;-1:-1:-1;;;;;16745:23:0;;;16755:13;;16745:23;;;;:53;;-1:-1:-1;16785:13:0;;-1:-1:-1;;;;;16772:26:0;;;16785:13;;16772:26;;16745:53;16624:657;;;16836:1;16824:13;;16624:657;;;16902:13;;-1:-1:-1;;;;;16889:26:0;;;16902:13;;16889:26;:43;;;;;16920:12;16919:13;16889:43;16885:396;;;17002:18;;:8;16981:18;16960;;:39;;16981:18;16960:39;:::i;:::-;:60;;;;:::i;:::-;16949:71;;17048:1;17036:13;;16885:396;;;17072:12;17067:214;;17152:17;;:7;17132:17;17112;;:37;;17132:17;17112:37;:::i;:::-;:57;;;;:::i;:::-;17101:68;;17197:1;17185:13;;17067:214;;;17220:12;17216:65;;;17260:9;;17249:20;;17216:65;17325:3;17304:17;17313:8;17304:6;:17;:::i;:::-;17303:25;;;;:::i;:::-;17291:37;;17345:9;17358:1;17345:14;17341:161;;17397:9;17376:17;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;17341:161:0;;-1:-1:-1;17341:161:0;;17428:9;17441:1;17428:14;17424:78;;17481:9;17459:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;17424:78:0;17615:13;;17611:95;;17645:49;17661:6;17677:4;17684:9;17645:15;:49::i;:::-;17736:18;;-1:-1:-1;;;17736:18:0;;;;:58;;;;-1:-1:-1;17781:13:0;;-1:-1:-1;;;;;17771:23:0;;;17781:13;;17771:23;;17736:58;:88;;;;;17823:1;17811:9;:13;17736:88;:118;;;;-1:-1:-1;17841:13:0;;;;17736:118;:186;;;;-1:-1:-1;17899:23:0;;17889:4;13479:7;13511:18;;;;;;;;;;;17871:51;;17736:186;17718:270;;;17949:27;17958:17;;17949:8;:27::i;:::-;18029:54;18045:6;18053:9;18064:18;18073:9;18064:6;:18;:::i;:::-;18029:15;:54::i;:::-;15216:2875;;;;15094:2997;;;:::o;18099:4111::-;12569:14;;-1:-1:-1;;;12569:14:0;;;;12564:122;;12600:14;:21;;-1:-1:-1;;;;12600:21:0;-1:-1:-1;;;12600:21:0;;;18222:4:::1;-1:-1:-1::0;13511:18:0;;;;;;;;;;;18239:17:::1;:38:::0;;;18178:50;-1:-1:-1;18309:35:0::1;18259:18:::0;18178:50;18309:35:::1;:::i;:::-;18288:18;:56;;;;18355:29;18395:30:::0;18436:21:::1;18468:20:::0;18505:12:::1;;18521:1;18505:17:::0;18501:220:::1;;18563:1;18539:25;;18501:220;;;18697:12;::::0;18659:17;;18639::::1;::::0;:37:::1;::::0;18659:17;18639:37:::1;:::i;:::-;18638:71;;;;:::i;:::-;18597:112;;18501:220;18735:13;;18752:1;18735:18:::0;18731:226:::1;;18795:1;18770:26;;18731:226;;;18932:13;::::0;18893:18;;18872::::1;::::0;:39:::1;::::0;18893:18;18872:39:::1;:::i;:::-;18871:74;;;;:::i;:::-;18829:116;;18731:226;18967:31;19001:59;19038:22:::0;19001:21;:59:::1;:::i;:::-;18967:93:::0;-1:-1:-1;19073:30:0::1;19106:27;19132:1;18967:93:::0;19106:27:::1;:::i;:::-;19073:60:::0;-1:-1:-1;19169:21:0::1;19144:22;19218:40;19073:60:::0;19218:15;:40:::1;:::i;:::-;19201:57:::0;-1:-1:-1;19275:10:0;;19271:67:::1;;19302:24;19319:6;19302:16;:24::i;:::-;19350:20;19373:38;19397:14:::0;19373:21:::1;:38;:::i;:::-;19350:61;;19422:24;19500:15;19465:18;;19450:12;:33;;;;:::i;:::-;19449:66;;;;:::i;:::-;19422:93:::0;-1:-1:-1;19526:23:0::1;19552:31;19422:93:::0;19552:12;:31:::1;:::i;:::-;19526:57;;19596:27;19634:26:::0;19671:27:::1;19709:26:::0;19752:12:::1;;19768:1;19752:17:::0;19748:202:::1;;19801:1;19786:16;;19748:202;;;19925:12;::::0;19886:17;;19868:35:::1;::::0;:15;:35:::1;:::i;:::-;19867:71;;;;:::i;:::-;19835:103;;19748:202;19964:13;;19981:1;19964:18:::0;19960:208:::1;;20015:1;19999:17;;19960:208;;;20142:13;::::0;20102:18;;20083:37:::1;::::0;:16;:37:::1;:::i;:::-;20082:74;;;;:::i;:::-;20049:107;;19960:208;20178:19;20233:1;20217:12;20201:13;:28;;;;:::i;:::-;20200:34;;;;:::i;:::-;20178:56:::0;-1:-1:-1;20251:15:0;;20247:1956:::1;;20324:49;20337:22;20361:11;20324:12;:49::i;:::-;20390:19;20412:26;20427:11:::0;20412:12;:26:::1;:::i;:::-;20390:48;;20455:22;20501:17;;20480:18;;:38;;;;:::i;:::-;20455:63;;20535:23;20615:14;20576:18;;20562:11;:32;;;;:::i;:::-;20561:68;;;;:::i;:::-;20535:94:::0;-1:-1:-1;20644:22:0::1;20669:29;20535:94:::0;20669:11;:29:::1;:::i;:::-;20644:54;;20719:13;;20736:1;20719:18:::0;20715:467:::1;;20780:1;20758:23;;20822:1;20800:23;;20715:467;;;20986:18:::0;;20970:13:::1;::::0;:34:::1;::::0;20986:18;20970:34:::1;:::i;:::-;20926:8;:18:::0;20908:36:::1;::::0;:15;:36:::1;:::i;:::-;20907:99;;;;:::i;:::-;21147:18:::0;;21131:13:::1;::::0;20864:142;;-1:-1:-1;21131:34:0::1;::::0;::::1;:::i;:::-;21087:18:::0;;21069:36:::1;::::0;:15;:36:::1;:::i;:::-;21068:98;;;;:::i;:::-;21025:141;;20715:467;21202:12;;21218:1;21202:17:::0;21198:455:::1;;21261:1;21240:22;;21302:1;21281:22;;21198:455;;;21462:17:::0;;21447:12:::1;::::0;:32:::1;::::0;21462:17;21447:32:::1;:::i;:::-;21404:7;:17:::0;21387:34:::1;::::0;:14;:34:::1;:::i;:::-;21386:94;;;;:::i;:::-;21619:17:::0;;21604:12:::1;::::0;21344:136;;-1:-1:-1;21604:32:0::1;::::0;::::1;:::i;:::-;21561:17:::0;;21544:34:::1;::::0;:14;:34:::1;:::i;:::-;21543:94;;;;:::i;:::-;21501:136;;21198:455;21669:25;21697:57;21736:18:::0;21697:19;:57:::1;:::i;:::-;21669:85:::0;-1:-1:-1;21769:25:0::1;21797:57;21836:18:::0;21797:19;:57:::1;:::i;:::-;21769:85:::0;-1:-1:-1;21875:21:0;;21871:116:::1;;21925:16;::::0;21917:54:::1;::::0;21925:16:::1;::::0;::::1;-1:-1:-1::0;;;;;21925:16:0::1;21953:17:::0;21917:35:::1;:54::i;:::-;22005:21:::0;;22001:116:::1;;22055:16;::::0;22047:54:::1;::::0;-1:-1:-1;;;;;22055:16:0::1;22083:17:::0;22047:35:::1;:54::i;:::-;-1:-1:-1::0;;22153:1:0::1;22133:17;:21:::0;;;22169:18:::1;:22:::0;-1:-1:-1;;;;20247:1956:0::1;-1:-1:-1::0;;12652:14:0;:22;;-1:-1:-1;;;;12652:22:0;;;-1:-1:-1;;;;;;;;;;;;;;;18099:4111:0;:::o;5320:404::-;-1:-1:-1;;;;;5460:20:0;;5452:70;;;;-1:-1:-1;;;5452:70:0;;22979:2:1;5452:70:0;;;22961:21:1;23018:2;22998:18;;;22991:30;23057:34;23037:18;;;23030:62;-1:-1:-1;;;23108:18:1;;;23101:35;23153:19;;5452:70:0;22777:401:1;5452:70:0;-1:-1:-1;;;;;5541:23:0;;5533:71;;;;-1:-1:-1;;;5533:71:0;;23385:2:1;5533:71:0;;;23367:21:1;23424:2;23404:18;;;23397:30;23463:34;23443:18;;;23436:62;-1:-1:-1;;;23514:18:1;;;23507:33;23557:19;;5533:71:0;23183:399:1;5533:71:0;5675:41;5690:6;5698:9;5709:6;5675:14;:41::i;22339:572::-;22500:16;;;22514:1;22500:16;;;;;;;;22476:21;;22500:16;;;;;;;;;;-1:-1:-1;22500:16:0;22476:40;;22545:4;22527;22532:1;22527:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22527:23:0;;;:7;;;;;;;;;;:23;;;;22571:15;;:22;;;-1:-1:-1;;;22571:22:0;;;;:15;;;;;:20;;:22;;;;;22527:7;;22571:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22561:4;22566:1;22561:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22561:32:0;;;:7;;;;;;;;;:32;22638:15;;22606:62;;22623:4;;22638:15;22656:11;22606:8;:62::i;:::-;22707:15;;:196;;-1:-1:-1;;;22707:196:0;;-1:-1:-1;;;;;22707:15:0;;;;:66;;:196;;22788:11;;22707:15;;22830:4;;22857;;22877:15;;22707:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22394:517;22339:572;:::o;22919:512::-;23099:15;;23067:62;;23084:4;;-1:-1:-1;;;;;23099:15:0;23117:11;23067:8;:62::i;:::-;23172:15;;23376:6;;23172:251;;-1:-1:-1;;;23172:251:0;;23244:4;23172:251;;;24913:34:1;24963:18;;;24956:34;;;23172:15:0;25006:18:1;;;24999:34;;;25049:18;;;25042:34;-1:-1:-1;;;;;23376:6:0;;;25092:19:1;;;25085:44;23397:15:0;25145:19:1;;;25138:35;23172:15:0;;;:31;;23211:9;;24847:19:1;;23172:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22919:512;;:::o;7240:391::-;7369:6;7344:21;:31;;7322:110;;;;-1:-1:-1;;;7322:110:0;;25697:2:1;7322:110:0;;;25679:21:1;25736:2;25716:18;;;25709:30;25775:31;25755:18;;;25748:59;25824:18;;7322:110:0;25495:353:1;7322:110:0;7446:12;7464:9;-1:-1:-1;;;;;7464:14:0;7486:6;7464:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7445:52;;;7530:7;7508:115;;;;-1:-1:-1;;;7508:115:0;;26265:2:1;7508:115:0;;;26247:21:1;26304:2;26284:18;;;26277:30;26343:34;26323:18;;;26316:62;26414:28;26394:18;;;26387:56;26460:19;;7508:115:0;26063:422:1;5732:455:0;-1:-1:-1;;;;;5893:17:0;;5869:21;5893:17;;;;;;;;;;;5943:23;;;;5921:111;;;;-1:-1:-1;;;5921:111:0;;26692:2:1;5921:111:0;;;26674:21:1;26731:2;26711:18;;;26704:30;26770:34;26750:18;;;26743:62;-1:-1:-1;;;26821:18:1;;;26814:36;26867:19;;5921:111:0;26490:402:1;5921:111:0;6063:22;6079:6;6063:13;:22;:::i;:::-;-1:-1:-1;;;;;6043:17:0;;;:9;:17;;;;;;;;;;;:42;;;;6096:20;;;;;;;;:30;;6120:6;;6043:9;6096:30;;6120:6;;6096:30;:::i;:::-;;;;;;;;6161:9;-1:-1:-1;;;;;6144:35:0;6153:6;-1:-1:-1;;;;;6144:35:0;;6172:6;6144:35;;;;3582:25:1;;3570:2;3555:18;;3436:177;6144:35:0;;;;;;;;5858:329;5732:455;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:134;771:20;;800:31;771:20;800:31;:::i;:::-;703:134;;;:::o;842:247::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;1009:9;996:23;1028:31;1053:5;1028:31;:::i;1286:315::-;1354:6;1362;1415:2;1403:9;1394:7;1390:23;1386:32;1383:52;;;1431:1;1428;1421:12;1383:52;1470:9;1457:23;1489:31;1514:5;1489:31;:::i;:::-;1539:5;1591:2;1576:18;;;;1563:32;;-1:-1:-1;;;1286:315:1:o;1606:127::-;1667:10;1662:3;1658:20;1655:1;1648:31;1698:4;1695:1;1688:15;1722:4;1719:1;1712:15;1738:118;1824:5;1817:13;1810:21;1803:5;1800:32;1790:60;;1846:1;1843;1836:12;1861:128;1926:20;;1955:28;1926:20;1955:28;:::i;1994:1191::-;2084:6;2092;2145:2;2133:9;2124:7;2120:23;2116:32;2113:52;;;2161:1;2158;2151:12;2113:52;2201:9;2188:23;2230:18;2271:2;2263:6;2260:14;2257:34;;;2287:1;2284;2277:12;2257:34;2325:6;2314:9;2310:22;2300:32;;2370:7;2363:4;2359:2;2355:13;2351:27;2341:55;;2392:1;2389;2382:12;2341:55;2428:2;2415:16;2450:4;2473:2;2469;2466:10;2463:36;;;2479:18;;:::i;:::-;2525:2;2522:1;2518:10;2557:2;2551:9;2620:2;2616:7;2611:2;2607;2603:11;2599:25;2591:6;2587:38;2675:6;2663:10;2660:22;2655:2;2643:10;2640:18;2637:46;2634:72;;;2686:18;;:::i;:::-;2722:2;2715:22;2772:18;;;2806:15;;;;-1:-1:-1;2848:11:1;;;2844:20;;;2876:19;;;2873:39;;;2908:1;2905;2898:12;2873:39;2932:11;;;;2952:148;2968:6;2963:3;2960:15;2952:148;;;3034:23;3053:3;3034:23;:::i;:::-;3022:36;;2985:12;;;;3078;;;;2952:148;;;3119:6;-1:-1:-1;3144:35:1;;-1:-1:-1;3160:18:1;;;3144:35;:::i;:::-;3134:45;;;;;;1994:1191;;;;;:::o;3190:241::-;3246:6;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3354:9;3341:23;3373:28;3395:5;3373:28;:::i;4049:469::-;4139:6;4147;4155;4208:2;4196:9;4187:7;4183:23;4179:32;4176:52;;;4224:1;4221;4214:12;4176:52;4263:9;4250:23;4282:31;4307:5;4282:31;:::i;:::-;4332:5;-1:-1:-1;4389:2:1;4374:18;;4361:32;4402:33;4361:32;4402:33;:::i;:::-;4049:469;;4454:7;;-1:-1:-1;;;4508:2:1;4493:18;;;;4480:32;;4049:469::o;4523:382::-;4588:6;4596;4649:2;4637:9;4628:7;4624:23;4620:32;4617:52;;;4665:1;4662;4655:12;4617:52;4704:9;4691:23;4723:31;4748:5;4723:31;:::i;:::-;4773:5;-1:-1:-1;4830:2:1;4815:18;;4802:32;4843:30;4802:32;4843:30;:::i;:::-;4892:7;4882:17;;;4523:382;;;;;:::o;5560:316::-;5637:6;5645;5653;5706:2;5694:9;5685:7;5681:23;5677:32;5674:52;;;5722:1;5719;5712:12;5674:52;-1:-1:-1;;5745:23:1;;;5815:2;5800:18;;5787:32;;-1:-1:-1;5866:2:1;5851:18;;;5838:32;;5560:316;-1:-1:-1;5560:316:1:o;5881:180::-;5940:6;5993:2;5981:9;5972:7;5968:23;5964:32;5961:52;;;6009:1;6006;5999:12;5961:52;-1:-1:-1;6032:23:1;;5881:180;-1:-1:-1;5881:180:1:o;6066:388::-;6134:6;6142;6195:2;6183:9;6174:7;6170:23;6166:32;6163:52;;;6211:1;6208;6201:12;6163:52;6250:9;6237:23;6269:31;6294:5;6269:31;:::i;:::-;6319:5;-1:-1:-1;6376:2:1;6361:18;;6348:32;6389:33;6348:32;6389:33;:::i;6459:315::-;6527:6;6535;6588:2;6576:9;6567:7;6563:23;6559:32;6556:52;;;6604:1;6601;6594:12;6556:52;6640:9;6627:23;6617:33;;6700:2;6689:9;6685:18;6672:32;6713:31;6738:5;6713:31;:::i;7103:380::-;7182:1;7178:12;;;;7225;;;7246:61;;7300:4;7292:6;7288:17;7278:27;;7246:61;7353:2;7345:6;7342:14;7322:18;7319:38;7316:161;;7399:10;7394:3;7390:20;7387:1;7380:31;7434:4;7431:1;7424:15;7462:4;7459:1;7452:15;7316:161;;7103:380;;;:::o;7488:356::-;7690:2;7672:21;;;7709:18;;;7702:30;7768:34;7763:2;7748:18;;7741:62;7835:2;7820:18;;7488:356::o;7849:127::-;7910:10;7905:3;7901:20;7898:1;7891:31;7941:4;7938:1;7931:15;7965:4;7962:1;7955:15;7981:127;8042:10;8037:3;8033:20;8030:1;8023:31;8073:4;8070:1;8063:15;8097:4;8094:1;8087:15;8113:135;8152:3;8173:17;;;8170:43;;8193:18;;:::i;:::-;-1:-1:-1;8240:1:1;8229:13;;8113:135::o;9425:545::-;9527:2;9522:3;9519:11;9516:448;;;9563:1;9588:5;9584:2;9577:17;9633:4;9629:2;9619:19;9703:2;9691:10;9687:19;9684:1;9680:27;9674:4;9670:38;9739:4;9727:10;9724:20;9721:47;;;-1:-1:-1;9762:4:1;9721:47;9817:2;9812:3;9808:12;9805:1;9801:20;9795:4;9791:31;9781:41;;9872:82;9890:2;9883:5;9880:13;9872:82;;;9935:17;;;9916:1;9905:13;9872:82;;10146:1352;10272:3;10266:10;10299:18;10291:6;10288:30;10285:56;;;10321:18;;:::i;:::-;10350:97;10440:6;10400:38;10432:4;10426:11;10400:38;:::i;:::-;10394:4;10350:97;:::i;:::-;10502:4;;10566:2;10555:14;;10583:1;10578:663;;;;11285:1;11302:6;11299:89;;;-1:-1:-1;11354:19:1;;;11348:26;11299:89;-1:-1:-1;;10103:1:1;10099:11;;;10095:24;10091:29;10081:40;10127:1;10123:11;;;10078:57;11401:81;;10548:944;;10578:663;9372:1;9365:14;;;9409:4;9396:18;;-1:-1:-1;;10614:20:1;;;10732:236;10746:7;10743:1;10740:14;10732:236;;;10835:19;;;10829:26;10814:42;;10927:27;;;;10895:1;10883:14;;;;10762:19;;10732:236;;;10736:3;10996:6;10987:7;10984:19;10981:201;;;11057:19;;;11051:26;-1:-1:-1;;11140:1:1;11136:14;;;11152:3;11132:24;11128:37;11124:42;11109:58;11094:74;;10981:201;-1:-1:-1;;;;;11228:1:1;11212:14;;;11208:22;11195:36;;-1:-1:-1;10146:1352:1:o;11503:422::-;11592:1;11635:5;11592:1;11649:270;11670:7;11660:8;11657:21;11649:270;;;11729:4;11725:1;11721:6;11717:17;11711:4;11708:27;11705:53;;;11738:18;;:::i;:::-;11788:7;11778:8;11774:22;11771:55;;;11808:16;;;;11771:55;11887:22;;;;11847:15;;;;11649:270;;;11653:3;11503:422;;;;;:::o;11930:806::-;11979:5;12009:8;11999:80;;-1:-1:-1;12050:1:1;12064:5;;11999:80;12098:4;12088:76;;-1:-1:-1;12135:1:1;12149:5;;12088:76;12180:4;12198:1;12193:59;;;;12266:1;12261:130;;;;12173:218;;12193:59;12223:1;12214:10;;12237:5;;;12261:130;12298:3;12288:8;12285:17;12282:43;;;12305:18;;:::i;:::-;-1:-1:-1;;12361:1:1;12347:16;;12376:5;;12173:218;;12475:2;12465:8;12462:16;12456:3;12450:4;12447:13;12443:36;12437:2;12427:8;12424:16;12419:2;12413:4;12410:12;12406:35;12403:77;12400:159;;;-1:-1:-1;12512:19:1;;;12544:5;;12400:159;12591:34;12616:8;12610:4;12591:34;:::i;:::-;12661:6;12657:1;12653:6;12649:19;12640:7;12637:32;12634:58;;;12672:18;;:::i;:::-;12710:20;;11930:806;-1:-1:-1;;;11930:806:1:o;12741:140::-;12799:5;12828:47;12869:4;12859:8;12855:19;12849:4;12828:47;:::i;12886:168::-;12959:9;;;12990;;13007:15;;;13001:22;;12987:37;12977:71;;13028:18;;:::i;13059:251::-;13129:6;13182:2;13170:9;13161:7;13157:23;13153:32;13150:52;;;13198:1;13195;13188:12;13150:52;13230:9;13224:16;13249:31;13274:5;13249:31;:::i;13624:217::-;13664:1;13690;13680:132;;13734:10;13729:3;13725:20;13722:1;13715:31;13769:4;13766:1;13759:15;13797:4;13794:1;13787:15;13680:132;-1:-1:-1;13826:9:1;;13624:217::o;13846:125::-;13911:9;;;13932:10;;;13929:36;;;13945:18;;:::i;14385:128::-;14452:9;;;14473:11;;;14470:37;;;14487:18;;:::i;15072:491::-;15274:2;15256:21;;;15313:2;15293:18;;;15286:30;15352:34;15347:2;15332:18;;15325:62;15423:34;15418:2;15403:18;;15396:62;15495:25;15489:3;15474:19;;15467:54;15553:3;15538:19;;15072:491::o;20352:245::-;20419:6;20472:2;20460:9;20451:7;20447:23;20443:32;20440:52;;;20488:1;20485;20478:12;20440:52;20520:9;20514:16;20539:28;20561:5;20539:28;:::i;23587:980::-;23849:4;23897:3;23886:9;23882:19;23928:6;23917:9;23910:25;23954:2;23992:6;23987:2;23976:9;23972:18;23965:34;24035:3;24030:2;24019:9;24015:18;24008:31;24059:6;24094;24088:13;24125:6;24117;24110:22;24163:3;24152:9;24148:19;24141:26;;24202:2;24194:6;24190:15;24176:29;;24223:1;24233:195;24247:6;24244:1;24241:13;24233:195;;;24312:13;;-1:-1:-1;;;;;24308:39:1;24296:52;;24403:15;;;;24368:12;;;;24344:1;24262:9;24233:195;;;-1:-1:-1;;;;;;;24484:32:1;;;;24479:2;24464:18;;24457:60;-1:-1:-1;;;24548:3:1;24533:19;24526:35;24445:3;23587:980;-1:-1:-1;;;23587:980:1:o;25184:306::-;25272:6;25280;25288;25341:2;25329:9;25320:7;25316:23;25312:32;25309:52;;;25357:1;25354;25347:12;25309:52;25386:9;25380:16;25370:26;;25436:2;25425:9;25421:18;25415:25;25405:35;;25480:2;25469:9;25465:18;25459:25;25449:35;;25184:306;;;;;:::o

Swarm Source

ipfs://6f67ca51857183b07292f15fee49fe6df3fcc6502783e35ca02d28f225374e17
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.