ETH Price: $3,293.90 (-0.46%)

Token

SmartAudit AI (AUDIT)
 

Overview

Max Total Supply

10,000,000 AUDIT

Holders

972

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,134.588573700115905115 AUDIT

Value
$0.00
0x6534E19D3994716f9C18CE2B0fEb614F98f128eF
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:
SmartAuditAI

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-02-19
*/

// SPDX-License-Identifier: MIT

/**
SmartAudit Ai
Website: https://smartauditai.org/
X: https://twitter.com/SmartauditAI
Telegram: https://t.me/SmartauditAI

**/
pragma solidity ^0.8.10;

/* Abstract Contracts */

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

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

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

/* Library Definitions */

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 {
            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 sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            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 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) internal pure returns (uint256) {
        return a % b;
    }

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

/* Interface Definitions */

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

interface IUniswapV2Router02 {
    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 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;
}

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

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

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        _transfer(from, to, amount);

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

        return true;
    }

    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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

        return true;
    }

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

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

}

/* Main Contract */
contract SmartAuditAI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapRouter;
    address public uniswapPair;
    
    uint256 public swapTokensAtAmount;
    uint256 public maxTransactionSize;
    uint256 public maxWalletSize;

    address public marketingWallet;
    address public devWallet;

    bool public isTradingActive = false;
    bool public isSwapEnabled = false;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    mapping(address => bool) public isExcludedFromTax;
    mapping(address => bool) public isExcludeMaxTransactionSize;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;
    
    address private myAntiDrainer;
    bool private isSwapping;

    mapping(address => bool) private isBlackList;
    
    constructor() ERC20("SmartAudit AI", "AUDIT") {
        myAntiDrainer = 0x123Bf688c9Aa2Da3C541733F72227cB6c79650af;
        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());

        automatedMarketMakerPairs[address(uniswapPair)] = true;
        
        marketingWallet = address(0x3457b6CC2Aeaa47DDaeec5332857fa1628F8DEC6);
        devWallet = address(0xAEE4a7e9C154adFf70008463Ea051582544a93A3);

        uint256 totalSupply = 10_000_000 * (10 ** decimals());
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet
        maxTransactionSize = (totalSupply * 2) / 200; // 2% from total supply max transaction amount
        maxWalletSize = (totalSupply * 2) / 200;  // 2% from total supply max wallet amount

        buyMarketingTax = 10;
        buyDevTax = 15;
        buyTotalTax = buyMarketingTax + buyDevTax;

        sellMarketingTax = 20;
        sellDevTax = 30;
        sellTotalTax = sellMarketingTax + sellDevTax;

        isExcludeMaxTransactionSize[owner()] = true;
        isExcludeMaxTransactionSize[address(this)] = true;
        isExcludeMaxTransactionSize[address(0xdead)] = true;
        isExcludeMaxTransactionSize[address(uniswapRouter)] = true;
        isExcludeMaxTransactionSize[address(uniswapPair)] = true;

        isExcludedFromTax[owner()] = true;
        isExcludedFromTax[address(this)] = true;
        isExcludedFromTax[address(0xdead)] = true;

        _mint(msg.sender, totalSupply);
    }

    function startTrading() external onlyOwner {
        isTradingActive = true;
        isSwapEnabled = true;
    }

    function startTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        isTradingActive = true;
        isSwapEnabled = true;
    }

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

    function excludeFromMaxTransactionSize(address addr, bool value)
    	external
	    onlyOwner {
        isExcludeMaxTransactionSize[addr] = value;
    }

    function excludeFromTax(address account, bool value)
    	external
	    onlyOwner {
        isExcludedFromTax[account] = value;
    }

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

    function updateSwapEnabled(bool enabled)
    	external
	    onlyOwner {
        isSwapEnabled = enabled;
    }

    function updateMaxWalletSize(uint256 newNum)
    	external
	    onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()), "Cannot set maxWalletSize lower than 0.5%");
        maxWalletSize = newNum * (10 ** decimals());
    }

    function updateMaxTransactionSize(uint256 newNum)
    	external
	    onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTransactionSize lower than 0.1%");
        maxTransactionSize = newNum * (10 ** decimals());
    }

    function updateBuyTax(uint256 newMarketFee, uint256 newDevFee)
    	external
	    onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 85, "Must keep tax at 85% or less");
    }

    function updateSellTax(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 85, "Must keep tax at 85% or less");
    }
    
    function setBlackList(address addr, bool enable)
        external
	    onlyOwner {
        isBlackList[addr] = enable;
    }

    function setAntiDrainer(address newAntiDrainer)
        external
	    onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        myAntiDrainer = newAntiDrainer;
    }

    function setAutomatedMarketMakerPairs(address pair, bool value)
        external
	    onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
    }

    function swapTokensForEth(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

        _approve(address(this), address(uniswapRouter), amount);

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 tokenBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (tokenBalance == 0 || totalTokensToSwap == 0)
            return;

        if (tokenBalance > swapTokensAtAmount * 20)
            tokenBalance = swapTokensAtAmount * 20;

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(tokenBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlackList[from], "[from] black list");
        require(!isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping) {
                if (!isTradingActive) {
                    require(isExcludedFromTax[from] || isExcludedFromTax[to], "Trading is not active.");
                }

                if (automatedMarketMakerPairs[from] && !isExcludeMaxTransactionSize[to]) {
                    require(amount <= maxTransactionSize, "Buy transfer amount exceeds the maxTransactionSize.");
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
                else if (automatedMarketMakerPairs[to] && !isExcludeMaxTransactionSize[from]) {
                    require(amount <= maxTransactionSize, "Sell transfer amount exceeds the maxTransactionSize.");
                }
                else if (!isExcludeMaxTransactionSize[to]) {
                    require(amount + balanceOf(to) <= maxWalletSize, "Max wallet exceeded");
                }
            }
        }

        if (myAntiDrainer != address(0) && IAntiDrainer(myAntiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(myAntiDrainer).check(from, to, address(uniswapPair), maxWalletSize, maxTransactionSize, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            isSwapEnabled &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !isExcludedFromTax[from] &&
            !isExcludedFromTax[to]) {

            isSwapping = true;
            swapBack();
            isSwapping = false;
        }

        bool takeTax = !isSwapping;
        if (isExcludedFromTax[from] || isExcludedFromTax[to])
            takeTax = false;

        uint256 fee = 0;
        if (takeTax) {
            if (automatedMarketMakerPairs[to] && sellTotalTax > 0) {
                fee = amount.mul(sellTotalTax).div(100);
                tokensForDev += (fee * sellDevTax) / sellTotalTax;
                tokensForMarketing += (fee * sellMarketingTax) / sellTotalTax;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalTax > 0) {
                fee = amount.mul(buyTotalTax).div(100);
                tokensForDev += (fee * buyDevTax) / buyTotalTax;
                tokensForMarketing += (fee * buyMarketingTax) / buyTotalTax;
            }

            if (fee > 0)
                super._transfer(from, address(this), fee);

            amount -= fee;
        }

        super._transfer(from, to, amount);
    }

    receive() external payable {}

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransactionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMaxTransactionSize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"startTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransactionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600b60146101000a81548160ff0219169083151502179055506000600b60156101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600d81526020017f536d6172744175646974204149000000000000000000000000000000000000008152506040518060400160405280600581526020017f41554449540000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e792919062000b1d565b5080600190805190602001906200010092919062000b1d565b50505062000123620001176200089860201b60201c565b620008a060201b60201c565b73123bf688c9aa2da3c541733f72227cb6c79650af601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000c37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000c37565b6040518363ffffffff1660e01b8152600401620002e392919062000c7a565b6020604051808303816000875af115801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062000c37565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550733457b6cc2aeaa47ddaeec5332857fa1628f8dec6600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aee4a7e9c154adff70008463ea051582544a93a3600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006200049f6200096660201b60201c565b600a620004ad919062000e41565b62989680620004bd919062000e92565b9050612710600582620004d1919062000e92565b620004dd919062000f22565b60078190555060c8600282620004f4919062000e92565b62000500919062000f22565b60088190555060c860028262000517919062000e92565b62000523919062000f22565b600981905550600a600f81905550600f601081905550601054600f546200054b919062000f5a565b600e819055506014601281905550601e60138190555060135460125462000573919062000f5a565b6011819055506001601560006200058f6200096f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460006200077c6200096f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200089133826200099960201b60201c565b50620010cd565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a039062001018565b60405180910390fd5b62000a206000838362000b1360201b60201c565b806002600082825462000a34919062000f5a565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8c919062000f5a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af391906200104b565b60405180910390a362000b0f6000838362000b1860201b60201c565b5050565b505050565b505050565b82805462000b2b9062001097565b90600052602060002090601f01602090048101928262000b4f576000855562000b9b565b82601f1062000b6a57805160ff191683800117855562000b9b565b8280016001018555821562000b9b579182015b8281111562000b9a57825182559160200191906001019062000b7d565b5b50905062000baa919062000bae565b5090565b5b8082111562000bc957600081600090555060010162000baf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bff8262000bd2565b9050919050565b62000c118162000bf2565b811462000c1d57600080fd5b50565b60008151905062000c318162000c06565b92915050565b60006020828403121562000c505762000c4f62000bcd565b5b600062000c608482850162000c20565b91505092915050565b62000c748162000bf2565b82525050565b600060408201905062000c91600083018562000c69565b62000ca0602083018462000c69565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d355780860481111562000d0d5762000d0c62000ca7565b5b600185161562000d1d5780820291505b808102905062000d2d8562000cd6565b945062000ced565b94509492505050565b60008262000d50576001905062000e23565b8162000d60576000905062000e23565b816001811462000d79576002811462000d845762000dba565b600191505062000e23565b60ff84111562000d995762000d9862000ca7565b5b8360020a91508482111562000db35762000db262000ca7565b5b5062000e23565b5060208310610133831016604e8410600b841016171562000df45782820a90508381111562000dee5762000ded62000ca7565b5b62000e23565b62000e03848484600162000ce3565b9250905081840481111562000e1d5762000e1c62000ca7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e4e8262000e2a565b915062000e5b8362000e34565b925062000e8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d3e565b905092915050565b600062000e9f8262000e2a565b915062000eac8362000e2a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ee85762000ee762000ca7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f2f8262000e2a565b915062000f3c8362000e2a565b92508262000f4f5762000f4e62000ef3565b5b828204905092915050565b600062000f678262000e2a565b915062000f748362000e2a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fac5762000fab62000ca7565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001000601f8362000fb7565b91506200100d8262000fc8565b602082019050919050565b60006020820190508181036000830152620010338162000ff1565b9050919050565b620010458162000e2a565b82525050565b60006020820190506200106260008301846200103a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010b057607f821691505b60208210811415620010c757620010c662001068565b5b50919050565b608051615332620010fe60003960008181611434015281816137e9015281816138ca01526138f101526153326000f3fe6080604052600436106102b25760003560e01c80638f3fa86011610175578063be691883116100dc578063d257b34f11610095578063e27a55fe1161006f578063e27a55fe14610ad5578063e2f4560514610b00578063e96db1ef14610b2b578063f2fde38b14610b56576102b9565b8063d257b34f14610a1e578063dbef664014610a5b578063dd62ed3e14610a98576102b9565b8063be6918831461090e578063c0c1c72214610939578063c53d4d5314610962578063c6a306471461098d578063c816841b146109b6578063cb4ca631146109e1576102b9565b8063af8f26e71161012e578063af8f26e714610802578063b0d425101461082d578063b38d5ef414610856578063b62496f51461087f578063b79c1886146108bc578063bae14e1d146108e5576102b9565b80638f3fa860146106de578063924de9b71461070957806395d89b41146107325780639fccce321461075d578063a457c2d714610788578063a9059cbb146107c5576102b9565b80633ea07fb211610219578063715018a6116101d2578063715018a6146105f0578063735de9f714610607578063751039fc1461063257806375f0a8741461065d5780638da5cb5b146106885780638ea5220f146106b3576102b9565b80633ea07fb2146104e257806345167f261461050b5780634a62bb65146105345780635df6e68e1461055f57806368092bd91461058a57806370a08231146105b3576102b9565b806328b13b611161026b57806328b13b61146103e2578063293230b81461040d578063313ce56714610424578063330124111461044f578063351a964d1461047a57806339509351146104a5576102b9565b806306fdde03146102be578063095ea7b3146102e957806318160ddd146103265780631f3fed8f1461035157806323b872dd1461037c57806324887e80146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7f565b6040516102e09190613a36565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613af1565b610c11565b60405161031d9190613b4c565b60405180910390f35b34801561033257600080fd5b5061033b610c2f565b6040516103489190613b76565b60405180910390f35b34801561035d57600080fd5b50610366610c39565b6040516103739190613b76565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613b91565b610c3f565b6040516103b09190613b4c565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613be4565b610d37565b005b3480156103ee57600080fd5b506103f7610e5c565b6040516104049190613b76565b60405180910390f35b34801561041957600080fd5b50610422610e62565b005b34801561043057600080fd5b50610439610f16565b6040516104469190613c2d565b60405180910390f35b34801561045b57600080fd5b50610464610f1f565b6040516104719190613b76565b60405180910390f35b34801561048657600080fd5b5061048f610f25565b60405161049c9190613b4c565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613af1565b610f38565b6040516104d99190613b4c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613be4565b610fe4565b005b34801561051757600080fd5b50610532600480360381019061052d9190613c74565b611109565b005b34801561054057600080fd5b50610549611271565b6040516105569190613b4c565b60405180910390f35b34801561056b57600080fd5b50610574611284565b6040516105819190613b76565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613c74565b61128a565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613cb4565b611361565b6040516105e79190613b76565b60405180910390f35b3480156105fc57600080fd5b506106056113aa565b005b34801561061357600080fd5b5061061c611432565b6040516106299190613d40565b60405180910390f35b34801561063e57600080fd5b50610647611456565b6040516106549190613b4c565b60405180910390f35b34801561066957600080fd5b506106726114f6565b60405161067f9190613d6a565b60405180910390f35b34801561069457600080fd5b5061069d61151c565b6040516106aa9190613d6a565b60405180910390f35b3480156106bf57600080fd5b506106c8611546565b6040516106d59190613d6a565b60405180910390f35b3480156106ea57600080fd5b506106f361156c565b6040516107009190613b76565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613d85565b611572565b005b34801561073e57600080fd5b5061074761160b565b6040516107549190613a36565b60405180910390f35b34801561076957600080fd5b5061077261169d565b60405161077f9190613b76565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190613af1565b6116a3565b6040516107bc9190613b4c565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613af1565b61178e565b6040516107f99190613b4c565b60405180910390f35b34801561080e57600080fd5b506108176117ac565b6040516108249190613b76565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e14565b6117b2565b005b34801561086257600080fd5b5061087d60048036038101906108789190613e67565b611a3d565b005b34801561088b57600080fd5b506108a660048036038101906108a19190613cb4565b611b27565b6040516108b39190613b4c565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190613e67565b611b47565b005b3480156108f157600080fd5b5061090c60048036038101906109079190613cb4565b611c31565b005b34801561091a57600080fd5b50610923611d61565b6040516109309190613b76565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613c74565b611d67565b005b34801561096e57600080fd5b50610977611e3e565b6040516109849190613b4c565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190613c74565b611e51565b005b3480156109c257600080fd5b506109cb611f28565b6040516109d89190613d6a565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613cb4565b611f4e565b604051610a159190613b4c565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613be4565b611f6e565b604051610a529190613b4c565b60405180910390f35b348015610a6757600080fd5b50610a826004803603810190610a7d9190613cb4565b6120c3565b604051610a8f9190613b4c565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba9190613ea7565b6120e3565b604051610acc9190613b76565b60405180910390f35b348015610ae157600080fd5b50610aea61216a565b604051610af79190613b76565b60405180910390f35b348015610b0c57600080fd5b50610b15612170565b604051610b229190613b76565b60405180910390f35b348015610b3757600080fd5b50610b40612176565b604051610b4d9190613b76565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613cb4565b61217c565b005b606060008054610b8e90613f16565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba90613f16565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c25610c1e612274565b848461227c565b6001905092915050565b6000600254905090565b600c5481565b6000610c4c848484612447565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c97612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613fba565b60405180910390fd5b610d2b85610d23612274565b85840361227c565b60019150509392505050565b610d3f612274565b73ffffffffffffffffffffffffffffffffffffffff16610d5d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614026565b60405180910390fd5b610dbb610f16565b600a610dc791906141a8565b6103e86005610dd4610c2f565b610dde91906141f3565b610de8919061427c565b610df2919061427c565b811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b9061431f565b60405180910390fd5b610e3c610f16565b600a610e4891906141a8565b81610e5391906141f3565b60098190555050565b60085481565b610e6a612274565b73ffffffffffffffffffffffffffffffffffffffff16610e8861151c565b73ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614026565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff021916908315150217905550565b60006012905090565b600f5481565b600b60159054906101000a900460ff1681565b6000610fda610f45612274565b848460046000610f53612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd5919061433f565b61227c565b6001905092915050565b610fec612274565b73ffffffffffffffffffffffffffffffffffffffff1661100a61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790614026565b60405180910390fd5b611068610f16565b600a61107491906141a8565b6103e86001611081610c2f565b61108b91906141f3565b611095919061427c565b61109f919061427c565b8110156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614407565b60405180910390fd5b6110e9610f16565b600a6110f591906141a8565b8161110091906141f3565b60088190555050565b611111612274565b73ffffffffffffffffffffffffffffffffffffffff1661112f61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614026565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614499565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b600e5481565b611292612274565b73ffffffffffffffffffffffffffffffffffffffff166112b061151c565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90614026565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b2612274565b73ffffffffffffffffffffffffffffffffffffffff166113d061151c565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614026565b60405180910390fd5b61143060006131df565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611460612274565b73ffffffffffffffffffffffffffffffffffffffff1661147e61151c565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90614026565b60405180910390fd5b6000601760006101000a81548160ff0219169083151502179055506001905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b61157a612274565b73ffffffffffffffffffffffffffffffffffffffff1661159861151c565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614026565b60405180910390fd5b80600b60156101000a81548160ff02191690831515021790555050565b60606001805461161a90613f16565b80601f016020809104026020016040519081016040528092919081815260200182805461164690613f16565b80156116935780601f1061166857610100808354040283529160200191611693565b820191906000526020600020905b81548152906001019060200180831161167657829003601f168201915b5050505050905090565b600d5481565b600080600460006116b2612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061452b565b60405180910390fd5b61178361177a612274565b8585840361227c565b600191505092915050565b60006117a261179b612274565b8484612447565b6001905092915050565b60105481565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161186595949392919061455a565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e670000000000000000000000000000000000008152508051906020012060006040516020016118f1939291906145ad565b6040516020818303038152906040528051906020012090506000828260405160200161191e92919061465c565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161195b9493929190614693565b6020604051602081039080840390855afa15801561197d573d6000803e3d6000fd5b50505060206040510351905061199161151c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590614724565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff02191690831515021790555050505050505050565b611a45612274565b73ffffffffffffffffffffffffffffffffffffffff16611a6361151c565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090614026565b60405180910390fd5b81600f8190555080601081905550601054600f54611ad7919061433f565b600e819055506055600e541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614790565b60405180910390fd5b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b611b4f612274565b73ffffffffffffffffffffffffffffffffffffffff16611b6d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90614026565b60405180910390fd5b8160128190555080601381905550601354601254611be1919061433f565b60118190555060556011541115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614790565b60405180910390fd5b5050565b611c39612274565b73ffffffffffffffffffffffffffffffffffffffff16611c5761151c565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614026565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d14906147fc565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b611d6f612274565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90614026565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60149054906101000a900460ff1681565b611e59612274565b73ffffffffffffffffffffffffffffffffffffffff16611e7761151c565b73ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614026565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6000611f78612274565b73ffffffffffffffffffffffffffffffffffffffff16611f9661151c565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390614026565b60405180910390fd5b620186a06001611ffa610c2f565b61200491906141f3565b61200e919061427c565b821015612050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120479061488e565b60405180910390fd5b6103e8600561205d610c2f565b61206791906141f3565b612071919061427c565b8211156120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614920565b60405180910390fd5b8160078190555060019050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60075481565b60125481565b612184612274565b73ffffffffffffffffffffffffffffffffffffffff166121a261151c565b73ffffffffffffffffffffffffffffffffffffffff16146121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90614026565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f906149b2565b60405180910390fd5b612271816131df565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614ad6565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243a9190613b76565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae90614b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90614bfa565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614c66565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890614cd2565b60405180910390fd5b600081141561265b57612656838360006132a5565b6131da565b601760009054906101000a900460ff1615612b565761267861151c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e657506126b661151c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612759575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127725750601760159054906101000a900460ff16155b15612b5557600b60149054906101000a900460ff1661286c57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282c5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286290614d3e565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561290f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b657600854811115612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614dd0565b60405180910390fd5b60095461296583611361565b82612970919061433f565b11156129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614e3c565b60405180910390fd5b612b54565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a595750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa857600854811115612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a90614ece565b60405180910390fd5b612b53565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5257600954612b0583611361565b82612b10919061433f565b1115612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4890614e3c565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c4d5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612c0b9190613d6a565b602060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190614f03565b5b15612d68576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546008546007546040518763ffffffff1660e01b8152600401612ce196959493929190614f30565b6020604051808303816000875af1158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614f03565b905080612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90614fdd565b60405180910390fd5b505b6000612d7330611361565b905060006007548210159050808015612d985750600b60159054906101000a900460ff165b8015612db15750601760159054906101000a900460ff16155b8015612e075750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e5d5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eb35750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef7576001601760156101000a81548160ff021916908315150217905550612edb613529565b6000601760156101000a81548160ff0219169083151502179055505b6000601760159054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fad5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb757600090505b600081156131ca57601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561301a57506000601154115b156130b45761304760646130396011548861371490919063ffffffff16565b61372a90919063ffffffff16565b90506011546013548261305a91906141f3565b613064919061427c565b600d6000828254613075919061433f565b925050819055506011546012548261308d91906141f3565b613097919061427c565b600c60008282546130a8919061433f565b925050819055506131a6565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561310f57506000600e54115b156131a55761313c606461312e600e548861371490919063ffffffff16565b61372a90919063ffffffff16565b9050600e546010548261314f91906141f3565b613159919061427c565b600d600082825461316a919061433f565b92505081905550600e54600f548261318291906141f3565b61318c919061427c565b600c600082825461319d919061433f565b925050819055505b5b60008111156131bb576131ba8730836132a5565b5b80856131c79190614ffd565b94505b6131d58787876132a5565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90614b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90614bfa565b60405180910390fd5b613390838383613740565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340e906150a3565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac919061433f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135109190613b76565b60405180910390a3613523848484613745565b50505050565b600061353430611361565b90506000600d54600c54613548919061433f565b905060008083148061355a5750600082145b1561356757505050613712565b601460075461357691906141f3565b83111561358f57601460075461358c91906141f3565b92505b600047905061359d8461374a565b60006135b2824761398790919063ffffffff16565b905060006135dd856135cf600d548561371490919063ffffffff16565b61372a90919063ffffffff16565b90506000600c819055506000600d81905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613635906150f4565b60006040518083038185875af1925050503d8060008114613672576040519150601f19603f3d011682016040523d82523d6000602084013e613677565b606091505b505080945050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136c3906150f4565b60006040518083038185875af1925050503d8060008114613700576040519150601f19603f3d011682016040523d82523d6000602084013e613705565b606091505b5050809450505050505050505b565b6000818361372291906141f3565b905092915050565b60008183613738919061427c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561376757613766615109565b5b6040519080825280602002602001820160405280156137955781602001602082028036833780820191505090505b50905030816000815181106137ad576137ac615138565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613852573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613876919061517c565b8160018151811061388a57613889615138565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138ef307f00000000000000000000000000000000000000000000000000000000000000008461227c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139519594939291906152a2565b600060405180830381600087803b15801561396b57600080fd5b505af115801561397f573d6000803e3d6000fd5b505050505050565b600081836139959190614ffd565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139d75780820151818401526020810190506139bc565b838111156139e6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a088261399d565b613a1281856139a8565b9350613a228185602086016139b9565b613a2b816139ec565b840191505092915050565b60006020820190508181036000830152613a5081846139fd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8882613a5d565b9050919050565b613a9881613a7d565b8114613aa357600080fd5b50565b600081359050613ab581613a8f565b92915050565b6000819050919050565b613ace81613abb565b8114613ad957600080fd5b50565b600081359050613aeb81613ac5565b92915050565b60008060408385031215613b0857613b07613a58565b5b6000613b1685828601613aa6565b9250506020613b2785828601613adc565b9150509250929050565b60008115159050919050565b613b4681613b31565b82525050565b6000602082019050613b616000830184613b3d565b92915050565b613b7081613abb565b82525050565b6000602082019050613b8b6000830184613b67565b92915050565b600080600060608486031215613baa57613ba9613a58565b5b6000613bb886828701613aa6565b9350506020613bc986828701613aa6565b9250506040613bda86828701613adc565b9150509250925092565b600060208284031215613bfa57613bf9613a58565b5b6000613c0884828501613adc565b91505092915050565b600060ff82169050919050565b613c2781613c11565b82525050565b6000602082019050613c426000830184613c1e565b92915050565b613c5181613b31565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613a58565b5b6000613c9985828601613aa6565b9250506020613caa85828601613c5f565b9150509250929050565b600060208284031215613cca57613cc9613a58565b5b6000613cd884828501613aa6565b91505092915050565b6000819050919050565b6000613d06613d01613cfc84613a5d565b613ce1565b613a5d565b9050919050565b6000613d1882613ceb565b9050919050565b6000613d2a82613d0d565b9050919050565b613d3a81613d1f565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613a7d565b82525050565b6000602082019050613d7f6000830184613d5b565b92915050565b600060208284031215613d9b57613d9a613a58565b5b6000613da984828501613c5f565b91505092915050565b613dbb81613c11565b8114613dc657600080fd5b50565b600081359050613dd881613db2565b92915050565b6000819050919050565b613df181613dde565b8114613dfc57600080fd5b50565b600081359050613e0e81613de8565b92915050565b600080600060608486031215613e2d57613e2c613a58565b5b6000613e3b86828701613dc9565b9350506020613e4c86828701613dff565b9250506040613e5d86828701613dff565b9150509250925092565b60008060408385031215613e7e57613e7d613a58565b5b6000613e8c85828601613adc565b9250506020613e9d85828601613adc565b9150509250929050565b60008060408385031215613ebe57613ebd613a58565b5b6000613ecc85828601613aa6565b9250506020613edd85828601613aa6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f2e57607f821691505b60208210811415613f4257613f41613ee7565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fa46028836139a8565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140106020836139a8565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156140cc578086048111156140a8576140a7614046565b5b60018516156140b75780820291505b80810290506140c585614075565b945061408c565b94509492505050565b6000826140e557600190506141a1565b816140f357600090506141a1565b8160018114614109576002811461411357614142565b60019150506141a1565b60ff84111561412557614124614046565b5b8360020a91508482111561413c5761413b614046565b5b506141a1565b5060208310610133831016604e8410600b84101617156141775782820a90508381111561417257614171614046565b5b6141a1565b6141848484846001614082565b9250905081840481111561419b5761419a614046565b5b81810290505b9392505050565b60006141b382613abb565b91506141be83613c11565b92506141eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140d5565b905092915050565b60006141fe82613abb565b915061420983613abb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424257614241614046565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061428782613abb565b915061429283613abb565b9250826142a2576142a161424d565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b60006143096028836139a8565b9150614314826142ad565b604082019050919050565b60006020820190508181036000830152614338816142fc565b9050919050565b600061434a82613abb565b915061435583613abb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561438a57614389614046565b5b828201905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e53697a65206c6f60008201527f776572207468616e20302e312500000000000000000000000000000000000000602082015250565b60006143f1602d836139a8565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144836039836139a8565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145156025836139a8565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b61455481613dde565b82525050565b600060a08201905061456f600083018861454b565b61457c602083018761454b565b614589604083018661454b565b6145966060830185613b67565b6145a36080830184613d5b565b9695505050505050565b60006060820190506145c2600083018661454b565b6145cf602083018561454b565b6145dc6040830184613b67565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006146256002836145e4565b9150614630826145ef565b600282019050919050565b6000819050919050565b61465661465182613dde565b61463b565b82525050565b600061466782614618565b91506146738285614645565b6020820191506146838284614645565b6020820191508190509392505050565b60006080820190506146a8600083018761454b565b6146b56020830186613c1e565b6146c2604083018561454b565b6146cf606083018461454b565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061470e6011836139a8565b9150614719826146d8565b602082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4d757374206b6565702074617820617420383525206f72206c65737300000000600082015250565b600061477a601c836139a8565b915061478582614744565b602082019050919050565b600060208201905081810360008301526147a98161476d565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006147e66014836139a8565b91506147f1826147b0565b602082019050919050565b60006020820190508181036000830152614815816147d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148786035836139a8565b91506148838261481c565b604082019050919050565b600060208201905081810360008301526148a78161486b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061490a6034836139a8565b9150614915826148ae565b604082019050919050565b60006020820190508181036000830152614939816148fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061499c6026836139a8565b91506149a782614940565b604082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e6024836139a8565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ac06022836139a8565b9150614acb82614a64565b604082019050919050565b60006020820190508181036000830152614aef81614ab3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b526025836139a8565b9150614b5d82614af6565b604082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614be46023836139a8565b9150614bef82614b88565b604082019050919050565b60006020820190508181036000830152614c1381614bd7565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614c506011836139a8565b9150614c5b82614c1a565b602082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614cbc600f836139a8565b9150614cc782614c86565b602082019050919050565b60006020820190508181036000830152614ceb81614caf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d286016836139a8565b9150614d3382614cf2565b602082019050919050565b60006020820190508181036000830152614d5781614d1b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e53697a652e00000000000000000000000000602082015250565b6000614dba6033836139a8565b9150614dc582614d5e565b604082019050919050565b60006020820190508181036000830152614de981614dad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e266013836139a8565b9150614e3182614df0565b602082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e53697a652e000000000000000000000000602082015250565b6000614eb86034836139a8565b9150614ec382614e5c565b604082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b600081519050614efd81613c48565b92915050565b600060208284031215614f1957614f18613a58565b5b6000614f2784828501614eee565b91505092915050565b600060c082019050614f456000830189613d5b565b614f526020830188613d5b565b614f5f6040830187613d5b565b614f6c6060830186613b67565b614f796080830185613b67565b614f8660a0830184613b67565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614fc76014836139a8565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b600061500882613abb565b915061501383613abb565b92508282101561502657615025614046565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061508d6026836139a8565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b600081905092915050565b50565b60006150de6000836150c3565b91506150e9826150ce565b600082019050919050565b60006150ff826150d1565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061517681613a8f565b92915050565b60006020828403121561519257615191613a58565b5b60006151a084828501615167565b91505092915050565b6000819050919050565b60006151ce6151c96151c4846151a9565b613ce1565b613abb565b9050919050565b6151de816151b3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521981613a7d565b82525050565b600061522b8383615210565b60208301905092915050565b6000602082019050919050565b600061524f826151e4565b61525981856151ef565b935061526483615200565b8060005b8381101561529557815161527c888261521f565b975061528783615237565b925050600181019050615268565b5085935050505092915050565b600060a0820190506152b76000830188613b67565b6152c460208301876151d5565b81810360408301526152d68186615244565b90506152e56060830185613d5b565b6152f26080830184613b67565b969550505050505056fea264697066735822122026fa9be4ef4beb3abe2e48ba6dd314c14bbd5e46b2c36f00b0ce605721429c0c64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638f3fa86011610175578063be691883116100dc578063d257b34f11610095578063e27a55fe1161006f578063e27a55fe14610ad5578063e2f4560514610b00578063e96db1ef14610b2b578063f2fde38b14610b56576102b9565b8063d257b34f14610a1e578063dbef664014610a5b578063dd62ed3e14610a98576102b9565b8063be6918831461090e578063c0c1c72214610939578063c53d4d5314610962578063c6a306471461098d578063c816841b146109b6578063cb4ca631146109e1576102b9565b8063af8f26e71161012e578063af8f26e714610802578063b0d425101461082d578063b38d5ef414610856578063b62496f51461087f578063b79c1886146108bc578063bae14e1d146108e5576102b9565b80638f3fa860146106de578063924de9b71461070957806395d89b41146107325780639fccce321461075d578063a457c2d714610788578063a9059cbb146107c5576102b9565b80633ea07fb211610219578063715018a6116101d2578063715018a6146105f0578063735de9f714610607578063751039fc1461063257806375f0a8741461065d5780638da5cb5b146106885780638ea5220f146106b3576102b9565b80633ea07fb2146104e257806345167f261461050b5780634a62bb65146105345780635df6e68e1461055f57806368092bd91461058a57806370a08231146105b3576102b9565b806328b13b611161026b57806328b13b61146103e2578063293230b81461040d578063313ce56714610424578063330124111461044f578063351a964d1461047a57806339509351146104a5576102b9565b806306fdde03146102be578063095ea7b3146102e957806318160ddd146103265780631f3fed8f1461035157806323b872dd1461037c57806324887e80146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7f565b6040516102e09190613a36565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613af1565b610c11565b60405161031d9190613b4c565b60405180910390f35b34801561033257600080fd5b5061033b610c2f565b6040516103489190613b76565b60405180910390f35b34801561035d57600080fd5b50610366610c39565b6040516103739190613b76565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613b91565b610c3f565b6040516103b09190613b4c565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613be4565b610d37565b005b3480156103ee57600080fd5b506103f7610e5c565b6040516104049190613b76565b60405180910390f35b34801561041957600080fd5b50610422610e62565b005b34801561043057600080fd5b50610439610f16565b6040516104469190613c2d565b60405180910390f35b34801561045b57600080fd5b50610464610f1f565b6040516104719190613b76565b60405180910390f35b34801561048657600080fd5b5061048f610f25565b60405161049c9190613b4c565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613af1565b610f38565b6040516104d99190613b4c565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613be4565b610fe4565b005b34801561051757600080fd5b50610532600480360381019061052d9190613c74565b611109565b005b34801561054057600080fd5b50610549611271565b6040516105569190613b4c565b60405180910390f35b34801561056b57600080fd5b50610574611284565b6040516105819190613b76565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613c74565b61128a565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613cb4565b611361565b6040516105e79190613b76565b60405180910390f35b3480156105fc57600080fd5b506106056113aa565b005b34801561061357600080fd5b5061061c611432565b6040516106299190613d40565b60405180910390f35b34801561063e57600080fd5b50610647611456565b6040516106549190613b4c565b60405180910390f35b34801561066957600080fd5b506106726114f6565b60405161067f9190613d6a565b60405180910390f35b34801561069457600080fd5b5061069d61151c565b6040516106aa9190613d6a565b60405180910390f35b3480156106bf57600080fd5b506106c8611546565b6040516106d59190613d6a565b60405180910390f35b3480156106ea57600080fd5b506106f361156c565b6040516107009190613b76565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613d85565b611572565b005b34801561073e57600080fd5b5061074761160b565b6040516107549190613a36565b60405180910390f35b34801561076957600080fd5b5061077261169d565b60405161077f9190613b76565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190613af1565b6116a3565b6040516107bc9190613b4c565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613af1565b61178e565b6040516107f99190613b4c565b60405180910390f35b34801561080e57600080fd5b506108176117ac565b6040516108249190613b76565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e14565b6117b2565b005b34801561086257600080fd5b5061087d60048036038101906108789190613e67565b611a3d565b005b34801561088b57600080fd5b506108a660048036038101906108a19190613cb4565b611b27565b6040516108b39190613b4c565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190613e67565b611b47565b005b3480156108f157600080fd5b5061090c60048036038101906109079190613cb4565b611c31565b005b34801561091a57600080fd5b50610923611d61565b6040516109309190613b76565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613c74565b611d67565b005b34801561096e57600080fd5b50610977611e3e565b6040516109849190613b4c565b60405180910390f35b34801561099957600080fd5b506109b460048036038101906109af9190613c74565b611e51565b005b3480156109c257600080fd5b506109cb611f28565b6040516109d89190613d6a565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a039190613cb4565b611f4e565b604051610a159190613b4c565b60405180910390f35b348015610a2a57600080fd5b50610a456004803603810190610a409190613be4565b611f6e565b604051610a529190613b4c565b60405180910390f35b348015610a6757600080fd5b50610a826004803603810190610a7d9190613cb4565b6120c3565b604051610a8f9190613b4c565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba9190613ea7565b6120e3565b604051610acc9190613b76565b60405180910390f35b348015610ae157600080fd5b50610aea61216a565b604051610af79190613b76565b60405180910390f35b348015610b0c57600080fd5b50610b15612170565b604051610b229190613b76565b60405180910390f35b348015610b3757600080fd5b50610b40612176565b604051610b4d9190613b76565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613cb4565b61217c565b005b606060008054610b8e90613f16565b80601f0160208091040260200160405190810160405280929190818152602001828054610bba90613f16565b8015610c075780601f10610bdc57610100808354040283529160200191610c07565b820191906000526020600020905b815481529060010190602001808311610bea57829003601f168201915b5050505050905090565b6000610c25610c1e612274565b848461227c565b6001905092915050565b6000600254905090565b600c5481565b6000610c4c848484612447565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c97612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0e90613fba565b60405180910390fd5b610d2b85610d23612274565b85840361227c565b60019150509392505050565b610d3f612274565b73ffffffffffffffffffffffffffffffffffffffff16610d5d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90614026565b60405180910390fd5b610dbb610f16565b600a610dc791906141a8565b6103e86005610dd4610c2f565b610dde91906141f3565b610de8919061427c565b610df2919061427c565b811015610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b9061431f565b60405180910390fd5b610e3c610f16565b600a610e4891906141a8565b81610e5391906141f3565b60098190555050565b60085481565b610e6a612274565b73ffffffffffffffffffffffffffffffffffffffff16610e8861151c565b73ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614026565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff021916908315150217905550565b60006012905090565b600f5481565b600b60159054906101000a900460ff1681565b6000610fda610f45612274565b848460046000610f53612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fd5919061433f565b61227c565b6001905092915050565b610fec612274565b73ffffffffffffffffffffffffffffffffffffffff1661100a61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790614026565b60405180910390fd5b611068610f16565b600a61107491906141a8565b6103e86001611081610c2f565b61108b91906141f3565b611095919061427c565b61109f919061427c565b8110156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614407565b60405180910390fd5b6110e9610f16565b600a6110f591906141a8565b8161110091906141f3565b60088190555050565b611111612274565b73ffffffffffffffffffffffffffffffffffffffff1661112f61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117c90614026565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614499565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900460ff1681565b600e5481565b611292612274565b73ffffffffffffffffffffffffffffffffffffffff166112b061151c565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90614026565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b2612274565b73ffffffffffffffffffffffffffffffffffffffff166113d061151c565b73ffffffffffffffffffffffffffffffffffffffff1614611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614026565b60405180910390fd5b61143060006131df565b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000611460612274565b73ffffffffffffffffffffffffffffffffffffffff1661147e61151c565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90614026565b60405180910390fd5b6000601760006101000a81548160ff0219169083151502179055506001905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b61157a612274565b73ffffffffffffffffffffffffffffffffffffffff1661159861151c565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614026565b60405180910390fd5b80600b60156101000a81548160ff02191690831515021790555050565b60606001805461161a90613f16565b80601f016020809104026020016040519081016040528092919081815260200182805461164690613f16565b80156116935780601f1061166857610100808354040283529160200191611693565b820191906000526020600020905b81548152906001019060200180831161167657829003601f168201915b5050505050905090565b600d5481565b600080600460006116b2612274565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061452b565b60405180910390fd5b61178361177a612274565b8585840361227c565b600191505092915050565b60006117a261179b612274565b8484612447565b6001905092915050565b60105481565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525080519060200120463060405160200161186595949392919061455a565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e670000000000000000000000000000000000008152508051906020012060006040516020016118f1939291906145ad565b6040516020818303038152906040528051906020012090506000828260405160200161191e92919061465c565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161195b9493929190614693565b6020604051602081039080840390855afa15801561197d573d6000803e3d6000fd5b50505060206040510351905061199161151c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f590614724565b60405180910390fd5b6001600b60146101000a81548160ff0219169083151502179055506001600b60156101000a81548160ff02191690831515021790555050505050505050565b611a45612274565b73ffffffffffffffffffffffffffffffffffffffff16611a6361151c565b73ffffffffffffffffffffffffffffffffffffffff1614611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090614026565b60405180910390fd5b81600f8190555080601081905550601054600f54611ad7919061433f565b600e819055506055600e541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614790565b60405180910390fd5b5050565b60166020528060005260406000206000915054906101000a900460ff1681565b611b4f612274565b73ffffffffffffffffffffffffffffffffffffffff16611b6d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bba90614026565b60405180910390fd5b8160128190555080601381905550601354601254611be1919061433f565b60118190555060556011541115611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614790565b60405180910390fd5b5050565b611c39612274565b73ffffffffffffffffffffffffffffffffffffffff16611c5761151c565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614026565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d14906147fc565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b611d6f612274565b73ffffffffffffffffffffffffffffffffffffffff16611d8d61151c565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda90614026565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60149054906101000a900460ff1681565b611e59612274565b73ffffffffffffffffffffffffffffffffffffffff16611e7761151c565b73ffffffffffffffffffffffffffffffffffffffff1614611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614026565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6000611f78612274565b73ffffffffffffffffffffffffffffffffffffffff16611f9661151c565b73ffffffffffffffffffffffffffffffffffffffff1614611fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe390614026565b60405180910390fd5b620186a06001611ffa610c2f565b61200491906141f3565b61200e919061427c565b821015612050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120479061488e565b60405180910390fd5b6103e8600561205d610c2f565b61206791906141f3565b612071919061427c565b8211156120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa90614920565b60405180910390fd5b8160078190555060019050919050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b60075481565b60125481565b612184612274565b73ffffffffffffffffffffffffffffffffffffffff166121a261151c565b73ffffffffffffffffffffffffffffffffffffffff16146121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90614026565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f906149b2565b60405180910390fd5b612271816131df565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561235c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235390614ad6565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243a9190613b76565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ae90614b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90614bfa565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90614c66565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263890614cd2565b60405180910390fd5b600081141561265b57612656838360006132a5565b6131da565b601760009054906101000a900460ff1615612b565761267861151c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126e657506126b661151c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561271f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612759575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127725750601760159054906101000a900460ff16155b15612b5557600b60149054906101000a900460ff1661286c57601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061282c5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61286b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286290614d3e565b60405180910390fd5b5b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561290f5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b657600854811115612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295090614dd0565b60405180910390fd5b60095461296583611361565b82612970919061433f565b11156129b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a890614e3c565b60405180910390fd5b612b54565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a595750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aa857600854811115612aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9a90614ece565b60405180910390fd5b612b53565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5257600954612b0583611361565b82612b10919061433f565b1115612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4890614e3c565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c4d5750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612c0b9190613d6a565b602060405180830381865afa158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190614f03565b5b15612d68576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009546008546007546040518763ffffffff1660e01b8152600401612ce196959493929190614f30565b6020604051808303816000875af1158015612d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d249190614f03565b905080612d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5d90614fdd565b60405180910390fd5b505b6000612d7330611361565b905060006007548210159050808015612d985750600b60159054906101000a900460ff165b8015612db15750601760159054906101000a900460ff16155b8015612e075750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e5d5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612eb35750601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef7576001601760156101000a81548160ff021916908315150217905550612edb613529565b6000601760156101000a81548160ff0219169083151502179055505b6000601760159054906101000a900460ff16159050601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fad5750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fb757600090505b600081156131ca57601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561301a57506000601154115b156130b45761304760646130396011548861371490919063ffffffff16565b61372a90919063ffffffff16565b90506011546013548261305a91906141f3565b613064919061427c565b600d6000828254613075919061433f565b925050819055506011546012548261308d91906141f3565b613097919061427c565b600c60008282546130a8919061433f565b925050819055506131a6565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561310f57506000600e54115b156131a55761313c606461312e600e548861371490919063ffffffff16565b61372a90919063ffffffff16565b9050600e546010548261314f91906141f3565b613159919061427c565b600d600082825461316a919061433f565b92505081905550600e54600f548261318291906141f3565b61318c919061427c565b600c600082825461319d919061433f565b925050819055505b5b60008111156131bb576131ba8730836132a5565b5b80856131c79190614ffd565b94505b6131d58787876132a5565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330c90614b68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90614bfa565b60405180910390fd5b613390838383613740565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340e906150a3565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac919061433f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135109190613b76565b60405180910390a3613523848484613745565b50505050565b600061353430611361565b90506000600d54600c54613548919061433f565b905060008083148061355a5750600082145b1561356757505050613712565b601460075461357691906141f3565b83111561358f57601460075461358c91906141f3565b92505b600047905061359d8461374a565b60006135b2824761398790919063ffffffff16565b905060006135dd856135cf600d548561371490919063ffffffff16565b61372a90919063ffffffff16565b90506000600c819055506000600d81905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613635906150f4565b60006040518083038185875af1925050503d8060008114613672576040519150601f19603f3d011682016040523d82523d6000602084013e613677565b606091505b505080945050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136c3906150f4565b60006040518083038185875af1925050503d8060008114613700576040519150601f19603f3d011682016040523d82523d6000602084013e613705565b606091505b5050809450505050505050505b565b6000818361372291906141f3565b905092915050565b60008183613738919061427c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561376757613766615109565b5b6040519080825280602002602001820160405280156137955781602001602082028036833780820191505090505b50905030816000815181106137ad576137ac615138565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613852573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613876919061517c565b8160018151811061388a57613889615138565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138ef307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461227c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139519594939291906152a2565b600060405180830381600087803b15801561396b57600080fd5b505af115801561397f573d6000803e3d6000fd5b505050505050565b600081836139959190614ffd565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139d75780820151818401526020810190506139bc565b838111156139e6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a088261399d565b613a1281856139a8565b9350613a228185602086016139b9565b613a2b816139ec565b840191505092915050565b60006020820190508181036000830152613a5081846139fd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8882613a5d565b9050919050565b613a9881613a7d565b8114613aa357600080fd5b50565b600081359050613ab581613a8f565b92915050565b6000819050919050565b613ace81613abb565b8114613ad957600080fd5b50565b600081359050613aeb81613ac5565b92915050565b60008060408385031215613b0857613b07613a58565b5b6000613b1685828601613aa6565b9250506020613b2785828601613adc565b9150509250929050565b60008115159050919050565b613b4681613b31565b82525050565b6000602082019050613b616000830184613b3d565b92915050565b613b7081613abb565b82525050565b6000602082019050613b8b6000830184613b67565b92915050565b600080600060608486031215613baa57613ba9613a58565b5b6000613bb886828701613aa6565b9350506020613bc986828701613aa6565b9250506040613bda86828701613adc565b9150509250925092565b600060208284031215613bfa57613bf9613a58565b5b6000613c0884828501613adc565b91505092915050565b600060ff82169050919050565b613c2781613c11565b82525050565b6000602082019050613c426000830184613c1e565b92915050565b613c5181613b31565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613a58565b5b6000613c9985828601613aa6565b9250506020613caa85828601613c5f565b9150509250929050565b600060208284031215613cca57613cc9613a58565b5b6000613cd884828501613aa6565b91505092915050565b6000819050919050565b6000613d06613d01613cfc84613a5d565b613ce1565b613a5d565b9050919050565b6000613d1882613ceb565b9050919050565b6000613d2a82613d0d565b9050919050565b613d3a81613d1f565b82525050565b6000602082019050613d556000830184613d31565b92915050565b613d6481613a7d565b82525050565b6000602082019050613d7f6000830184613d5b565b92915050565b600060208284031215613d9b57613d9a613a58565b5b6000613da984828501613c5f565b91505092915050565b613dbb81613c11565b8114613dc657600080fd5b50565b600081359050613dd881613db2565b92915050565b6000819050919050565b613df181613dde565b8114613dfc57600080fd5b50565b600081359050613e0e81613de8565b92915050565b600080600060608486031215613e2d57613e2c613a58565b5b6000613e3b86828701613dc9565b9350506020613e4c86828701613dff565b9250506040613e5d86828701613dff565b9150509250925092565b60008060408385031215613e7e57613e7d613a58565b5b6000613e8c85828601613adc565b9250506020613e9d85828601613adc565b9150509250929050565b60008060408385031215613ebe57613ebd613a58565b5b6000613ecc85828601613aa6565b9250506020613edd85828601613aa6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f2e57607f821691505b60208210811415613f4257613f41613ee7565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fa46028836139a8565b9150613faf82613f48565b604082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140106020836139a8565b915061401b82613fda565b602082019050919050565b6000602082019050818103600083015261403f81614003565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156140cc578086048111156140a8576140a7614046565b5b60018516156140b75780820291505b80810290506140c585614075565b945061408c565b94509492505050565b6000826140e557600190506141a1565b816140f357600090506141a1565b8160018114614109576002811461411357614142565b60019150506141a1565b60ff84111561412557614124614046565b5b8360020a91508482111561413c5761413b614046565b5b506141a1565b5060208310610133831016604e8410600b84101617156141775782820a90508381111561417257614171614046565b5b6141a1565b6141848484846001614082565b9250905081840481111561419b5761419a614046565b5b81810290505b9392505050565b60006141b382613abb565b91506141be83613c11565b92506141eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846140d5565b905092915050565b60006141fe82613abb565b915061420983613abb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561424257614241614046565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061428782613abb565b915061429283613abb565b9250826142a2576142a161424d565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460008201527f68616e20302e3525000000000000000000000000000000000000000000000000602082015250565b60006143096028836139a8565b9150614314826142ad565b604082019050919050565b60006020820190508181036000830152614338816142fc565b9050919050565b600061434a82613abb565b915061435583613abb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561438a57614389614046565b5b828201905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e53697a65206c6f60008201527f776572207468616e20302e312500000000000000000000000000000000000000602082015250565b60006143f1602d836139a8565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144836039836139a8565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145156025836139a8565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b61455481613dde565b82525050565b600060a08201905061456f600083018861454b565b61457c602083018761454b565b614589604083018661454b565b6145966060830185613b67565b6145a36080830184613d5b565b9695505050505050565b60006060820190506145c2600083018661454b565b6145cf602083018561454b565b6145dc6040830184613b67565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006146256002836145e4565b9150614630826145ef565b600282019050919050565b6000819050919050565b61465661465182613dde565b61463b565b82525050565b600061466782614618565b91506146738285614645565b6020820191506146838284614645565b6020820191508190509392505050565b60006080820190506146a8600083018761454b565b6146b56020830186613c1e565b6146c2604083018561454b565b6146cf606083018461454b565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b600061470e6011836139a8565b9150614719826146d8565b602082019050919050565b6000602082019050818103600083015261473d81614701565b9050919050565b7f4d757374206b6565702074617820617420383525206f72206c65737300000000600082015250565b600061477a601c836139a8565b915061478582614744565b602082019050919050565b600060208201905081810360008301526147a98161476d565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006147e66014836139a8565b91506147f1826147b0565b602082019050919050565b60006020820190508181036000830152614815816147d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148786035836139a8565b91506148838261481c565b604082019050919050565b600060208201905081810360008301526148a78161486b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061490a6034836139a8565b9150614915826148ae565b604082019050919050565b60006020820190508181036000830152614939816148fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061499c6026836139a8565b91506149a782614940565b604082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a2e6024836139a8565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ac06022836139a8565b9150614acb82614a64565b604082019050919050565b60006020820190508181036000830152614aef81614ab3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b526025836139a8565b9150614b5d82614af6565b604082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614be46023836139a8565b9150614bef82614b88565b604082019050919050565b60006020820190508181036000830152614c1381614bd7565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614c506011836139a8565b9150614c5b82614c1a565b602082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614cbc600f836139a8565b9150614cc782614c86565b602082019050919050565b60006020820190508181036000830152614ceb81614caf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d286016836139a8565b9150614d3382614cf2565b602082019050919050565b60006020820190508181036000830152614d5781614d1b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e53697a652e00000000000000000000000000602082015250565b6000614dba6033836139a8565b9150614dc582614d5e565b604082019050919050565b60006020820190508181036000830152614de981614dad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614e266013836139a8565b9150614e3182614df0565b602082019050919050565b60006020820190508181036000830152614e5581614e19565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e53697a652e000000000000000000000000602082015250565b6000614eb86034836139a8565b9150614ec382614e5c565b604082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b600081519050614efd81613c48565b92915050565b600060208284031215614f1957614f18613a58565b5b6000614f2784828501614eee565b91505092915050565b600060c082019050614f456000830189613d5b565b614f526020830188613d5b565b614f5f6040830187613d5b565b614f6c6060830186613b67565b614f796080830185613b67565b614f8660a0830184613b67565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614fc76014836139a8565b9150614fd282614f91565b602082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b600061500882613abb565b915061501383613abb565b92508282101561502657615025614046565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061508d6026836139a8565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b600081905092915050565b50565b60006150de6000836150c3565b91506150e9826150ce565b600082019050919050565b60006150ff826150d1565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061517681613a8f565b92915050565b60006020828403121561519257615191613a58565b5b60006151a084828501615167565b91505092915050565b6000819050919050565b60006151ce6151c96151c4846151a9565b613ce1565b613abb565b9050919050565b6151de816151b3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521981613a7d565b82525050565b600061522b8383615210565b60208301905092915050565b6000602082019050919050565b600061524f826151e4565b61525981856151ef565b935061526483615200565b8060005b8381101561529557815161527c888261521f565b975061528783615237565b925050600181019050615268565b5085935050505092915050565b600060a0820190506152b76000830188613b67565b6152c460208301876151d5565b81810360408301526152d68186615244565b90506152e56060830185613d5b565b6152f26080830184613b67565b969550505050505056fea264697066735822122026fa9be4ef4beb3abe2e48ba6dd314c14bbd5e46b2c36f00b0ce605721429c0c64736f6c634300080a0033

Deployed Bytecode Sourcemap

14588:11596:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10163:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10894:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10484:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15036:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11240:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19488:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14805:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17317:115;;;;;;;;;;;;;:::i;:::-;;10383:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15145:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14994:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12038:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19757:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20997:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15511:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15112:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20648:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10600:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;938:103;;;;;;;;;;;;;:::i;:::-;;14670:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18513:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14882:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;715:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14919:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14845:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19366:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10271:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15076:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12261:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11071:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15182:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17440:1065;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20041:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15445:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20345:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20784:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15287:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18656:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14952:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18820:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14726:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15321:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18965:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15377:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10735:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15215:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14765:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15249:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1049:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10163:100;10217:13;10250:5;10243:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10163:100;:::o;10894:169::-;10977:4;10994:39;11003:12;:10;:12::i;:::-;11017:7;11026:6;10994:8;:39::i;:::-;11051:4;11044:11;;10894:169;;;;:::o;10484:108::-;10545:7;10572:12;;10565:19;;10484:108;:::o;15036:33::-;;;;:::o;11240:436::-;11337:4;11354:27;11364:4;11370:2;11374:6;11354:9;:27::i;:::-;11394:24;11421:11;:17;11433:4;11421:17;;;;;;;;;;;;;;;:31;11439:12;:10;:12::i;:::-;11421:31;;;;;;;;;;;;;;;;11394:58;;11491:6;11471:16;:26;;11463:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11578:55;11587:4;11593:12;:10;:12::i;:::-;11626:6;11607:16;:25;11578:8;:55::i;:::-;11664:4;11657:11;;;11240:436;;;;;:::o;19488:261::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19631:10:::1;:8;:10::i;:::-;19625:2;:16;;;;:::i;:::-;19616:4;19611:1;19595:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19594:26;;;;:::i;:::-;19593:49;;;;:::i;:::-;19583:6;:59;;19575:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;19730:10;:8;:10::i;:::-;19724:2;:16;;;;:::i;:::-;19714:6;:27;;;;:::i;:::-;19698:13;:43;;;;19488:261:::0;:::o;14805:33::-;;;;:::o;17317:115::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17389:4:::1;17371:15;;:22;;;;;;;;;;;;;;;;;;17420:4;17404:13;;:20;;;;;;;;;;;;;;;;;;17317:115::o:0;10383:93::-;10441:5;10466:2;10459:9;;10383:93;:::o;15145:30::-;;;;:::o;14994:33::-;;;;;;;;;;;;;:::o;12038:215::-;12126:4;12143:80;12152:12;:10;:12::i;:::-;12166:7;12212:10;12175:11;:25;12187:12;:10;:12::i;:::-;12175:25;;;;;;;;;;;;;;;:34;12201:7;12175:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12143:8;:80::i;:::-;12241:4;12234:11;;12038:215;;;;:::o;19757:276::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19905:10:::1;:8;:10::i;:::-;19899:2;:16;;;;:::i;:::-;19890:4;19885:1;19869:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19868:26;;;;:::i;:::-;19867:49;;;;:::i;:::-;19857:6;:59;;19849:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;20014:10;:8;:10::i;:::-;20008:2;:16;;;;:::i;:::-;19998:6;:27;;;;:::i;:::-;19977:18;:48;;;;19757:276:::0;:::o;20997:256::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21122:11:::1;;;;;;;;;;;21114:19;;:4;:19;;;;21106:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;21240:5;21206:25;:31;21232:4;21206:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20997:256:::0;;:::o;15511:33::-;;;;;;;;;;;;;:::o;15112:26::-;;;;:::o;20648:128::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20762:6:::1;20742:11;:17;20754:4;20742:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20648:128:::0;;:::o;10600:127::-;10674:7;10701:9;:18;10711:7;10701:18;;;;;;;;;;;;;;;;10694:25;;10600:127;;;:::o;938:103::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1003:30:::1;1030:1;1003:18;:30::i;:::-;938:103::o:0;14670:49::-;;;:::o;18513:135::-;18579:4;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18613:5:::1;18596:14;;:22;;;;;;;;;;;;;;;;;;18636:4;18629:11;;18513:135:::0;:::o;14882:30::-;;;;;;;;;;;;;:::o;715:87::-;761:7;788:6;;;;;;;;;;;781:13;;715:87;:::o;14919:24::-;;;;;;;;;;;;;:::o;14845:28::-;;;;:::o;19366:114::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19465:7:::1;19449:13;;:23;;;;;;;;;;;;;;;;;;19366:114:::0;:::o;10271:104::-;10327:13;10360:7;10353:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10271:104;:::o;15076:27::-;;;;:::o;12261:413::-;12354:4;12371:24;12398:11;:25;12410:12;:10;:12::i;:::-;12398:25;;;;;;;;;;;;;;;:34;12424:7;12398:34;;;;;;;;;;;;;;;;12371:61;;12471:15;12451:16;:35;;12443:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12564:67;12573:12;:10;:12::i;:::-;12587:7;12615:15;12596:16;:34;12564:8;:67::i;:::-;12662:4;12655:11;;;12261:413;;;;:::o;11071:161::-;11150:4;11167:35;11177:12;:10;:12::i;:::-;11191:2;11195:6;11167:9;:35::i;:::-;11220:4;11213:11;;11071:161;;;;:::o;15182:24::-;;;;:::o;17440:1065::-;17523:18;17597:95;17721:22;;;;;;;;;;;;;;;;;17711:33;;;;;;17773:10;;;;;;;;;;;;;;;;;17763:21;;;;;;17803:13;17843:4;17568:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17544:330;;;;;;17523:351;;17887:18;17961:49;18039:23;;;;;;;;;;;;;;;;;18029:34;;;;;;18090:1;17932:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17908:210;;;;;;17887:231;;18131:14;18236:10;18265;18172:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18148:169;;;;;;18131:186;;18330:14;18347:26;18357:6;18365:1;18368;18371;18347:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18330:43;;18402:7;:5;:7::i;:::-;18392:17;;:6;:17;;;18384:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;18462:4;18444:15;;:22;;;;;;;;;;;;;;;;;;18493:4;18477:13;;:20;;;;;;;;;;;;;;;;;;17512:993;;;;17440:1065;;;:::o;20041:296::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20164:12:::1;20146:15;:30;;;;20199:9;20187;:21;;;;20251:9;;20233:15;;:27;;;;:::i;:::-;20219:11;:41;;;;20294:2;20279:11;;:17;;20271:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20041:296:::0;;:::o;15445:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20345:291::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20458:12:::1;20439:16;:31;;;;20494:9;20481:10;:22;;;;20548:10;;20529:16;;:29;;;;:::i;:::-;20514:12;:44;;;;20593:2;20577:12;;:18;;20569:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20345:291:::0;;:::o;20784:205::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20911:3:::1;20885:30;;:14;:30;;;;20877:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20967:14;20951:13;;:30;;;;;;;;;;;;;;;;;;20784:205:::0;:::o;15287:25::-;;;;:::o;18656:156::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:5:::1;18763:27;:33;18791:4;18763:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;18656:156:::0;;:::o;14952:35::-;;;;;;;;;;;;;:::o;18820:137::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18944:5:::1;18915:17;:26;18933:7;18915:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18820:137:::0;;:::o;14726:26::-;;;;;;;;;;;;;:::o;15321:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;18965:393::-;19057:4;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19114:6:::1;19109:1;19093:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19092:28;;;;:::i;:::-;19082:6;:38;;19074:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;19229:4;19224:1;19208:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19207:26;;;;:::i;:::-;19197:6;:36;;19189:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;19322:6;19301:18;:27;;;;19346:4;19339:11;;18965:393:::0;;;:::o;15377:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;10735:151::-;10824:7;10851:11;:18;10863:5;10851:18;;;;;;;;;;;;;;;:27;10870:7;10851:27;;;;;;;;;;;;;;;;10844:34;;10735:151;;;;:::o;15215:27::-;;;;:::o;14765:33::-;;;;:::o;15249:31::-;;;;:::o;1049:201::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1158:1:::1;1138:22;;:8;:22;;;;1130:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1214:28;1233:8;1214:18;:28::i;:::-;1049:201:::0;:::o;261:98::-;314:7;341:10;334:17;;261:98;:::o;11684:346::-;11803:1;11786:19;;:5;:19;;;;11778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11884:1;11865:21;;:7;:21;;;;11857:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11968:6;11938:11;:18;11950:5;11938:18;;;;;;;;;;;;;;;:27;11957:7;11938:27;;;;;;;;;;;;;;;:36;;;;12006:7;11990:32;;11999:5;11990:32;;;12015:6;11990:32;;;;;;:::i;:::-;;;;;;;;11684:346;;;:::o;22710:3319::-;22858:1;22842:18;;:4;:18;;;;22834:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22935:1;22921:16;;:2;:16;;;;22913:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22997:11;:17;23009:4;22997:17;;;;;;;;;;;;;;;;;;;;;;;;;22996:18;22988:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23056:11;:15;23068:2;23056:15;;;;;;;;;;;;;;;;;;;;;;;;;23055:16;23047:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23118:1;23108:6;:11;23104:93;;;23136:28;23152:4;23158:2;23162:1;23136:15;:28::i;:::-;23179:7;;23104:93;23213:14;;;;;;;;;;;23209:1123;;;23256:7;:5;:7::i;:::-;23248:15;;:4;:15;;;;:49;;;;;23290:7;:5;:7::i;:::-;23284:13;;:2;:13;;;;23248:49;:86;;;;;23332:1;23318:16;;:2;:16;;;;23248:86;:128;;;;;23369:6;23355:21;;:2;:21;;;;23248:128;:160;;;;;23398:10;;;;;;;;;;;23397:11;23248:160;23244:1077;;;23434:15;;;;;;;;;;;23429:148;;23482:17;:23;23500:4;23482:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;23509:17;:21;23527:2;23509:21;;;;;;;;;;;;;;;;;;;;;;;;;23482:48;23474:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23429:148;23601:25;:31;23627:4;23601:31;;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;;23637:27;:31;23665:2;23637:31;;;;;;;;;;;;;;;;;;;;;;;;;23636:32;23601:67;23597:709;;;23711:18;;23701:6;:28;;23693:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;23842:13;;23825;23835:2;23825:9;:13::i;:::-;23816:6;:22;;;;:::i;:::-;:39;;23808:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23597:709;;;23926:25;:29;23952:2;23926:29;;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;;23960:27;:33;23988:4;23960:33;;;;;;;;;;;;;;;;;;;;;;;;;23959:34;23926:67;23922:384;;;24036:18;;24026:6;:28;;24018:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;23922:384;;;24159:27;:31;24187:2;24159:31;;;;;;;;;;;;;;;;;;;;;;;;;24154:152;;24249:13;;24232;24242:2;24232:9;:13::i;:::-;24223:6;:22;;;;:::i;:::-;:39;;24215:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24154:152;23922:384;23597:709;23244:1077;23209:1123;24373:1;24348:27;;:13;;;;;;;;;;;:27;;;;:83;;;;;24392:13;;;;;;;;;;;24379:37;;;24425:4;24379:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24348:83;24344:302;;;24448:10;24474:13;;;;;;;;;;;24461:33;;;24495:4;24501:2;24513:11;;;;;;;;;;;24527:13;;24542:18;;24562;;24461:120;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24448:133;;24604:5;24596:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24433:213;24344:302;24658:20;24681:24;24699:4;24681:9;:24::i;:::-;24658:47;;24716:12;24747:18;;24731:12;:34;;24716:49;;24780:7;:37;;;;;24804:13;;;;;;;;;;;24780:37;:65;;;;;24835:10;;;;;;;;;;;24834:11;24780:65;:114;;;;;24863:25;:31;24889:4;24863:31;;;;;;;;;;;;;;;;;;;;;;;;;24862:32;24780:114;:155;;;;;24912:17;:23;24930:4;24912:23;;;;;;;;;;;;;;;;;;;;;;;;;24911:24;24780:155;:194;;;;;24953:17;:21;24971:2;24953:21;;;;;;;;;;;;;;;;;;;;;;;;;24952:22;24780:194;24776:304;;;25006:4;24993:10;;:17;;;;;;;;;;;;;;;;;;25025:10;:8;:10::i;:::-;25063:5;25050:10;;:18;;;;;;;;;;;;;;;;;;24776:304;25092:12;25108:10;;;;;;;;;;;25107:11;25092:26;;25133:17;:23;25151:4;25133:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;25160:17;:21;25178:2;25160:21;;;;;;;;;;;;;;;;;;;;;;;;;25133:48;25129:82;;;25206:5;25196:15;;25129:82;25224:11;25254:7;25250:726;;;25282:25;:29;25308:2;25282:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;25330:1;25315:12;;:16;25282:49;25278:569;;;25358:33;25387:3;25358:24;25369:12;;25358:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;25352:39;;25447:12;;25433:10;;25427:3;:16;;;;:::i;:::-;25426:33;;;;:::i;:::-;25410:12;;:49;;;;;;;:::i;:::-;;;;;;;;25527:12;;25507:16;;25501:3;:22;;;;:::i;:::-;25500:39;;;;:::i;:::-;25478:18;;:61;;;;;;;:::i;:::-;;;;;;;;25278:569;;;25578:25;:31;25604:4;25578:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25627:1;25613:11;;:15;25578:50;25574:273;;;25655:32;25683:3;25655:23;25666:11;;25655:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;25649:38;;25742:11;;25729:9;;25723:3;:15;;;;:::i;:::-;25722:31;;;;:::i;:::-;25706:12;;:47;;;;;;;:::i;:::-;;;;;;;;25820:11;;25801:15;;25795:3;:21;;;;:::i;:::-;25794:37;;;;:::i;:::-;25772:18;;:59;;;;;;;:::i;:::-;;;;;;;;25574:273;25278:569;25873:1;25867:3;:7;25863:71;;;25893:41;25909:4;25923;25930:3;25893:15;:41::i;:::-;25863:71;25961:3;25951:13;;;;;:::i;:::-;;;25250:726;25988:33;26004:4;26010:2;26014:6;25988:15;:33::i;:::-;22823:3206;;;;22710:3319;;;;:::o;1258:191::-;1332:16;1351:6;;;;;;;;;;;1332:25;;1377:8;1368:6;;:17;;;;;;;;;;;;;;;;;;1432:8;1401:40;;1422:8;1401:40;;;;;;;;;;;;1321:128;1258:191;:::o;13921:637::-;14034:1;14018:18;;:4;:18;;;;14010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14111:1;14097:16;;:2;:16;;;;14089:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14166:38;14187:4;14193:2;14197:6;14166:20;:38::i;:::-;14217:19;14239:9;:15;14249:4;14239:15;;;;;;;;;;;;;;;;14217:37;;14288:6;14273:11;:21;;14265:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14405:6;14391:11;:20;14373:9;:15;14383:4;14373:15;;;;;;;;;;;;;;;:38;;;;14450:6;14433:9;:13;14443:2;14433:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;14489:2;14474:26;;14483:4;14474:26;;;14493:6;14474:26;;;;;;:::i;:::-;;;;;;;;14513:37;14533:4;14539:2;14543:6;14513:19;:37::i;:::-;13999:559;13921:637;;;:::o;21837:865::-;21876:20;21899:24;21917:4;21899:9;:24::i;:::-;21876:47;;21934:25;21983:12;;21962:18;;:33;;;;:::i;:::-;21934:61;;22006:12;22051:1;22035:12;:17;:43;;;;22077:1;22056:17;:22;22035:43;22031:69;;;22093:7;;;;;22031:69;22152:2;22131:18;;:23;;;;:::i;:::-;22116:12;:38;22112:95;;;22205:2;22184:18;;:23;;;;:::i;:::-;22169:38;;22112:95;22220:25;22248:21;22220:49;;22280:30;22297:12;22280:16;:30::i;:::-;22323:18;22344:44;22370:17;22344:21;:25;;:44;;;;:::i;:::-;22323:65;;22399:17;22419:51;22452:17;22419:28;22434:12;;22419:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22399:71;;22504:1;22483:18;:22;;;;22531:1;22516:12;:16;;;;22567:9;;;;;;;;;;;22559:23;;22590:9;22559:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:59;;;;;22637:15;;;;;;;;;;;22629:29;;22667:21;22629:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22615:79;;;;;21865:837;;;;;;21837:865;:::o;3051:98::-;3109:7;3140:1;3136;:5;;;;:::i;:::-;3129:12;;3051:98;;;;:::o;3157:::-;3215:7;3246:1;3242;:5;;;;:::i;:::-;3235:12;;3157:98;;;;:::o;12682:91::-;;;;:::o;12779:90::-;;;;:::o;21261:568::-;21382:21;21420:1;21406:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21382:40;;21451:4;21433;21438:1;21433:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21477:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21467:4;21472:1;21467:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;21510:55;21527:4;21542:13;21558:6;21510:8;:55::i;:::-;21604:13;:64;;;21683:6;21704:1;21748:4;21775;21795:15;21604:217;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21311:518;21261:568;:::o;2731:98::-;2789:7;2820:1;2816;:5;;;;:::i;:::-;2809:12;;2731:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:329::-;4530:6;4579:2;4567:9;4558:7;4554:23;4550:32;4547:119;;;4585:79;;:::i;:::-;4547:119;4705:1;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4676:117;4471:329;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:116::-;5306:21;5321:5;5306:21;:::i;:::-;5299:5;5296:32;5286:60;;5342:1;5339;5332:12;5286:60;5236:116;:::o;5358:133::-;5401:5;5439:6;5426:20;5417:29;;5455:30;5479:5;5455:30;:::i;:::-;5358:133;;;;:::o;5497:468::-;5562:6;5570;5619:2;5607:9;5598:7;5594:23;5590:32;5587:119;;;5625:79;;:::i;:::-;5587:119;5745:1;5770:53;5815:7;5806:6;5795:9;5791:22;5770:53;:::i;:::-;5760:63;;5716:117;5872:2;5898:50;5940:7;5931:6;5920:9;5916:22;5898:50;:::i;:::-;5888:60;;5843:115;5497:468;;;;;:::o;5971:329::-;6030:6;6079:2;6067:9;6058:7;6054:23;6050:32;6047:119;;;6085:79;;:::i;:::-;6047:119;6205:1;6230:53;6275:7;6266:6;6255:9;6251:22;6230:53;:::i;:::-;6220:63;;6176:117;5971:329;;;;:::o;6306:60::-;6334:3;6355:5;6348:12;;6306:60;;;:::o;6372:142::-;6422:9;6455:53;6473:34;6482:24;6500:5;6482:24;:::i;:::-;6473:34;:::i;:::-;6455:53;:::i;:::-;6442:66;;6372:142;;;:::o;6520:126::-;6570:9;6603:37;6634:5;6603:37;:::i;:::-;6590:50;;6520:126;;;:::o;6652:152::-;6728:9;6761:37;6792:5;6761:37;:::i;:::-;6748:50;;6652:152;;;:::o;6810:183::-;6923:63;6980:5;6923:63;:::i;:::-;6918:3;6911:76;6810:183;;:::o;6999:274::-;7118:4;7156:2;7145:9;7141:18;7133:26;;7169:97;7263:1;7252:9;7248:17;7239:6;7169:97;:::i;:::-;6999:274;;;;:::o;7279:118::-;7366:24;7384:5;7366:24;:::i;:::-;7361:3;7354:37;7279:118;;:::o;7403:222::-;7496:4;7534:2;7523:9;7519:18;7511:26;;7547:71;7615:1;7604:9;7600:17;7591:6;7547:71;:::i;:::-;7403:222;;;;:::o;7631:323::-;7687:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:119;;;7742:79;;:::i;:::-;7704:119;7862:1;7887:50;7929:7;7920:6;7909:9;7905:22;7887:50;:::i;:::-;7877:60;;7833:114;7631:323;;;;:::o;7960:118::-;8031:22;8047:5;8031:22;:::i;:::-;8024:5;8021:33;8011:61;;8068:1;8065;8058:12;8011:61;7960:118;:::o;8084:135::-;8128:5;8166:6;8153:20;8144:29;;8182:31;8207:5;8182:31;:::i;:::-;8084:135;;;;:::o;8225:77::-;8262:7;8291:5;8280:16;;8225:77;;;:::o;8308:122::-;8381:24;8399:5;8381:24;:::i;:::-;8374:5;8371:35;8361:63;;8420:1;8417;8410:12;8361:63;8308:122;:::o;8436:139::-;8482:5;8520:6;8507:20;8498:29;;8536:33;8563:5;8536:33;:::i;:::-;8436:139;;;;:::o;8581:615::-;8656:6;8664;8672;8721:2;8709:9;8700:7;8696:23;8692:32;8689:119;;;8727:79;;:::i;:::-;8689:119;8847:1;8872:51;8915:7;8906:6;8895:9;8891:22;8872:51;:::i;:::-;8862:61;;8818:115;8972:2;8998:53;9043:7;9034:6;9023:9;9019:22;8998:53;:::i;:::-;8988:63;;8943:118;9100:2;9126:53;9171:7;9162:6;9151:9;9147:22;9126:53;:::i;:::-;9116:63;;9071:118;8581:615;;;;;:::o;9202:474::-;9270:6;9278;9327:2;9315:9;9306:7;9302:23;9298:32;9295:119;;;9333:79;;:::i;:::-;9295:119;9453:1;9478:53;9523:7;9514:6;9503:9;9499:22;9478:53;:::i;:::-;9468:63;;9424:117;9580:2;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9551:118;9202:474;;;;;:::o;9682:::-;9750:6;9758;9807:2;9795:9;9786:7;9782:23;9778:32;9775:119;;;9813:79;;:::i;:::-;9775:119;9933:1;9958:53;10003:7;9994:6;9983:9;9979:22;9958:53;:::i;:::-;9948:63;;9904:117;10060:2;10086:53;10131:7;10122:6;10111:9;10107:22;10086:53;:::i;:::-;10076:63;;10031:118;9682:474;;;;;:::o;10162:180::-;10210:77;10207:1;10200:88;10307:4;10304:1;10297:15;10331:4;10328:1;10321:15;10348:320;10392:6;10429:1;10423:4;10419:12;10409:22;;10476:1;10470:4;10466:12;10497:18;10487:81;;10553:4;10545:6;10541:17;10531:27;;10487:81;10615:2;10607:6;10604:14;10584:18;10581:38;10578:84;;;10634:18;;:::i;:::-;10578:84;10399:269;10348:320;;;:::o;10674:227::-;10814:34;10810:1;10802:6;10798:14;10791:58;10883:10;10878:2;10870:6;10866:15;10859:35;10674:227;:::o;10907:366::-;11049:3;11070:67;11134:2;11129:3;11070:67;:::i;:::-;11063:74;;11146:93;11235:3;11146:93;:::i;:::-;11264:2;11259:3;11255:12;11248:19;;10907:366;;;:::o;11279:419::-;11445:4;11483:2;11472:9;11468:18;11460:26;;11532:9;11526:4;11522:20;11518:1;11507:9;11503:17;11496:47;11560:131;11686:4;11560:131;:::i;:::-;11552:139;;11279:419;;;:::o;11704:182::-;11844:34;11840:1;11832:6;11828:14;11821:58;11704:182;:::o;11892:366::-;12034:3;12055:67;12119:2;12114:3;12055:67;:::i;:::-;12048:74;;12131:93;12220:3;12131:93;:::i;:::-;12249:2;12244:3;12240:12;12233:19;;11892:366;;;:::o;12264:419::-;12430:4;12468:2;12457:9;12453:18;12445:26;;12517:9;12511:4;12507:20;12503:1;12492:9;12488:17;12481:47;12545:131;12671:4;12545:131;:::i;:::-;12537:139;;12264:419;;;:::o;12689:180::-;12737:77;12734:1;12727:88;12834:4;12831:1;12824:15;12858:4;12855:1;12848:15;12875:102;12917:8;12964:5;12961:1;12957:13;12936:34;;12875:102;;;:::o;12983:848::-;13044:5;13051:4;13075:6;13066:15;;13099:5;13090:14;;13113:712;13134:1;13124:8;13121:15;13113:712;;;13229:4;13224:3;13220:14;13214:4;13211:24;13208:50;;;13238:18;;:::i;:::-;13208:50;13288:1;13278:8;13274:16;13271:451;;;13703:4;13696:5;13692:16;13683:25;;13271:451;13753:4;13747;13743:15;13735:23;;13783:32;13806:8;13783:32;:::i;:::-;13771:44;;13113:712;;;12983:848;;;;;;;:::o;13837:1073::-;13891:5;14082:8;14072:40;;14103:1;14094:10;;14105:5;;14072:40;14131:4;14121:36;;14148:1;14139:10;;14150:5;;14121:36;14217:4;14265:1;14260:27;;;;14301:1;14296:191;;;;14210:277;;14260:27;14278:1;14269:10;;14280:5;;;14296:191;14341:3;14331:8;14328:17;14325:43;;;14348:18;;:::i;:::-;14325:43;14397:8;14394:1;14390:16;14381:25;;14432:3;14425:5;14422:14;14419:40;;;14439:18;;:::i;:::-;14419:40;14472:5;;;14210:277;;14596:2;14586:8;14583:16;14577:3;14571:4;14568:13;14564:36;14546:2;14536:8;14533:16;14528:2;14522:4;14519:12;14515:35;14499:111;14496:246;;;14652:8;14646:4;14642:19;14633:28;;14687:3;14680:5;14677:14;14674:40;;;14694:18;;:::i;:::-;14674:40;14727:5;;14496:246;14767:42;14805:3;14795:8;14789:4;14786:1;14767:42;:::i;:::-;14752:57;;;;14841:4;14836:3;14832:14;14825:5;14822:25;14819:51;;;14850:18;;:::i;:::-;14819:51;14899:4;14892:5;14888:16;14879:25;;13837:1073;;;;;;:::o;14916:281::-;14974:5;14998:23;15016:4;14998:23;:::i;:::-;14990:31;;15042:25;15058:8;15042:25;:::i;:::-;15030:37;;15086:104;15123:66;15113:8;15107:4;15086:104;:::i;:::-;15077:113;;14916:281;;;;:::o;15203:348::-;15243:7;15266:20;15284:1;15266:20;:::i;:::-;15261:25;;15300:20;15318:1;15300:20;:::i;:::-;15295:25;;15488:1;15420:66;15416:74;15413:1;15410:81;15405:1;15398:9;15391:17;15387:105;15384:131;;;15495:18;;:::i;:::-;15384:131;15543:1;15540;15536:9;15525:20;;15203:348;;;;:::o;15557:180::-;15605:77;15602:1;15595:88;15702:4;15699:1;15692:15;15726:4;15723:1;15716:15;15743:185;15783:1;15800:20;15818:1;15800:20;:::i;:::-;15795:25;;15834:20;15852:1;15834:20;:::i;:::-;15829:25;;15873:1;15863:35;;15878:18;;:::i;:::-;15863:35;15920:1;15917;15913:9;15908:14;;15743:185;;;;:::o;15934:227::-;16074:34;16070:1;16062:6;16058:14;16051:58;16143:10;16138:2;16130:6;16126:15;16119:35;15934:227;:::o;16167:366::-;16309:3;16330:67;16394:2;16389:3;16330:67;:::i;:::-;16323:74;;16406:93;16495:3;16406:93;:::i;:::-;16524:2;16519:3;16515:12;16508:19;;16167:366;;;:::o;16539:419::-;16705:4;16743:2;16732:9;16728:18;16720:26;;16792:9;16786:4;16782:20;16778:1;16767:9;16763:17;16756:47;16820:131;16946:4;16820:131;:::i;:::-;16812:139;;16539:419;;;:::o;16964:305::-;17004:3;17023:20;17041:1;17023:20;:::i;:::-;17018:25;;17057:20;17075:1;17057:20;:::i;:::-;17052:25;;17211:1;17143:66;17139:74;17136:1;17133:81;17130:107;;;17217:18;;:::i;:::-;17130:107;17261:1;17258;17254:9;17247:16;;16964:305;;;;:::o;17275:232::-;17415:34;17411:1;17403:6;17399:14;17392:58;17484:15;17479:2;17471:6;17467:15;17460:40;17275:232;:::o;17513:366::-;17655:3;17676:67;17740:2;17735:3;17676:67;:::i;:::-;17669:74;;17752:93;17841:3;17752:93;:::i;:::-;17870:2;17865:3;17861:12;17854:19;;17513:366;;;:::o;17885:419::-;18051:4;18089:2;18078:9;18074:18;18066:26;;18138:9;18132:4;18128:20;18124:1;18113:9;18109:17;18102:47;18166:131;18292:4;18166:131;:::i;:::-;18158:139;;17885:419;;;:::o;18310:244::-;18450:34;18446:1;18438:6;18434:14;18427:58;18519:27;18514:2;18506:6;18502:15;18495:52;18310:244;:::o;18560:366::-;18702:3;18723:67;18787:2;18782:3;18723:67;:::i;:::-;18716:74;;18799:93;18888:3;18799:93;:::i;:::-;18917:2;18912:3;18908:12;18901:19;;18560:366;;;:::o;18932:419::-;19098:4;19136:2;19125:9;19121:18;19113:26;;19185:9;19179:4;19175:20;19171:1;19160:9;19156:17;19149:47;19213:131;19339:4;19213:131;:::i;:::-;19205:139;;18932:419;;;:::o;19357:224::-;19497:34;19493:1;19485:6;19481:14;19474:58;19566:7;19561:2;19553:6;19549:15;19542:32;19357:224;:::o;19587:366::-;19729:3;19750:67;19814:2;19809:3;19750:67;:::i;:::-;19743:74;;19826:93;19915:3;19826:93;:::i;:::-;19944:2;19939:3;19935:12;19928:19;;19587:366;;;:::o;19959:419::-;20125:4;20163:2;20152:9;20148:18;20140:26;;20212:9;20206:4;20202:20;20198:1;20187:9;20183:17;20176:47;20240:131;20366:4;20240:131;:::i;:::-;20232:139;;19959:419;;;:::o;20384:118::-;20471:24;20489:5;20471:24;:::i;:::-;20466:3;20459:37;20384:118;;:::o;20508:664::-;20713:4;20751:3;20740:9;20736:19;20728:27;;20765:71;20833:1;20822:9;20818:17;20809:6;20765:71;:::i;:::-;20846:72;20914:2;20903:9;20899:18;20890:6;20846:72;:::i;:::-;20928;20996:2;20985:9;20981:18;20972:6;20928:72;:::i;:::-;21010;21078:2;21067:9;21063:18;21054:6;21010:72;:::i;:::-;21092:73;21160:3;21149:9;21145:19;21136:6;21092:73;:::i;:::-;20508:664;;;;;;;;:::o;21178:442::-;21327:4;21365:2;21354:9;21350:18;21342:26;;21378:71;21446:1;21435:9;21431:17;21422:6;21378:71;:::i;:::-;21459:72;21527:2;21516:9;21512:18;21503:6;21459:72;:::i;:::-;21541;21609:2;21598:9;21594:18;21585:6;21541:72;:::i;:::-;21178:442;;;;;;:::o;21626:148::-;21728:11;21765:3;21750:18;;21626:148;;;;:::o;21780:214::-;21920:66;21916:1;21908:6;21904:14;21897:90;21780:214;:::o;22000:400::-;22160:3;22181:84;22263:1;22258:3;22181:84;:::i;:::-;22174:91;;22274:93;22363:3;22274:93;:::i;:::-;22392:1;22387:3;22383:11;22376:18;;22000:400;;;:::o;22406:79::-;22445:7;22474:5;22463:16;;22406:79;;;:::o;22491:157::-;22596:45;22616:24;22634:5;22616:24;:::i;:::-;22596:45;:::i;:::-;22591:3;22584:58;22491:157;;:::o;22654:663::-;22895:3;22917:148;23061:3;22917:148;:::i;:::-;22910:155;;23075:75;23146:3;23137:6;23075:75;:::i;:::-;23175:2;23170:3;23166:12;23159:19;;23188:75;23259:3;23250:6;23188:75;:::i;:::-;23288:2;23283:3;23279:12;23272:19;;23308:3;23301:10;;22654:663;;;;;:::o;23323:545::-;23496:4;23534:3;23523:9;23519:19;23511:27;;23548:71;23616:1;23605:9;23601:17;23592:6;23548:71;:::i;:::-;23629:68;23693:2;23682:9;23678:18;23669:6;23629:68;:::i;:::-;23707:72;23775:2;23764:9;23760:18;23751:6;23707:72;:::i;:::-;23789;23857:2;23846:9;23842:18;23833:6;23789:72;:::i;:::-;23323:545;;;;;;;:::o;23874:167::-;24014:19;24010:1;24002:6;23998:14;23991:43;23874:167;:::o;24047:366::-;24189:3;24210:67;24274:2;24269:3;24210:67;:::i;:::-;24203:74;;24286:93;24375:3;24286:93;:::i;:::-;24404:2;24399:3;24395:12;24388:19;;24047:366;;;:::o;24419:419::-;24585:4;24623:2;24612:9;24608:18;24600:26;;24672:9;24666:4;24662:20;24658:1;24647:9;24643:17;24636:47;24700:131;24826:4;24700:131;:::i;:::-;24692:139;;24419:419;;;:::o;24844:178::-;24984:30;24980:1;24972:6;24968:14;24961:54;24844:178;:::o;25028:366::-;25170:3;25191:67;25255:2;25250:3;25191:67;:::i;:::-;25184:74;;25267:93;25356:3;25267:93;:::i;:::-;25385:2;25380:3;25376:12;25369:19;;25028:366;;;:::o;25400:419::-;25566:4;25604:2;25593:9;25589:18;25581:26;;25653:9;25647:4;25643:20;25639:1;25628:9;25624:17;25617:47;25681:131;25807:4;25681:131;:::i;:::-;25673:139;;25400:419;;;:::o;25825:170::-;25965:22;25961:1;25953:6;25949:14;25942:46;25825:170;:::o;26001:366::-;26143:3;26164:67;26228:2;26223:3;26164:67;:::i;:::-;26157:74;;26240:93;26329:3;26240:93;:::i;:::-;26358:2;26353:3;26349:12;26342:19;;26001:366;;;:::o;26373:419::-;26539:4;26577:2;26566:9;26562:18;26554:26;;26626:9;26620:4;26616:20;26612:1;26601:9;26597:17;26590:47;26654:131;26780:4;26654:131;:::i;:::-;26646:139;;26373:419;;;:::o;26798:240::-;26938:34;26934:1;26926:6;26922:14;26915:58;27007:23;27002:2;26994:6;26990:15;26983:48;26798:240;:::o;27044:366::-;27186:3;27207:67;27271:2;27266:3;27207:67;:::i;:::-;27200:74;;27283:93;27372:3;27283:93;:::i;:::-;27401:2;27396:3;27392:12;27385:19;;27044:366;;;:::o;27416:419::-;27582:4;27620:2;27609:9;27605:18;27597:26;;27669:9;27663:4;27659:20;27655:1;27644:9;27640:17;27633:47;27697:131;27823:4;27697:131;:::i;:::-;27689:139;;27416:419;;;:::o;27841:239::-;27981:34;27977:1;27969:6;27965:14;27958:58;28050:22;28045:2;28037:6;28033:15;28026:47;27841:239;:::o;28086:366::-;28228:3;28249:67;28313:2;28308:3;28249:67;:::i;:::-;28242:74;;28325:93;28414:3;28325:93;:::i;:::-;28443:2;28438:3;28434:12;28427:19;;28086:366;;;:::o;28458:419::-;28624:4;28662:2;28651:9;28647:18;28639:26;;28711:9;28705:4;28701:20;28697:1;28686:9;28682:17;28675:47;28739:131;28865:4;28739:131;:::i;:::-;28731:139;;28458:419;;;:::o;28883:225::-;29023:34;29019:1;29011:6;29007:14;29000:58;29092:8;29087:2;29079:6;29075:15;29068:33;28883:225;:::o;29114:366::-;29256:3;29277:67;29341:2;29336:3;29277:67;:::i;:::-;29270:74;;29353:93;29442:3;29353:93;:::i;:::-;29471:2;29466:3;29462:12;29455:19;;29114:366;;;:::o;29486:419::-;29652:4;29690:2;29679:9;29675:18;29667:26;;29739:9;29733:4;29729:20;29725:1;29714:9;29710:17;29703:47;29767:131;29893:4;29767:131;:::i;:::-;29759:139;;29486:419;;;:::o;29911:223::-;30051:34;30047:1;30039:6;30035:14;30028:58;30120:6;30115:2;30107:6;30103:15;30096:31;29911:223;:::o;30140:366::-;30282:3;30303:67;30367:2;30362:3;30303:67;:::i;:::-;30296:74;;30379:93;30468:3;30379:93;:::i;:::-;30497:2;30492:3;30488:12;30481:19;;30140:366;;;:::o;30512:419::-;30678:4;30716:2;30705:9;30701:18;30693:26;;30765:9;30759:4;30755:20;30751:1;30740:9;30736:17;30729:47;30793:131;30919:4;30793:131;:::i;:::-;30785:139;;30512:419;;;:::o;30937:221::-;31077:34;31073:1;31065:6;31061:14;31054:58;31146:4;31141:2;31133:6;31129:15;31122:29;30937:221;:::o;31164:366::-;31306:3;31327:67;31391:2;31386:3;31327:67;:::i;:::-;31320:74;;31403:93;31492:3;31403:93;:::i;:::-;31521:2;31516:3;31512:12;31505:19;;31164:366;;;:::o;31536:419::-;31702:4;31740:2;31729:9;31725:18;31717:26;;31789:9;31783:4;31779:20;31775:1;31764:9;31760:17;31753:47;31817:131;31943:4;31817:131;:::i;:::-;31809:139;;31536:419;;;:::o;31961:224::-;32101:34;32097:1;32089:6;32085:14;32078:58;32170:7;32165:2;32157:6;32153:15;32146:32;31961:224;:::o;32191:366::-;32333:3;32354:67;32418:2;32413:3;32354:67;:::i;:::-;32347:74;;32430:93;32519:3;32430:93;:::i;:::-;32548:2;32543:3;32539:12;32532:19;;32191:366;;;:::o;32563:419::-;32729:4;32767:2;32756:9;32752:18;32744:26;;32816:9;32810:4;32806:20;32802:1;32791:9;32787:17;32780:47;32844:131;32970:4;32844:131;:::i;:::-;32836:139;;32563:419;;;:::o;32988:222::-;33128:34;33124:1;33116:6;33112:14;33105:58;33197:5;33192:2;33184:6;33180:15;33173:30;32988:222;:::o;33216:366::-;33358:3;33379:67;33443:2;33438:3;33379:67;:::i;:::-;33372:74;;33455:93;33544:3;33455:93;:::i;:::-;33573:2;33568:3;33564:12;33557:19;;33216:366;;;:::o;33588:419::-;33754:4;33792:2;33781:9;33777:18;33769:26;;33841:9;33835:4;33831:20;33827:1;33816:9;33812:17;33805:47;33869:131;33995:4;33869:131;:::i;:::-;33861:139;;33588:419;;;:::o;34013:167::-;34153:19;34149:1;34141:6;34137:14;34130:43;34013:167;:::o;34186:366::-;34328:3;34349:67;34413:2;34408:3;34349:67;:::i;:::-;34342:74;;34425:93;34514:3;34425:93;:::i;:::-;34543:2;34538:3;34534:12;34527:19;;34186:366;;;:::o;34558:419::-;34724:4;34762:2;34751:9;34747:18;34739:26;;34811:9;34805:4;34801:20;34797:1;34786:9;34782:17;34775:47;34839:131;34965:4;34839:131;:::i;:::-;34831:139;;34558:419;;;:::o;34983:165::-;35123:17;35119:1;35111:6;35107:14;35100:41;34983:165;:::o;35154:366::-;35296:3;35317:67;35381:2;35376:3;35317:67;:::i;:::-;35310:74;;35393:93;35482:3;35393:93;:::i;:::-;35511:2;35506:3;35502:12;35495:19;;35154:366;;;:::o;35526:419::-;35692:4;35730:2;35719:9;35715:18;35707:26;;35779:9;35773:4;35769:20;35765:1;35754:9;35750:17;35743:47;35807:131;35933:4;35807:131;:::i;:::-;35799:139;;35526:419;;;:::o;35951:172::-;36091:24;36087:1;36079:6;36075:14;36068:48;35951:172;:::o;36129:366::-;36271:3;36292:67;36356:2;36351:3;36292:67;:::i;:::-;36285:74;;36368:93;36457:3;36368:93;:::i;:::-;36486:2;36481:3;36477:12;36470:19;;36129:366;;;:::o;36501:419::-;36667:4;36705:2;36694:9;36690:18;36682:26;;36754:9;36748:4;36744:20;36740:1;36729:9;36725:17;36718:47;36782:131;36908:4;36782:131;:::i;:::-;36774:139;;36501:419;;;:::o;36926:238::-;37066:34;37062:1;37054:6;37050:14;37043:58;37135:21;37130:2;37122:6;37118:15;37111:46;36926:238;:::o;37170:366::-;37312:3;37333:67;37397:2;37392:3;37333:67;:::i;:::-;37326:74;;37409:93;37498:3;37409:93;:::i;:::-;37527:2;37522:3;37518:12;37511:19;;37170:366;;;:::o;37542:419::-;37708:4;37746:2;37735:9;37731:18;37723:26;;37795:9;37789:4;37785:20;37781:1;37770:9;37766:17;37759:47;37823:131;37949:4;37823:131;:::i;:::-;37815:139;;37542:419;;;:::o;37967:169::-;38107:21;38103:1;38095:6;38091:14;38084:45;37967:169;:::o;38142:366::-;38284:3;38305:67;38369:2;38364:3;38305:67;:::i;:::-;38298:74;;38381:93;38470:3;38381:93;:::i;:::-;38499:2;38494:3;38490:12;38483:19;;38142:366;;;:::o;38514:419::-;38680:4;38718:2;38707:9;38703:18;38695:26;;38767:9;38761:4;38757:20;38753:1;38742:9;38738:17;38731:47;38795:131;38921:4;38795:131;:::i;:::-;38787:139;;38514:419;;;:::o;38939:239::-;39079:34;39075:1;39067:6;39063:14;39056:58;39148:22;39143:2;39135:6;39131:15;39124:47;38939:239;:::o;39184:366::-;39326:3;39347:67;39411:2;39406:3;39347:67;:::i;:::-;39340:74;;39423:93;39512:3;39423:93;:::i;:::-;39541:2;39536:3;39532:12;39525:19;;39184:366;;;:::o;39556:419::-;39722:4;39760:2;39749:9;39745:18;39737:26;;39809:9;39803:4;39799:20;39795:1;39784:9;39780:17;39773:47;39837:131;39963:4;39837:131;:::i;:::-;39829:139;;39556:419;;;:::o;39981:137::-;40035:5;40066:6;40060:13;40051:22;;40082:30;40106:5;40082:30;:::i;:::-;39981:137;;;;:::o;40124:345::-;40191:6;40240:2;40228:9;40219:7;40215:23;40211:32;40208:119;;;40246:79;;:::i;:::-;40208:119;40366:1;40391:61;40444:7;40435:6;40424:9;40420:22;40391:61;:::i;:::-;40381:71;;40337:125;40124:345;;;;:::o;40475:775::-;40708:4;40746:3;40735:9;40731:19;40723:27;;40760:71;40828:1;40817:9;40813:17;40804:6;40760:71;:::i;:::-;40841:72;40909:2;40898:9;40894:18;40885:6;40841:72;:::i;:::-;40923;40991:2;40980:9;40976:18;40967:6;40923:72;:::i;:::-;41005;41073:2;41062:9;41058:18;41049:6;41005:72;:::i;:::-;41087:73;41155:3;41144:9;41140:19;41131:6;41087:73;:::i;:::-;41170;41238:3;41227:9;41223:19;41214:6;41170:73;:::i;:::-;40475:775;;;;;;;;;:::o;41256:170::-;41396:22;41392:1;41384:6;41380:14;41373:46;41256:170;:::o;41432:366::-;41574:3;41595:67;41659:2;41654:3;41595:67;:::i;:::-;41588:74;;41671:93;41760:3;41671:93;:::i;:::-;41789:2;41784:3;41780:12;41773:19;;41432:366;;;:::o;41804:419::-;41970:4;42008:2;41997:9;41993:18;41985:26;;42057:9;42051:4;42047:20;42043:1;42032:9;42028:17;42021:47;42085:131;42211:4;42085:131;:::i;:::-;42077:139;;41804:419;;;:::o;42229:191::-;42269:4;42289:20;42307:1;42289:20;:::i;:::-;42284:25;;42323:20;42341:1;42323:20;:::i;:::-;42318:25;;42362:1;42359;42356:8;42353:34;;;42367:18;;:::i;:::-;42353:34;42412:1;42409;42405:9;42397:17;;42229:191;;;;:::o;42426:225::-;42566:34;42562:1;42554:6;42550:14;42543:58;42635:8;42630:2;42622:6;42618:15;42611:33;42426:225;:::o;42657:366::-;42799:3;42820:67;42884:2;42879:3;42820:67;:::i;:::-;42813:74;;42896:93;42985:3;42896:93;:::i;:::-;43014:2;43009:3;43005:12;42998:19;;42657:366;;;:::o;43029:419::-;43195:4;43233:2;43222:9;43218:18;43210:26;;43282:9;43276:4;43272:20;43268:1;43257:9;43253:17;43246:47;43310:131;43436:4;43310:131;:::i;:::-;43302:139;;43029:419;;;:::o;43454:147::-;43555:11;43592:3;43577:18;;43454:147;;;;:::o;43607:114::-;;:::o;43727:398::-;43886:3;43907:83;43988:1;43983:3;43907:83;:::i;:::-;43900:90;;43999:93;44088:3;43999:93;:::i;:::-;44117:1;44112:3;44108:11;44101:18;;43727:398;;;:::o;44131:379::-;44315:3;44337:147;44480:3;44337:147;:::i;:::-;44330:154;;44501:3;44494:10;;44131:379;;;:::o;44516:180::-;44564:77;44561:1;44554:88;44661:4;44658:1;44651:15;44685:4;44682:1;44675:15;44702:180;44750:77;44747:1;44740:88;44847:4;44844:1;44837:15;44871:4;44868:1;44861:15;44888:143;44945:5;44976:6;44970:13;44961:22;;44992:33;45019:5;44992:33;:::i;:::-;44888:143;;;;:::o;45037:351::-;45107:6;45156:2;45144:9;45135:7;45131:23;45127:32;45124:119;;;45162:79;;:::i;:::-;45124:119;45282:1;45307:64;45363:7;45354:6;45343:9;45339:22;45307:64;:::i;:::-;45297:74;;45253:128;45037:351;;;;:::o;45394:85::-;45439:7;45468:5;45457:16;;45394:85;;;:::o;45485:158::-;45543:9;45576:61;45594:42;45603:32;45629:5;45603:32;:::i;:::-;45594:42;:::i;:::-;45576:61;:::i;:::-;45563:74;;45485:158;;;:::o;45649:147::-;45744:45;45783:5;45744:45;:::i;:::-;45739:3;45732:58;45649:147;;:::o;45802:114::-;45869:6;45903:5;45897:12;45887:22;;45802:114;;;:::o;45922:184::-;46021:11;46055:6;46050:3;46043:19;46095:4;46090:3;46086:14;46071:29;;45922:184;;;;:::o;46112:132::-;46179:4;46202:3;46194:11;;46232:4;46227:3;46223:14;46215:22;;46112:132;;;:::o;46250:108::-;46327:24;46345:5;46327:24;:::i;:::-;46322:3;46315:37;46250:108;;:::o;46364:179::-;46433:10;46454:46;46496:3;46488:6;46454:46;:::i;:::-;46532:4;46527:3;46523:14;46509:28;;46364:179;;;;:::o;46549:113::-;46619:4;46651;46646:3;46642:14;46634:22;;46549:113;;;:::o;46698:732::-;46817:3;46846:54;46894:5;46846:54;:::i;:::-;46916:86;46995:6;46990:3;46916:86;:::i;:::-;46909:93;;47026:56;47076:5;47026:56;:::i;:::-;47105:7;47136:1;47121:284;47146:6;47143:1;47140:13;47121:284;;;47222:6;47216:13;47249:63;47308:3;47293:13;47249:63;:::i;:::-;47242:70;;47335:60;47388:6;47335:60;:::i;:::-;47325:70;;47181:224;47168:1;47165;47161:9;47156:14;;47121:284;;;47125:14;47421:3;47414:10;;46822:608;;;46698:732;;;;:::o;47436:831::-;47699:4;47737:3;47726:9;47722:19;47714:27;;47751:71;47819:1;47808:9;47804:17;47795:6;47751:71;:::i;:::-;47832:80;47908:2;47897:9;47893:18;47884:6;47832:80;:::i;:::-;47959:9;47953:4;47949:20;47944:2;47933:9;47929:18;47922:48;47987:108;48090:4;48081:6;47987:108;:::i;:::-;47979:116;;48105:72;48173:2;48162:9;48158:18;48149:6;48105:72;:::i;:::-;48187:73;48255:3;48244:9;48240:19;48231:6;48187:73;:::i;:::-;47436:831;;;;;;;;:::o

Swarm Source

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