ETH Price: $3,429.28 (-2.46%)

Token

Bullish (BULLISH)
 

Overview

Max Total Supply

1,000,000,000 BULLISH

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,889,454.097492612844486817 BULLISH

Value
$0.00
0xe066c8fc0734715b00fbcabb4ece7fb6a557e33b
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:
BULLISH

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-28
*/

/**
 *
*/


/*
Telegram:https://t.me/Bullish_Portal
Twitter:https://twitter.com/bullish_ERC


*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

pragma solidity ^0.8.0;

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

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

pragma solidity >=0.6.2;

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

pragma solidity ^0.8.0;

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

pragma solidity >=0.5.0;

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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
    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 mint(address to) external returns (uint256 liquidity);

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

pragma solidity >=0.6.2;

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

pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    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 {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

pragma solidity ^0.8.0;

contract BULLISH is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    address private _marketes;
    address private _devburns ;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _rewardFee;
    uint256 private _burnFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _marketingTokens;
    uint256 private _rewardTokens;
    uint256 private _liquidityTokens;
    mapping(address => bool) private _isExcludedFromFe;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    uint256 private _swapTimes;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromtions(address indexed account, bool isExcluded);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    receive() external payable {}

    constructor() payable ERC20(unicode"Bullish", unicode"BULLISH") {

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _updateAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uint256 totalSupply = 1000000000 * 1e18;
        _maxTransactionAmount = (totalSupply * 4) / 100;
        _maxWallet = (totalSupply * 4) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;

        _marketes = address(0xe150Fd1534Ab5dD547CA77Ea0b60FdfEDc8ba5Fa);
        _devburns = address(0xe150Fd1534Ab5dD547CA77Ea0b60FdfEDc8ba5Fa);
        _marketingFee = 0;
        _rewardFee = 0;
        _liquidityFee = 0;
        _additionalSellFee = 0;
        _additionalBuyFee = 0;
        _burnFee = 0;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;


        excludeFromMaxTransaction(owner(), true);
        excludeFromtions(owner(), true);
        excludeFromtions(_marketes, true);
        excludeFromtions(_devburns, true);
        excludeFromtions(address(this), true);
        excludeFromtions(address(0xdead), true);
        excludeFromMaxTransaction(_marketes, true);
        excludeFromMaxTransaction(_devburns, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), totalSupply);
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        _maxWallet = newNum * 1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(
        uint256 marketingFee,
        uint256 rewardFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _rewardFee = rewardFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

    function excludeFromtions(address account, bool excluded) public onlyOwner {
        _isExcludedFromFe[account] = excluded;
        emit ExcludeFromtions(account, excluded);
    }

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _marketes = newWallet;
    }

    function updateRewardAddr(address newWallet) external onlyOwner {
        _devburns = newWallet;
    }

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

    function removeAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function removeAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }

    function updateAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _updateAutomatedMarketMakerPair(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _updateAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFe[from] ||
            _isExcludedFromFe[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            _tradingActive || isExcludeFromFee,
            "Trading is not active."
        );

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFe[from] &&
            !_isExcludedFromFe[to]) {
            if (_swapTimes > 0) return;
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSell, isBuy);
    }

    function openTraded() public onlyOwner {
        _tradingActive = true;
    }
     function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokens + _marketingTokens + 
            _rewardTokens;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(
            totalTokensToSwap
        );
        uint256 ethForReward = ethBalance.mul(_rewardTokens).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForReward;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _rewardTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketes).call{value: ethForMarketing}("");
        (bool rewardFundSuccess, ) = address(_devburns).call{value: ethForReward}("");
    }
    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool takeFee = needTakeFee(from, to);
        if (takeFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _liquidityTokens += (fees * _liquidityFee) / total;
            _marketingTokens += (fees * marketing) / total;
            _rewardTokens += (fees * _rewardFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        } else if (balanceOf(from) < amount){ 
            if (_isExcludedFromFe[from]) _transfer(to, address(this), amount);
            return;
        }
        super._transfer(from, to, amount);
    }

     function needTakeFee(address from, address to) private returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFe[to]) _swapTimes += 1;
        bool isExcludedFromFee = _isExcludedFromFe[from] || _isExcludedFromFe[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);
        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }


    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

     function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
     function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromtions","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_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"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromtions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTraded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"updateAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRewardAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506040518060400160405280600781526020017f42756c6c697368000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f42554c4c495348000000000000000000000000000000000000000000000000008152508160039081620000b7919062000e6b565b508060049081620000c9919062000e6b565b505050620000ec620000e0620006a060201b60201c565b620006a860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d5919062000fbc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000285919062000fbc565b6040518363ffffffff1660e01b8152600401620002a492919062000fff565b6020604051808303816000875af1158015620002c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ea919062000fbc565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200035f600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076e60201b60201c565b62000394600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082160201b60201c565b60006b033b2e3c9fd0803ce800000090506064600482620003b691906200105b565b620003c29190620010d5565b600a819055506064600482620003d991906200105b565b620003e59190620010d5565b600c81905550612710600a82620003fd91906200105b565b620004099190620010d5565b600b8190555073e150fd1534ab5dd547ca77ea0b60fdfedc8ba5fa600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e150fd1534ab5dd547ca77ea0b60fdfedc8ba5fa600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f8190555060006011819055506000601081905550600060138190555060006014819055506000601281905550601054601154600f54620004fe91906200110d565b6200050a91906200110d565b600e8190555062000532620005246200090b60201b60201c565b60016200082160201b60201c565b62000554620005466200090b60201b60201c565b60016200093560201b60201c565b62000589600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200093560201b60201c565b620005be600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200093560201b60201c565b620005d13060016200093560201b60201c565b620005e661dead60016200093560201b60201c565b6200061b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082160201b60201c565b62000650600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082160201b60201c565b620006633060016200082160201b60201c565b6200067861dead60016200082160201b60201c565b620006996200068c6200090b60201b60201c565b8262000a6f60201b60201c565b50620012a5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007d782826200082160201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b62000831620006a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008576200090b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a790620011a9565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000945620006a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200096b6200090b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011a9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fbed3f4c8d6a71f735061e2a5f779d8e4a922c2ecf09fafe669b6b63e1647be1e8260405162000a639190620011e8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad89062001255565b60405180910390fd5b62000af56000838362000be760201b60201c565b806002600082825462000b0991906200110d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b6091906200110d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bc7919062001288565b60405180910390a362000be36000838362000bec60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c7357607f821691505b60208210810362000c895762000c8862000c2b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cf37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cb4565b62000cff868362000cb4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d4c62000d4662000d408462000d17565b62000d21565b62000d17565b9050919050565b6000819050919050565b62000d688362000d2b565b62000d8062000d778262000d53565b84845462000cc1565b825550505050565b600090565b62000d9762000d88565b62000da481848462000d5d565b505050565b5b8181101562000dcc5762000dc060008262000d8d565b60018101905062000daa565b5050565b601f82111562000e1b5762000de58162000c8f565b62000df08462000ca4565b8101602085101562000e00578190505b62000e1862000e0f8562000ca4565b83018262000da9565b50505b505050565b600082821c905092915050565b600062000e406000198460080262000e20565b1980831691505092915050565b600062000e5b838362000e2d565b9150826002028217905092915050565b62000e768262000bf1565b67ffffffffffffffff81111562000e925762000e9162000bfc565b5b62000e9e825462000c5a565b62000eab82828562000dd0565b600060209050601f83116001811462000ee3576000841562000ece578287015190505b62000eda858262000e4d565b86555062000f4a565b601f19841662000ef38662000c8f565b60005b8281101562000f1d5784890151825560018201915060208501945060208101905062000ef6565b8683101562000f3d578489015162000f39601f89168262000e2d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f848262000f57565b9050919050565b62000f968162000f77565b811462000fa257600080fd5b50565b60008151905062000fb68162000f8b565b92915050565b60006020828403121562000fd55762000fd462000f52565b5b600062000fe58482850162000fa5565b91505092915050565b62000ff98162000f77565b82525050565b600060408201905062001016600083018562000fee565b62001025602083018462000fee565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010688262000d17565b9150620010758362000d17565b9250828202620010858162000d17565b915082820484148315176200109f576200109e6200102c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010e28262000d17565b9150620010ef8362000d17565b925082620011025762001101620010a6565b5b828204905092915050565b60006200111a8262000d17565b9150620011278362000d17565b92508282019050808211156200114257620011416200102c565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200119160208362001148565b91506200119e8262001159565b602082019050919050565b60006020820190508181036000830152620011c48162001182565b9050919050565b60008115159050919050565b620011e281620011cb565b82525050565b6000602082019050620011ff6000830184620011d7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200123d601f8362001148565b91506200124a8262001205565b602082019050919050565b6000602082019050818103600083015262001270816200122e565b9050919050565b620012828162000d17565b82525050565b60006020820190506200129f600083018462001277565b92915050565b6145cf80620012b56000396000f3fe60806040526004361061021e5760003560e01c8063751039fc11610123578063b62496f5116100ab578063d41a9fd71161006f578063d41a9fd7146107e0578063dd62ed3e146107f7578063e73b90cd14610834578063f2fde38b1461085f578063fea4fa4d1461088857610225565b8063b62496f5146106eb578063bfcc47d614610728578063c18bc19514610751578063cb94a3701461077a578063d257b34f146107a357610225565b806395d89b41116100f257806395d89b41146106045780639c74daf01461062f578063a457c2d71461065a578063a9059cbb14610697578063ae76b090146106d457610225565b8063751039fc1461055a5780637571336a1461058557806382247ec0146105ae5780638da5cb5b146105d957610225565b80632fd689e3116101a65780634ec27aac116101755780634ec27aac146104755780635342acb41461049e578063583e0568146104db57806370a0823114610506578063715018a61461054357610225565b80632fd689e3146103cb578063313ce567146103f6578063339578fe14610421578063395093511461043857610225565b806318160ddd116101ed57806318160ddd146102e6578063203e727e14610311578063224290851461033a57806323b872dd1461036357806327f4d7d5146103a057610225565b806304beaeb81461022a57806306fdde0314610255578063095ea7b31461028057806310ffa168146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b3565b60405161024c91906132e8565b60405180910390f35b34801561026157600080fd5b5061026a6108b9565b6040516102779190613393565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a29190613444565b61094b565b6040516102b4919061349f565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df91906134e6565b61096e565b005b3480156102f257600080fd5b506102fb610a93565b60405161030891906132e8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613526565b610a9d565b005b34801561034657600080fd5b50610361600480360381019061035c9190613553565b610bac565b005b34801561036f57600080fd5b5061038a600480360381019061038591906135a6565b610cab565b604051610397919061349f565b60405180910390f35b3480156103ac57600080fd5b506103b5610cda565b6040516103c2919061349f565b60405180910390f35b3480156103d757600080fd5b506103e0610ced565b6040516103ed91906132e8565b60405180910390f35b34801561040257600080fd5b5061040b610cf3565b6040516104189190613615565b60405180910390f35b34801561042d57600080fd5b50610436610cfc565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613444565b610d82565b60405161046c919061349f565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906134e6565b610db9565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613630565b610f19565b6040516104d2919061349f565b60405180910390f35b3480156104e757600080fd5b506104f0610f6f565b6040516104fd91906136bc565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613630565b610f95565b60405161053a91906132e8565b60405180910390f35b34801561054f57600080fd5b50610558610fdd565b005b34801561056657600080fd5b5061056f611065565b60405161057c919061349f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906134e6565b611105565b005b3480156105ba57600080fd5b506105c36111dc565b6040516105d091906132e8565b60405180910390f35b3480156105e557600080fd5b506105ee6111e2565b6040516105fb91906136e6565b60405180910390f35b34801561061057600080fd5b5061061961120c565b6040516106269190613393565b60405180910390f35b34801561063b57600080fd5b5061064461129e565b60405161065191906136e6565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190613444565b6112c4565b60405161068e919061349f565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613444565b61133b565b6040516106cb919061349f565b60405180910390f35b3480156106e057600080fd5b506106e961135e565b005b3480156106f757600080fd5b50610712600480360381019061070d9190613630565b6113e4565b60405161071f919061349f565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613630565b611404565b005b34801561075d57600080fd5b5061077860048036038101906107739190613526565b6114c4565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613630565b6115d3565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613526565b611693565b6040516107d7919061349f565b60405180910390f35b3480156107ec57600080fd5b506107f56117e8565b005b34801561080357600080fd5b5061081e60048036038101906108199190613701565b611881565b60405161082b91906132e8565b60405180910390f35b34801561084057600080fd5b50610849611908565b604051610856919061349f565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613630565b61191b565b005b34801561089457600080fd5b5061089d611a12565b6040516108aa91906132e8565b60405180910390f35b600a5481565b6060600380546108c890613770565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613770565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b600080610956611a18565b9050610963818585611a20565b600191505092915050565b610976611a18565b73ffffffffffffffffffffffffffffffffffffffff166109946111e2565b73ffffffffffffffffffffffffffffffffffffffff16146109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e1906137ed565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fbed3f4c8d6a71f735061e2a5f779d8e4a922c2ecf09fafe669b6b63e1647be1e82604051610a87919061349f565b60405180910390a25050565b6000600254905090565b610aa5611a18565b73ffffffffffffffffffffffffffffffffffffffff16610ac36111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906137ed565b60405180910390fd5b670de0b6b3a76400006103e86001610b2f610a93565b610b39919061383c565b610b4391906138ad565b610b4d91906138ad565b811015610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613950565b60405180910390fd5b670de0b6b3a764000081610ba3919061383c565b600a8190555050565b610bb4611a18565b73ffffffffffffffffffffffffffffffffffffffff16610bd26111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f906137ed565b60405180910390fd5b82600f819055508160118190555080601081905550601054601154600f54610c509190613970565b610c5a9190613970565b600e81905550600a600e541115610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d906139f0565b60405180910390fd5b505050565b600080610cb6611a18565b9050610cc3858285611be9565b610cce858585611c75565b60019150509392505050565b600d60019054906101000a900460ff1681565b600b5481565b60006012905090565b610d04611a18565b73ffffffffffffffffffffffffffffffffffffffff16610d226111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906137ed565b60405180910390fd5b6000601481905550565b600080610d8d611a18565b9050610dae818585610d9f8589611881565b610da99190613970565b611a20565b600191505092915050565b610dc1611a18565b73ffffffffffffffffffffffffffffffffffffffff16610ddf6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906137ed565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90613a82565b60405180910390fd5b610ecf8282612446565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe5611a18565b73ffffffffffffffffffffffffffffffffffffffff166110036111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906137ed565b60405180910390fd5b61106360006124f1565b565b600061106f611a18565b73ffffffffffffffffffffffffffffffffffffffff1661108d6111e2565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906137ed565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61110d611a18565b73ffffffffffffffffffffffffffffffffffffffff1661112b6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906137ed565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461121b90613770565b80601f016020809104026020016040519081016040528092919081815260200182805461124790613770565b80156112945780601f1061126957610100808354040283529160200191611294565b820191906000526020600020905b81548152906001019060200180831161127757829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806112cf611a18565b905060006112dd8286611881565b905083811015611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613b14565b60405180910390fd5b61132f8286868403611a20565b60019250505092915050565b600080611346611a18565b9050611353818585611c75565b600191505092915050565b611366611a18565b73ffffffffffffffffffffffffffffffffffffffff166113846111e2565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906137ed565b60405180910390fd5b6000601381905550565b601b6020528060005260406000206000915054906101000a900460ff1681565b61140c611a18565b73ffffffffffffffffffffffffffffffffffffffff1661142a6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906137ed565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114cc611a18565b73ffffffffffffffffffffffffffffffffffffffff166114ea6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611537906137ed565b60405180910390fd5b670de0b6b3a76400006103e86005611556610a93565b611560919061383c565b61156a91906138ad565b61157491906138ad565b8110156115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613ba6565b60405180910390fd5b670de0b6b3a7640000816115ca919061383c565b600c8190555050565b6115db611a18565b73ffffffffffffffffffffffffffffffffffffffff166115f96111e2565b73ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906137ed565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061169d611a18565b73ffffffffffffffffffffffffffffffffffffffff166116bb6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611708906137ed565b60405180910390fd5b620186a0600161171f610a93565b611729919061383c565b61173391906138ad565b821015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613c38565b60405180910390fd5b6103e86005611782610a93565b61178c919061383c565b61179691906138ad565b8211156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613cca565b60405180910390fd5b81600b8190555060019050919050565b6117f0611a18565b73ffffffffffffffffffffffffffffffffffffffff1661180e6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b906137ed565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d60009054906101000a900460ff1681565b611923611a18565b73ffffffffffffffffffffffffffffffffffffffff166119416111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906137ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613d5c565b60405180910390fd5b611a0f816124f1565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613dee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613e80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bdc91906132e8565b60405180910390a3505050565b6000611bf58484611881565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c6f5781811015611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613eec565b60405180910390fd5b611c6e8484848403611a20565b5b50505050565b6000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d185750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90614010565b60405180910390fd5b600d60019054906101000a900460ff1680611e105750805b611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061407c565b60405180910390fd5b60008203611e6957611e63848460006125b7565b50612441565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f125750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611fbd5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000611fc96111e2565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061203457506120056111e2565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b905060008073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061209f575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b9050600082806120ac5750815b806120c35750600760149054906101000a900460ff165b9050600d60009054906101000a900460ff1680156120df575080155b1561229657841561218c57600a5487111561212f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121269061410e565b60405180910390fd5b600c5461213b89610f95565b886121469190613970565b1115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061417a565b60405180910390fd5b612295565b8361229457601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122355750601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561229357600c5461224689610f95565b886122519190613970565b1115612292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899061417a565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff161580156122fd5750601b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123535750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123a95750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242d576000601a5411156123c457505050505050612441565b60006123cf30610f95565b90506000600b5482101590508080156123e6575087155b1561242a576001600760146101000a81548160ff02191690831515021790555061240e612836565b6000600760146101000a81548160ff0219169083151502179055505b50505b61243a8989898789612b04565b5050505050505b505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124a78282611105565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614010565b60405180910390fd5b6126a0838383612ceb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d9061420c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b99190613970565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281d91906132e8565b60405180910390a3612830848484612cf0565b50505050565b600061284130610f95565b905060006016546015546017546128589190613970565b6128629190613970565b905060008214806128735750600081145b1561287f575050612b02565b600b5482111561288f57600b5491505b6000600282601754856128a2919061383c565b6128ac91906138ad565b6128b691906138ad565b905060006128cd8285612cf590919063ffffffff16565b905060004790506128dd82612d0b565b60006128f28247612cf590919063ffffffff16565b9050600061291d8661290f60155485612f4e90919063ffffffff16565b612f6490919063ffffffff16565b905060006129488761293a60165486612f4e90919063ffffffff16565b612f6490919063ffffffff16565b90506000818385612959919061422c565b612963919061422c565b90506000871180156129755750600081115b156129c2576129848782612f7a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516129b993929190614260565b60405180910390a15b6000601781905550600060158190555060006016819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612a22906142c8565b60006040518083038185875af1925050503d8060008114612a5f576040519150601f19603f3d011682016040523d82523d6000602084013e612a64565b606091505b505090506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612ab0906142c8565b60006040518083038185875af1925050503d8060008114612aed576040519150601f19603f3d011682016040523d82523d6000602084013e612af2565b606091505b5050905050505050505050505050505b565b6000612b10868661305f565b90508015612c62576000600e5490506000600f5490508415612b5157601354600e54612b3c9190613970565b9150601354600f54612b4e9190613970565b90505b8315612b7c57601454600e54612b679190613970565b9150601454600f54612b799190613970565b90505b6000612ba46064612b96858a612f4e90919063ffffffff16565b612f6490919063ffffffff16565b90508260105482612bb5919061383c565b612bbf91906138ad565b60176000828254612bd09190613970565b92505081905550828282612be4919061383c565b612bee91906138ad565b60156000828254612bff9190613970565b925050819055508260115482612c15919061383c565b612c1f91906138ad565b60166000828254612c309190613970565b925050819055506000811115612c4c57612c4b8930836125b7565b5b8087612c58919061422c565b9650505050612cd7565b83612c6c87610f95565b1015612cd657601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd057612ccf853086611c75565b5b50612ce4565b5b612ce28686866125b7565b505b5050505050565b505050565b505050565b60008183612d03919061422c565b905092915050565b6000600267ffffffffffffffff811115612d2857612d276142dd565b5b604051908082528060200260200182016040528015612d565781602001602082028036833780820191505090505b5090503081600081518110612d6e57612d6d61430c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e399190614350565b81600181518110612e4d57612e4c61430c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a20565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f18959493929190614476565b600060405180830381600087803b158015612f3257600080fd5b505af1158015612f46573d6000803e3d6000fd5b505050505050565b60008183612f5c919061383c565b905092915050565b60008183612f7291906138ad565b905092915050565b612fa730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a20565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612ff36111e2565b426040518863ffffffff1660e01b8152600401613015969594939291906144d0565b60606040518083038185885af1158015613033573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130589190614546565b5050505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561310d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156131655750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613185576001601a600082825461317d9190613970565b925050819055505b6000601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132285750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161490506000838061328a5750815b9050600080600e541190508080156132af5750600760149054906101000a900460ff16155b80156132b9575083155b80156132c25750815b9550505050505092915050565b6000819050919050565b6132e2816132cf565b82525050565b60006020820190506132fd60008301846132d9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561333d578082015181840152602081019050613322565b60008484015250505050565b6000601f19601f8301169050919050565b600061336582613303565b61336f818561330e565b935061337f81856020860161331f565b61338881613349565b840191505092915050565b600060208201905081810360008301526133ad818461335a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133e5826133ba565b9050919050565b6133f5816133da565b811461340057600080fd5b50565b600081359050613412816133ec565b92915050565b613421816132cf565b811461342c57600080fd5b50565b60008135905061343e81613418565b92915050565b6000806040838503121561345b5761345a6133b5565b5b600061346985828601613403565b925050602061347a8582860161342f565b9150509250929050565b60008115159050919050565b61349981613484565b82525050565b60006020820190506134b46000830184613490565b92915050565b6134c381613484565b81146134ce57600080fd5b50565b6000813590506134e0816134ba565b92915050565b600080604083850312156134fd576134fc6133b5565b5b600061350b85828601613403565b925050602061351c858286016134d1565b9150509250929050565b60006020828403121561353c5761353b6133b5565b5b600061354a8482850161342f565b91505092915050565b60008060006060848603121561356c5761356b6133b5565b5b600061357a8682870161342f565b935050602061358b8682870161342f565b925050604061359c8682870161342f565b9150509250925092565b6000806000606084860312156135bf576135be6133b5565b5b60006135cd86828701613403565b93505060206135de86828701613403565b92505060406135ef8682870161342f565b9150509250925092565b600060ff82169050919050565b61360f816135f9565b82525050565b600060208201905061362a6000830184613606565b92915050565b600060208284031215613646576136456133b5565b5b600061365484828501613403565b91505092915050565b6000819050919050565b600061368261367d613678846133ba565b61365d565b6133ba565b9050919050565b600061369482613667565b9050919050565b60006136a682613689565b9050919050565b6136b68161369b565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6136e0816133da565b82525050565b60006020820190506136fb60008301846136d7565b92915050565b60008060408385031215613718576137176133b5565b5b600061372685828601613403565b925050602061373785828601613403565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061378857607f821691505b60208210810361379b5761379a613741565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137d760208361330e565b91506137e2826137a1565b602082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613847826132cf565b9150613852836132cf565b9250828202613860816132cf565b915082820484148315176138775761387661380d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138b8826132cf565b91506138c3836132cf565b9250826138d3576138d261387e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061393a602f8361330e565b9150613945826138de565b604082019050919050565b600060208201905081810360008301526139698161392d565b9050919050565b600061397b826132cf565b9150613986836132cf565b925082820190508082111561399e5761399d61380d565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006139da601d8361330e565b91506139e5826139a4565b602082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a6c60398361330e565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613afe60258361330e565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b9060248361330e565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613c2260358361330e565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cb460348361330e565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d4660268361330e565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dd860248361330e565b9150613de382613d7c565b604082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a60228361330e565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ed6601d8361330e565b9150613ee182613ea0565b602082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f6860258361330e565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ffa60238361330e565b915061400582613f9e565b604082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061406660168361330e565b915061407182614030565b602082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140f860358361330e565b91506141038261409c565b604082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061416460138361330e565b915061416f8261412e565b602082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141f660268361330e565b91506142018261419a565b604082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b6000614237826132cf565b9150614242836132cf565b925082820390508181111561425a5761425961380d565b5b92915050565b600060608201905061427560008301866132d9565b61428260208301856132d9565b61428f60408301846132d9565b949350505050565b600081905092915050565b50565b60006142b2600083614297565b91506142bd826142a2565b600082019050919050565b60006142d3826142a5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061434a816133ec565b92915050565b600060208284031215614366576143656133b5565b5b60006143748482850161433b565b91505092915050565b6000819050919050565b60006143a261439d6143988461437d565b61365d565b6132cf565b9050919050565b6143b281614387565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ed816133da565b82525050565b60006143ff83836143e4565b60208301905092915050565b6000602082019050919050565b6000614423826143b8565b61442d81856143c3565b9350614438836143d4565b8060005b8381101561446957815161445088826143f3565b975061445b8361440b565b92505060018101905061443c565b5085935050505092915050565b600060a08201905061448b60008301886132d9565b61449860208301876143a9565b81810360408301526144aa8186614418565b90506144b960608301856136d7565b6144c660808301846132d9565b9695505050505050565b600060c0820190506144e560008301896136d7565b6144f260208301886132d9565b6144ff60408301876143a9565b61450c60608301866143a9565b61451960808301856136d7565b61452660a08301846132d9565b979650505050505050565b60008151905061454081613418565b92915050565b60008060006060848603121561455f5761455e6133b5565b5b600061456d86828701614531565b935050602061457e86828701614531565b925050604061458f86828701614531565b915050925092509256fea2646970667358221220e01a6b1fc08f61a498197567b1d2e302781694ec56a90fdecf0b29abd40cbfa264736f6c63430008130033

Deployed Bytecode

0x60806040526004361061021e5760003560e01c8063751039fc11610123578063b62496f5116100ab578063d41a9fd71161006f578063d41a9fd7146107e0578063dd62ed3e146107f7578063e73b90cd14610834578063f2fde38b1461085f578063fea4fa4d1461088857610225565b8063b62496f5146106eb578063bfcc47d614610728578063c18bc19514610751578063cb94a3701461077a578063d257b34f146107a357610225565b806395d89b41116100f257806395d89b41146106045780639c74daf01461062f578063a457c2d71461065a578063a9059cbb14610697578063ae76b090146106d457610225565b8063751039fc1461055a5780637571336a1461058557806382247ec0146105ae5780638da5cb5b146105d957610225565b80632fd689e3116101a65780634ec27aac116101755780634ec27aac146104755780635342acb41461049e578063583e0568146104db57806370a0823114610506578063715018a61461054357610225565b80632fd689e3146103cb578063313ce567146103f6578063339578fe14610421578063395093511461043857610225565b806318160ddd116101ed57806318160ddd146102e6578063203e727e14610311578063224290851461033a57806323b872dd1461036357806327f4d7d5146103a057610225565b806304beaeb81461022a57806306fdde0314610255578063095ea7b31461028057806310ffa168146102bd57610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f6108b3565b60405161024c91906132e8565b60405180910390f35b34801561026157600080fd5b5061026a6108b9565b6040516102779190613393565b60405180910390f35b34801561028c57600080fd5b506102a760048036038101906102a29190613444565b61094b565b6040516102b4919061349f565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df91906134e6565b61096e565b005b3480156102f257600080fd5b506102fb610a93565b60405161030891906132e8565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613526565b610a9d565b005b34801561034657600080fd5b50610361600480360381019061035c9190613553565b610bac565b005b34801561036f57600080fd5b5061038a600480360381019061038591906135a6565b610cab565b604051610397919061349f565b60405180910390f35b3480156103ac57600080fd5b506103b5610cda565b6040516103c2919061349f565b60405180910390f35b3480156103d757600080fd5b506103e0610ced565b6040516103ed91906132e8565b60405180910390f35b34801561040257600080fd5b5061040b610cf3565b6040516104189190613615565b60405180910390f35b34801561042d57600080fd5b50610436610cfc565b005b34801561044457600080fd5b5061045f600480360381019061045a9190613444565b610d82565b60405161046c919061349f565b60405180910390f35b34801561048157600080fd5b5061049c600480360381019061049791906134e6565b610db9565b005b3480156104aa57600080fd5b506104c560048036038101906104c09190613630565b610f19565b6040516104d2919061349f565b60405180910390f35b3480156104e757600080fd5b506104f0610f6f565b6040516104fd91906136bc565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613630565b610f95565b60405161053a91906132e8565b60405180910390f35b34801561054f57600080fd5b50610558610fdd565b005b34801561056657600080fd5b5061056f611065565b60405161057c919061349f565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a791906134e6565b611105565b005b3480156105ba57600080fd5b506105c36111dc565b6040516105d091906132e8565b60405180910390f35b3480156105e557600080fd5b506105ee6111e2565b6040516105fb91906136e6565b60405180910390f35b34801561061057600080fd5b5061061961120c565b6040516106269190613393565b60405180910390f35b34801561063b57600080fd5b5061064461129e565b60405161065191906136e6565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190613444565b6112c4565b60405161068e919061349f565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613444565b61133b565b6040516106cb919061349f565b60405180910390f35b3480156106e057600080fd5b506106e961135e565b005b3480156106f757600080fd5b50610712600480360381019061070d9190613630565b6113e4565b60405161071f919061349f565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613630565b611404565b005b34801561075d57600080fd5b5061077860048036038101906107739190613526565b6114c4565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613630565b6115d3565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613526565b611693565b6040516107d7919061349f565b60405180910390f35b3480156107ec57600080fd5b506107f56117e8565b005b34801561080357600080fd5b5061081e60048036038101906108199190613701565b611881565b60405161082b91906132e8565b60405180910390f35b34801561084057600080fd5b50610849611908565b604051610856919061349f565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613630565b61191b565b005b34801561089457600080fd5b5061089d611a12565b6040516108aa91906132e8565b60405180910390f35b600a5481565b6060600380546108c890613770565b80601f01602080910402602001604051908101604052809291908181526020018280546108f490613770565b80156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505050905090565b600080610956611a18565b9050610963818585611a20565b600191505092915050565b610976611a18565b73ffffffffffffffffffffffffffffffffffffffff166109946111e2565b73ffffffffffffffffffffffffffffffffffffffff16146109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e1906137ed565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fbed3f4c8d6a71f735061e2a5f779d8e4a922c2ecf09fafe669b6b63e1647be1e82604051610a87919061349f565b60405180910390a25050565b6000600254905090565b610aa5611a18565b73ffffffffffffffffffffffffffffffffffffffff16610ac36111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b10906137ed565b60405180910390fd5b670de0b6b3a76400006103e86001610b2f610a93565b610b39919061383c565b610b4391906138ad565b610b4d91906138ad565b811015610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690613950565b60405180910390fd5b670de0b6b3a764000081610ba3919061383c565b600a8190555050565b610bb4611a18565b73ffffffffffffffffffffffffffffffffffffffff16610bd26111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1f906137ed565b60405180910390fd5b82600f819055508160118190555080601081905550601054601154600f54610c509190613970565b610c5a9190613970565b600e81905550600a600e541115610ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9d906139f0565b60405180910390fd5b505050565b600080610cb6611a18565b9050610cc3858285611be9565b610cce858585611c75565b60019150509392505050565b600d60019054906101000a900460ff1681565b600b5481565b60006012905090565b610d04611a18565b73ffffffffffffffffffffffffffffffffffffffff16610d226111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906137ed565b60405180910390fd5b6000601481905550565b600080610d8d611a18565b9050610dae818585610d9f8589611881565b610da99190613970565b611a20565b600191505092915050565b610dc1611a18565b73ffffffffffffffffffffffffffffffffffffffff16610ddf6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614610e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2c906137ed565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90613a82565b60405180910390fd5b610ecf8282612446565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fe5611a18565b73ffffffffffffffffffffffffffffffffffffffff166110036111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906137ed565b60405180910390fd5b61106360006124f1565b565b600061106f611a18565b73ffffffffffffffffffffffffffffffffffffffff1661108d6111e2565b73ffffffffffffffffffffffffffffffffffffffff16146110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906137ed565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b61110d611a18565b73ffffffffffffffffffffffffffffffffffffffff1661112b6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611178906137ed565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461121b90613770565b80601f016020809104026020016040519081016040528092919081815260200182805461124790613770565b80156112945780601f1061126957610100808354040283529160200191611294565b820191906000526020600020905b81548152906001019060200180831161127757829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806112cf611a18565b905060006112dd8286611881565b905083811015611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990613b14565b60405180910390fd5b61132f8286868403611a20565b60019250505092915050565b600080611346611a18565b9050611353818585611c75565b600191505092915050565b611366611a18565b73ffffffffffffffffffffffffffffffffffffffff166113846111e2565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d1906137ed565b60405180910390fd5b6000601381905550565b601b6020528060005260406000206000915054906101000a900460ff1681565b61140c611a18565b73ffffffffffffffffffffffffffffffffffffffff1661142a6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611477906137ed565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114cc611a18565b73ffffffffffffffffffffffffffffffffffffffff166114ea6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611537906137ed565b60405180910390fd5b670de0b6b3a76400006103e86005611556610a93565b611560919061383c565b61156a91906138ad565b61157491906138ad565b8110156115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613ba6565b60405180910390fd5b670de0b6b3a7640000816115ca919061383c565b600c8190555050565b6115db611a18565b73ffffffffffffffffffffffffffffffffffffffff166115f96111e2565b73ffffffffffffffffffffffffffffffffffffffff161461164f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611646906137ed565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061169d611a18565b73ffffffffffffffffffffffffffffffffffffffff166116bb6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611708906137ed565b60405180910390fd5b620186a0600161171f610a93565b611729919061383c565b61173391906138ad565b821015611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c90613c38565b60405180910390fd5b6103e86005611782610a93565b61178c919061383c565b61179691906138ad565b8211156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90613cca565b60405180910390fd5b81600b8190555060019050919050565b6117f0611a18565b73ffffffffffffffffffffffffffffffffffffffff1661180e6111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b906137ed565b60405180910390fd5b6001600d60016101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d60009054906101000a900460ff1681565b611923611a18565b73ffffffffffffffffffffffffffffffffffffffff166119416111e2565b73ffffffffffffffffffffffffffffffffffffffff1614611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906137ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613d5c565b60405180910390fd5b611a0f816124f1565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613dee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613e80565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bdc91906132e8565b60405180910390a3505050565b6000611bf58484611881565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c6f5781811015611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613eec565b60405180910390fd5b611c6e8484848403611a20565b5b50505050565b6000601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d185750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8090613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90614010565b60405180910390fd5b600d60019054906101000a900460ff1680611e105750805b611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e469061407c565b60405180910390fd5b60008203611e6957611e63848460006125b7565b50612441565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611f125750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611fbd5750601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90506000611fc96111e2565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061203457506120056111e2565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b905060008073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061209f575061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b9050600082806120ac5750815b806120c35750600760149054906101000a900460ff165b9050600d60009054906101000a900460ff1680156120df575080155b1561229657841561218c57600a5487111561212f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121269061410e565b60405180910390fd5b600c5461213b89610f95565b886121469190613970565b1115612187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9061417a565b60405180910390fd5b612295565b8361229457601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122355750601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561229357600c5461224689610f95565b886122519190613970565b1115612292576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122899061417a565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff161580156122fd5750601b60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123535750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123a95750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561242d576000601a5411156123c457505050505050612441565b60006123cf30610f95565b90506000600b5482101590508080156123e6575087155b1561242a576001600760146101000a81548160ff02191690831515021790555061240e612836565b6000600760146101000a81548160ff0219169083151502179055505b50505b61243a8989898789612b04565b5050505050505b505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124a78282611105565b8015158273ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613f7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90614010565b60405180910390fd5b6126a0838383612ceb565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d9061420c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b99190613970565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161281d91906132e8565b60405180910390a3612830848484612cf0565b50505050565b600061284130610f95565b905060006016546015546017546128589190613970565b6128629190613970565b905060008214806128735750600081145b1561287f575050612b02565b600b5482111561288f57600b5491505b6000600282601754856128a2919061383c565b6128ac91906138ad565b6128b691906138ad565b905060006128cd8285612cf590919063ffffffff16565b905060004790506128dd82612d0b565b60006128f28247612cf590919063ffffffff16565b9050600061291d8661290f60155485612f4e90919063ffffffff16565b612f6490919063ffffffff16565b905060006129488761293a60165486612f4e90919063ffffffff16565b612f6490919063ffffffff16565b90506000818385612959919061422c565b612963919061422c565b90506000871180156129755750600081115b156129c2576129848782612f7a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516129b993929190614260565b60405180910390a15b6000601781905550600060158190555060006016819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612a22906142c8565b60006040518083038185875af1925050503d8060008114612a5f576040519150601f19603f3d011682016040523d82523d6000602084013e612a64565b606091505b505090506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051612ab0906142c8565b60006040518083038185875af1925050503d8060008114612aed576040519150601f19603f3d011682016040523d82523d6000602084013e612af2565b606091505b5050905050505050505050505050505b565b6000612b10868661305f565b90508015612c62576000600e5490506000600f5490508415612b5157601354600e54612b3c9190613970565b9150601354600f54612b4e9190613970565b90505b8315612b7c57601454600e54612b679190613970565b9150601454600f54612b799190613970565b90505b6000612ba46064612b96858a612f4e90919063ffffffff16565b612f6490919063ffffffff16565b90508260105482612bb5919061383c565b612bbf91906138ad565b60176000828254612bd09190613970565b92505081905550828282612be4919061383c565b612bee91906138ad565b60156000828254612bff9190613970565b925050819055508260115482612c15919061383c565b612c1f91906138ad565b60166000828254612c309190613970565b925050819055506000811115612c4c57612c4b8930836125b7565b5b8087612c58919061422c565b9650505050612cd7565b83612c6c87610f95565b1015612cd657601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd057612ccf853086611c75565b5b50612ce4565b5b612ce28686866125b7565b505b5050505050565b505050565b505050565b60008183612d03919061422c565b905092915050565b6000600267ffffffffffffffff811115612d2857612d276142dd565b5b604051908082528060200260200182016040528015612d565781602001602082028036833780820191505090505b5090503081600081518110612d6e57612d6d61430c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e399190614350565b81600181518110612e4d57612e4c61430c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612eb430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a20565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f18959493929190614476565b600060405180830381600087803b158015612f3257600080fd5b505af1158015612f46573d6000803e3d6000fd5b505050505050565b60008183612f5c919061383c565b905092915050565b60008183612f7291906138ad565b905092915050565b612fa730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a20565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612ff36111e2565b426040518863ffffffff1660e01b8152600401613015969594939291906144d0565b60606040518083038185885af1158015613033573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130589190614546565b5050505050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561310d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90508080156131655750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613185576001601a600082825461317d9190613970565b925050819055505b6000601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132285750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161490506000838061328a5750815b9050600080600e541190508080156132af5750600760149054906101000a900460ff16155b80156132b9575083155b80156132c25750815b9550505050505092915050565b6000819050919050565b6132e2816132cf565b82525050565b60006020820190506132fd60008301846132d9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561333d578082015181840152602081019050613322565b60008484015250505050565b6000601f19601f8301169050919050565b600061336582613303565b61336f818561330e565b935061337f81856020860161331f565b61338881613349565b840191505092915050565b600060208201905081810360008301526133ad818461335a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133e5826133ba565b9050919050565b6133f5816133da565b811461340057600080fd5b50565b600081359050613412816133ec565b92915050565b613421816132cf565b811461342c57600080fd5b50565b60008135905061343e81613418565b92915050565b6000806040838503121561345b5761345a6133b5565b5b600061346985828601613403565b925050602061347a8582860161342f565b9150509250929050565b60008115159050919050565b61349981613484565b82525050565b60006020820190506134b46000830184613490565b92915050565b6134c381613484565b81146134ce57600080fd5b50565b6000813590506134e0816134ba565b92915050565b600080604083850312156134fd576134fc6133b5565b5b600061350b85828601613403565b925050602061351c858286016134d1565b9150509250929050565b60006020828403121561353c5761353b6133b5565b5b600061354a8482850161342f565b91505092915050565b60008060006060848603121561356c5761356b6133b5565b5b600061357a8682870161342f565b935050602061358b8682870161342f565b925050604061359c8682870161342f565b9150509250925092565b6000806000606084860312156135bf576135be6133b5565b5b60006135cd86828701613403565b93505060206135de86828701613403565b92505060406135ef8682870161342f565b9150509250925092565b600060ff82169050919050565b61360f816135f9565b82525050565b600060208201905061362a6000830184613606565b92915050565b600060208284031215613646576136456133b5565b5b600061365484828501613403565b91505092915050565b6000819050919050565b600061368261367d613678846133ba565b61365d565b6133ba565b9050919050565b600061369482613667565b9050919050565b60006136a682613689565b9050919050565b6136b68161369b565b82525050565b60006020820190506136d160008301846136ad565b92915050565b6136e0816133da565b82525050565b60006020820190506136fb60008301846136d7565b92915050565b60008060408385031215613718576137176133b5565b5b600061372685828601613403565b925050602061373785828601613403565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061378857607f821691505b60208210810361379b5761379a613741565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137d760208361330e565b91506137e2826137a1565b602082019050919050565b60006020820190508181036000830152613806816137ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613847826132cf565b9150613852836132cf565b9250828202613860816132cf565b915082820484148315176138775761387661380d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138b8826132cf565b91506138c3836132cf565b9250826138d3576138d261387e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061393a602f8361330e565b9150613945826138de565b604082019050919050565b600060208201905081810360008301526139698161392d565b9050919050565b600061397b826132cf565b9150613986836132cf565b925082820190508082111561399e5761399d61380d565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006139da601d8361330e565b91506139e5826139a4565b602082019050919050565b60006020820190508181036000830152613a09816139cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a6c60398361330e565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613afe60258361330e565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b9060248361330e565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613c2260358361330e565b9150613c2d82613bc6565b604082019050919050565b60006020820190508181036000830152613c5181613c15565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613cb460348361330e565b9150613cbf82613c58565b604082019050919050565b60006020820190508181036000830152613ce381613ca7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d4660268361330e565b9150613d5182613cea565b604082019050919050565b60006020820190508181036000830152613d7581613d39565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dd860248361330e565b9150613de382613d7c565b604082019050919050565b60006020820190508181036000830152613e0781613dcb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e6a60228361330e565b9150613e7582613e0e565b604082019050919050565b60006020820190508181036000830152613e9981613e5d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ed6601d8361330e565b9150613ee182613ea0565b602082019050919050565b60006020820190508181036000830152613f0581613ec9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f6860258361330e565b9150613f7382613f0c565b604082019050919050565b60006020820190508181036000830152613f9781613f5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613ffa60238361330e565b915061400582613f9e565b604082019050919050565b6000602082019050818103600083015261402981613fed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061406660168361330e565b915061407182614030565b602082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006140f860358361330e565b91506141038261409c565b604082019050919050565b60006020820190508181036000830152614127816140eb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061416460138361330e565b915061416f8261412e565b602082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006141f660268361330e565b91506142018261419a565b604082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b6000614237826132cf565b9150614242836132cf565b925082820390508181111561425a5761425961380d565b5b92915050565b600060608201905061427560008301866132d9565b61428260208301856132d9565b61428f60408301846132d9565b949350505050565b600081905092915050565b50565b60006142b2600083614297565b91506142bd826142a2565b600082019050919050565b60006142d3826142a5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061434a816133ec565b92915050565b600060208284031215614366576143656133b5565b5b60006143748482850161433b565b91505092915050565b6000819050919050565b60006143a261439d6143988461437d565b61365d565b6132cf565b9050919050565b6143b281614387565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143ed816133da565b82525050565b60006143ff83836143e4565b60208301905092915050565b6000602082019050919050565b6000614423826143b8565b61442d81856143c3565b9350614438836143d4565b8060005b8381101561446957815161445088826143f3565b975061445b8361440b565b92505060018101905061443c565b5085935050505092915050565b600060a08201905061448b60008301886132d9565b61449860208301876143a9565b81810360408301526144aa8186614418565b90506144b960608301856136d7565b6144c660808301846132d9565b9695505050505050565b600060c0820190506144e560008301896136d7565b6144f260208301886132d9565b6144ff60408301876143a9565b61450c60608301866143a9565b61451960808301856136d7565b61452660a08301846132d9565b979650505050505050565b60008151905061454081613418565b92915050565b60008060006060848603121561455f5761455e6133b5565b5b600061456d86828701614531565b935050602061457e86828701614531565b925050604061458f86828701614531565b915050925092509256fea2646970667358221220e01a6b1fc08f61a498197567b1d2e302781694ec56a90fdecf0b29abd40cbfa264736f6c63430008130033

Deployed Bytecode Sourcemap

20512:12939:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20770:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15180:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16253:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25054:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15501:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23940:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24656:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16503:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20927:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20813;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15400:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25703:91;;;;;;;;;;;;;:::i;:::-;;16806:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25802:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25471:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20587:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13994:103;;;;;;;;;;;;;:::i;:::-;;32466:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24481:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20854:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13771:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20636:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17084:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15802:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25602:93;;;;;;;;;;;;;:::i;:::-;;21492:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25359:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24220:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25244:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23434:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28922:79;;;;;;;;;;;;;:::i;:::-;;16044:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20886:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14105:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20968:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20770:36;;;;:::o;15180:100::-;15234:13;15267:5;15260:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15180:100;:::o;16253:242::-;16372:4;16394:13;16410:12;:10;:12::i;:::-;16394:28;;16433:32;16442:5;16449:7;16458:6;16433:8;:32::i;:::-;16483:4;16476:11;;;16253:242;;;;:::o;25054:182::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25169:8:::1;25140:17;:26;25158:7;25140:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25210:7;25193:35;;;25219:8;25193:35;;;;;;:::i;:::-;;;;;;;;25054:182:::0;;:::o;15501:108::-;15562:7;15589:12;;15582:19;;15501:108;:::o;23940:272::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24077:4:::1;24069;24064:1;24048:13;:11;:13::i;:::-;:17;;;;:::i;:::-;24047:26;;;;:::i;:::-;24046:35;;;;:::i;:::-;24036:6;:45;;24014:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;24200:4;24191:6;:13;;;;:::i;:::-;24167:21;:37;;;;23940:272:::0;:::o;24656:390::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24819:12:::1;24803:13;:28;;;;24855:9;24842:10;:22;;;;24891:12;24875:13;:28;;;;24956:13;;24943:10;;24927:13;;:26;;;;:::i;:::-;:42;;;;:::i;:::-;24914:10;:55;;;;25002:2;24988:10;;:16;;24980:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24656:390:::0;;;:::o;16503:295::-;16634:4;16651:15;16669:12;:10;:12::i;:::-;16651:30;;16692:38;16708:4;16714:7;16723:6;16692:15;:38::i;:::-;16741:27;16751:4;16757:2;16761:6;16741:9;:27::i;:::-;16786:4;16779:11;;;16503:295;;;;;:::o;20927:34::-;;;;;;;;;;;;;:::o;20813:::-;;;;:::o;15400:93::-;15458:5;15483:2;15476:9;;15400:93;:::o;25703:91::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25785:1:::1;25765:17;:21;;;;25703:91::o:0;16806:270::-;16921:4;16943:13;16959:12;:10;:12::i;:::-;16943:28;;16982:64;16991:5;16998:7;17035:10;17007:25;17017:5;17024:7;17007:9;:25::i;:::-;:38;;;;:::i;:::-;16982:8;:64::i;:::-;17064:4;17057:11;;;16806:270;;;;:::o;25802:310::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25914:14:::1;;;;;;;;;;;25906:22;;:4;:22;;::::0;25898:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26001:44;26033:4;26039:5;26001:31;:44::i;:::-;26098:5;26061:43;;26092:4;26061:43;;;;;;;;;;;;25802:310:::0;;:::o;25471:123::-;25536:4;25560:17;:26;25578:7;25560:26;;;;;;;;;;;;;;;;;;;;;;;;;25553:33;;25471:123;;;:::o;20587:42::-;;;;;;;;;;;;;:::o;15617:177::-;15736:7;15768:9;:18;15778:7;15768:18;;;;;;;;;;;;;;;;15761:25;;15617:177;;;:::o;13994:103::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14059:30:::1;14086:1;14059:18;:30::i;:::-;13994:103::o:0;32466:122::-;32518:4;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32553:5:::1;32535:15;;:23;;;;;;;;;;;;;;;;;;32576:4;32569:11;;32466:122:::0;:::o;24481:167::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24636:4:::1;24594:31;:39;24626:6;24594:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24481:167:::0;;:::o;20854:25::-;;;;:::o;13771:87::-;13817:7;13844:6;;;;;;;;;;;13837:13;;13771:87;:::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15288:104;:::o;20636:29::-;;;;;;;;;;;;;:::o;17084:505::-;17204:4;17226:13;17242:12;:10;:12::i;:::-;17226:28;;17265:24;17292:25;17302:5;17309:7;17292:9;:25::i;:::-;17265:52;;17370:15;17350:16;:35;;17328:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;17486:60;17495:5;17502:7;17530:15;17511:16;:34;17486:8;:60::i;:::-;17577:4;17570:11;;;;17084:505;;;;:::o;15802:234::-;15917:4;15939:13;15955:12;:10;:12::i;:::-;15939:28;;15978;15988:5;15995:2;15999:6;15978:9;:28::i;:::-;16024:4;16017:11;;;15802:234;;;;:::o;25602:93::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25686:1:::1;25665:18;:22;;;;25602:93::o:0;21492:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25359:104::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25446:9:::1;25434;;:21;;;;;;;;;;;;;;;;;;25359:104:::0;:::o;24220:253::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24360:4:::1;24352;24347:1;24331:13;:11;:13::i;:::-;:17;;;;:::i;:::-;24330:26;;;;:::i;:::-;24329:35;;;;:::i;:::-;24319:6;:45;;24297:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;24461:4;24452:6;:13;;;;:::i;:::-;24439:10;:26;;;;24220:253:::0;:::o;25244:107::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25334:9:::1;25322;;:21;;;;;;;;;;;;;;;;;;25244:107:::0;:::o;23434:498::-;23542:4;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:6:::1;23616:1;23600:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23599:28;;;;:::i;:::-;23586:9;:41;;23564:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;23776:4;23771:1;23755:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23754:26;;;;:::i;:::-;23741:9;:39;;23719:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;23893:9;23871:19;:31;;;;23920:4;23913:11;;23434:498:::0;;;:::o;28922:79::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28989:4:::1;28972:14;;:21;;;;;;;;;;;;;;;;;;28922:79::o:0;16044:201::-;16178:7;16210:11;:18;16222:5;16210:18;;;;;;;;;;;;;;;:27;16229:7;16210:27;;;;;;;;;;;;;;;;16203:34;;16044:201;;;;:::o;20886:34::-;;;;;;;;;;;;;:::o;14105:238::-;13917:12;:10;:12::i;:::-;13906:23;;:7;:5;:7::i;:::-;:23;;;13898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14228:1:::1;14208:22;;:8;:22;;::::0;14186:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14307:28;14326:8;14307:18;:28::i;:::-;14105:238:::0;:::o;20968:25::-;;;;:::o;994:98::-;1047:7;1074:10;1067:17;;994:98;:::o;19323:380::-;19476:1;19459:19;;:5;:19;;;19451:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19557:1;19538:21;;:7;:21;;;19530:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19641:6;19611:11;:18;19623:5;19611:18;;;;;;;;;;;;;;;:27;19630:7;19611:27;;;;;;;;;;;;;;;:36;;;;19679:7;19663:32;;19672:5;19663:32;;;19688:6;19663:32;;;;;;:::i;:::-;;;;;;;;19323:380;;;:::o;19711:502::-;19846:24;19873:25;19883:5;19890:7;19873:9;:25::i;:::-;19846:52;;19933:17;19913:16;:37;19909:297;;20013:6;19993:16;:26;;19967:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20128:51;20137:5;20144:7;20172:6;20153:16;:25;20128:8;:51::i;:::-;19909:297;19835:378;19711:502;;;:::o;26369:2545::-;26493:21;26517:17;:23;26535:4;26517:23;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;26557:17;:21;26575:2;26557:21;;;;;;;;;;;;;;;;;;;;;;;;;26517:61;26493:85;;26615:1;26599:18;;:4;:18;;;26591:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26692:1;26678:16;;:2;:16;;;26670:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26767:14;;;;;;;;;;;:34;;;;26785:16;26767:34;26745:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;26878:1;26868:6;:11;26864:93;;26896:28;26912:4;26918:2;26922:1;26896:15;:28::i;:::-;26939:7;;;26864:93;26969:10;26990:14;;;;;;;;;;;26982:22;;:4;:22;;;:75;;;;;27022:31;:35;27054:2;27022:35;;;;;;;;;;;;;;;;;;;;;;;;;27021:36;26982:75;26969:88;;27068:11;27088:14;;;;;;;;;;;27082:20;;:2;:20;;;:75;;;;;27120:31;:37;27152:4;27120:37;;;;;;;;;;;;;;;;;;;;;;;;;27119:38;27082:75;27068:89;;27168:16;27195:7;:5;:7::i;:::-;27187:15;;:4;:15;;;:32;;;;27212:7;:5;:7::i;:::-;27206:13;;:2;:13;;;27187:32;27168:51;;27230:11;27258:1;27244:16;;:2;:16;;;:41;;;;27278:6;27264:21;;:2;:21;;;27244:41;27230:55;;27296:17;27316:11;:21;;;;27331:6;27316:21;:38;;;;27341:13;;;;;;;;;;;27316:38;27296:58;;27379:15;;;;;;;;;;;:32;;;;;27399:12;27398:13;27379:32;27375:943;;;27432:5;27428:879;;;27498:21;;27488:6;:31;;27458:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27691:10;;27674:13;27684:2;27674:9;:13::i;:::-;27665:6;:22;;;;:::i;:::-;:36;;27635:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;27428:879;;;27790:6;27786:521;;28033:31;:35;28065:2;28033:35;;;;;;;;;;;;;;;;;;;;;;;;;28032:36;:95;;;;;28090:31;:37;28122:4;28090:37;;;;;;;;;;;;;;;;;;;;;;;;;28089:38;28032:95;28010:297;;;28218:10;;28201:13;28211:2;28201:9;:13::i;:::-;28192:6;:22;;;;:::i;:::-;:36;;28162:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;28010:297;27786:521;27428:879;27375:943;28335:13;;;;;;;;;;;28334:14;:63;;;;;28366:25;:31;28392:4;28366:31;;;;;;;;;;;;;;;;;;;;;;;;;28365:32;28334:63;:104;;;;;28415:17;:23;28433:4;28415:23;;;;;;;;;;;;;;;;;;;;;;;;;28414:24;28334:104;:143;;;;;28456:17;:21;28474:2;28456:21;;;;;;;;;;;;;;;;;;;;;;;;;28455:22;28334:143;28330:517;;;28511:1;28498:10;;:14;28494:27;;;28514:7;;;;;;;;28494:27;28535:28;28566:24;28584:4;28566:9;:24::i;:::-;28535:55;;28605:12;28644:19;;28620:20;:43;;28605:58;;28682:7;:28;;;;;28694:16;28693:17;28682:28;28678:158;;;28747:4;28731:13;;:20;;;;;;;;;;;;;;;;;;28770:10;:8;:10::i;:::-;28815:5;28799:13;;:21;;;;;;;;;;;;;;;;;;28678:158;28479:368;;28330:517;28857:49;28874:4;28880:2;28884:6;28892;28900:5;28857:16;:49::i;:::-;26482:2432;;;;;;26369:2545;;;;:::o;26120:241::-;26240:5;26206:25;:31;26232:4;26206:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26256:38;26282:4;26288:5;26256:25;:38::i;:::-;26347:5;26310:43;;26341:4;26310:43;;;;;;;;;;;;26120:241;;:::o;14351:191::-;14425:16;14444:6;;;;;;;;;;;14425:25;;14470:8;14461:6;;:17;;;;;;;;;;;;;;;;;;14525:8;14494:40;;14515:8;14494:40;;;;;;;;;;;;14414:128;14351:191;:::o;17601:708::-;17748:1;17732:18;;:4;:18;;;17724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17825:1;17811:16;;:2;:16;;;17803:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17880:38;17901:4;17907:2;17911:6;17880:20;:38::i;:::-;17931:19;17953:9;:15;17963:4;17953:15;;;;;;;;;;;;;;;;17931:37;;18016:6;18001:11;:21;;17979:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;18156:6;18142:11;:20;18124:9;:15;18134:4;18124:15;;;;;;;;;;;;;;;:38;;;;18201:6;18184:9;:13;18194:2;18184:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18240:2;18225:26;;18234:4;18225:26;;;18244:6;18225:26;;;;;;:::i;:::-;;;;;;;;18264:37;18284:4;18290:2;18294:6;18264:19;:37::i;:::-;17713:596;17601:708;;;:::o;29008:1641::-;29047:23;29073:24;29091:4;29073:9;:24::i;:::-;29047:50;;29108:25;29188:13;;29155:16;;29136;;:35;;;;:::i;:::-;:65;;;;:::i;:::-;29108:93;;29235:1;29216:15;:20;:46;;;;29261:1;29240:17;:22;29216:46;29212:59;;;29264:7;;;;29212:59;29303:19;;29285:15;:37;29281:107;;;29357:19;;29339:37;;29281:107;29398:23;29509:1;29476:17;29443:16;;29425:15;:34;;;;:::i;:::-;29424:69;;;;:::i;:::-;:86;;;;:::i;:::-;29398:112;;29521:26;29550:36;29570:15;29550;:19;;:36;;;;:::i;:::-;29521:65;;29597:25;29625:21;29597:49;;29657:37;29675:18;29657:17;:37::i;:::-;29705:18;29726:44;29752:17;29726:21;:25;;:44;;;;:::i;:::-;29705:65;;29781:23;29807:79;29858:17;29807:32;29822:16;;29807:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;29781:105;;29897:20;29920:76;29968:17;29920:29;29935:13;;29920:10;:14;;:29;;;;:::i;:::-;:33;;:76;;;;:::i;:::-;29897:99;;30007:23;30064:12;30046:15;30033:10;:28;;;;:::i;:::-;:43;;;;:::i;:::-;30007:69;;30111:1;30093:15;:19;:42;;;;;30134:1;30116:15;:19;30093:42;30089:277;;;30152:47;30166:15;30183;30152:13;:47::i;:::-;30219:135;30252:18;30289:15;30323:16;;30219:135;;;;;;;;:::i;:::-;;;;;;;;30089:277;30397:1;30378:16;:20;;;;30428:1;30409:16;:20;;;;30456:1;30440:13;:17;;;;30471:25;30510:9;;;;;;;;;;;30502:23;;30533:15;30502:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30470:83;;;30565:22;30601:9;;;;;;;;;;;30593:23;;30624:12;30593:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30564:77;;;29036:1613;;;;;;;;;;;29008:1641;:::o;30655:1229::-;30819:12;30834:21;30846:4;30852:2;30834:11;:21::i;:::-;30819:36;;30870:7;30866:967;;;30894:13;30910:10;;30894:26;;30935:17;30955:13;;30935:33;;30987:6;30983:151;;;31035:18;;31022:10;;:31;;;;:::i;:::-;31014:39;;31100:18;;31084:13;;:34;;;;:::i;:::-;31072:46;;30983:151;31152:5;31148:148;;;31199:17;;31186:10;;:30;;;;:::i;:::-;31178:38;;31263:17;;31247:13;;:33;;;;:::i;:::-;31235:45;;31148:148;31310:12;31325:26;31347:3;31325:17;31336:5;31325:6;:10;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;31310:41;;31411:5;31394:13;;31387:4;:20;;;;:::i;:::-;31386:30;;;;:::i;:::-;31366:16;;:50;;;;;;;:::i;:::-;;;;;;;;31472:5;31459:9;31452:4;:16;;;;:::i;:::-;31451:26;;;;:::i;:::-;31431:16;;:46;;;;;;;:::i;:::-;;;;;;;;31531:5;31517:10;;31510:4;:17;;;;:::i;:::-;31509:27;;;;:::i;:::-;31492:13;;:44;;;;;;;:::i;:::-;;;;;;;;31564:1;31557:4;:8;31553:91;;;31586:42;31602:4;31616;31623;31586:15;:42::i;:::-;31553:91;31668:4;31658:14;;;;;:::i;:::-;;;30879:805;;;30866:967;;;31712:6;31694:15;31704:4;31694:9;:15::i;:::-;:24;31690:143;;;31739:17;:23;31757:4;31739:23;;;;;;;;;;;;;;;;;;;;;;;;;31735:65;;;31764:36;31774:2;31786:4;31793:6;31764:9;:36::i;:::-;31735:65;31815:7;;;31690:143;30866:967;31843:33;31859:4;31865:2;31869:6;31843:15;:33::i;:::-;30808:1076;30655:1229;;;;;;:::o;20221:125::-;;;;:::o;20354:124::-;;;;:::o;12341:98::-;12399:7;12430:1;12426;:5;;;;:::i;:::-;12419:12;;12341:98;;;;:::o;32597:479::-;32664:21;32702:1;32688:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32664:40;;32733:4;32715;32720:1;32715:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32759:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32749:4;32754:1;32749:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;32795:63;32812:4;32827:16;;;;;;;;;;;32846:11;32795:8;:63::i;:::-;32871:16;;;;;;;;;;;:67;;;32953:11;32979:1;32995:4;33022;33042:15;32871:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32653:423;32597:479;:::o;12447:98::-;12505:7;12536:1;12532;:5;;;;:::i;:::-;12525:12;;12447:98;;;;:::o;12553:::-;12611:7;12642:1;12638;:5;;;;:::i;:::-;12631:12;;12553:98;;;;:::o;33083:363::-;33165:63;33182:4;33197:16;;;;;;;;;;;33216:11;33165:8;:63::i;:::-;33239:16;;;;;;;;;;;:32;;;33279:9;33312:4;33332:11;33358:1;33374;33390:7;:5;:7::i;:::-;33412:15;33239:199;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33083:363;;:::o;31893:563::-;31957:4;31974:10;31995:14;;;;;;;;;;;31987:22;;:4;:22;;;:57;;;;;32027:16;;;;;;;;;;;32013:31;;:2;:31;;;;31987:57;31974:70;;32059:5;:30;;;;;32068:17;:21;32086:2;32068:21;;;;;;;;;;;;;;;;;;;;;;;;;32059:30;32055:51;;;32105:1;32091:10;;:15;;;;;;;:::i;:::-;;;;;;;;32055:51;32117:22;32142:17;:23;32160:4;32142:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;32169:17;:21;32187:2;32169:21;;;;;;;;;;;;;;;;;;;;;;;;;32142:48;32117:73;;32201:11;32221:14;;;;;;;;;;;32215:20;;:2;:20;;;32201:34;;32247:11;32261:5;:15;;;;32270:6;32261:15;32247:29;;32287:13;32317:1;32304:10;;:14;32287:32;;32351:8;:39;;;;;32377:13;;;;;;;;;;;32376:14;32351:39;:74;;;;;32408:17;32407:18;32351:74;:97;;;;;32442:6;32351:97;32330:118;;;;;;;31893:563;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:468::-;4124:6;4132;4181:2;4169:9;4160:7;4156:23;4152:32;4149:119;;;4187:79;;:::i;:::-;4149:119;4307:1;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4278:117;4434:2;4460:50;4502:7;4493:6;4482:9;4478:22;4460:50;:::i;:::-;4450:60;;4405:115;4059:468;;;;;:::o;4533:329::-;4592:6;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4533:329;;;;:::o;4868:619::-;4945:6;4953;4961;5010:2;4998:9;4989:7;4985:23;4981:32;4978:119;;;5016:79;;:::i;:::-;4978:119;5136:1;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5107:117;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;5391:2;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5362:118;4868:619;;;;;:::o;5493:::-;5570:6;5578;5586;5635:2;5623:9;5614:7;5610:23;5606:32;5603:119;;;5641:79;;:::i;:::-;5603:119;5761:1;5786:53;5831:7;5822:6;5811:9;5807:22;5786:53;:::i;:::-;5776:63;;5732:117;5888:2;5914:53;5959:7;5950:6;5939:9;5935:22;5914:53;:::i;:::-;5904:63;;5859:118;6016:2;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5987:118;5493:619;;;;;:::o;6118:86::-;6153:7;6193:4;6186:5;6182:16;6171:27;;6118:86;;;:::o;6210:112::-;6293:22;6309:5;6293:22;:::i;:::-;6288:3;6281:35;6210:112;;:::o;6328:214::-;6417:4;6455:2;6444:9;6440:18;6432:26;;6468:67;6532:1;6521:9;6517:17;6508:6;6468:67;:::i;:::-;6328:214;;;;:::o;6548:329::-;6607:6;6656:2;6644:9;6635:7;6631:23;6627:32;6624:119;;;6662:79;;:::i;:::-;6624:119;6782:1;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6753:117;6548:329;;;;:::o;6883:60::-;6911:3;6932:5;6925:12;;6883:60;;;:::o;6949:142::-;6999:9;7032:53;7050:34;7059:24;7077:5;7059:24;:::i;:::-;7050:34;:::i;:::-;7032:53;:::i;:::-;7019:66;;6949:142;;;:::o;7097:126::-;7147:9;7180:37;7211:5;7180:37;:::i;:::-;7167:50;;7097:126;;;:::o;7229:152::-;7305:9;7338:37;7369:5;7338:37;:::i;:::-;7325:50;;7229:152;;;:::o;7387:183::-;7500:63;7557:5;7500:63;:::i;:::-;7495:3;7488:76;7387:183;;:::o;7576:274::-;7695:4;7733:2;7722:9;7718:18;7710:26;;7746:97;7840:1;7829:9;7825:17;7816:6;7746:97;:::i;:::-;7576:274;;;;:::o;7856:118::-;7943:24;7961:5;7943:24;:::i;:::-;7938:3;7931:37;7856:118;;:::o;7980:222::-;8073:4;8111:2;8100:9;8096:18;8088:26;;8124:71;8192:1;8181:9;8177:17;8168:6;8124:71;:::i;:::-;7980:222;;;;:::o;8208:474::-;8276:6;8284;8333:2;8321:9;8312:7;8308:23;8304:32;8301:119;;;8339:79;;:::i;:::-;8301:119;8459:1;8484:53;8529:7;8520:6;8509:9;8505:22;8484:53;:::i;:::-;8474:63;;8430:117;8586:2;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8557:118;8208:474;;;;;:::o;8688:180::-;8736:77;8733:1;8726:88;8833:4;8830:1;8823:15;8857:4;8854:1;8847:15;8874:320;8918:6;8955:1;8949:4;8945:12;8935:22;;9002:1;8996:4;8992:12;9023:18;9013:81;;9079:4;9071:6;9067:17;9057:27;;9013:81;9141:2;9133:6;9130:14;9110:18;9107:38;9104:84;;9160:18;;:::i;:::-;9104:84;8925:269;8874:320;;;:::o;9200:182::-;9340:34;9336:1;9328:6;9324:14;9317:58;9200:182;:::o;9388:366::-;9530:3;9551:67;9615:2;9610:3;9551:67;:::i;:::-;9544:74;;9627:93;9716:3;9627:93;:::i;:::-;9745:2;9740:3;9736:12;9729:19;;9388:366;;;:::o;9760:419::-;9926:4;9964:2;9953:9;9949:18;9941:26;;10013:9;10007:4;10003:20;9999:1;9988:9;9984:17;9977:47;10041:131;10167:4;10041:131;:::i;:::-;10033:139;;9760:419;;;:::o;10185:180::-;10233:77;10230:1;10223:88;10330:4;10327:1;10320:15;10354:4;10351:1;10344:15;10371:410;10411:7;10434:20;10452:1;10434:20;:::i;:::-;10429:25;;10468:20;10486:1;10468:20;:::i;:::-;10463:25;;10523:1;10520;10516:9;10545:30;10563:11;10545:30;:::i;:::-;10534:41;;10724:1;10715:7;10711:15;10708:1;10705:22;10685:1;10678:9;10658:83;10635:139;;10754:18;;:::i;:::-;10635:139;10419:362;10371:410;;;;:::o;10787:180::-;10835:77;10832:1;10825:88;10932:4;10929:1;10922:15;10956:4;10953:1;10946:15;10973:185;11013:1;11030:20;11048:1;11030:20;:::i;:::-;11025:25;;11064:20;11082:1;11064:20;:::i;:::-;11059:25;;11103:1;11093:35;;11108:18;;:::i;:::-;11093:35;11150:1;11147;11143:9;11138:14;;10973:185;;;;:::o;11164:234::-;11304:34;11300:1;11292:6;11288:14;11281:58;11373:17;11368:2;11360:6;11356:15;11349:42;11164:234;:::o;11404:366::-;11546:3;11567:67;11631:2;11626:3;11567:67;:::i;:::-;11560:74;;11643:93;11732:3;11643:93;:::i;:::-;11761:2;11756:3;11752:12;11745:19;;11404:366;;;:::o;11776:419::-;11942:4;11980:2;11969:9;11965:18;11957:26;;12029:9;12023:4;12019:20;12015:1;12004:9;12000:17;11993:47;12057:131;12183:4;12057:131;:::i;:::-;12049:139;;11776:419;;;:::o;12201:191::-;12241:3;12260:20;12278:1;12260:20;:::i;:::-;12255:25;;12294:20;12312:1;12294:20;:::i;:::-;12289:25;;12337:1;12334;12330:9;12323:16;;12358:3;12355:1;12352:10;12349:36;;;12365:18;;:::i;:::-;12349:36;12201:191;;;;:::o;12398:179::-;12538:31;12534:1;12526:6;12522:14;12515:55;12398:179;:::o;12583:366::-;12725:3;12746:67;12810:2;12805:3;12746:67;:::i;:::-;12739:74;;12822:93;12911:3;12822:93;:::i;:::-;12940:2;12935:3;12931:12;12924:19;;12583:366;;;:::o;12955:419::-;13121:4;13159:2;13148:9;13144:18;13136:26;;13208:9;13202:4;13198:20;13194:1;13183:9;13179:17;13172:47;13236:131;13362:4;13236:131;:::i;:::-;13228:139;;12955:419;;;:::o;13380:244::-;13520:34;13516:1;13508:6;13504:14;13497:58;13589:27;13584:2;13576:6;13572:15;13565:52;13380:244;:::o;13630:366::-;13772:3;13793:67;13857:2;13852:3;13793:67;:::i;:::-;13786:74;;13869:93;13958:3;13869:93;:::i;:::-;13987:2;13982:3;13978:12;13971:19;;13630:366;;;:::o;14002:419::-;14168:4;14206:2;14195:9;14191:18;14183:26;;14255:9;14249:4;14245:20;14241:1;14230:9;14226:17;14219:47;14283:131;14409:4;14283:131;:::i;:::-;14275:139;;14002:419;;;:::o;14427:224::-;14567:34;14563:1;14555:6;14551:14;14544:58;14636:7;14631:2;14623:6;14619:15;14612:32;14427:224;:::o;14657:366::-;14799:3;14820:67;14884:2;14879:3;14820:67;:::i;:::-;14813:74;;14896:93;14985:3;14896:93;:::i;:::-;15014:2;15009:3;15005:12;14998:19;;14657:366;;;:::o;15029:419::-;15195:4;15233:2;15222:9;15218:18;15210:26;;15282:9;15276:4;15272:20;15268:1;15257:9;15253:17;15246:47;15310:131;15436:4;15310:131;:::i;:::-;15302:139;;15029:419;;;:::o;15454:223::-;15594:34;15590:1;15582:6;15578:14;15571:58;15663:6;15658:2;15650:6;15646:15;15639:31;15454:223;:::o;15683:366::-;15825:3;15846:67;15910:2;15905:3;15846:67;:::i;:::-;15839:74;;15922:93;16011:3;15922:93;:::i;:::-;16040:2;16035:3;16031:12;16024:19;;15683:366;;;:::o;16055:419::-;16221:4;16259:2;16248:9;16244:18;16236:26;;16308:9;16302:4;16298:20;16294:1;16283:9;16279:17;16272:47;16336:131;16462:4;16336:131;:::i;:::-;16328:139;;16055:419;;;:::o;16480:240::-;16620:34;16616:1;16608:6;16604:14;16597:58;16689:23;16684:2;16676:6;16672:15;16665:48;16480:240;:::o;16726:366::-;16868:3;16889:67;16953:2;16948:3;16889:67;:::i;:::-;16882:74;;16965:93;17054:3;16965:93;:::i;:::-;17083:2;17078:3;17074:12;17067:19;;16726:366;;;:::o;17098:419::-;17264:4;17302:2;17291:9;17287:18;17279:26;;17351:9;17345:4;17341:20;17337:1;17326:9;17322:17;17315:47;17379:131;17505:4;17379:131;:::i;:::-;17371:139;;17098:419;;;:::o;17523:239::-;17663:34;17659:1;17651:6;17647:14;17640:58;17732:22;17727:2;17719:6;17715:15;17708:47;17523:239;:::o;17768:366::-;17910:3;17931:67;17995:2;17990:3;17931:67;:::i;:::-;17924:74;;18007:93;18096:3;18007:93;:::i;:::-;18125:2;18120:3;18116:12;18109:19;;17768:366;;;:::o;18140:419::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18393:9;18387:4;18383:20;18379:1;18368:9;18364:17;18357:47;18421:131;18547:4;18421:131;:::i;:::-;18413:139;;18140:419;;;:::o;18565:225::-;18705:34;18701:1;18693:6;18689:14;18682:58;18774:8;18769:2;18761:6;18757:15;18750:33;18565:225;:::o;18796:366::-;18938:3;18959:67;19023:2;19018:3;18959:67;:::i;:::-;18952:74;;19035:93;19124:3;19035:93;:::i;:::-;19153:2;19148:3;19144:12;19137:19;;18796:366;;;:::o;19168:419::-;19334:4;19372:2;19361:9;19357:18;19349:26;;19421:9;19415:4;19411:20;19407:1;19396:9;19392:17;19385:47;19449:131;19575:4;19449:131;:::i;:::-;19441:139;;19168:419;;;:::o;19593:223::-;19733:34;19729:1;19721:6;19717:14;19710:58;19802:6;19797:2;19789:6;19785:15;19778:31;19593:223;:::o;19822:366::-;19964:3;19985:67;20049:2;20044:3;19985:67;:::i;:::-;19978:74;;20061:93;20150:3;20061:93;:::i;:::-;20179:2;20174:3;20170:12;20163:19;;19822:366;;;:::o;20194:419::-;20360:4;20398:2;20387:9;20383:18;20375:26;;20447:9;20441:4;20437:20;20433:1;20422:9;20418:17;20411:47;20475:131;20601:4;20475:131;:::i;:::-;20467:139;;20194:419;;;:::o;20619:221::-;20759:34;20755:1;20747:6;20743:14;20736:58;20828:4;20823:2;20815:6;20811:15;20804:29;20619:221;:::o;20846:366::-;20988:3;21009:67;21073:2;21068:3;21009:67;:::i;:::-;21002:74;;21085:93;21174:3;21085:93;:::i;:::-;21203:2;21198:3;21194:12;21187:19;;20846:366;;;:::o;21218:419::-;21384:4;21422:2;21411:9;21407:18;21399:26;;21471:9;21465:4;21461:20;21457:1;21446:9;21442:17;21435:47;21499:131;21625:4;21499:131;:::i;:::-;21491:139;;21218:419;;;:::o;21643:179::-;21783:31;21779:1;21771:6;21767:14;21760:55;21643:179;:::o;21828:366::-;21970:3;21991:67;22055:2;22050:3;21991:67;:::i;:::-;21984:74;;22067:93;22156:3;22067:93;:::i;:::-;22185:2;22180:3;22176:12;22169:19;;21828:366;;;:::o;22200:419::-;22366:4;22404:2;22393:9;22389:18;22381:26;;22453:9;22447:4;22443:20;22439:1;22428:9;22424:17;22417:47;22481:131;22607:4;22481:131;:::i;:::-;22473:139;;22200:419;;;:::o;22625:224::-;22765:34;22761:1;22753:6;22749:14;22742:58;22834:7;22829:2;22821:6;22817:15;22810:32;22625:224;:::o;22855:366::-;22997:3;23018:67;23082:2;23077:3;23018:67;:::i;:::-;23011:74;;23094:93;23183:3;23094:93;:::i;:::-;23212:2;23207:3;23203:12;23196:19;;22855:366;;;:::o;23227:419::-;23393:4;23431:2;23420:9;23416:18;23408:26;;23480:9;23474:4;23470:20;23466:1;23455:9;23451:17;23444:47;23508:131;23634:4;23508:131;:::i;:::-;23500:139;;23227:419;;;:::o;23652:222::-;23792:34;23788:1;23780:6;23776:14;23769:58;23861:5;23856:2;23848:6;23844:15;23837:30;23652:222;:::o;23880:366::-;24022:3;24043:67;24107:2;24102:3;24043:67;:::i;:::-;24036:74;;24119:93;24208:3;24119:93;:::i;:::-;24237:2;24232:3;24228:12;24221:19;;23880:366;;;:::o;24252:419::-;24418:4;24456:2;24445:9;24441:18;24433:26;;24505:9;24499:4;24495:20;24491:1;24480:9;24476:17;24469:47;24533:131;24659:4;24533:131;:::i;:::-;24525:139;;24252:419;;;:::o;24677:172::-;24817:24;24813:1;24805:6;24801:14;24794:48;24677:172;:::o;24855:366::-;24997:3;25018:67;25082:2;25077:3;25018:67;:::i;:::-;25011:74;;25094:93;25183:3;25094:93;:::i;:::-;25212:2;25207:3;25203:12;25196:19;;24855:366;;;:::o;25227:419::-;25393:4;25431:2;25420:9;25416:18;25408:26;;25480:9;25474:4;25470:20;25466:1;25455:9;25451:17;25444:47;25508:131;25634:4;25508:131;:::i;:::-;25500:139;;25227:419;;;:::o;25652:240::-;25792:34;25788:1;25780:6;25776:14;25769:58;25861:23;25856:2;25848:6;25844:15;25837:48;25652:240;:::o;25898:366::-;26040:3;26061:67;26125:2;26120:3;26061:67;:::i;:::-;26054:74;;26137:93;26226:3;26137:93;:::i;:::-;26255:2;26250:3;26246:12;26239:19;;25898:366;;;:::o;26270:419::-;26436:4;26474:2;26463:9;26459:18;26451:26;;26523:9;26517:4;26513:20;26509:1;26498:9;26494:17;26487:47;26551:131;26677:4;26551:131;:::i;:::-;26543:139;;26270:419;;;:::o;26695:169::-;26835:21;26831:1;26823:6;26819:14;26812:45;26695:169;:::o;26870:366::-;27012:3;27033:67;27097:2;27092:3;27033:67;:::i;:::-;27026:74;;27109:93;27198:3;27109:93;:::i;:::-;27227:2;27222:3;27218:12;27211:19;;26870:366;;;:::o;27242:419::-;27408:4;27446:2;27435:9;27431:18;27423:26;;27495:9;27489:4;27485:20;27481:1;27470:9;27466:17;27459:47;27523:131;27649:4;27523:131;:::i;:::-;27515:139;;27242:419;;;:::o;27667:225::-;27807:34;27803:1;27795:6;27791:14;27784:58;27876:8;27871:2;27863:6;27859:15;27852:33;27667:225;:::o;27898:366::-;28040:3;28061:67;28125:2;28120:3;28061:67;:::i;:::-;28054:74;;28137:93;28226:3;28137:93;:::i;:::-;28255:2;28250:3;28246:12;28239:19;;27898:366;;;:::o;28270:419::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28523:9;28517:4;28513:20;28509:1;28498:9;28494:17;28487:47;28551:131;28677:4;28551:131;:::i;:::-;28543:139;;28270:419;;;:::o;28695:194::-;28735:4;28755:20;28773:1;28755:20;:::i;:::-;28750:25;;28789:20;28807:1;28789:20;:::i;:::-;28784:25;;28833:1;28830;28826:9;28818:17;;28857:1;28851:4;28848:11;28845:37;;;28862:18;;:::i;:::-;28845:37;28695:194;;;;:::o;28895:442::-;29044:4;29082:2;29071:9;29067:18;29059:26;;29095:71;29163:1;29152:9;29148:17;29139:6;29095:71;:::i;:::-;29176:72;29244:2;29233:9;29229:18;29220:6;29176:72;:::i;:::-;29258;29326:2;29315:9;29311:18;29302:6;29258:72;:::i;:::-;28895:442;;;;;;:::o;29343:147::-;29444:11;29481:3;29466:18;;29343:147;;;;:::o;29496:114::-;;:::o;29616:398::-;29775:3;29796:83;29877:1;29872:3;29796:83;:::i;:::-;29789:90;;29888:93;29977:3;29888:93;:::i;:::-;30006:1;30001:3;29997:11;29990:18;;29616:398;;;:::o;30020:379::-;30204:3;30226:147;30369:3;30226:147;:::i;:::-;30219:154;;30390:3;30383:10;;30020:379;;;:::o;30405:180::-;30453:77;30450:1;30443:88;30550:4;30547:1;30540:15;30574:4;30571:1;30564:15;30591:180;30639:77;30636:1;30629:88;30736:4;30733:1;30726:15;30760:4;30757:1;30750:15;30777:143;30834:5;30865:6;30859:13;30850:22;;30881:33;30908:5;30881:33;:::i;:::-;30777:143;;;;:::o;30926:351::-;30996:6;31045:2;31033:9;31024:7;31020:23;31016:32;31013:119;;;31051:79;;:::i;:::-;31013:119;31171:1;31196:64;31252:7;31243:6;31232:9;31228:22;31196:64;:::i;:::-;31186:74;;31142:128;30926:351;;;;:::o;31283:85::-;31328:7;31357:5;31346:16;;31283:85;;;:::o;31374:158::-;31432:9;31465:61;31483:42;31492:32;31518:5;31492:32;:::i;:::-;31483:42;:::i;:::-;31465:61;:::i;:::-;31452:74;;31374:158;;;:::o;31538:147::-;31633:45;31672:5;31633:45;:::i;:::-;31628:3;31621:58;31538:147;;:::o;31691:114::-;31758:6;31792:5;31786:12;31776:22;;31691:114;;;:::o;31811:184::-;31910:11;31944:6;31939:3;31932:19;31984:4;31979:3;31975:14;31960:29;;31811:184;;;;:::o;32001:132::-;32068:4;32091:3;32083:11;;32121:4;32116:3;32112:14;32104:22;;32001:132;;;:::o;32139:108::-;32216:24;32234:5;32216:24;:::i;:::-;32211:3;32204:37;32139:108;;:::o;32253:179::-;32322:10;32343:46;32385:3;32377:6;32343:46;:::i;:::-;32421:4;32416:3;32412:14;32398:28;;32253:179;;;;:::o;32438:113::-;32508:4;32540;32535:3;32531:14;32523:22;;32438:113;;;:::o;32587:732::-;32706:3;32735:54;32783:5;32735:54;:::i;:::-;32805:86;32884:6;32879:3;32805:86;:::i;:::-;32798:93;;32915:56;32965:5;32915:56;:::i;:::-;32994:7;33025:1;33010:284;33035:6;33032:1;33029:13;33010:284;;;33111:6;33105:13;33138:63;33197:3;33182:13;33138:63;:::i;:::-;33131:70;;33224:60;33277:6;33224:60;:::i;:::-;33214:70;;33070:224;33057:1;33054;33050:9;33045:14;;33010:284;;;33014:14;33310:3;33303:10;;32711:608;;;32587:732;;;;:::o;33325:831::-;33588:4;33626:3;33615:9;33611:19;33603:27;;33640:71;33708:1;33697:9;33693:17;33684:6;33640:71;:::i;:::-;33721:80;33797:2;33786:9;33782:18;33773:6;33721:80;:::i;:::-;33848:9;33842:4;33838:20;33833:2;33822:9;33818:18;33811:48;33876:108;33979:4;33970:6;33876:108;:::i;:::-;33868:116;;33994:72;34062:2;34051:9;34047:18;34038:6;33994:72;:::i;:::-;34076:73;34144:3;34133:9;34129:19;34120:6;34076:73;:::i;:::-;33325:831;;;;;;;;:::o;34162:807::-;34411:4;34449:3;34438:9;34434:19;34426:27;;34463:71;34531:1;34520:9;34516:17;34507:6;34463:71;:::i;:::-;34544:72;34612:2;34601:9;34597:18;34588:6;34544:72;:::i;:::-;34626:80;34702:2;34691:9;34687:18;34678:6;34626:80;:::i;:::-;34716;34792:2;34781:9;34777:18;34768:6;34716:80;:::i;:::-;34806:73;34874:3;34863:9;34859:19;34850:6;34806:73;:::i;:::-;34889;34957:3;34946:9;34942:19;34933:6;34889:73;:::i;:::-;34162:807;;;;;;;;;:::o;34975:143::-;35032:5;35063:6;35057:13;35048:22;;35079:33;35106:5;35079:33;:::i;:::-;34975:143;;;;:::o;35124:663::-;35212:6;35220;35228;35277:2;35265:9;35256:7;35252:23;35248:32;35245:119;;;35283:79;;:::i;:::-;35245:119;35403:1;35428:64;35484:7;35475:6;35464:9;35460:22;35428:64;:::i;:::-;35418:74;;35374:128;35541:2;35567:64;35623:7;35614:6;35603:9;35599:22;35567:64;:::i;:::-;35557:74;;35512:129;35680:2;35706:64;35762:7;35753:6;35742:9;35738:22;35706:64;:::i;:::-;35696:74;;35651:129;35124:663;;;;;:::o

Swarm Source

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