ETH Price: $3,308.73 (+2.19%)

Token

AnteUp (ANTE)
 

Overview

Max Total Supply

100,000,000,000 ANTE

Holders

7

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
ANTE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-22
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

/**

            ░█████╗░███╗░░██╗████████╗███████╗██╗░░░██╗██████╗░  ████████╗░█████╗░██╗░░██╗███████╗███╗░░██╗
            ██╔══██╗████╗░██║╚══██╔══╝██╔════╝██║░░░██║██╔══██╗  ╚══██╔══╝██╔══██╗██║░██╔╝██╔════╝████╗░██║
            ███████║██╔██╗██║░░░██║░░░█████╗░░██║░░░██║██████╔╝  ░░░██║░░░██║░░██║█████═╝░█████╗░░██╔██╗██║
            ██╔══██║██║╚████║░░░██║░░░██╔══╝░░██║░░░██║██╔═══╝░  ░░░██║░░░██║░░██║██╔═██╗░██╔══╝░░██║╚████║
            ██║░░██║██║░╚███║░░░██║░░░███████╗╚██████╔╝██║░░░░░  ░░░██║░░░╚█████╔╝██║░╚██╗███████╗██║░╚███║
            ╚═╝░░╚═╝╚═╝░░╚══╝░░░╚═╝░░░╚══════╝░╚═════╝░╚═╝░░░░░  ░░░╚═╝░░░░╚════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚══╝

*/
interface IBEP20 {
    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
    );
}

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

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = address(msg.sender);
        emit OwnershipTransferred(address(0), _owner);
    }

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract ANTE is Ownable, IBEP20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromWalletHoldingLimit;
    mapping(address => bool) private _isExcludedFromTxLimit;
    mapping(address => bool) private _isAutomaticMarketMaker;
    uint256 public _decimals = 18;
    uint256 public _totalSupply = 100 * 10**9 * 10**_decimals;
    string private _name = "AnteUp";
    string private _symbol = "ANTE";

    address public immutable DeadWalletAddress =
        0x000000000000000000000000000000000000dEaD;
    address payable public DevelopmentWalletAddress =
        payable(0xC24C780A022dB0F15f2417d9d1911665bE436069);

    uint256 public _BuyingLiquidityFee = 3;
    uint256 public _BuyingDevelopmentFee = 5;
    uint256 public _BuyingBurnFee = 2;

    uint256 public _SellingLiquidityFee = 3;
    uint256 public _SellingDevelopmentFee = 5;
    uint256 public _SellingBurnFee = 2;

    uint256 internal feeDenominator = 100;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool internal inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public numTokensSellToAddToLiquidity = 100 * 10**6 * 10**_decimals;
    uint256 public _maxWalletHoldingLimit = 100 * 10**9 * 10**_decimals;
    uint256 public _maxTxLimit = 100 * 10**9 * 10**_decimals;

    event MaxWalletHoldingAmountUpdated(uint256 updatedMaxWalletHoldingAmount);
    event MaxTxHoldingAmountUpdated(uint256 updatedMaxTxAmount);
    event AutomaticMarketMakerPairUpdated(address account, bool status);
    event ExcludedFromFee(address account, bool Status);
    event ExcludedFromWalletHoldingLimit(address account, bool Status);
    event ExcludedFromTxLimit(address account, bool Status);
    event TaxBuyingFeeUpdated(uint256 TaxFees);
    event TaxSellingFeeUpdated(uint256 TaxFees);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntoLiqudity
    );

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

    constructor() {
        _balances[owner()] = _totalSupply;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee and Wallet holding Limits
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[DevelopmentWalletAddress] = true;

        _isExcludedFromTxLimit[address(this)] = true;
        _isExcludedFromTxLimit[owner()] = true;
        _isExcludedFromTxLimit[DevelopmentWalletAddress] = true;

        _isExcludedFromWalletHoldingLimit[address(this)] = true;
        _isExcludedFromWalletHoldingLimit[uniswapV2Pair] = true;
        _isExcludedFromWalletHoldingLimit[DevelopmentWalletAddress] = true;
        _isExcludedFromWalletHoldingLimit[owner()] = true;

        _isAutomaticMarketMaker[uniswapV2Pair] = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

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

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

    function decimals() external view returns (uint256) {
        return _decimals;
    }

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

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

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

    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,
            "IBEP20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        return true;
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludedFromFee(account, true);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit ExcludedFromFee(account, false);
    }

    function isExcludedFromTax(address add) external view returns (bool) {
        return _isExcludedFromFee[add];
    }

    function isExcludedFromWalletLimit(address WalletAddress)
        external
        view
        returns (bool)
    {
        return _isExcludedFromWalletHoldingLimit[WalletAddress];
    }

    function excludeFromMaxWalletHoldingLimit(address account)
        external
        onlyOwner
    {
        _isExcludedFromWalletHoldingLimit[account] = true;
        emit ExcludedFromWalletHoldingLimit(account, true);
    }

    function UpdateMaxWalletHoldingLimit(uint256 maxWalletHoldingAmount)
        external
        onlyOwner
    {
        require(
            maxWalletHoldingAmount * 10**_decimals >=
                50_000_000 * 10**_decimals,
            "Amount should be greater or equal to 50 Millin Tokens"
        );
        _maxWalletHoldingLimit = maxWalletHoldingAmount * 10**_decimals;
        emit MaxWalletHoldingAmountUpdated(_maxWalletHoldingLimit);
    }

    function excludeFromMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = true;
        emit ExcludedFromTxLimit(account, true);
    }

    function includeInMaxTxLimit(address account) external onlyOwner {
        _isExcludedFromTxLimit[account] = false;
        emit ExcludedFromTxLimit(account, false);
    }

    function UpdateMaxTxLimit(uint256 maxTxAmount) external onlyOwner {
        require(
            maxTxAmount * 10**_decimals >= 50_000_000 * 10**_decimals,
            "Amount should be greater or equal to 50 Millin Tokens"
        );
        _maxTxLimit = maxTxAmount * 10**_decimals;
        emit MaxTxHoldingAmountUpdated(_maxTxLimit);
    }

    function isAutomaticMarketMaker(address account)
        external
        view
        returns (bool)
    {
        return _isAutomaticMarketMaker[account];
    }

    function setNewLiquidityPair(address addNewAMM, bool status)
        external
        onlyOwner
    {
        _isAutomaticMarketMaker[addNewAMM] = status;
        emit AutomaticMarketMakerPairUpdated(addNewAMM, status);
    }

    function UpdateWallets(address payable newDevelopmentWallet)
        external
        onlyOwner
    {
        require(
            newDevelopmentWallet != address(0),
            "You can't set zero address"
        );
        DevelopmentWalletAddress = newDevelopmentWallet;
    }

    function UpdateBuyingTaxFees(
        uint256 newLiquidityFee,
        uint256 newDevelopmentFee,
        uint256 newBurnFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newDevelopmentFee + newBurnFee <= 15,
            "you can't set more than 15%"
        );
        _BuyingLiquidityFee = newLiquidityFee;
        _BuyingDevelopmentFee = newDevelopmentFee;
        _BuyingBurnFee = newBurnFee;

        emit TaxBuyingFeeUpdated(
            _BuyingLiquidityFee + _BuyingDevelopmentFee + _BuyingBurnFee
        );
    }

    function UpdateSellingTaxFees(
        uint256 newLiquidityFee,
        uint256 newDevelopmentFee,
        uint256 newBurnFee
    ) external onlyOwner {
        require(
            newLiquidityFee + newDevelopmentFee + newBurnFee <= 15,
            "you can't set more than 15%"
        );
        _SellingLiquidityFee = newLiquidityFee;
        _SellingDevelopmentFee = newDevelopmentFee;
        _SellingBurnFee = newBurnFee;

        emit TaxSellingFeeUpdated(
            _SellingLiquidityFee + _SellingDevelopmentFee + _SellingBurnFee
        );
    }

    function UpdateNoOfTokensSellToGetReward(uint256 thresholdValue)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = thresholdValue * 10**_decimals;
        emit MinTokensBeforeSwapUpdated(numTokensSellToAddToLiquidity);
    }

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

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

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "IBEP20: transfer from the zero address");
        require(
            recipient != address(0),
            "IBEP20: transfer to the zero address"
        );
        require(_balances[sender] >= amount, "You don't have enough balance");

        if (
            !_isExcludedFromWalletHoldingLimit[recipient] && sender != owner()
        ) {
            require(
                balanceOf(recipient) + amount <= _maxWalletHoldingLimit,
                "Wallet Holding limit exceeded"
            );
        }

        if (sender != owner()) {
            require(
                amount <= _maxTxLimit ||
                    _isExcludedFromTxLimit[sender] ||
                    _isExcludedFromTxLimit[recipient],
                "TX Limit Exceeded"
            );
        }

        uint256 totalTax = 0;
        uint256 burnTax = 0;
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            totalTax = 0;
            burnTax = 0;
        } else {
            if (_isAutomaticMarketMaker[recipient]) {
                totalTax =
                    (amount * (_SellingLiquidityFee + _SellingDevelopmentFee)) /
                    (feeDenominator);
                burnTax = (amount * _SellingBurnFee) / feeDenominator;
            } else {
                totalTax =
                    (amount * (_BuyingLiquidityFee + _BuyingDevelopmentFee)) /
                    (feeDenominator);
                burnTax = (amount * _BuyingBurnFee) / feeDenominator;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            !inSwapAndLiquify &&
            recipient == uniswapV2Pair &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > numTokensSellToAddToLiquidity
        ) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;

                uint256 remainingLiquidityToken;
                if (_SellingLiquidityFee + _SellingDevelopmentFee > 0) {
                    remainingLiquidityToken =
                        (contractTokenBalance * (_SellingDevelopmentFee)) /
                        (_SellingDevelopmentFee + _SellingLiquidityFee);
                }

                uint256 liquidityToken;
                if (_SellingLiquidityFee > 0) {
                    liquidityToken =
                        contractTokenBalance -
                        (remainingLiquidityToken);
                } else {
                    if (_SellingDevelopmentFee > 0) {
                        remainingLiquidityToken = contractTokenBalance;
                    }
                }
                // Swap Tokens and Send to Development Wallet
                if (_SellingDevelopmentFee > 0) {
                    swapTokens(remainingLiquidityToken);
                }
                if (liquidityToken > 0) {
                    swapAndLiquify(liquidityToken);
                }
            }
        }

        uint256 amountReceived = amount - (totalTax + burnTax);
        _balances[address(this)] += totalTax;
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] += amountReceived;
        _balances[DeadWalletAddress] += burnTax;

        if (totalTax > 0) {
            emit Transfer(sender, address(this), totalTax);
        }
        if (burnTax > 0) {
            emit Transfer(sender, DeadWalletAddress, burnTax);
        }
        emit Transfer(sender, recipient, amountReceived);
    }

    function swapTokens(uint256 _contractTokenBalance) private lockTheSwap {
        uint256 combineFee = _SellingDevelopmentFee;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(_contractTokenBalance);
        uint256 transferredBalance = address(this).balance - (initialBalance);
        uint256 DevelopmentBalance = (transferredBalance *
            (_SellingDevelopmentFee)) / (combineFee);

        if (DevelopmentBalance > 0) {
            transferToAddressETH(DevelopmentWalletAddress, DevelopmentBalance);
        }
    }

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance - (initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);

        if (address(this).balance > 0) {
            DevelopmentWalletAddress.transfer(address(this).balance);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair 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, // accept any amount of ETH
            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
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AutomaticMarketMakerPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"ExcludedFromTxLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"ExcludedFromWalletHoldingLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxTxAmount","type":"uint256"}],"name":"MaxTxHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"updatedMaxWalletHoldingAmount","type":"uint256"}],"name":"MaxWalletHoldingAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxBuyingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxFees","type":"uint256"}],"name":"TaxSellingFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DeadWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevelopmentWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"newBurnFee","type":"uint256"}],"name":"UpdateBuyingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"UpdateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletHoldingAmount","type":"uint256"}],"name":"UpdateMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdValue","type":"uint256"}],"name":"UpdateNoOfTokensSellToGetReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"newBurnFee","type":"uint256"}],"name":"UpdateSellingTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevelopmentWallet","type":"address"}],"name":"UpdateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_BuyingBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BuyingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SellingLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletHoldingLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWalletHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAutomaticMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"add","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"WalletAddress","type":"address"}],"name":"isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addNewAMM","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setNewLiquidityPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526012600755600754600a6200001a919062000be8565b64174876e8006200002c919062000c39565b6008556040518060400160405280600681526020017f416e7465557000000000000000000000000000000000000000000000000000008152506009908162000075919062000ef4565b506040518060400160405280600481526020017f414e544500000000000000000000000000000000000000000000000000000000815250600a9081620000bc919062000ef4565b5061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525073c24c780a022db0f15f2417d9d1911665be436069600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600c556005600d556002600e556003600f556005601055600260115560646012556001601460156101000a81548160ff021916908315150217905550600754600a62000196919062000be8565b6305f5e100620001a7919062000c39565b601555600754600a620001bb919062000be8565b64174876e800620001cd919062000c39565b601655600754600a620001e1919062000be8565b64174876e800620001f3919062000c39565b6017553480156200020357600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360085460016000620002d662000a3260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062001045565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000407573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042d919062001045565b6040518363ffffffff1660e01b81526004016200044c92919062001088565b6020604051808303816000875af11580156200046c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000492919062001045565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360006200052962000a3260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000620006ba62000a3260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000620008e762000a3260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620009c262000a3260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000a239190620010c6565b60405180910390a350620010e3565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ae95780860481111562000ac15762000ac062000a5b565b5b600185161562000ad15780820291505b808102905062000ae18562000a8a565b945062000aa1565b94509492505050565b60008262000b04576001905062000bd7565b8162000b14576000905062000bd7565b816001811462000b2d576002811462000b385762000b6e565b600191505062000bd7565b60ff84111562000b4d5762000b4c62000a5b565b5b8360020a91508482111562000b675762000b6662000a5b565b5b5062000bd7565b5060208310610133831016604e8410600b841016171562000ba85782820a90508381111562000ba25762000ba162000a5b565b5b62000bd7565b62000bb7848484600162000a97565b9250905081840481111562000bd15762000bd062000a5b565b5b81810290505b9392505050565b6000819050919050565b600062000bf58262000bde565b915062000c028362000bde565b925062000c317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000af2565b905092915050565b600062000c468262000bde565b915062000c538362000bde565b925082820262000c638162000bde565b9150828204841483151762000c7d5762000c7c62000a5b565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d0657607f821691505b60208210810362000d1c5762000d1b62000cbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d47565b62000d92868362000d47565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000dd562000dcf62000dc98462000bde565b62000daa565b62000bde565b9050919050565b6000819050919050565b62000df18362000db4565b62000e0962000e008262000ddc565b84845462000d54565b825550505050565b600090565b62000e2062000e11565b62000e2d81848462000de6565b505050565b5b8181101562000e555762000e4960008262000e16565b60018101905062000e33565b5050565b601f82111562000ea45762000e6e8162000d22565b62000e798462000d37565b8101602085101562000e89578190505b62000ea162000e988562000d37565b83018262000e32565b50505b505050565b600082821c905092915050565b600062000ec96000198460080262000ea9565b1980831691505092915050565b600062000ee4838362000eb6565b9150826002028217905092915050565b62000eff8262000c84565b67ffffffffffffffff81111562000f1b5762000f1a62000c8f565b5b62000f27825462000ced565b62000f3482828562000e59565b600060209050601f83116001811462000f6c576000841562000f57578287015190505b62000f63858262000ed6565b86555062000fd3565b601f19841662000f7c8662000d22565b60005b8281101562000fa65784890151825560018201915060208501945060208101905062000f7f565b8683101562000fc6578489015162000fc2601f89168262000eb6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200100d8262000fe0565b9050919050565b6200101f8162001000565b81146200102b57600080fd5b50565b6000815190506200103f8162001014565b92915050565b6000602082840312156200105e576200105d62000fdb565b5b60006200106e848285016200102e565b91505092915050565b620010828162001000565b82525050565b60006040820190506200109f600083018562001077565b620010ae602083018462001077565b9392505050565b620010c08162000bde565b82525050565b6000602082019050620010dd6000830184620010b5565b92915050565b60805161465b6200110d60003960008181610b7d01528181612ca90152612d92015261465b6000f3fe6080604052600436106102815760003560e01c8063715018a61161014f578063be9e18a4116100c1578063dd62ed3e1161007a578063dd62ed3e146109bd578063ea2f0b37146109fa578063ea4b6a0514610a23578063f2fde38b14610a4e578063f853e25e14610a77578063f8f3c5a914610aa057610288565b8063be9e18a4146108ad578063c49b9a80146108d6578063c5338bf6146108ff578063cb4ca6311461092a578063d12a768814610967578063d73b95a11461099257610288565b806395d89b411161011357806395d89b4114610779578063a27f656d146107a4578063a457c2d7146107cd578063a9059cbb1461080a578063b40f946914610847578063b7cd77941461088457610288565b8063715018a6146106bc57806371547984146106d35780637d3ddc92146106fc5780638da5cb5b146107255780639429b9fe1461075057610288565b806332424aa3116101f357806344b2090a116101ac57806344b2090a146105ac57806349bd5a5e146105d75780634a74bb02146106025780635367230b1461062d57806370035ba51461065657806370a082311461067f57610288565b806332424aa314610488578063356f5379146104b357806339509351146104de5780633979e9ca1461051b5780633eaaf86b14610558578063437823ec1461058357610288565b806313e3c9a11161024557806313e3c9a1146103765780631694505e1461039f57806318160ddd146103ca57806322adf32e146103f557806323b872dd14610420578063313ce5671461045d57610288565b806306fdde031461028d578063095ea7b3146102b85780630a6a7548146102f5578063124035a814610320578063137702d51461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610acb565b6040516102af919061346d565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613528565b610b5d565b6040516102ec9190613583565b60405180910390f35b34801561030157600080fd5b5061030a610b7b565b60405161031791906135ad565b60405180910390f35b34801561032c57600080fd5b50610335610b9f565b60405161034291906135d7565b60405180910390f35b34801561035757600080fd5b50610360610ba5565b60405161036d91906135d7565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906135f2565b610bab565b005b3480156103ab57600080fd5b506103b4610cee565b6040516103c191906136a4565b60405180910390f35b3480156103d657600080fd5b506103df610d14565b6040516103ec91906135d7565b60405180910390f35b34801561040157600080fd5b5061040a610d1e565b60405161041791906136e0565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906136fb565b610d44565b6040516104549190613583565b60405180910390f35b34801561046957600080fd5b50610472610e28565b60405161047f91906135d7565b60405180910390f35b34801561049457600080fd5b5061049d610e32565b6040516104aa91906135d7565b60405180910390f35b3480156104bf57600080fd5b506104c8610e38565b6040516104d591906135d7565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613528565b610e3e565b6040516105129190613583565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d919061374e565b610eea565b60405161054f9190613583565b60405180910390f35b34801561056457600080fd5b5061056d610f40565b60405161057a91906135d7565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061374e565b610f46565b005b3480156105b857600080fd5b506105c1611057565b6040516105ce91906135d7565b60405180910390f35b3480156105e357600080fd5b506105ec61105d565b6040516105f991906135ad565b60405180910390f35b34801561060e57600080fd5b50610617611083565b6040516106249190613583565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906135f2565b611096565b005b34801561066257600080fd5b5061067d6004803603810190610678919061374e565b6111d9565b005b34801561068b57600080fd5b506106a660048036038101906106a1919061374e565b6112ea565b6040516106b391906135d7565b60405180910390f35b3480156106c857600080fd5b506106d1611333565b005b3480156106df57600080fd5b506106fa60048036038101906106f5919061374e565b61146d565b005b34801561070857600080fd5b50610723600480360381019061071e91906137a7565b61157e565b005b34801561073157600080fd5b5061073a61168e565b60405161074791906135ad565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906137e7565b6116b7565b005b34801561078557600080fd5b5061078e61178f565b60405161079b919061346d565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613840565b611821565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613528565b611950565b6040516108019190613583565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613528565b611a44565b60405161083e9190613583565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061374e565b611a62565b60405161087b9190613583565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061374e565b611ab8565b005b3480156108b957600080fd5b506108d460048036038101906108cf91906137e7565b611bc9565b005b3480156108e257600080fd5b506108fd60048036038101906108f8919061386d565b611d1a565b005b34801561090b57600080fd5b50610914611dea565b60405161092191906135d7565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c919061374e565b611df0565b60405161095e9190613583565b60405180910390f35b34801561097357600080fd5b5061097c611e46565b60405161098991906135d7565b60405180910390f35b34801561099e57600080fd5b506109a7611e4c565b6040516109b491906135d7565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061389a565b611e52565b6040516109f191906135d7565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c919061374e565b611ed9565b005b348015610a2f57600080fd5b50610a38611fea565b604051610a4591906135d7565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a70919061374e565b611ff0565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906137e7565b612198565b005b348015610aac57600080fd5b50610ab56122e9565b604051610ac291906135d7565b60405180910390f35b606060098054610ada90613909565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690613909565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b71610b6a6122ef565b84846122f7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60165481565b600e5481565b610bb36122ef565b73ffffffffffffffffffffffffffffffffffffffff16610bd161168e565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613986565b60405180910390fd5b600f818385610c3691906139d5565b610c4091906139d5565b1115610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613a55565b60405180910390fd5b82600f8190555081601081905550806011819055507f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e601154601054600f54610cca91906139d5565b610cd491906139d5565b604051610ce191906135d7565b60405180910390a1505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d518484846124c0565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9c6122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613ae7565b60405180910390fd5b60019150509392505050565b6000600754905090565b60075481565b600c5481565b6000610ee0610e4b6122ef565b848460026000610e596122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610edb91906139d5565b6122f7565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b610f4e6122ef565b73ffffffffffffffffffffffffffffffffffffffff16610f6c61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990613986565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa981600160405161104c929190613b07565b60405180910390a150565b60105481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460159054906101000a900460ff1681565b61109e6122ef565b73ffffffffffffffffffffffffffffffffffffffff166110bc61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613986565b60405180910390fd5b600f81838561112191906139d5565b61112b91906139d5565b111561116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390613a55565b60405180910390fd5b82600c8190555081600d8190555080600e819055507f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f06600e54600d54600c546111b591906139d5565b6111bf91906139d5565b6040516111cc91906135d7565b60405180910390a1505050565b6111e16122ef565b73ffffffffffffffffffffffffffffffffffffffff166111ff61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613986565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507feac43107b492f3176911da7ebb6c25c2fa598121c1e1379bd5883f4c6768ebb38160016040516112df929190613b07565b60405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133b6122ef565b73ffffffffffffffffffffffffffffffffffffffff1661135961168e565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114756122ef565b73ffffffffffffffffffffffffffffffffffffffff1661149361168e565b73ffffffffffffffffffffffffffffffffffffffff16146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613986565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa301a811c39dbd3a2ffd9aea1076306ae8b2a227d5304311a68939f08e3d084a816000604051611573929190613b07565b60405180910390a150565b6115866122ef565b73ffffffffffffffffffffffffffffffffffffffff166115a461168e565b73ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190613986565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b7698282604051611682929190613b07565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116bf6122ef565b73ffffffffffffffffffffffffffffffffffffffff166116dd61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613986565b60405180910390fd5b600754600a6117429190613c63565b8161174d9190613cae565b6015819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0060155460405161178491906135d7565b60405180910390a150565b6060600a805461179e90613909565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90613909565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b6118296122ef565b73ffffffffffffffffffffffffffffffffffffffff1661184761168e565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613d3c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600061195f6122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1390613dce565b60405180910390fd5b611a39611a276122ef565b858584611a349190613dee565b6122f7565b600191505092915050565b6000611a58611a516122ef565b84846124c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ac06122ef565b73ffffffffffffffffffffffffffffffffffffffff16611ade61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613986565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa301a811c39dbd3a2ffd9aea1076306ae8b2a227d5304311a68939f08e3d084a816001604051611bbe929190613b07565b60405180910390a150565b611bd16122ef565b73ffffffffffffffffffffffffffffffffffffffff16611bef61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90613986565b60405180910390fd5b600754600a611c549190613c63565b6302faf080611c639190613cae565b600754600a611c729190613c63565b82611c7d9190613cae565b1015611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590613e94565b60405180910390fd5b600754600a611ccd9190613c63565b81611cd89190613cae565b6016819055507f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa601654604051611d0f91906135d7565b60405180910390a150565b611d226122ef565b73ffffffffffffffffffffffffffffffffffffffff16611d4061168e565b73ffffffffffffffffffffffffffffffffffffffff1614611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613986565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ddf9190613583565b60405180910390a150565b600d5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60115481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ee16122ef565b73ffffffffffffffffffffffffffffffffffffffff16611eff61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613986565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9816000604051611fdf929190613b07565b60405180910390a150565b600f5481565b611ff86122ef565b73ffffffffffffffffffffffffffffffffffffffff1661201661168e565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290613f26565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121a06122ef565b73ffffffffffffffffffffffffffffffffffffffff166121be61168e565b73ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90613986565b60405180910390fd5b600754600a6122239190613c63565b6302faf0806122329190613cae565b600754600a6122419190613c63565b8261224c9190613cae565b101561228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228490613e94565b60405180910390fd5b600754600a61229c9190613c63565b816122a79190613cae565b6017819055507f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc90676017546040516122de91906135d7565b60405180910390a150565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90613fb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc9061404a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124b391906135d7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906140dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361259e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125959061416e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612617906141da565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126ad575061267d61168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561270b57601654816126bf846112ea565b6126c991906139d5565b111561270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270190614246565b60405180910390fd5b5b61271361168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612833576017548111158061279f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127f35750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906142b2565b60405180910390fd5b5b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128d75750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e95760009150600090506129d0565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561298757601254601054600f5461294e91906139d5565b846129599190613cae565b6129639190614301565b9150601254601154846129769190613cae565b6129809190614301565b90506129cf565b601254600d54600c5461299a91906139d5565b846129a59190613cae565b6129af9190614301565b9150601254600e54846129c29190613cae565b6129cc9190614301565b90505b5b60006129db306112ea565b90506000601554821015905060148054906101000a900460ff16158015612a4f5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8015612a675750601460159054906101000a900460ff165b8015612a9e5750601554612a9c601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112ea565b115b15612b4d578015612b4c576015549150600080601054600f54612ac191906139d5565b1115612af257600f54601054612ad791906139d5565b60105484612ae59190613cae565b612aef9190614301565b90505b600080600f541115612b11578184612b0a9190613dee565b9050612b21565b60006010541115612b20578391505b5b60006010541115612b3657612b3582612e85565b5b6000811115612b4957612b4881612f38565b5b50505b5b60008385612b5b91906139d5565b86612b669190613dee565b905084600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb791906139d5565b9250508190555085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c099190613dee565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9b91906139d5565b9250508190555083600160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1191906139d5565b925050819055506000851115612d87573073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612d7e91906135d7565b60405180910390a35b6000841115612e16577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e0d91906135d7565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e7391906135d7565b60405180910390a35050505050505050565b60016014806101000a81548160ff021916908315150217905550600060105490506000479050612eb48361306a565b60008147612ec29190613dee565b905060008360105483612ed59190613cae565b612edf9190614301565b90506000811115612f1757612f16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826132ad565b5b5050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600282612f619190614301565b905060008183612f719190613dee565b90506000479050612f818361306a565b60008147612f8f9190613dee565b9050612f9b83826132f8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612fce93929190614332565b60405180910390a1600047111561304957600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613047573d6000803e3d6000fd5b505b5050505060006014806101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff81111561308757613086614369565b5b6040519080825280602002602001820160405280156130b55781602001602082028036833780820191505090505b50905030816000815181106130cd576130cc614398565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613174573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319891906143dc565b816001815181106131ac576131ab614398565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061321330601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613277959493929190614502565b600060405180830381600087803b15801561329157600080fd5b505af11580156132a5573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132f3573d6000803e3d6000fd5b505050565b61332530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061337161168e565b426040518863ffffffff1660e01b81526004016133939695949392919061455c565b60606040518083038185885af11580156133b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133d691906145d2565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134175780820151818401526020810190506133fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061343f826133dd565b61344981856133e8565b93506134598185602086016133f9565b61346281613423565b840191505092915050565b600060208201905081810360008301526134878184613434565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134bf82613494565b9050919050565b6134cf816134b4565b81146134da57600080fd5b50565b6000813590506134ec816134c6565b92915050565b6000819050919050565b613505816134f2565b811461351057600080fd5b50565b600081359050613522816134fc565b92915050565b6000806040838503121561353f5761353e61348f565b5b600061354d858286016134dd565b925050602061355e85828601613513565b9150509250929050565b60008115159050919050565b61357d81613568565b82525050565b60006020820190506135986000830184613574565b92915050565b6135a7816134b4565b82525050565b60006020820190506135c2600083018461359e565b92915050565b6135d1816134f2565b82525050565b60006020820190506135ec60008301846135c8565b92915050565b60008060006060848603121561360b5761360a61348f565b5b600061361986828701613513565b935050602061362a86828701613513565b925050604061363b86828701613513565b9150509250925092565b6000819050919050565b600061366a61366561366084613494565b613645565b613494565b9050919050565b600061367c8261364f565b9050919050565b600061368e82613671565b9050919050565b61369e81613683565b82525050565b60006020820190506136b96000830184613695565b92915050565b60006136ca82613494565b9050919050565b6136da816136bf565b82525050565b60006020820190506136f560008301846136d1565b92915050565b6000806000606084860312156137145761371361348f565b5b6000613722868287016134dd565b9350506020613733868287016134dd565b925050604061374486828701613513565b9150509250925092565b6000602082840312156137645761376361348f565b5b6000613772848285016134dd565b91505092915050565b61378481613568565b811461378f57600080fd5b50565b6000813590506137a18161377b565b92915050565b600080604083850312156137be576137bd61348f565b5b60006137cc858286016134dd565b92505060206137dd85828601613792565b9150509250929050565b6000602082840312156137fd576137fc61348f565b5b600061380b84828501613513565b91505092915050565b61381d816136bf565b811461382857600080fd5b50565b60008135905061383a81613814565b92915050565b6000602082840312156138565761385561348f565b5b60006138648482850161382b565b91505092915050565b6000602082840312156138835761388261348f565b5b600061389184828501613792565b91505092915050565b600080604083850312156138b1576138b061348f565b5b60006138bf858286016134dd565b92505060206138d0858286016134dd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392157607f821691505b602082108103613934576139336138da565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139706020836133e8565b915061397b8261393a565b602082019050919050565b6000602082019050818103600083015261399f81613963565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139e0826134f2565b91506139eb836134f2565b9250828201905080821115613a0357613a026139a6565b5b92915050565b7f796f752063616e277420736574206d6f7265207468616e203135250000000000600082015250565b6000613a3f601b836133e8565b9150613a4a82613a09565b602082019050919050565b60006020820190508181036000830152613a6e81613a32565b9050919050565b7f4942455032303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b6000613ad16029836133e8565b9150613adc82613a75565b604082019050919050565b60006020820190508181036000830152613b0081613ac4565b9050919050565b6000604082019050613b1c600083018561359e565b613b296020830184613574565b9392505050565b60008160011c9050919050565b6000808291508390505b6001851115613b8757808604811115613b6357613b626139a6565b5b6001851615613b725780820291505b8081029050613b8085613b30565b9450613b47565b94509492505050565b600082613ba05760019050613c5c565b81613bae5760009050613c5c565b8160018114613bc45760028114613bce57613bfd565b6001915050613c5c565b60ff841115613be057613bdf6139a6565b5b8360020a915084821115613bf757613bf66139a6565b5b50613c5c565b5060208310610133831016604e8410600b8410161715613c325782820a905083811115613c2d57613c2c6139a6565b5b613c5c565b613c3f8484846001613b3d565b92509050818404811115613c5657613c556139a6565b5b81810290505b9392505050565b6000613c6e826134f2565b9150613c79836134f2565b9250613ca67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b90565b905092915050565b6000613cb9826134f2565b9150613cc4836134f2565b9250828202613cd2816134f2565b91508282048414831517613ce957613ce86139a6565b5b5092915050565b7f596f752063616e277420736574207a65726f2061646472657373000000000000600082015250565b6000613d26601a836133e8565b9150613d3182613cf0565b602082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000613db86026836133e8565b9150613dc382613d5c565b604082019050919050565b60006020820190508181036000830152613de781613dab565b9050919050565b6000613df9826134f2565b9150613e04836134f2565b9250828203905081811115613e1c57613e1b6139a6565b5b92915050565b7f416d6f756e742073686f756c642062652067726561746572206f72206571756160008201527f6c20746f203530204d696c6c696e20546f6b656e730000000000000000000000602082015250565b6000613e7e6035836133e8565b9150613e8982613e22565b604082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f106026836133e8565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4942455032303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa26025836133e8565b9150613fad82613f46565b604082019050919050565b60006020820190508181036000830152613fd181613f95565b9050919050565b7f4942455032303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140346023836133e8565b915061403f82613fd8565b604082019050919050565b6000602082019050818103600083015261406381614027565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c66026836133e8565b91506140d18261406a565b604082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141586024836133e8565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000600082015250565b60006141c4601d836133e8565b91506141cf8261418e565b602082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000600082015250565b6000614230601d836133e8565b915061423b826141fa565b602082019050919050565b6000602082019050818103600083015261425f81614223565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061429c6011836133e8565b91506142a782614266565b602082019050919050565b600060208201905081810360008301526142cb8161428f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061430c826134f2565b9150614317836134f2565b925082614327576143266142d2565b5b828204905092915050565b600060608201905061434760008301866135c8565b61435460208301856135c8565b61436160408301846135c8565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506143d6816134c6565b92915050565b6000602082840312156143f2576143f161348f565b5b6000614400848285016143c7565b91505092915050565b6000819050919050565b600061442e61442961442484614409565b613645565b6134f2565b9050919050565b61443e81614413565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614479816134b4565b82525050565b600061448b8383614470565b60208301905092915050565b6000602082019050919050565b60006144af82614444565b6144b9818561444f565b93506144c483614460565b8060005b838110156144f55781516144dc888261447f565b97506144e783614497565b9250506001810190506144c8565b5085935050505092915050565b600060a08201905061451760008301886135c8565b6145246020830187614435565b818103604083015261453681866144a4565b9050614545606083018561359e565b61455260808301846135c8565b9695505050505050565b600060c082019050614571600083018961359e565b61457e60208301886135c8565b61458b6040830187614435565b6145986060830186614435565b6145a5608083018561359e565b6145b260a08301846135c8565b979650505050505050565b6000815190506145cc816134fc565b92915050565b6000806000606084860312156145eb576145ea61348f565b5b60006145f9868287016145bd565b935050602061460a868287016145bd565b925050604061461b868287016145bd565b915050925092509256fea2646970667358221220e7231ee29d82f954080eed41f323bf5963df1c7b7aa2a572dcf66f8f8207753964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063715018a61161014f578063be9e18a4116100c1578063dd62ed3e1161007a578063dd62ed3e146109bd578063ea2f0b37146109fa578063ea4b6a0514610a23578063f2fde38b14610a4e578063f853e25e14610a77578063f8f3c5a914610aa057610288565b8063be9e18a4146108ad578063c49b9a80146108d6578063c5338bf6146108ff578063cb4ca6311461092a578063d12a768814610967578063d73b95a11461099257610288565b806395d89b411161011357806395d89b4114610779578063a27f656d146107a4578063a457c2d7146107cd578063a9059cbb1461080a578063b40f946914610847578063b7cd77941461088457610288565b8063715018a6146106bc57806371547984146106d35780637d3ddc92146106fc5780638da5cb5b146107255780639429b9fe1461075057610288565b806332424aa3116101f357806344b2090a116101ac57806344b2090a146105ac57806349bd5a5e146105d75780634a74bb02146106025780635367230b1461062d57806370035ba51461065657806370a082311461067f57610288565b806332424aa314610488578063356f5379146104b357806339509351146104de5780633979e9ca1461051b5780633eaaf86b14610558578063437823ec1461058357610288565b806313e3c9a11161024557806313e3c9a1146103765780631694505e1461039f57806318160ddd146103ca57806322adf32e146103f557806323b872dd14610420578063313ce5671461045d57610288565b806306fdde031461028d578063095ea7b3146102b85780630a6a7548146102f5578063124035a814610320578063137702d51461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610acb565b6040516102af919061346d565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613528565b610b5d565b6040516102ec9190613583565b60405180910390f35b34801561030157600080fd5b5061030a610b7b565b60405161031791906135ad565b60405180910390f35b34801561032c57600080fd5b50610335610b9f565b60405161034291906135d7565b60405180910390f35b34801561035757600080fd5b50610360610ba5565b60405161036d91906135d7565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906135f2565b610bab565b005b3480156103ab57600080fd5b506103b4610cee565b6040516103c191906136a4565b60405180910390f35b3480156103d657600080fd5b506103df610d14565b6040516103ec91906135d7565b60405180910390f35b34801561040157600080fd5b5061040a610d1e565b60405161041791906136e0565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906136fb565b610d44565b6040516104549190613583565b60405180910390f35b34801561046957600080fd5b50610472610e28565b60405161047f91906135d7565b60405180910390f35b34801561049457600080fd5b5061049d610e32565b6040516104aa91906135d7565b60405180910390f35b3480156104bf57600080fd5b506104c8610e38565b6040516104d591906135d7565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613528565b610e3e565b6040516105129190613583565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d919061374e565b610eea565b60405161054f9190613583565b60405180910390f35b34801561056457600080fd5b5061056d610f40565b60405161057a91906135d7565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061374e565b610f46565b005b3480156105b857600080fd5b506105c1611057565b6040516105ce91906135d7565b60405180910390f35b3480156105e357600080fd5b506105ec61105d565b6040516105f991906135ad565b60405180910390f35b34801561060e57600080fd5b50610617611083565b6040516106249190613583565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f91906135f2565b611096565b005b34801561066257600080fd5b5061067d6004803603810190610678919061374e565b6111d9565b005b34801561068b57600080fd5b506106a660048036038101906106a1919061374e565b6112ea565b6040516106b391906135d7565b60405180910390f35b3480156106c857600080fd5b506106d1611333565b005b3480156106df57600080fd5b506106fa60048036038101906106f5919061374e565b61146d565b005b34801561070857600080fd5b50610723600480360381019061071e91906137a7565b61157e565b005b34801561073157600080fd5b5061073a61168e565b60405161074791906135ad565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906137e7565b6116b7565b005b34801561078557600080fd5b5061078e61178f565b60405161079b919061346d565b60405180910390f35b3480156107b057600080fd5b506107cb60048036038101906107c69190613840565b611821565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613528565b611950565b6040516108019190613583565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613528565b611a44565b60405161083e9190613583565b60405180910390f35b34801561085357600080fd5b5061086e6004803603810190610869919061374e565b611a62565b60405161087b9190613583565b60405180910390f35b34801561089057600080fd5b506108ab60048036038101906108a6919061374e565b611ab8565b005b3480156108b957600080fd5b506108d460048036038101906108cf91906137e7565b611bc9565b005b3480156108e257600080fd5b506108fd60048036038101906108f8919061386d565b611d1a565b005b34801561090b57600080fd5b50610914611dea565b60405161092191906135d7565b60405180910390f35b34801561093657600080fd5b50610951600480360381019061094c919061374e565b611df0565b60405161095e9190613583565b60405180910390f35b34801561097357600080fd5b5061097c611e46565b60405161098991906135d7565b60405180910390f35b34801561099e57600080fd5b506109a7611e4c565b6040516109b491906135d7565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df919061389a565b611e52565b6040516109f191906135d7565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c919061374e565b611ed9565b005b348015610a2f57600080fd5b50610a38611fea565b604051610a4591906135d7565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a70919061374e565b611ff0565b005b348015610a8357600080fd5b50610a9e6004803603810190610a9991906137e7565b612198565b005b348015610aac57600080fd5b50610ab56122e9565b604051610ac291906135d7565b60405180910390f35b606060098054610ada90613909565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0690613909565b8015610b535780601f10610b2857610100808354040283529160200191610b53565b820191906000526020600020905b815481529060010190602001808311610b3657829003601f168201915b5050505050905090565b6000610b71610b6a6122ef565b84846122f7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60165481565b600e5481565b610bb36122ef565b73ffffffffffffffffffffffffffffffffffffffff16610bd161168e565b73ffffffffffffffffffffffffffffffffffffffff1614610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90613986565b60405180910390fd5b600f818385610c3691906139d5565b610c4091906139d5565b1115610c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7890613a55565b60405180910390fd5b82600f8190555081601081905550806011819055507f6b7559a32953872c1ea69c07b9c25b70cc8ac27d03a34d0104f1922feeb21d6e601154601054600f54610cca91906139d5565b610cd491906139d5565b604051610ce191906135d7565b60405180910390a1505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d518484846124c0565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9c6122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1390613ae7565b60405180910390fd5b60019150509392505050565b6000600754905090565b60075481565b600c5481565b6000610ee0610e4b6122ef565b848460026000610e596122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610edb91906139d5565b6122f7565b6001905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b610f4e6122ef565b73ffffffffffffffffffffffffffffffffffffffff16610f6c61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb990613986565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa981600160405161104c929190613b07565b60405180910390a150565b60105481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460159054906101000a900460ff1681565b61109e6122ef565b73ffffffffffffffffffffffffffffffffffffffff166110bc61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613986565b60405180910390fd5b600f81838561112191906139d5565b61112b91906139d5565b111561116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116390613a55565b60405180910390fd5b82600c8190555081600d8190555080600e819055507f0360ea714a628fae03fc01846e588b4b053707ea9418c53df5cb0c44cfa23f06600e54600d54600c546111b591906139d5565b6111bf91906139d5565b6040516111cc91906135d7565b60405180910390a1505050565b6111e16122ef565b73ffffffffffffffffffffffffffffffffffffffff166111ff61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613986565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507feac43107b492f3176911da7ebb6c25c2fa598121c1e1379bd5883f4c6768ebb38160016040516112df929190613b07565b60405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133b6122ef565b73ffffffffffffffffffffffffffffffffffffffff1661135961168e565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6114756122ef565b73ffffffffffffffffffffffffffffffffffffffff1661149361168e565b73ffffffffffffffffffffffffffffffffffffffff16146114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e090613986565b60405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa301a811c39dbd3a2ffd9aea1076306ae8b2a227d5304311a68939f08e3d084a816000604051611573929190613b07565b60405180910390a150565b6115866122ef565b73ffffffffffffffffffffffffffffffffffffffff166115a461168e565b73ffffffffffffffffffffffffffffffffffffffff16146115fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f190613986565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5ac3ff4c6f209a7d21e3c3d2a108256401d41564975256e17867e3202c33b7698282604051611682929190613b07565b60405180910390a15050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116bf6122ef565b73ffffffffffffffffffffffffffffffffffffffff166116dd61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90613986565b60405180910390fd5b600754600a6117429190613c63565b8161174d9190613cae565b6015819055507f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0060155460405161178491906135d7565b60405180910390a150565b6060600a805461179e90613909565b80601f01602080910402602001604051908101604052809291908181526020018280546117ca90613909565b80156118175780601f106117ec57610100808354040283529160200191611817565b820191906000526020600020905b8154815290600101906020018083116117fa57829003601f168201915b5050505050905090565b6118296122ef565b73ffffffffffffffffffffffffffffffffffffffff1661184761168e565b73ffffffffffffffffffffffffffffffffffffffff161461189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613d3c565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002600061195f6122ef565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1390613dce565b60405180910390fd5b611a39611a276122ef565b858584611a349190613dee565b6122f7565b600191505092915050565b6000611a58611a516122ef565b84846124c0565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ac06122ef565b73ffffffffffffffffffffffffffffffffffffffff16611ade61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b90613986565b60405180910390fd5b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa301a811c39dbd3a2ffd9aea1076306ae8b2a227d5304311a68939f08e3d084a816001604051611bbe929190613b07565b60405180910390a150565b611bd16122ef565b73ffffffffffffffffffffffffffffffffffffffff16611bef61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3c90613986565b60405180910390fd5b600754600a611c549190613c63565b6302faf080611c639190613cae565b600754600a611c729190613c63565b82611c7d9190613cae565b1015611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb590613e94565b60405180910390fd5b600754600a611ccd9190613c63565b81611cd89190613cae565b6016819055507f31ec735a6eb0e842df834b09d4b2b0e32f32379aaedcbcb33a8c56e4b01d3baa601654604051611d0f91906135d7565b60405180910390a150565b611d226122ef565b73ffffffffffffffffffffffffffffffffffffffff16611d4061168e565b73ffffffffffffffffffffffffffffffffffffffff1614611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90613986565b60405180910390fd5b80601460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611ddf9190613583565b60405180910390a150565b600d5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60115481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ee16122ef565b73ffffffffffffffffffffffffffffffffffffffff16611eff61168e565b73ffffffffffffffffffffffffffffffffffffffff1614611f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4c90613986565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9816000604051611fdf929190613b07565b60405180910390a150565b600f5481565b611ff86122ef565b73ffffffffffffffffffffffffffffffffffffffff1661201661168e565b73ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390613986565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290613f26565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121a06122ef565b73ffffffffffffffffffffffffffffffffffffffff166121be61168e565b73ffffffffffffffffffffffffffffffffffffffff1614612214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220b90613986565b60405180910390fd5b600754600a6122239190613c63565b6302faf0806122329190613cae565b600754600a6122419190613c63565b8261224c9190613cae565b101561228d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228490613e94565b60405180910390fd5b600754600a61229c9190613c63565b816122a79190613cae565b6017819055507f2f0230c168217a20bed23aafa989b365ae4f826eaaa01b933669653715fc90676017546040516122de91906135d7565b60405180910390a150565b60175481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90613fb8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc9061404a565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124b391906135d7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906140dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361259e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125959061416e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612617906141da565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126ad575061267d61168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561270b57601654816126bf846112ea565b6126c991906139d5565b111561270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270190614246565b60405180910390fd5b5b61271361168e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612833576017548111158061279f5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806127f35750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906142b2565b60405180910390fd5b5b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128d75750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e95760009150600090506129d0565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561298757601254601054600f5461294e91906139d5565b846129599190613cae565b6129639190614301565b9150601254601154846129769190613cae565b6129809190614301565b90506129cf565b601254600d54600c5461299a91906139d5565b846129a59190613cae565b6129af9190614301565b9150601254600e54846129c29190613cae565b6129cc9190614301565b90505b5b60006129db306112ea565b90506000601554821015905060148054906101000a900460ff16158015612a4f5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8015612a675750601460159054906101000a900460ff165b8015612a9e5750601554612a9c601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166112ea565b115b15612b4d578015612b4c576015549150600080601054600f54612ac191906139d5565b1115612af257600f54601054612ad791906139d5565b60105484612ae59190613cae565b612aef9190614301565b90505b600080600f541115612b11578184612b0a9190613dee565b9050612b21565b60006010541115612b20578391505b5b60006010541115612b3657612b3582612e85565b5b6000811115612b4957612b4881612f38565b5b50505b5b60008385612b5b91906139d5565b86612b669190613dee565b905084600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bb791906139d5565b9250508190555085600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c099190613dee565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c9b91906139d5565b9250508190555083600160007f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1191906139d5565b925050819055506000851115612d87573073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612d7e91906135d7565b60405180910390a35b6000841115612e16577f000000000000000000000000000000000000000000000000000000000000dead73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e0d91906135d7565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e7391906135d7565b60405180910390a35050505050505050565b60016014806101000a81548160ff021916908315150217905550600060105490506000479050612eb48361306a565b60008147612ec29190613dee565b905060008360105483612ed59190613cae565b612edf9190614301565b90506000811115612f1757612f16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826132ad565b5b5050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600282612f619190614301565b905060008183612f719190613dee565b90506000479050612f818361306a565b60008147612f8f9190613dee565b9050612f9b83826132f8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612fce93929190614332565b60405180910390a1600047111561304957600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613047573d6000803e3d6000fd5b505b5050505060006014806101000a81548160ff02191690831515021790555050565b6000600267ffffffffffffffff81111561308757613086614369565b5b6040519080825280602002602001820160405280156130b55781602001602082028036833780820191505090505b50905030816000815181106130cd576130cc614398565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613174573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319891906143dc565b816001815181106131ac576131ab614398565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061321330601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613277959493929190614502565b600060405180830381600087803b15801561329157600080fd5b505af11580156132a5573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132f3573d6000803e3d6000fd5b505050565b61332530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122f7565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061337161168e565b426040518863ffffffff1660e01b81526004016133939695949392919061455c565b60606040518083038185885af11580156133b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133d691906145d2565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134175780820151818401526020810190506133fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061343f826133dd565b61344981856133e8565b93506134598185602086016133f9565b61346281613423565b840191505092915050565b600060208201905081810360008301526134878184613434565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134bf82613494565b9050919050565b6134cf816134b4565b81146134da57600080fd5b50565b6000813590506134ec816134c6565b92915050565b6000819050919050565b613505816134f2565b811461351057600080fd5b50565b600081359050613522816134fc565b92915050565b6000806040838503121561353f5761353e61348f565b5b600061354d858286016134dd565b925050602061355e85828601613513565b9150509250929050565b60008115159050919050565b61357d81613568565b82525050565b60006020820190506135986000830184613574565b92915050565b6135a7816134b4565b82525050565b60006020820190506135c2600083018461359e565b92915050565b6135d1816134f2565b82525050565b60006020820190506135ec60008301846135c8565b92915050565b60008060006060848603121561360b5761360a61348f565b5b600061361986828701613513565b935050602061362a86828701613513565b925050604061363b86828701613513565b9150509250925092565b6000819050919050565b600061366a61366561366084613494565b613645565b613494565b9050919050565b600061367c8261364f565b9050919050565b600061368e82613671565b9050919050565b61369e81613683565b82525050565b60006020820190506136b96000830184613695565b92915050565b60006136ca82613494565b9050919050565b6136da816136bf565b82525050565b60006020820190506136f560008301846136d1565b92915050565b6000806000606084860312156137145761371361348f565b5b6000613722868287016134dd565b9350506020613733868287016134dd565b925050604061374486828701613513565b9150509250925092565b6000602082840312156137645761376361348f565b5b6000613772848285016134dd565b91505092915050565b61378481613568565b811461378f57600080fd5b50565b6000813590506137a18161377b565b92915050565b600080604083850312156137be576137bd61348f565b5b60006137cc858286016134dd565b92505060206137dd85828601613792565b9150509250929050565b6000602082840312156137fd576137fc61348f565b5b600061380b84828501613513565b91505092915050565b61381d816136bf565b811461382857600080fd5b50565b60008135905061383a81613814565b92915050565b6000602082840312156138565761385561348f565b5b60006138648482850161382b565b91505092915050565b6000602082840312156138835761388261348f565b5b600061389184828501613792565b91505092915050565b600080604083850312156138b1576138b061348f565b5b60006138bf858286016134dd565b92505060206138d0858286016134dd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061392157607f821691505b602082108103613934576139336138da565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139706020836133e8565b915061397b8261393a565b602082019050919050565b6000602082019050818103600083015261399f81613963565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139e0826134f2565b91506139eb836134f2565b9250828201905080821115613a0357613a026139a6565b5b92915050565b7f796f752063616e277420736574206d6f7265207468616e203135250000000000600082015250565b6000613a3f601b836133e8565b9150613a4a82613a09565b602082019050919050565b60006020820190508181036000830152613a6e81613a32565b9050919050565b7f4942455032303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b6000613ad16029836133e8565b9150613adc82613a75565b604082019050919050565b60006020820190508181036000830152613b0081613ac4565b9050919050565b6000604082019050613b1c600083018561359e565b613b296020830184613574565b9392505050565b60008160011c9050919050565b6000808291508390505b6001851115613b8757808604811115613b6357613b626139a6565b5b6001851615613b725780820291505b8081029050613b8085613b30565b9450613b47565b94509492505050565b600082613ba05760019050613c5c565b81613bae5760009050613c5c565b8160018114613bc45760028114613bce57613bfd565b6001915050613c5c565b60ff841115613be057613bdf6139a6565b5b8360020a915084821115613bf757613bf66139a6565b5b50613c5c565b5060208310610133831016604e8410600b8410161715613c325782820a905083811115613c2d57613c2c6139a6565b5b613c5c565b613c3f8484846001613b3d565b92509050818404811115613c5657613c556139a6565b5b81810290505b9392505050565b6000613c6e826134f2565b9150613c79836134f2565b9250613ca67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b90565b905092915050565b6000613cb9826134f2565b9150613cc4836134f2565b9250828202613cd2816134f2565b91508282048414831517613ce957613ce86139a6565b5b5092915050565b7f596f752063616e277420736574207a65726f2061646472657373000000000000600082015250565b6000613d26601a836133e8565b9150613d3182613cf0565b602082019050919050565b60006020820190508181036000830152613d5581613d19565b9050919050565b7f4942455032303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000613db86026836133e8565b9150613dc382613d5c565b604082019050919050565b60006020820190508181036000830152613de781613dab565b9050919050565b6000613df9826134f2565b9150613e04836134f2565b9250828203905081811115613e1c57613e1b6139a6565b5b92915050565b7f416d6f756e742073686f756c642062652067726561746572206f72206571756160008201527f6c20746f203530204d696c6c696e20546f6b656e730000000000000000000000602082015250565b6000613e7e6035836133e8565b9150613e8982613e22565b604082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f106026836133e8565b9150613f1b82613eb4565b604082019050919050565b60006020820190508181036000830152613f3f81613f03565b9050919050565b7f4942455032303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa26025836133e8565b9150613fad82613f46565b604082019050919050565b60006020820190508181036000830152613fd181613f95565b9050919050565b7f4942455032303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140346023836133e8565b915061403f82613fd8565b604082019050919050565b6000602082019050818103600083015261406381614027565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c66026836133e8565b91506140d18261406a565b604082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141586024836133e8565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f596f7520646f6e2774206861766520656e6f7567682062616c616e6365000000600082015250565b60006141c4601d836133e8565b91506141cf8261418e565b602082019050919050565b600060208201905081810360008301526141f3816141b7565b9050919050565b7f57616c6c657420486f6c64696e67206c696d6974206578636565646564000000600082015250565b6000614230601d836133e8565b915061423b826141fa565b602082019050919050565b6000602082019050818103600083015261425f81614223565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061429c6011836133e8565b91506142a782614266565b602082019050919050565b600060208201905081810360008301526142cb8161428f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061430c826134f2565b9150614317836134f2565b925082614327576143266142d2565b5b828204905092915050565b600060608201905061434760008301866135c8565b61435460208301856135c8565b61436160408301846135c8565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506143d6816134c6565b92915050565b6000602082840312156143f2576143f161348f565b5b6000614400848285016143c7565b91505092915050565b6000819050919050565b600061442e61442961442484614409565b613645565b6134f2565b9050919050565b61443e81614413565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614479816134b4565b82525050565b600061448b8383614470565b60208301905092915050565b6000602082019050919050565b60006144af82614444565b6144b9818561444f565b93506144c483614460565b8060005b838110156144f55781516144dc888261447f565b97506144e783614497565b9250506001810190506144c8565b5085935050505092915050565b600060a08201905061451760008301886135c8565b6145246020830187614435565b818103604083015261453681866144a4565b9050614545606083018561359e565b61455260808301846135c8565b9695505050505050565b600060c082019050614571600083018961359e565b61457e60208301886135c8565b61458b6040830187614435565b6145986060830186614435565b6145a5608083018561359e565b6145b260a08301846135c8565b979650505050505050565b6000815190506145cc816134fc565b92915050565b6000806000606084860312156145eb576145ea61348f565b5b60006145f9868287016145bd565b935050602061460a868287016145bd565b925050604061461b868287016145bd565b915050925092509256fea2646970667358221220e7231ee29d82f954080eed41f323bf5963df1c7b7aa2a572dcf66f8f8207753964736f6c63430008130033

Deployed Bytecode Sourcemap

13110:17771:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16828:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17350:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13710:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14501:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14024:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22300:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14249:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17113:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13813:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23555:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17018:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13532:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13932:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18165:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21014:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13568:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18923:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14112:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14297:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14371:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21727:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19584:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17223:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3469:148;;;;;;;;;;;;;:::i;:::-;;20473:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21190:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3246:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22881:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16921:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21429:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18470:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23331:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19383:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20291:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19822:461;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23150:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13977:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19257:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14420:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14160:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17956:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19090:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14066:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3625:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20655:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14575:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16828:85;16867:13;16900:5;16893:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16828:85;:::o;17350:210::-;17469:4;17491:39;17500:12;:10;:12::i;:::-;17514:7;17523:6;17491:8;:39::i;:::-;17548:4;17541:11;;17350:210;;;;:::o;13710:96::-;;;:::o;14501:67::-;;;;:::o;14024:33::-;;;;:::o;22300:573::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22540:2:::1;22526:10;22506:17;22488:15;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:54;;22466:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22631:15;22608:20;:38;;;;22682:17;22657:22;:42;;;;22728:10;22710:15;:28;;;;22756:109;22839:15;;22814:22;;22791:20;;:45;;;;:::i;:::-;:63;;;;:::i;:::-;22756:109;;;;;;:::i;:::-;;;;;;;;22300:573:::0;;;:::o;14249:41::-;;;;;;;;;;;;;:::o;17113:102::-;17168:7;17195:12;;17188:19;;17113:102;:::o;13813:110::-;;;;;;;;;;;;;:::o;23555:422::-;23695:4;23712:36;23722:6;23730:9;23741:6;23712:9;:36::i;:::-;23759:24;23786:11;:19;23798:6;23786:19;;;;;;;;;;;;;;;:33;23806:12;:10;:12::i;:::-;23786:33;;;;;;;;;;;;;;;;23759:60;;23872:6;23852:16;:26;;23830:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;23965:4;23958:11;;;23555:422;;;;;:::o;17018:87::-;17061:7;17088:9;;17081:16;;17018:87;:::o;13532:29::-;;;;:::o;13932:38::-;;;;:::o;18165:297::-;18280:4;18302:130;18325:12;:10;:12::i;:::-;18352:7;18411:10;18374:11;:25;18386:12;:10;:12::i;:::-;18374:25;;;;;;;;;;;;;;;:34;18400:7;18374:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18302:8;:130::i;:::-;18450:4;18443:11;;18165:297;;;;:::o;21014:168::-;21113:4;21142:23;:32;21166:7;21142:32;;;;;;;;;;;;;;;;;;;;;;;;;21135:39;;21014:168;;;:::o;13568:57::-;;;;:::o;18923:159::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19024:4:::1;18994:18;:27;19013:7;18994:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19044:30;19060:7;19069:4;19044:30;;;;;;;:::i;:::-;;;;;;;;18923:159:::0;:::o;14112:41::-;;;;:::o;14297:28::-;;;;;;;;;;;;;:::o;14371:40::-;;;;;;;;;;;;;:::o;21727:565::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21966:2:::1;21952:10;21932:17;21914:15;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:54;;21892:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22056:15;22034:19;:37;;;;22106:17;22082:21;:41;;;;22151:10;22134:14;:27;;;;22179:105;22259:14;;22235:21;;22213:19;;:43;;;;:::i;:::-;:60;;;;:::i;:::-;22179:105;;;;;;:::i;:::-;;;;;;;;21727:565:::0;;;:::o;19584:230::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:4:::1;19696:33;:42;19730:7;19696:42;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;19761:45;19792:7;19801:4;19761:45;;;;;;;:::i;:::-;;;;;;;;19584:230:::0;:::o;17223:119::-;17289:7;17316:9;:18;17326:7;17316:18;;;;;;;;;;;;;;;;17309:25;;17223:119;;;:::o;3469:148::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3576:1:::1;3539:40;;3560:6;::::0;::::1;;;;;;;;3539:40;;;;;;;;;;;;3607:1;3590:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3469:148::o:0;20473:174::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20583:5:::1;20549:22;:31;20572:7;20549:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20604:35;20624:7;20633:5;20604:35;;;;;;;:::i;:::-;;;;;;;;20473:174:::0;:::o;21190:231::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21341:6:::1;21304:23;:34;21328:9;21304:34;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;21363:50;21395:9;21406:6;21363:50;;;;;;;:::i;:::-;;;;;;;;21190:231:::0;;:::o;3246:87::-;3292:7;3319:6;;;;;;;;;;;3312:13;;3246:87;:::o;22881:261::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23052:9:::1;;23048:2;:13;;;;:::i;:::-;23031:14;:30;;;;:::i;:::-;22999:29;:62;;;;23077:57;23104:29;;23077:57;;;;;;:::i;:::-;;;;;;;;22881:261:::0;:::o;16921:89::-;16962:13;16995:7;16988:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16921:89;:::o;21429:290::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21597:1:::1;21565:34;;:20;:34;;::::0;21543:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21691:20;21664:24;;:47;;;;;;;;;;;;;;;;;;21429:290:::0;:::o;18470:445::-;18590:4;18612:24;18639:11;:25;18651:12;:10;:12::i;:::-;18639:25;;;;;;;;;;;;;;;:34;18665:7;18639:34;;;;;;;;;;;;;;;;18612:61;;18726:15;18706:16;:35;;18684:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;18818:67;18827:12;:10;:12::i;:::-;18841:7;18869:15;18850:16;:34;;;;:::i;:::-;18818:8;:67::i;:::-;18903:4;18896:11;;;18470:445;;;;:::o;23331:216::-;23453:4;23475:42;23485:12;:10;:12::i;:::-;23499:9;23510:6;23475:9;:42::i;:::-;23535:4;23528:11;;23331:216;;;;:::o;19383:193::-;19491:4;19520:33;:48;19554:13;19520:48;;;;;;;;;;;;;;;;;;;;;;;;;19513:55;;19383:193;;;:::o;20291:174::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20403:4:::1;20369:22;:31;20392:7;20369:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;20423:34;20443:7;20452:4;20423:34;;;;;;;:::i;:::-;;;;;;;;20291:174:::0;:::o;19822:461::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20042:9:::1;;20038:2;:13;;;;:::i;:::-;20025:10;:26;;;;:::i;:::-;19995:9;;19991:2;:13;;;;:::i;:::-;19966:22;:38;;;;:::i;:::-;:85;;19944:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;20197:9;;20193:2;:13;;;;:::i;:::-;20168:22;:38;;;;:::i;:::-;20143:22;:63;;;;20222:53;20252:22;;20222:53;;;;;;:::i;:::-;;;;;;;;19822:461:::0;:::o;23150:173::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23253:8:::1;23229:21;;:32;;;;;;;;;;;;;;;;;;23277:38;23306:8;23277:38;;;;;;:::i;:::-;;;;;;;;23150:173:::0;:::o;13977:40::-;;;;:::o;19257:118::-;19320:4;19344:18;:23;19363:3;19344:23;;;;;;;;;;;;;;;;;;;;;;;;;19337:30;;19257:118;;;:::o;14420:74::-;;;;:::o;14160:34::-;;;;:::o;17956:201::-;18090:7;18122:11;:18;18134:5;18122:18;;;;;;;;;;;;;;;:27;18141:7;18122:27;;;;;;;;;;;;;;;;18115:34;;17956:201;;;;:::o;19090:159::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19189:5:::1;19159:18;:27;19178:7;19159:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19210:31;19226:7;19235:5;19210:31;;;;;;;:::i;:::-;;;;;;;;19090:159:::0;:::o;14066:39::-;;;;:::o;3625:281::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3748:1:::1;3728:22;;:8;:22;;::::0;3706:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3861:8;3832:38;;3853:6;::::0;::::1;;;;;;;;3832:38;;;;;;;;;;;;3890:8;3881:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3625:281:::0;:::o;20655:351::-;3392:12;:10;:12::i;:::-;3381:23;;:7;:5;:7::i;:::-;:23;;;3373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20802:9:::1;;20798:2;:13;;;;:::i;:::-;20785:10;:26;;;;:::i;:::-;20772:9;;20768:2;:13;;;;:::i;:::-;20754:11;:27;;;;:::i;:::-;:57;;20732:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;20935:9;;20931:2;:13;;;;:::i;:::-;20917:11;:27;;;;:::i;:::-;20903:11;:41;;;;20960:38;20986:11;;20960:38;;;;;;:::i;:::-;;;;;;;;20655:351:::0;:::o;14575:56::-;;;;:::o;2702:98::-;2755:7;2782:10;2775:17;;2702:98;:::o;17568:380::-;17721:1;17704:19;;:5;:19;;;17696:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;17803:1;17784:21;;:7;:21;;;17776:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;17886:6;17856:11;:18;17868:5;17856:18;;;;;;;;;;;;;;;:27;17875:7;17856:27;;;;;;;;;;;;;;;:36;;;;17924:7;17908:32;;17917:5;17908:32;;;17933:6;17908:32;;;;;;:::i;:::-;;;;;;;;17568:380;;;:::o;24080:3852::-;24238:1;24220:20;;:6;:20;;;24212:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24337:1;24316:23;;:9;:23;;;24294:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:6;24422:9;:17;24432:6;24422:17;;;;;;;;;;;;;;;;:27;;24414:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24515:33;:44;24549:9;24515:44;;;;;;;;;;;;;;;;;;;;;;;;;24514:45;:66;;;;;24573:7;:5;:7::i;:::-;24563:17;;:6;:17;;;;24514:66;24496:269;;;24666:22;;24656:6;24633:20;24643:9;24633;:20::i;:::-;:29;;;;:::i;:::-;:55;;24607:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;24496:269;24791:7;:5;:7::i;:::-;24781:17;;:6;:17;;;24777:263;;24851:11;;24841:6;:21;;:76;;;;24887:22;:30;24910:6;24887:30;;;;;;;;;;;;;;;;;;;;;;;;;24841:76;:134;;;;24942:22;:33;24965:9;24942:33;;;;;;;;;;;;;;;;;;;;;;;;;24841:134;24815:213;;;;;;;;;;;;:::i;:::-;;;;;;;;;24777:263;25052:16;25083:15;25117:18;:26;25136:6;25117:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;25147:18;:29;25166:9;25147:29;;;;;;;;;;;;;;;;;;;;;;;;;25117:59;25113:679;;;25204:1;25193:12;;25230:1;25220:11;;25113:679;;;25268:23;:34;25292:9;25268:34;;;;;;;;;;;;;;;;;;;;;;;;;25264:517;;;25438:14;;25389:22;;25366:20;;:45;;;;:::i;:::-;25356:6;:56;;;;:::i;:::-;25355:98;;;;:::i;:::-;25323:130;;25511:14;;25492:15;;25483:6;:24;;;;:::i;:::-;25482:43;;;;:::i;:::-;25472:53;;25264:517;;;25679:14;;25631:21;;25609:19;;:43;;;;:::i;:::-;25599:6;:54;;;;:::i;:::-;25598:96;;;;:::i;:::-;25566:128;;25751:14;;25733;;25724:6;:23;;;;:::i;:::-;25723:42;;;;:::i;:::-;25713:52;;25264:517;25113:679;25804:28;25835:24;25853:4;25835:9;:24::i;:::-;25804:55;;25872:24;25936:29;;25899:20;:66;;25872:93;;25995:16;;;;;;;;;;25994:17;:60;;;;;26041:13;;;;;;;;;;;26028:26;;:9;:26;;;25994:60;:98;;;;;26071:21;;;;;;;;;;;25994:98;:171;;;;;26136:29;;26109:24;26119:13;;;;;;;;;;;26109:9;:24::i;:::-;:56;25994:171;25976:1414;;;26196:19;26192:1187;;;26259:29;;26236:52;;26309:31;26411:1;26386:22;;26363:20;;:45;;;;:::i;:::-;:49;26359:273;;;26591:20;;26566:22;;:45;;;;:::i;:::-;26513:22;;26489:20;:47;;;;:::i;:::-;26488:124;;;;:::i;:::-;26437:175;;26359:273;26652:22;26720:1;26697:20;;:24;26693:365;;;26837:23;26788:20;:73;;;;:::i;:::-;26746:115;;26693:365;;;26939:1;26914:22;;:26;26910:129;;;26995:20;26969:46;;26910:129;26693:365;27168:1;27143:22;;:26;27139:110;;;27194:35;27205:23;27194:10;:35::i;:::-;27139:110;27288:1;27271:14;:18;27267:97;;;27314:30;27329:14;27314;:30::i;:::-;27267:97;26217:1162;;26192:1187;25976:1414;27402:22;27448:7;27437:8;:18;;;;:::i;:::-;27427:6;:29;;;;:::i;:::-;27402:54;;27495:8;27467:9;:24;27485:4;27467:24;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;27554:6;27534:9;:17;27544:6;27534:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;27514:9;:17;27524:6;27514:17;;;;;;;;;;;;;;;:46;;;;27595:14;27571:9;:20;27581:9;27571:20;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;27652:7;27620:9;:28;27630:17;27620:28;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;27687:1;27676:8;:12;27672:91;;;27735:4;27710:41;;27719:6;27710:41;;;27742:8;27710:41;;;;;;:::i;:::-;;;;;;;;27672:91;27787:1;27777:7;:11;27773:93;;;27827:17;27810:44;;27819:6;27810:44;;;27846:7;27810:44;;;;;;:::i;:::-;;;;;;;;27773:93;27898:9;27881:43;;27890:6;27881:43;;;27909:14;27881:43;;;;;;:::i;:::-;;;;;;;;24201:3731;;;;;24080:3852;;;:::o;27940:568::-;15464:4;15445:16;;:23;;;;;;;;;;;;;;;;;;28022:18:::1;28043:22;;28022:43;;28076:22;28101:21;28076:46;;28133:39;28150:21;28133:16;:39::i;:::-;28183:26;28237:14;28212:21;:40;;;;:::i;:::-;28183:69;;28263:26;28356:10;28328:22;;28293:18;:58;;;;:::i;:::-;28292:75;;;;:::i;:::-;28263:104;;28405:1;28384:18;:22;28380:121;;;28423:66;28444:24;;;;;;;;;;;28470:18;28423:20;:66::i;:::-;28380:121;28011:497;;;;15510:5:::0;15491:16;;:24;;;;;;;;;;;;;;;;;;27940:568;:::o;28664:1096::-;15464:4;15445:16;;:23;;;;;;;;;;;;;;;;;;28800:12:::1;28838:1;28815:20;:24;;;;:::i;:::-;28800:39;;28850:17;28893:4;28870:20;:27;;;;:::i;:::-;28850:47;;29175:22;29200:21;29175:46;;29266:22;29283:4;29266:16;:22::i;:::-;29419:18;29465:14;29440:21;:40;;;;:::i;:::-;29419:61;;29530:35;29543:9;29554:10;29530:12;:35::i;:::-;29583:43;29598:4;29604:10;29616:9;29583:43;;;;;;;;:::i;:::-;;;;;;;;29667:1;29643:21;:25;29639:114;;;29685:24;;;;;;;;;;;:33;;:56;29719:21;29685:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29639:114;28738:1022;;;;15510:5:::0;15491:16;;:24;;;;;;;;;;;;;;;;;;28664:1096;:::o;29768:589::-;29894:21;29932:1;29918:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29894:40;;29963:4;29945;29950:1;29945:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29989:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29979:4;29984:1;29979:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30024:62;30041:4;30056:15;;;;;;;;;;;30074:11;30024:8;:62::i;:::-;30125:15;;;;;;;;;;;:66;;;30206:11;30232:1;30276:4;30303;30323:15;30125:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29823:534;29768:589;:::o;28516:140::-;28622:9;:18;;:26;28641:6;28622:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28516:140;;:::o;30365:513::-;30513:62;30530:4;30545:15;;;;;;;;;;;30563:11;30513:8;:62::i;:::-;30618:15;;;;;;;;;;;:31;;;30657:9;30690:4;30710:11;30736:1;30779;30822:7;:5;:7::i;:::-;30844:15;30618:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30365:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:619::-;4227:6;4235;4243;4292:2;4280:9;4271:7;4267:23;4263:32;4260:119;;;4298:79;;:::i;:::-;4260:119;4418:1;4443:53;4488:7;4479:6;4468:9;4464:22;4443:53;:::i;:::-;4433:63;;4389:117;4545:2;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4516:118;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4150:619;;;;;:::o;4775:60::-;4803:3;4824:5;4817:12;;4775:60;;;:::o;4841:142::-;4891:9;4924:53;4942:34;4951:24;4969:5;4951:24;:::i;:::-;4942:34;:::i;:::-;4924:53;:::i;:::-;4911:66;;4841:142;;;:::o;4989:126::-;5039:9;5072:37;5103:5;5072:37;:::i;:::-;5059:50;;4989:126;;;:::o;5121:152::-;5197:9;5230:37;5261:5;5230:37;:::i;:::-;5217:50;;5121:152;;;:::o;5279:183::-;5392:63;5449:5;5392:63;:::i;:::-;5387:3;5380:76;5279:183;;:::o;5468:274::-;5587:4;5625:2;5614:9;5610:18;5602:26;;5638:97;5732:1;5721:9;5717:17;5708:6;5638:97;:::i;:::-;5468:274;;;;:::o;5748:104::-;5793:7;5822:24;5840:5;5822:24;:::i;:::-;5811:35;;5748:104;;;:::o;5858:142::-;5961:32;5987:5;5961:32;:::i;:::-;5956:3;5949:45;5858:142;;:::o;6006:254::-;6115:4;6153:2;6142:9;6138:18;6130:26;;6166:87;6250:1;6239:9;6235:17;6226:6;6166:87;:::i;:::-;6006:254;;;;:::o;6266:619::-;6343:6;6351;6359;6408:2;6396:9;6387:7;6383:23;6379:32;6376:119;;;6414:79;;:::i;:::-;6376:119;6534:1;6559:53;6604:7;6595:6;6584:9;6580:22;6559:53;:::i;:::-;6549:63;;6505:117;6661:2;6687:53;6732:7;6723:6;6712:9;6708:22;6687:53;:::i;:::-;6677:63;;6632:118;6789:2;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6760:118;6266:619;;;;;:::o;6891:329::-;6950:6;6999:2;6987:9;6978:7;6974:23;6970:32;6967:119;;;7005:79;;:::i;:::-;6967:119;7125:1;7150:53;7195:7;7186:6;7175:9;7171:22;7150:53;:::i;:::-;7140:63;;7096:117;6891:329;;;;:::o;7226:116::-;7296:21;7311:5;7296:21;:::i;:::-;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7226:116;:::o;7348:133::-;7391:5;7429:6;7416:20;7407:29;;7445:30;7469:5;7445:30;:::i;:::-;7348:133;;;;:::o;7487:468::-;7552:6;7560;7609:2;7597:9;7588:7;7584:23;7580:32;7577:119;;;7615:79;;:::i;:::-;7577:119;7735:1;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7706:117;7862:2;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7833:115;7487:468;;;;;:::o;7961:329::-;8020:6;8069:2;8057:9;8048:7;8044:23;8040:32;8037:119;;;8075:79;;:::i;:::-;8037:119;8195:1;8220:53;8265:7;8256:6;8245:9;8241:22;8220:53;:::i;:::-;8210:63;;8166:117;7961:329;;;;:::o;8296:138::-;8377:32;8403:5;8377:32;:::i;:::-;8370:5;8367:43;8357:71;;8424:1;8421;8414:12;8357:71;8296:138;:::o;8440:155::-;8494:5;8532:6;8519:20;8510:29;;8548:41;8583:5;8548:41;:::i;:::-;8440:155;;;;:::o;8601:345::-;8668:6;8717:2;8705:9;8696:7;8692:23;8688:32;8685:119;;;8723:79;;:::i;:::-;8685:119;8843:1;8868:61;8921:7;8912:6;8901:9;8897:22;8868:61;:::i;:::-;8858:71;;8814:125;8601:345;;;;:::o;8952:323::-;9008:6;9057:2;9045:9;9036:7;9032:23;9028:32;9025:119;;;9063:79;;:::i;:::-;9025:119;9183:1;9208:50;9250:7;9241:6;9230:9;9226:22;9208:50;:::i;:::-;9198:60;;9154:114;8952:323;;;;:::o;9281:474::-;9349:6;9357;9406:2;9394:9;9385:7;9381:23;9377:32;9374:119;;;9412:79;;:::i;:::-;9374:119;9532:1;9557:53;9602:7;9593:6;9582:9;9578:22;9557:53;:::i;:::-;9547:63;;9503:117;9659:2;9685:53;9730:7;9721:6;9710:9;9706:22;9685:53;:::i;:::-;9675:63;;9630:118;9281:474;;;;;:::o;9761:180::-;9809:77;9806:1;9799:88;9906:4;9903:1;9896:15;9930:4;9927:1;9920:15;9947:320;9991:6;10028:1;10022:4;10018:12;10008:22;;10075:1;10069:4;10065:12;10096:18;10086:81;;10152:4;10144:6;10140:17;10130:27;;10086:81;10214:2;10206:6;10203:14;10183:18;10180:38;10177:84;;10233:18;;:::i;:::-;10177:84;9998:269;9947:320;;;:::o;10273:182::-;10413:34;10409:1;10401:6;10397:14;10390:58;10273:182;:::o;10461:366::-;10603:3;10624:67;10688:2;10683:3;10624:67;:::i;:::-;10617:74;;10700:93;10789:3;10700:93;:::i;:::-;10818:2;10813:3;10809:12;10802:19;;10461:366;;;:::o;10833:419::-;10999:4;11037:2;11026:9;11022:18;11014:26;;11086:9;11080:4;11076:20;11072:1;11061:9;11057:17;11050:47;11114:131;11240:4;11114:131;:::i;:::-;11106:139;;10833:419;;;:::o;11258:180::-;11306:77;11303:1;11296:88;11403:4;11400:1;11393:15;11427:4;11424:1;11417:15;11444:191;11484:3;11503:20;11521:1;11503:20;:::i;:::-;11498:25;;11537:20;11555:1;11537:20;:::i;:::-;11532:25;;11580:1;11577;11573:9;11566:16;;11601:3;11598:1;11595:10;11592:36;;;11608:18;;:::i;:::-;11592:36;11444:191;;;;:::o;11641:177::-;11781:29;11777:1;11769:6;11765:14;11758:53;11641:177;:::o;11824:366::-;11966:3;11987:67;12051:2;12046:3;11987:67;:::i;:::-;11980:74;;12063:93;12152:3;12063:93;:::i;:::-;12181:2;12176:3;12172:12;12165:19;;11824:366;;;:::o;12196:419::-;12362:4;12400:2;12389:9;12385:18;12377:26;;12449:9;12443:4;12439:20;12435:1;12424:9;12420:17;12413:47;12477:131;12603:4;12477:131;:::i;:::-;12469:139;;12196:419;;;:::o;12621:228::-;12761:34;12757:1;12749:6;12745:14;12738:58;12830:11;12825:2;12817:6;12813:15;12806:36;12621:228;:::o;12855:366::-;12997:3;13018:67;13082:2;13077:3;13018:67;:::i;:::-;13011:74;;13094:93;13183:3;13094:93;:::i;:::-;13212:2;13207:3;13203:12;13196:19;;12855:366;;;:::o;13227:419::-;13393:4;13431:2;13420:9;13416:18;13408:26;;13480:9;13474:4;13470:20;13466:1;13455:9;13451:17;13444:47;13508:131;13634:4;13508:131;:::i;:::-;13500:139;;13227:419;;;:::o;13652:320::-;13767:4;13805:2;13794:9;13790:18;13782:26;;13818:71;13886:1;13875:9;13871:17;13862:6;13818:71;:::i;:::-;13899:66;13961:2;13950:9;13946:18;13937:6;13899:66;:::i;:::-;13652:320;;;;;:::o;13978:102::-;14020:8;14067:5;14064:1;14060:13;14039:34;;13978:102;;;:::o;14086:848::-;14147:5;14154:4;14178:6;14169:15;;14202:5;14193:14;;14216:712;14237:1;14227:8;14224:15;14216:712;;;14332:4;14327:3;14323:14;14317:4;14314:24;14311:50;;;14341:18;;:::i;:::-;14311:50;14391:1;14381:8;14377:16;14374:451;;;14806:4;14799:5;14795:16;14786:25;;14374:451;14856:4;14850;14846:15;14838:23;;14886:32;14909:8;14886:32;:::i;:::-;14874:44;;14216:712;;;14086:848;;;;;;;:::o;14940:1073::-;14994:5;15185:8;15175:40;;15206:1;15197:10;;15208:5;;15175:40;15234:4;15224:36;;15251:1;15242:10;;15253:5;;15224:36;15320:4;15368:1;15363:27;;;;15404:1;15399:191;;;;15313:277;;15363:27;15381:1;15372:10;;15383:5;;;15399:191;15444:3;15434:8;15431:17;15428:43;;;15451:18;;:::i;:::-;15428:43;15500:8;15497:1;15493:16;15484:25;;15535:3;15528:5;15525:14;15522:40;;;15542:18;;:::i;:::-;15522:40;15575:5;;;15313:277;;15699:2;15689:8;15686:16;15680:3;15674:4;15671:13;15667:36;15649:2;15639:8;15636:16;15631:2;15625:4;15622:12;15618:35;15602:111;15599:246;;;15755:8;15749:4;15745:19;15736:28;;15790:3;15783:5;15780:14;15777:40;;;15797:18;;:::i;:::-;15777:40;15830:5;;15599:246;15870:42;15908:3;15898:8;15892:4;15889:1;15870:42;:::i;:::-;15855:57;;;;15944:4;15939:3;15935:14;15928:5;15925:25;15922:51;;;15953:18;;:::i;:::-;15922:51;16002:4;15995:5;15991:16;15982:25;;14940:1073;;;;;;:::o;16019:285::-;16079:5;16103:23;16121:4;16103:23;:::i;:::-;16095:31;;16147:27;16165:8;16147:27;:::i;:::-;16135:39;;16193:104;16230:66;16220:8;16214:4;16193:104;:::i;:::-;16184:113;;16019:285;;;;:::o;16310:410::-;16350:7;16373:20;16391:1;16373:20;:::i;:::-;16368:25;;16407:20;16425:1;16407:20;:::i;:::-;16402:25;;16462:1;16459;16455:9;16484:30;16502:11;16484:30;:::i;:::-;16473:41;;16663:1;16654:7;16650:15;16647:1;16644:22;16624:1;16617:9;16597:83;16574:139;;16693:18;;:::i;:::-;16574:139;16358:362;16310:410;;;;:::o;16726:176::-;16866:28;16862:1;16854:6;16850:14;16843:52;16726:176;:::o;16908:366::-;17050:3;17071:67;17135:2;17130:3;17071:67;:::i;:::-;17064:74;;17147:93;17236:3;17147:93;:::i;:::-;17265:2;17260:3;17256:12;17249:19;;16908:366;;;:::o;17280:419::-;17446:4;17484:2;17473:9;17469:18;17461:26;;17533:9;17527:4;17523:20;17519:1;17508:9;17504:17;17497:47;17561:131;17687:4;17561:131;:::i;:::-;17553:139;;17280:419;;;:::o;17705:225::-;17845:34;17841:1;17833:6;17829:14;17822:58;17914:8;17909:2;17901:6;17897:15;17890:33;17705:225;:::o;17936:366::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:419::-;18474:4;18512:2;18501:9;18497:18;18489:26;;18561:9;18555:4;18551:20;18547:1;18536:9;18532:17;18525:47;18589:131;18715:4;18589:131;:::i;:::-;18581:139;;18308:419;;;:::o;18733:194::-;18773:4;18793:20;18811:1;18793:20;:::i;:::-;18788:25;;18827:20;18845:1;18827:20;:::i;:::-;18822:25;;18871:1;18868;18864:9;18856:17;;18895:1;18889:4;18886:11;18883:37;;;18900:18;;:::i;:::-;18883:37;18733:194;;;;:::o;18933:240::-;19073:34;19069:1;19061:6;19057:14;19050:58;19142:23;19137:2;19129:6;19125:15;19118:48;18933:240;:::o;19179:366::-;19321:3;19342:67;19406:2;19401:3;19342:67;:::i;:::-;19335:74;;19418:93;19507:3;19418:93;:::i;:::-;19536:2;19531:3;19527:12;19520:19;;19179:366;;;:::o;19551:419::-;19717:4;19755:2;19744:9;19740:18;19732:26;;19804:9;19798:4;19794:20;19790:1;19779:9;19775:17;19768:47;19832:131;19958:4;19832:131;:::i;:::-;19824:139;;19551:419;;;:::o;19976:225::-;20116:34;20112:1;20104:6;20100:14;20093:58;20185:8;20180:2;20172:6;20168:15;20161:33;19976:225;:::o;20207:366::-;20349:3;20370:67;20434:2;20429:3;20370:67;:::i;:::-;20363:74;;20446:93;20535:3;20446:93;:::i;:::-;20564:2;20559:3;20555:12;20548:19;;20207:366;;;:::o;20579:419::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20832:9;20826:4;20822:20;20818:1;20807:9;20803:17;20796:47;20860:131;20986:4;20860:131;:::i;:::-;20852:139;;20579:419;;;:::o;21004:224::-;21144:34;21140:1;21132:6;21128:14;21121:58;21213:7;21208:2;21200:6;21196:15;21189:32;21004:224;:::o;21234:366::-;21376:3;21397:67;21461:2;21456:3;21397:67;:::i;:::-;21390:74;;21473:93;21562:3;21473:93;:::i;:::-;21591:2;21586:3;21582:12;21575:19;;21234:366;;;:::o;21606:419::-;21772:4;21810:2;21799:9;21795:18;21787:26;;21859:9;21853:4;21849:20;21845:1;21834:9;21830:17;21823:47;21887:131;22013:4;21887:131;:::i;:::-;21879:139;;21606:419;;;:::o;22031:222::-;22171:34;22167:1;22159:6;22155:14;22148:58;22240:5;22235:2;22227:6;22223:15;22216:30;22031:222;:::o;22259:366::-;22401:3;22422:67;22486:2;22481:3;22422:67;:::i;:::-;22415:74;;22498:93;22587:3;22498:93;:::i;:::-;22616:2;22611:3;22607:12;22600:19;;22259:366;;;:::o;22631:419::-;22797:4;22835:2;22824:9;22820:18;22812:26;;22884:9;22878:4;22874:20;22870:1;22859:9;22855:17;22848:47;22912:131;23038:4;22912:131;:::i;:::-;22904:139;;22631:419;;;:::o;23056:225::-;23196:34;23192:1;23184:6;23180:14;23173:58;23265:8;23260:2;23252:6;23248:15;23241:33;23056:225;:::o;23287:366::-;23429:3;23450:67;23514:2;23509:3;23450:67;:::i;:::-;23443:74;;23526:93;23615:3;23526:93;:::i;:::-;23644:2;23639:3;23635:12;23628:19;;23287:366;;;:::o;23659:419::-;23825:4;23863:2;23852:9;23848:18;23840:26;;23912:9;23906:4;23902:20;23898:1;23887:9;23883:17;23876:47;23940:131;24066:4;23940:131;:::i;:::-;23932:139;;23659:419;;;:::o;24084:223::-;24224:34;24220:1;24212:6;24208:14;24201:58;24293:6;24288:2;24280:6;24276:15;24269:31;24084:223;:::o;24313:366::-;24455:3;24476:67;24540:2;24535:3;24476:67;:::i;:::-;24469:74;;24552:93;24641:3;24552:93;:::i;:::-;24670:2;24665:3;24661:12;24654:19;;24313:366;;;:::o;24685:419::-;24851:4;24889:2;24878:9;24874:18;24866:26;;24938:9;24932:4;24928:20;24924:1;24913:9;24909:17;24902:47;24966:131;25092:4;24966:131;:::i;:::-;24958:139;;24685:419;;;:::o;25110:179::-;25250:31;25246:1;25238:6;25234:14;25227:55;25110:179;:::o;25295:366::-;25437:3;25458:67;25522:2;25517:3;25458:67;:::i;:::-;25451:74;;25534:93;25623:3;25534:93;:::i;:::-;25652:2;25647:3;25643:12;25636:19;;25295:366;;;:::o;25667:419::-;25833:4;25871:2;25860:9;25856:18;25848:26;;25920:9;25914:4;25910:20;25906:1;25895:9;25891:17;25884:47;25948:131;26074:4;25948:131;:::i;:::-;25940:139;;25667:419;;;:::o;26092:179::-;26232:31;26228:1;26220:6;26216:14;26209:55;26092:179;:::o;26277:366::-;26419:3;26440:67;26504:2;26499:3;26440:67;:::i;:::-;26433:74;;26516:93;26605:3;26516:93;:::i;:::-;26634:2;26629:3;26625:12;26618:19;;26277:366;;;:::o;26649:419::-;26815:4;26853:2;26842:9;26838:18;26830:26;;26902:9;26896:4;26892:20;26888:1;26877:9;26873:17;26866:47;26930:131;27056:4;26930:131;:::i;:::-;26922:139;;26649:419;;;:::o;27074:167::-;27214:19;27210:1;27202:6;27198:14;27191:43;27074:167;:::o;27247:366::-;27389:3;27410:67;27474:2;27469:3;27410:67;:::i;:::-;27403:74;;27486:93;27575:3;27486:93;:::i;:::-;27604:2;27599:3;27595:12;27588:19;;27247:366;;;:::o;27619:419::-;27785:4;27823:2;27812:9;27808:18;27800:26;;27872:9;27866:4;27862:20;27858:1;27847:9;27843:17;27836:47;27900:131;28026:4;27900:131;:::i;:::-;27892:139;;27619:419;;;:::o;28044:180::-;28092:77;28089:1;28082:88;28189:4;28186:1;28179:15;28213:4;28210:1;28203:15;28230:185;28270:1;28287:20;28305:1;28287:20;:::i;:::-;28282:25;;28321:20;28339:1;28321:20;:::i;:::-;28316:25;;28360:1;28350:35;;28365:18;;:::i;:::-;28350:35;28407:1;28404;28400:9;28395:14;;28230:185;;;;:::o;28421:442::-;28570:4;28608:2;28597:9;28593:18;28585:26;;28621:71;28689:1;28678:9;28674:17;28665:6;28621:71;:::i;:::-;28702:72;28770:2;28759:9;28755:18;28746:6;28702:72;:::i;:::-;28784;28852:2;28841:9;28837:18;28828:6;28784:72;:::i;:::-;28421:442;;;;;;:::o;28869:180::-;28917:77;28914:1;28907:88;29014:4;29011:1;29004:15;29038:4;29035:1;29028:15;29055:180;29103:77;29100:1;29093:88;29200:4;29197:1;29190:15;29224:4;29221:1;29214:15;29241:143;29298:5;29329:6;29323:13;29314:22;;29345:33;29372:5;29345:33;:::i;:::-;29241:143;;;;:::o;29390:351::-;29460:6;29509:2;29497:9;29488:7;29484:23;29480:32;29477:119;;;29515:79;;:::i;:::-;29477:119;29635:1;29660:64;29716:7;29707:6;29696:9;29692:22;29660:64;:::i;:::-;29650:74;;29606:128;29390:351;;;;:::o;29747:85::-;29792:7;29821:5;29810:16;;29747:85;;;:::o;29838:158::-;29896:9;29929:61;29947:42;29956:32;29982:5;29956:32;:::i;:::-;29947:42;:::i;:::-;29929:61;:::i;:::-;29916:74;;29838:158;;;:::o;30002:147::-;30097:45;30136:5;30097:45;:::i;:::-;30092:3;30085:58;30002:147;;:::o;30155:114::-;30222:6;30256:5;30250:12;30240:22;;30155:114;;;:::o;30275:184::-;30374:11;30408:6;30403:3;30396:19;30448:4;30443:3;30439:14;30424:29;;30275:184;;;;:::o;30465:132::-;30532:4;30555:3;30547:11;;30585:4;30580:3;30576:14;30568:22;;30465:132;;;:::o;30603:108::-;30680:24;30698:5;30680:24;:::i;:::-;30675:3;30668:37;30603:108;;:::o;30717:179::-;30786:10;30807:46;30849:3;30841:6;30807:46;:::i;:::-;30885:4;30880:3;30876:14;30862:28;;30717:179;;;;:::o;30902:113::-;30972:4;31004;30999:3;30995:14;30987:22;;30902:113;;;:::o;31051:732::-;31170:3;31199:54;31247:5;31199:54;:::i;:::-;31269:86;31348:6;31343:3;31269:86;:::i;:::-;31262:93;;31379:56;31429:5;31379:56;:::i;:::-;31458:7;31489:1;31474:284;31499:6;31496:1;31493:13;31474:284;;;31575:6;31569:13;31602:63;31661:3;31646:13;31602:63;:::i;:::-;31595:70;;31688:60;31741:6;31688:60;:::i;:::-;31678:70;;31534:224;31521:1;31518;31514:9;31509:14;;31474:284;;;31478:14;31774:3;31767:10;;31175:608;;;31051:732;;;;:::o;31789:831::-;32052:4;32090:3;32079:9;32075:19;32067:27;;32104:71;32172:1;32161:9;32157:17;32148:6;32104:71;:::i;:::-;32185:80;32261:2;32250:9;32246:18;32237:6;32185:80;:::i;:::-;32312:9;32306:4;32302:20;32297:2;32286:9;32282:18;32275:48;32340:108;32443:4;32434:6;32340:108;:::i;:::-;32332:116;;32458:72;32526:2;32515:9;32511:18;32502:6;32458:72;:::i;:::-;32540:73;32608:3;32597:9;32593:19;32584:6;32540:73;:::i;:::-;31789:831;;;;;;;;:::o;32626:807::-;32875:4;32913:3;32902:9;32898:19;32890:27;;32927:71;32995:1;32984:9;32980:17;32971:6;32927:71;:::i;:::-;33008:72;33076:2;33065:9;33061:18;33052:6;33008:72;:::i;:::-;33090:80;33166:2;33155:9;33151:18;33142:6;33090:80;:::i;:::-;33180;33256:2;33245:9;33241:18;33232:6;33180:80;:::i;:::-;33270:73;33338:3;33327:9;33323:19;33314:6;33270:73;:::i;:::-;33353;33421:3;33410:9;33406:19;33397:6;33353:73;:::i;:::-;32626:807;;;;;;;;;:::o;33439:143::-;33496:5;33527:6;33521:13;33512:22;;33543:33;33570:5;33543:33;:::i;:::-;33439:143;;;;:::o;33588:663::-;33676:6;33684;33692;33741:2;33729:9;33720:7;33716:23;33712:32;33709:119;;;33747:79;;:::i;:::-;33709:119;33867:1;33892:64;33948:7;33939:6;33928:9;33924:22;33892:64;:::i;:::-;33882:74;;33838:128;34005:2;34031:64;34087:7;34078:6;34067:9;34063:22;34031:64;:::i;:::-;34021:74;;33976:129;34144:2;34170:64;34226:7;34217:6;34206:9;34202:22;34170:64;:::i;:::-;34160:74;;34115:129;33588:663;;;;;:::o

Swarm Source

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