ETH Price: $3,449.43 (+1.49%)

Token

THISISNOTAMEMESERIOUSLY (WDYM)
 

Overview

Max Total Supply

1,000,000 WDYM

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
My Final Form: Deployer
Balance
3,500 WDYM

Value
$0.00
0xbbc65012ffdbd902c9a80d652b8c1478f1880a0d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
THISISNOTAMEMESERIOUSLY

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 2023-10-13
*/

/**

 *http://www.thisisnotamemeseriously.com/.         

 *ThisISnoTaMEME seriously dude.             

 *https://t.me/ThisisNotaMeme https://twitter.com/NotMemeOfficial


*/

// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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 mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

contract THISISNOTAMEMESERIOUSLY is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public routerCA = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D uniswap

    bool private swapping;

    address public mktgWallet;
    address public devWallet;
    address public liqWallet;
    address public operationsWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    uint256 private deadBlocks;
    mapping(address => bool) public vested;

    uint256 public buyTotalFees;
    uint256 public buyMktgFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMktgFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMktg;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event mktgWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liqWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event operationsWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("THISISNOTAMEMESERIOUSLY", "WDYM") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerCA); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // launch buy fees
        uint256 _buyMktgFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMktgFee = 20;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 5;
        uint256 _sellOperationsFee = 12;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 10_000 * 1e18; // 1% max txn
        maxWallet = 10_000 * 1e18; // 1% max wallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMktgFee = _buyMktgFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMktgFee + buyLiquidityFee + buyDevFee + buyOperationsFee;

        sellMktgFee = _sellMktgFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMktgFee + sellLiquidityFee + sellDevFee + sellOperationsFee;

        mktgWallet = address(0x3dfA3d9b7065593adb14bE36283c924D6F89DD14); 
        devWallet = address(0x3dfA3d9b7065593adb14bE36283c924D6F89DD14); 
        liqWallet = address(0x3dfA3d9b7065593adb14bE36283c924D6F89DD14); 
        operationsWallet = address(0x3dfA3d9b7065593adb14bE36283c924D6F89DD14);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // enableTrading to let users buy / sell token. CANNOT be disabled 
    function enableTrading(uint256 _deadBlocks) external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
        deadBlocks = _deadBlocks;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // add limits again 
    function addLimits() external onlyOwner returns (bool) {
        limitsInEffect = true;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    
    // re enable them, if disabled prior launch 
    function enableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = true; 
        return true; 
    }

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

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

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _mktgFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMktgFee = _mktgFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMktgFee + buyLiquidityFee + buyDevFee + buyOperationsFee;
        require(buyTotalFees <= 10);
    }

    function updateSellFees(
        uint256 _mktgFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMktgFee = _mktgFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMktgFee + sellLiquidityFee + sellDevFee + sellOperationsFee;
        require(sellTotalFees <= 49); 
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updatemktgWallet(address newmktgWallet) external onlyOwner {
        emit mktgWalletUpdated(newmktgWallet, mktgWallet);
        mktgWallet = newmktgWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateLiqWallet(address newLiqWallet) external onlyOwner {
        emit liqWalletUpdated(newLiqWallet, liqWallet);
        liqWallet = newLiqWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    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(!vested[from], "Sniper or Vested");

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

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

                if(block.number <= launchBlock + deadBlocks && from == address(uniswapV2Pair) &&  
                to != routerCA && to != address(this) && to != address(uniswapV2Pair)){
                    vested[to] = true;
                    emit BoughtEarly(to);
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMktg += (fees * sellMktgFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMktg += (fees * buyMktgFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

    // function to vest tokens and block snipers. to unvest vestees shouldVest == false 
    function vesting(address[] calldata vestees, bool shouldVest) external onlyOwner {
        for(uint256 i = 0;i<vestees.length;i++){
            address vestee = vestees[i];
            if(vestee != address(this) && 
               vestee != routerCA && 
               vestee != address(uniswapV2Pair))
                vested[vestee] = shouldVest;
        }
    }

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMktg +
            tokensForDev +
            tokensForOperations;
        bool success;

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMktg = ethBalance.mul(tokensForMktg).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMktg - ethForDev - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMktg = 0;
        tokensForDev = 0;
        tokensForOperations = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(mktgWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"mktgWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMktgFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","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":"liqWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktgWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"routerCA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMktgFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMktg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mktgFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiqWallet","type":"address"}],"name":"updateLiqWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mktgFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newmktgWallet","type":"address"}],"name":"updatemktgWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"vestees","type":"address[]"},{"internalType":"bool","name":"shouldVest","type":"bool"}],"name":"vesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280601781526020017f5448495349534e4f54414d454d45534552494f55534c590000000000000000008152506040518060400160405280600481526020017f5744594d0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c1f565b5080600490805190602001906200017092919062000c1f565b5050506200019362000187620006df60201b60201c565b620006e760201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007ad60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d39565b6040518363ffffffff1660e01b81526004016200032092919062000d7c565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d39565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007ad60201b60201c565b620003c360a05160016200089760201b60201c565b600080600080600060149050600080600590506000600c9050600069d3c21bcecceda1000000905069021e19e0c9bab2400000600b8190555069021e19e0c9bab2400000600d819055506127106005826200041f919062000de2565b6200042b919062000e72565b600c819055508860158190555087601681905550866017819055508560188190555060185460175460165460155462000465919062000eaa565b62000471919062000eaa565b6200047d919062000eaa565b60148190555084601a8190555083601b8190555082601c8190555081601d81905550601d54601c54601b54601a54620004b7919062000eaa565b620004c3919062000eaa565b620004cf919062000eaa565b601981905550733dfa3d9b7065593adb14be36283c924d6f89dd14600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfa3d9b7065593adb14be36283c924d6f89dd14600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfa3d9b7065593adb14be36283c924d6f89dd14600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfa3d9b7065593adb14be36283c924d6f89dd14600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200064b6200063d6200093860201b60201c565b60016200096260201b60201c565b6200065e3060016200096260201b60201c565b6200067361dead60016200096260201b60201c565b62000695620006876200093860201b60201c565b6001620007ad60201b60201c565b620006a8306001620007ad60201b60201c565b620006bd61dead6001620007ad60201b60201c565b620006cf338262000a9c60201b60201c565b50505050505050505050620010c9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007bd620006df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007e36200093860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200083c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008339062000f68565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000972620006df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009986200093860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009e89062000f68565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a90919062000fa7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b069062001014565b60405180910390fd5b62000b236000838362000c1560201b60201c565b806002600082825462000b37919062000eaa565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b8e919062000eaa565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bf5919062001047565b60405180910390a362000c116000838362000c1a60201b60201c565b5050565b505050565b505050565b82805462000c2d9062001093565b90600052602060002090601f01602090048101928262000c51576000855562000c9d565b82601f1062000c6c57805160ff191683800117855562000c9d565b8280016001018555821562000c9d579182015b8281111562000c9c57825182559160200191906001019062000c7f565b5b50905062000cac919062000cb0565b5090565b5b8082111562000ccb57600081600090555060010162000cb1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d018262000cd4565b9050919050565b62000d138162000cf4565b811462000d1f57600080fd5b50565b60008151905062000d338162000d08565b92915050565b60006020828403121562000d525762000d5162000ccf565b5b600062000d628482850162000d22565b91505092915050565b62000d768162000cf4565b82525050565b600060408201905062000d93600083018562000d6b565b62000da2602083018462000d6b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000def8262000da9565b915062000dfc8362000da9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e385762000e3762000db3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e7f8262000da9565b915062000e8c8362000da9565b92508262000e9f5762000e9e62000e43565b5b828204905092915050565b600062000eb78262000da9565b915062000ec48362000da9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000efc5762000efb62000db3565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f5060208362000f07565b915062000f5d8262000f18565b602082019050919050565b6000602082019050818103600083015262000f838162000f41565b9050919050565b60008115159050919050565b62000fa18162000f8a565b82525050565b600060208201905062000fbe600083018462000f96565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ffc601f8362000f07565b9150620010098262000fc4565b602082019050919050565b600060208201905081810360008301526200102f8162000fed565b9050919050565b620010418162000da9565b82525050565b60006020820190506200105e600083018462001036565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ac57607f821691505b60208210811415620010c357620010c262001064565b5b50919050565b60805160a051615efa6200113c6000396000818161165301528181612141015281816122850152818161318a015281816132730152613410015260008181611077015281816133b8015281816145ec015281816146cd015281816146f40152818161479001526147b70152615efa6000f3fe6080604052600436106103dd5760003560e01c806382aa7c68116101fd578063c0f17acd11610118578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610ed0578063f637434214610ef9578063f8b45b0514610f24578063fb002c9714610f4f578063fd72e22a14610f7a576103e4565b8063e7ad9fcd14610e26578063e884f26014610e4f578063f11a24d314610e7a578063f22857a814610ea5576103e4565b8063d257b34f116100e7578063d257b34f14610d56578063d85ba06314610d93578063dd62ed3e14610dbe578063e2f4560514610dfb576103e4565b8063c0f17acd14610cac578063c18bc19514610cd7578063c876d0b914610d00578063c8c8ebe414610d2b576103e4565b80639c3b4fdc11610190578063a9059cbb1161015f578063a9059cbb14610bde578063b62496f514610c1b578063bbc0c74214610c58578063c024666814610c83576103e4565b80639c3b4fdc14610b205780639fccce3214610b4b578063a0d82dc514610b76578063a457c2d714610ba1576103e4565b806395d89b41116101cc57806395d89b4114610a785780639a784c0314610aa35780639a7a23d614610acc5780639bd9bf5f14610af5576103e4565b806382aa7c68146109d05780638da5cb5b146109f95780638ea5220f14610a24578063924de9b714610a4f576103e4565b806349bd5a5e116102f85780636a486a8e1161028b5780637102b7281161025a5780637102b728146108ff578063715018a61461093c57806373dd858c14610953578063751039fc1461097c5780637571336a146109a7576103e4565b80636a486a8e146108435780636aebf6271461086e5780636ddd17131461089757806370a08231146108c2576103e4565b80634fbee193116102c75780634fbee19314610787578063534c0906146107c45780635a139dd4146107ef57806364cd83dd1461081a576103e4565b806349bd5a5e146106db5780634a62bb65146107065780634ec39ba9146107315780634f77f6c01461075c576103e4565b806321874c8c116103705780632e6ed7ef1161033f5780632e6ed7ef1461061f578063312394a014610648578063313ce56714610673578063395093511461069e576103e4565b806321874c8c1461056157806323b872dd1461058c57806324afaf8d146105c957806327c8f835146105f4576103e4565b806318160ddd116103ac57806318160ddd146104b95780631816467f146104e45780631a8145bb1461050d578063203e727e14610538576103e4565b806306fdde03146103e9578063095ea7b31461041457806310d5de53146104515780631694505e1461048e576103e4565b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610fa5565b60405161040b919061491f565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906149df565b611037565b6040516104489190614a3a565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190614a55565b611055565b6040516104859190614a3a565b60405180910390f35b34801561049a57600080fd5b506104a3611075565b6040516104b09190614ae1565b60405180910390f35b3480156104c557600080fd5b506104ce611099565b6040516104db9190614b0b565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614a55565b6110a3565b005b34801561051957600080fd5b506105226111df565b60405161052f9190614b0b565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190614b26565b6111e5565b005b34801561056d57600080fd5b506105766112f4565b6040516105839190614a3a565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190614b53565b611394565b6040516105c09190614a3a565b60405180910390f35b3480156105d557600080fd5b506105de61148c565b6040516105eb9190614bb5565b60405180910390f35b34801561060057600080fd5b506106096114b2565b6040516106169190614bb5565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190614bd0565b6114b8565b005b34801561065457600080fd5b5061065d611596565b60405161066a9190614b0b565b60405180910390f35b34801561067f57600080fd5b5061068861159c565b6040516106959190614c53565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906149df565b6115a5565b6040516106d29190614a3a565b60405180910390f35b3480156106e757600080fd5b506106f0611651565b6040516106fd9190614bb5565b60405180910390f35b34801561071257600080fd5b5061071b611675565b6040516107289190614a3a565b60405180910390f35b34801561073d57600080fd5b50610746611688565b6040516107539190614bb5565b60405180910390f35b34801561076857600080fd5b506107716116ae565b60405161077e9190614b0b565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190614a55565b6116b4565b6040516107bb9190614a3a565b60405180910390f35b3480156107d057600080fd5b506107d961170a565b6040516107e69190614bb5565b60405180910390f35b3480156107fb57600080fd5b50610804611730565b6040516108119190614b0b565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c9190614a55565b611736565b005b34801561084f57600080fd5b50610858611872565b6040516108659190614b0b565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190614a55565b611878565b005b3480156108a357600080fd5b506108ac6119b4565b6040516108b99190614a3a565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614a55565b6119c7565b6040516108f69190614b0b565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614a55565b611a0f565b6040516109339190614a3a565b60405180910390f35b34801561094857600080fd5b50610951611a2f565b005b34801561095f57600080fd5b5061097a60048036038101906109759190614a55565b611ab7565b005b34801561098857600080fd5b50610991611bf3565b60405161099e9190614a3a565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614c9a565b611c93565b005b3480156109dc57600080fd5b506109f760048036038101906109f29190614b26565b611d6a565b005b348015610a0557600080fd5b50610a0e611e7d565b604051610a1b9190614bb5565b60405180910390f35b348015610a3057600080fd5b50610a39611ea7565b604051610a469190614bb5565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a719190614cda565b611ecd565b005b348015610a8457600080fd5b50610a8d611f66565b604051610a9a919061491f565b60405180910390f35b348015610aaf57600080fd5b50610aca6004803603810190610ac59190614d6c565b611ff8565b005b348015610ad857600080fd5b50610af36004803603810190610aee9190614c9a565b612207565b005b348015610b0157600080fd5b50610b0a612320565b604051610b179190614b0b565b60405180910390f35b348015610b2c57600080fd5b50610b35612326565b604051610b429190614b0b565b60405180910390f35b348015610b5757600080fd5b50610b6061232c565b604051610b6d9190614b0b565b60405180910390f35b348015610b8257600080fd5b50610b8b612332565b604051610b989190614b0b565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906149df565b612338565b604051610bd59190614a3a565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c0091906149df565b612423565b604051610c129190614a3a565b60405180910390f35b348015610c2757600080fd5b50610c426004803603810190610c3d9190614a55565b612441565b604051610c4f9190614a3a565b60405180910390f35b348015610c6457600080fd5b50610c6d612461565b604051610c7a9190614a3a565b60405180910390f35b348015610c8f57600080fd5b50610caa6004803603810190610ca59190614c9a565b612474565b005b348015610cb857600080fd5b50610cc1612599565b604051610cce9190614b0b565b60405180910390f35b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614b26565b61259f565b005b348015610d0c57600080fd5b50610d156126ae565b604051610d229190614a3a565b60405180910390f35b348015610d3757600080fd5b50610d406126c1565b604051610d4d9190614b0b565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614b26565b6126c7565b604051610d8a9190614a3a565b60405180910390f35b348015610d9f57600080fd5b50610da861281c565b604051610db59190614b0b565b60405180910390f35b348015610dca57600080fd5b50610de56004803603810190610de09190614dcc565b612822565b604051610df29190614b0b565b60405180910390f35b348015610e0757600080fd5b50610e106128a9565b604051610e1d9190614b0b565b60405180910390f35b348015610e3257600080fd5b50610e4d6004803603810190610e489190614bd0565b6128af565b005b348015610e5b57600080fd5b50610e6461298d565b604051610e719190614a3a565b60405180910390f35b348015610e8657600080fd5b50610e8f612a2d565b604051610e9c9190614b0b565b60405180910390f35b348015610eb157600080fd5b50610eba612a33565b604051610ec79190614a3a565b60405180910390f35b348015610edc57600080fd5b50610ef76004803603810190610ef29190614a55565b612ad3565b005b348015610f0557600080fd5b50610f0e612bcb565b604051610f1b9190614b0b565b60405180910390f35b348015610f3057600080fd5b50610f39612bd1565b604051610f469190614b0b565b60405180910390f35b348015610f5b57600080fd5b50610f64612bd7565b604051610f719190614b0b565b60405180910390f35b348015610f8657600080fd5b50610f8f612bdd565b604051610f9c9190614bb5565b60405180910390f35b606060038054610fb490614e3b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe090614e3b565b801561102d5780601f106110025761010080835404028352916020019161102d565b820191906000526020600020905b81548152906001019060200180831161101057829003601f168201915b5050505050905090565b600061104b611044612c03565b8484612c0b565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6110ab612c03565b73ffffffffffffffffffffffffffffffffffffffff166110c9611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614eb9565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f5481565b6111ed612c03565b73ffffffffffffffffffffffffffffffffffffffff1661120b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890614eb9565b60405180910390fd5b670de0b6b3a76400006103e86001611277611099565b6112819190614f08565b61128b9190614f91565b6112959190614f91565b8110156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90615034565b60405180910390fd5b670de0b6b3a7640000816112eb9190614f08565b600b8190555050565b60006112fe612c03565b73ffffffffffffffffffffffffffffffffffffffff1661131c611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614eb9565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001905090565b60006113a1848484612dd6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113ec612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906150c6565b60405180910390fd5b61148085611478612c03565b858403612c0b565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6114c0612c03565b73ffffffffffffffffffffffffffffffffffffffff166114de611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614eb9565b60405180910390fd5b8360158190555082601681905550816017819055508060188190555060185460175460165460155461156691906150e6565b61157091906150e6565b61157a91906150e6565b601481905550600a601454111561159057600080fd5b50505050565b601a5481565b60006012905090565b60006116476115b2612c03565b8484600160006115c0612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461164291906150e6565b612c0b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61173e612c03565b73ffffffffffffffffffffffffffffffffffffffff1661175c611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614eb9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fceaa6f1f2115d0f5eb9934026e3a197b010d8bc98f70fe27bbfb441d6fe4a69c60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b611880612c03565b73ffffffffffffffffffffffffffffffffffffffff1661189e611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90614eb9565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60136020528060005260406000206000915054906101000a900460ff1681565b611a37612c03565b73ffffffffffffffffffffffffffffffffffffffff16611a55611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290614eb9565b60405180910390fd5b611ab56000613d58565b565b611abf612c03565b73ffffffffffffffffffffffffffffffffffffffff16611add611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90614eb9565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611bfd612c03565b73ffffffffffffffffffffffffffffffffffffffff16611c1b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890614eb9565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611c9b612c03565b73ffffffffffffffffffffffffffffffffffffffff16611cb9611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614eb9565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d72612c03565b73ffffffffffffffffffffffffffffffffffffffff16611d90611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614eb9565b60405180910390fd5b600e60019054906101000a900460ff1615611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90615188565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff0219169083151502179055508060128190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ed5612c03565b73ffffffffffffffffffffffffffffffffffffffff16611ef3611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614eb9565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611f7590614e3b565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa190614e3b565b8015611fee5780601f10611fc357610100808354040283529160200191611fee565b820191906000526020600020905b815481529060010190602001808311611fd157829003601f168201915b5050505050905090565b612000612c03565b73ffffffffffffffffffffffffffffffffffffffff1661201e611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614eb9565b60405180910390fd5b60005b83839050811015612201576000848483818110612097576120966151a8565b5b90506020020160208101906120ac9190614a55565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156121385750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561219057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156121ed5782601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806121f9906151d7565b915050612077565b50505050565b61220f612c03565b73ffffffffffffffffffffffffffffffffffffffff1661222d611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90614eb9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990615292565b60405180910390fd5b61231c8282613e1e565b5050565b601e5481565b60175481565b60205481565b601c5481565b60008060016000612347612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb90615324565b60405180910390fd5b61241861240f612c03565b85858403612c0b565b600191505092915050565b6000612437612430612c03565b8484612dd6565b6001905092915050565b60246020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61247c612c03565b73ffffffffffffffffffffffffffffffffffffffff1661249a611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790614eb9565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161258d9190614a3a565b60405180910390a25050565b60155481565b6125a7612c03565b73ffffffffffffffffffffffffffffffffffffffff166125c5611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614eb9565b60405180910390fd5b670de0b6b3a76400006103e86005612631611099565b61263b9190614f08565b6126459190614f91565b61264f9190614f91565b811015612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906153b6565b60405180910390fd5b670de0b6b3a7640000816126a59190614f08565b600d8190555050565b601060009054906101000a900460ff1681565b600b5481565b60006126d1612c03565b73ffffffffffffffffffffffffffffffffffffffff166126ef611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614eb9565b60405180910390fd5b620186a06001612753611099565b61275d9190614f08565b6127679190614f91565b8210156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090615448565b60405180910390fd5b6103e860056127b6611099565b6127c09190614f08565b6127ca9190614f91565b82111561280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906154da565b60405180910390fd5b81600c8190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b6128b7612c03565b73ffffffffffffffffffffffffffffffffffffffff166128d5611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614eb9565b60405180910390fd5b83601a8190555082601b8190555081601c8190555080601d81905550601d54601c54601b54601a5461295d91906150e6565b61296791906150e6565b61297191906150e6565b6019819055506031601954111561298757600080fd5b50505050565b6000612997612c03565b73ffffffffffffffffffffffffffffffffffffffff166129b5611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0290614eb9565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60165481565b6000612a3d612c03565b73ffffffffffffffffffffffffffffffffffffffff16612a5b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa890614eb9565b60405180910390fd5b6001601060006101000a81548160ff0219169083151502179055506001905090565b612adb612c03565b73ffffffffffffffffffffffffffffffffffffffff16612af9611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614eb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb69061556c565b60405180910390fd5b612bc881613d58565b50565b601b5481565b600d5481565b60215481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c72906155fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290615690565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dc99190614b0b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90615722565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead906157b4565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90615820565b60405180910390fd5b6000811415612f5d57612f5883836000613ebf565b613d53565b600e60009054906101000a900460ff161561381557612f7a611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fe85750612fb8611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130215750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561305b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130745750600660149054906101000a900460ff16155b1561381457600e60019054906101000a900460ff1661316e57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061312e5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61316d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131649061588c565b60405180910390fd5b5b60125460115461317e91906150e6565b43111580156131d857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156132325750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561326a57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132c257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613363576001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b601060009054906101000a900460ff161561352b57613380611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561340757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561345f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561352a5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90615944565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ce5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561367557600b54811115613618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360f906159d6565b60405180910390fd5b600d54613624836119c7565b8261362f91906150e6565b1115613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790615a42565b60405180910390fd5b613813565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137185750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561376757600b54811115613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375990615ad4565b60405180910390fd5b613812565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661381157600d546137c4836119c7565b826137cf91906150e6565b1115613810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380790615a42565b60405180910390fd5b5b5b5b5b5b6000613820306119c7565b90506000600c5482101590508080156138455750600e60029054906101000a900460ff165b801561385e5750600660149054906101000a900460ff16155b80156138b45750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561390a5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139605750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139a4576001600660146101000a81548160ff021916908315150217905550613988614140565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a5a5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a6457600090505b60008115613d4357602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ac757506000601954115b15613bc757613af46064613ae66019548861450190919063ffffffff16565b61451790919063ffffffff16565b9050601954601b5482613b079190614f08565b613b119190614f91565b601f6000828254613b2291906150e6565b92505081905550601954601c5482613b3a9190614f08565b613b449190614f91565b60206000828254613b5591906150e6565b92505081905550601954601a5482613b6d9190614f08565b613b779190614f91565b601e6000828254613b8891906150e6565b92505081905550601954601d5482613ba09190614f08565b613baa9190614f91565b60216000828254613bbb91906150e6565b92505081905550613d1f565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c2257506000601454115b15613d1e57613c4f6064613c416014548861450190919063ffffffff16565b61451790919063ffffffff16565b905060145460165482613c629190614f08565b613c6c9190614f91565b601f6000828254613c7d91906150e6565b9250508190555060145460175482613c959190614f08565b613c9f9190614f91565b60206000828254613cb091906150e6565b9250508190555060145460155482613cc89190614f08565b613cd29190614f91565b601e6000828254613ce391906150e6565b9250508190555060145460185482613cfb9190614f08565b613d059190614f91565b60216000828254613d1691906150e6565b925050819055505b5b6000811115613d3457613d33873083613ebf565b5b8085613d409190615af4565b94505b613d4e878787613ebf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2690615722565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f96906157b4565b60405180910390fd5b613faa83838361452d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402790615b9a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140c391906150e6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141279190614b0b565b60405180910390a361413a848484614532565b50505050565b600061414b306119c7565b90506000602154602054601e54601f5461416591906150e6565b61416f91906150e6565b61417991906150e6565b905060008083148061418b5750600082145b15614198575050506144ff565b6014600c546141a79190614f08565b8311156141c0576014600c546141bd9190614f08565b92505b6000600283601f54866141d39190614f08565b6141dd9190614f91565b6141e79190614f91565b905060006141fe828661453790919063ffffffff16565b9050600047905061420e8261454d565b6000614223824761453790919063ffffffff16565b9050600061424e87614240601e548561450190919063ffffffff16565b61451790919063ffffffff16565b905060006142798861426b6020548661450190919063ffffffff16565b61451790919063ffffffff16565b905060006142a4896142966021548761450190919063ffffffff16565b61451790919063ffffffff16565b90506000818385876142b69190615af4565b6142c09190615af4565b6142ca9190615af4565b90506000601f819055506000601e8190555060006020819055506000602181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161433290615beb565b60006040518083038185875af1925050503d806000811461436f576040519150601f19603f3d011682016040523d82523d6000602084013e614374565b606091505b50508099505060008811801561438a5750600081115b156143d757614399888261478a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601f546040516143ce93929190615c00565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161441d90615beb565b60006040518083038185875af1925050503d806000811461445a576040519150601f19603f3d011682016040523d82523d6000602084013e61445f565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516144ab90615beb565b60006040518083038185875af1925050503d80600081146144e8576040519150601f19603f3d011682016040523d82523d6000602084013e6144ed565b606091505b50508099505050505050505050505050505b565b6000818361450f9190614f08565b905092915050565b600081836145259190614f91565b905092915050565b505050565b505050565b600081836145459190615af4565b905092915050565b6000600267ffffffffffffffff81111561456a57614569615c37565b5b6040519080825280602002602001820160405280156145985781602001602082028036833780820191505090505b50905030816000815181106145b0576145af6151a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146799190615c7b565b8160018151811061468d5761468c6151a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f2307f000000000000000000000000000000000000000000000000000000000000000084612c0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614754959493929190615da1565b600060405180830381600087803b15801561476e57600080fd5b505af1158015614782573d6000803e3d6000fd5b505050505050565b6147b5307f000000000000000000000000000000000000000000000000000000000000000084612c0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161483c96959493929190615dfb565b60606040518083038185885af115801561485a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061487f9190615e71565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148c05780820151818401526020810190506148a5565b838111156148cf576000848401525b50505050565b6000601f19601f8301169050919050565b60006148f182614886565b6148fb8185614891565b935061490b8185602086016148a2565b614914816148d5565b840191505092915050565b6000602082019050818103600083015261493981846148e6565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149768261494b565b9050919050565b6149868161496b565b811461499157600080fd5b50565b6000813590506149a38161497d565b92915050565b6000819050919050565b6149bc816149a9565b81146149c757600080fd5b50565b6000813590506149d9816149b3565b92915050565b600080604083850312156149f6576149f5614941565b5b6000614a0485828601614994565b9250506020614a15858286016149ca565b9150509250929050565b60008115159050919050565b614a3481614a1f565b82525050565b6000602082019050614a4f6000830184614a2b565b92915050565b600060208284031215614a6b57614a6a614941565b5b6000614a7984828501614994565b91505092915050565b6000819050919050565b6000614aa7614aa2614a9d8461494b565b614a82565b61494b565b9050919050565b6000614ab982614a8c565b9050919050565b6000614acb82614aae565b9050919050565b614adb81614ac0565b82525050565b6000602082019050614af66000830184614ad2565b92915050565b614b05816149a9565b82525050565b6000602082019050614b206000830184614afc565b92915050565b600060208284031215614b3c57614b3b614941565b5b6000614b4a848285016149ca565b91505092915050565b600080600060608486031215614b6c57614b6b614941565b5b6000614b7a86828701614994565b9350506020614b8b86828701614994565b9250506040614b9c868287016149ca565b9150509250925092565b614baf8161496b565b82525050565b6000602082019050614bca6000830184614ba6565b92915050565b60008060008060808587031215614bea57614be9614941565b5b6000614bf8878288016149ca565b9450506020614c09878288016149ca565b9350506040614c1a878288016149ca565b9250506060614c2b878288016149ca565b91505092959194509250565b600060ff82169050919050565b614c4d81614c37565b82525050565b6000602082019050614c686000830184614c44565b92915050565b614c7781614a1f565b8114614c8257600080fd5b50565b600081359050614c9481614c6e565b92915050565b60008060408385031215614cb157614cb0614941565b5b6000614cbf85828601614994565b9250506020614cd085828601614c85565b9150509250929050565b600060208284031215614cf057614cef614941565b5b6000614cfe84828501614c85565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d2c57614d2b614d07565b5b8235905067ffffffffffffffff811115614d4957614d48614d0c565b5b602083019150836020820283011115614d6557614d64614d11565b5b9250929050565b600080600060408486031215614d8557614d84614941565b5b600084013567ffffffffffffffff811115614da357614da2614946565b5b614daf86828701614d16565b93509350506020614dc286828701614c85565b9150509250925092565b60008060408385031215614de357614de2614941565b5b6000614df185828601614994565b9250506020614e0285828601614994565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e5357607f821691505b60208210811415614e6757614e66614e0c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ea3602083614891565b9150614eae82614e6d565b602082019050919050565b60006020820190508181036000830152614ed281614e96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f13826149a9565b9150614f1e836149a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f5757614f56614ed9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f9c826149a9565b9150614fa7836149a9565b925082614fb757614fb6614f62565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061501e602f83614891565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006150b0602883614891565b91506150bb82615054565b604082019050919050565b600060208201905081810360008301526150df816150a3565b9050919050565b60006150f1826149a9565b91506150fc836149a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561513157615130614ed9565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000615172600e83614891565b915061517d8261513c565b602082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151e2826149a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561521557615214614ed9565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061527c603983614891565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061530e602583614891565b9150615319826152b2565b604082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153a0602483614891565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615432603583614891565b915061543d826153d6565b604082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c4603483614891565b91506154cf82615468565b604082019050919050565b600060208201905081810360008301526154f3816154b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615556602683614891565b9150615561826154fa565b604082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155e8602483614891565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061567a602283614891565b91506156858261561e565b604082019050919050565b600060208201905081810360008301526156a98161566d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061570c602583614891565b9150615717826156b0565b604082019050919050565b6000602082019050818103600083015261573b816156ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061579e602383614891565b91506157a982615742565b604082019050919050565b600060208201905081810360008301526157cd81615791565b9050919050565b7f536e69706572206f722056657374656400000000000000000000000000000000600082015250565b600061580a601083614891565b9150615815826157d4565b602082019050919050565b60006020820190508181036000830152615839816157fd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615876601683614891565b915061588182615840565b602082019050919050565b600060208201905081810360008301526158a581615869565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061592e604983614891565b9150615939826158ac565b606082019050919050565b6000602082019050818103600083015261595d81615921565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159c0603583614891565b91506159cb82615964565b604082019050919050565b600060208201905081810360008301526159ef816159b3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a2c601383614891565b9150615a37826159f6565b602082019050919050565b60006020820190508181036000830152615a5b81615a1f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615abe603683614891565b9150615ac982615a62565b604082019050919050565b60006020820190508181036000830152615aed81615ab1565b9050919050565b6000615aff826149a9565b9150615b0a836149a9565b925082821015615b1d57615b1c614ed9565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615b84602683614891565b9150615b8f82615b28565b604082019050919050565b60006020820190508181036000830152615bb381615b77565b9050919050565b600081905092915050565b50565b6000615bd5600083615bba565b9150615be082615bc5565b600082019050919050565b6000615bf682615bc8565b9150819050919050565b6000606082019050615c156000830186614afc565b615c226020830185614afc565b615c2f6040830184614afc565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c758161497d565b92915050565b600060208284031215615c9157615c90614941565b5b6000615c9f84828501615c66565b91505092915050565b6000819050919050565b6000615ccd615cc8615cc384615ca8565b614a82565b6149a9565b9050919050565b615cdd81615cb2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d188161496b565b82525050565b6000615d2a8383615d0f565b60208301905092915050565b6000602082019050919050565b6000615d4e82615ce3565b615d588185615cee565b9350615d6383615cff565b8060005b83811015615d94578151615d7b8882615d1e565b9750615d8683615d36565b925050600181019050615d67565b5085935050505092915050565b600060a082019050615db66000830188614afc565b615dc36020830187615cd4565b8181036040830152615dd58186615d43565b9050615de46060830185614ba6565b615df16080830184614afc565b9695505050505050565b600060c082019050615e106000830189614ba6565b615e1d6020830188614afc565b615e2a6040830187615cd4565b615e376060830186615cd4565b615e446080830185614ba6565b615e5160a0830184614afc565b979650505050505050565b600081519050615e6b816149b3565b92915050565b600080600060608486031215615e8a57615e89614941565b5b6000615e9886828701615e5c565b9350506020615ea986828701615e5c565b9250506040615eba86828701615e5c565b915050925092509256fea264697066735822122079884b3a9e379d32240895f887ce90609dce6479637d56cb2653ed437925187664736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c806382aa7c68116101fd578063c0f17acd11610118578063e7ad9fcd116100ab578063f2fde38b1161007a578063f2fde38b14610ed0578063f637434214610ef9578063f8b45b0514610f24578063fb002c9714610f4f578063fd72e22a14610f7a576103e4565b8063e7ad9fcd14610e26578063e884f26014610e4f578063f11a24d314610e7a578063f22857a814610ea5576103e4565b8063d257b34f116100e7578063d257b34f14610d56578063d85ba06314610d93578063dd62ed3e14610dbe578063e2f4560514610dfb576103e4565b8063c0f17acd14610cac578063c18bc19514610cd7578063c876d0b914610d00578063c8c8ebe414610d2b576103e4565b80639c3b4fdc11610190578063a9059cbb1161015f578063a9059cbb14610bde578063b62496f514610c1b578063bbc0c74214610c58578063c024666814610c83576103e4565b80639c3b4fdc14610b205780639fccce3214610b4b578063a0d82dc514610b76578063a457c2d714610ba1576103e4565b806395d89b41116101cc57806395d89b4114610a785780639a784c0314610aa35780639a7a23d614610acc5780639bd9bf5f14610af5576103e4565b806382aa7c68146109d05780638da5cb5b146109f95780638ea5220f14610a24578063924de9b714610a4f576103e4565b806349bd5a5e116102f85780636a486a8e1161028b5780637102b7281161025a5780637102b728146108ff578063715018a61461093c57806373dd858c14610953578063751039fc1461097c5780637571336a146109a7576103e4565b80636a486a8e146108435780636aebf6271461086e5780636ddd17131461089757806370a08231146108c2576103e4565b80634fbee193116102c75780634fbee19314610787578063534c0906146107c45780635a139dd4146107ef57806364cd83dd1461081a576103e4565b806349bd5a5e146106db5780634a62bb65146107065780634ec39ba9146107315780634f77f6c01461075c576103e4565b806321874c8c116103705780632e6ed7ef1161033f5780632e6ed7ef1461061f578063312394a014610648578063313ce56714610673578063395093511461069e576103e4565b806321874c8c1461056157806323b872dd1461058c57806324afaf8d146105c957806327c8f835146105f4576103e4565b806318160ddd116103ac57806318160ddd146104b95780631816467f146104e45780631a8145bb1461050d578063203e727e14610538576103e4565b806306fdde03146103e9578063095ea7b31461041457806310d5de53146104515780631694505e1461048e576103e4565b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610fa5565b60405161040b919061491f565b60405180910390f35b34801561042057600080fd5b5061043b600480360381019061043691906149df565b611037565b6040516104489190614a3a565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190614a55565b611055565b6040516104859190614a3a565b60405180910390f35b34801561049a57600080fd5b506104a3611075565b6040516104b09190614ae1565b60405180910390f35b3480156104c557600080fd5b506104ce611099565b6040516104db9190614b0b565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190614a55565b6110a3565b005b34801561051957600080fd5b506105226111df565b60405161052f9190614b0b565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190614b26565b6111e5565b005b34801561056d57600080fd5b506105766112f4565b6040516105839190614a3a565b60405180910390f35b34801561059857600080fd5b506105b360048036038101906105ae9190614b53565b611394565b6040516105c09190614a3a565b60405180910390f35b3480156105d557600080fd5b506105de61148c565b6040516105eb9190614bb5565b60405180910390f35b34801561060057600080fd5b506106096114b2565b6040516106169190614bb5565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190614bd0565b6114b8565b005b34801561065457600080fd5b5061065d611596565b60405161066a9190614b0b565b60405180910390f35b34801561067f57600080fd5b5061068861159c565b6040516106959190614c53565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906149df565b6115a5565b6040516106d29190614a3a565b60405180910390f35b3480156106e757600080fd5b506106f0611651565b6040516106fd9190614bb5565b60405180910390f35b34801561071257600080fd5b5061071b611675565b6040516107289190614a3a565b60405180910390f35b34801561073d57600080fd5b50610746611688565b6040516107539190614bb5565b60405180910390f35b34801561076857600080fd5b506107716116ae565b60405161077e9190614b0b565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190614a55565b6116b4565b6040516107bb9190614a3a565b60405180910390f35b3480156107d057600080fd5b506107d961170a565b6040516107e69190614bb5565b60405180910390f35b3480156107fb57600080fd5b50610804611730565b6040516108119190614b0b565b60405180910390f35b34801561082657600080fd5b50610841600480360381019061083c9190614a55565b611736565b005b34801561084f57600080fd5b50610858611872565b6040516108659190614b0b565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190614a55565b611878565b005b3480156108a357600080fd5b506108ac6119b4565b6040516108b99190614a3a565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e49190614a55565b6119c7565b6040516108f69190614b0b565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190614a55565b611a0f565b6040516109339190614a3a565b60405180910390f35b34801561094857600080fd5b50610951611a2f565b005b34801561095f57600080fd5b5061097a60048036038101906109759190614a55565b611ab7565b005b34801561098857600080fd5b50610991611bf3565b60405161099e9190614a3a565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614c9a565b611c93565b005b3480156109dc57600080fd5b506109f760048036038101906109f29190614b26565b611d6a565b005b348015610a0557600080fd5b50610a0e611e7d565b604051610a1b9190614bb5565b60405180910390f35b348015610a3057600080fd5b50610a39611ea7565b604051610a469190614bb5565b60405180910390f35b348015610a5b57600080fd5b50610a766004803603810190610a719190614cda565b611ecd565b005b348015610a8457600080fd5b50610a8d611f66565b604051610a9a919061491f565b60405180910390f35b348015610aaf57600080fd5b50610aca6004803603810190610ac59190614d6c565b611ff8565b005b348015610ad857600080fd5b50610af36004803603810190610aee9190614c9a565b612207565b005b348015610b0157600080fd5b50610b0a612320565b604051610b179190614b0b565b60405180910390f35b348015610b2c57600080fd5b50610b35612326565b604051610b429190614b0b565b60405180910390f35b348015610b5757600080fd5b50610b6061232c565b604051610b6d9190614b0b565b60405180910390f35b348015610b8257600080fd5b50610b8b612332565b604051610b989190614b0b565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc391906149df565b612338565b604051610bd59190614a3a565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c0091906149df565b612423565b604051610c129190614a3a565b60405180910390f35b348015610c2757600080fd5b50610c426004803603810190610c3d9190614a55565b612441565b604051610c4f9190614a3a565b60405180910390f35b348015610c6457600080fd5b50610c6d612461565b604051610c7a9190614a3a565b60405180910390f35b348015610c8f57600080fd5b50610caa6004803603810190610ca59190614c9a565b612474565b005b348015610cb857600080fd5b50610cc1612599565b604051610cce9190614b0b565b60405180910390f35b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614b26565b61259f565b005b348015610d0c57600080fd5b50610d156126ae565b604051610d229190614a3a565b60405180910390f35b348015610d3757600080fd5b50610d406126c1565b604051610d4d9190614b0b565b60405180910390f35b348015610d6257600080fd5b50610d7d6004803603810190610d789190614b26565b6126c7565b604051610d8a9190614a3a565b60405180910390f35b348015610d9f57600080fd5b50610da861281c565b604051610db59190614b0b565b60405180910390f35b348015610dca57600080fd5b50610de56004803603810190610de09190614dcc565b612822565b604051610df29190614b0b565b60405180910390f35b348015610e0757600080fd5b50610e106128a9565b604051610e1d9190614b0b565b60405180910390f35b348015610e3257600080fd5b50610e4d6004803603810190610e489190614bd0565b6128af565b005b348015610e5b57600080fd5b50610e6461298d565b604051610e719190614a3a565b60405180910390f35b348015610e8657600080fd5b50610e8f612a2d565b604051610e9c9190614b0b565b60405180910390f35b348015610eb157600080fd5b50610eba612a33565b604051610ec79190614a3a565b60405180910390f35b348015610edc57600080fd5b50610ef76004803603810190610ef29190614a55565b612ad3565b005b348015610f0557600080fd5b50610f0e612bcb565b604051610f1b9190614b0b565b60405180910390f35b348015610f3057600080fd5b50610f39612bd1565b604051610f469190614b0b565b60405180910390f35b348015610f5b57600080fd5b50610f64612bd7565b604051610f719190614b0b565b60405180910390f35b348015610f8657600080fd5b50610f8f612bdd565b604051610f9c9190614bb5565b60405180910390f35b606060038054610fb490614e3b565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe090614e3b565b801561102d5780601f106110025761010080835404028352916020019161102d565b820191906000526020600020905b81548152906001019060200180831161101057829003601f168201915b5050505050905090565b600061104b611044612c03565b8484612c0b565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6110ab612c03565b73ffffffffffffffffffffffffffffffffffffffff166110c9611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111690614eb9565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601f5481565b6111ed612c03565b73ffffffffffffffffffffffffffffffffffffffff1661120b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890614eb9565b60405180910390fd5b670de0b6b3a76400006103e86001611277611099565b6112819190614f08565b61128b9190614f91565b6112959190614f91565b8110156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90615034565b60405180910390fd5b670de0b6b3a7640000816112eb9190614f08565b600b8190555050565b60006112fe612c03565b73ffffffffffffffffffffffffffffffffffffffff1661131c611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136990614eb9565b60405180910390fd5b6001600e60006101000a81548160ff0219169083151502179055506001905090565b60006113a1848484612dd6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113ec612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561146c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611463906150c6565b60405180910390fd5b61148085611478612c03565b858403612c0b565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6114c0612c03565b73ffffffffffffffffffffffffffffffffffffffff166114de611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90614eb9565b60405180910390fd5b8360158190555082601681905550816017819055508060188190555060185460175460165460155461156691906150e6565b61157091906150e6565b61157a91906150e6565b601481905550600a601454111561159057600080fd5b50505050565b601a5481565b60006012905090565b60006116476115b2612c03565b8484600160006115c0612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461164291906150e6565b612c0b565b6001905092915050565b7f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9681565b600e60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61173e612c03565b73ffffffffffffffffffffffffffffffffffffffff1661175c611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614eb9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fceaa6f1f2115d0f5eb9934026e3a197b010d8bc98f70fe27bbfb441d6fe4a69c60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b611880612c03565b73ffffffffffffffffffffffffffffffffffffffff1661189e611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90614eb9565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60136020528060005260406000206000915054906101000a900460ff1681565b611a37612c03565b73ffffffffffffffffffffffffffffffffffffffff16611a55611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290614eb9565b60405180910390fd5b611ab56000613d58565b565b611abf612c03565b73ffffffffffffffffffffffffffffffffffffffff16611add611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90614eb9565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611bfd612c03565b73ffffffffffffffffffffffffffffffffffffffff16611c1b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6890614eb9565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611c9b612c03565b73ffffffffffffffffffffffffffffffffffffffff16611cb9611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690614eb9565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611d72612c03565b73ffffffffffffffffffffffffffffffffffffffff16611d90611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd90614eb9565b60405180910390fd5b600e60019054906101000a900460ff1615611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90615188565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff0219169083151502179055508060128190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ed5612c03565b73ffffffffffffffffffffffffffffffffffffffff16611ef3611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090614eb9565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611f7590614e3b565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa190614e3b565b8015611fee5780601f10611fc357610100808354040283529160200191611fee565b820191906000526020600020905b815481529060010190602001808311611fd157829003601f168201915b5050505050905090565b612000612c03565b73ffffffffffffffffffffffffffffffffffffffff1661201e611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614eb9565b60405180910390fd5b60005b83839050811015612201576000848483818110612097576120966151a8565b5b90506020020160208101906120ac9190614a55565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156121385750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561219057507f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156121ed5782601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806121f9906151d7565b915050612077565b50505050565b61220f612c03565b73ffffffffffffffffffffffffffffffffffffffff1661222d611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227a90614eb9565b60405180910390fd5b7f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990615292565b60405180910390fd5b61231c8282613e1e565b5050565b601e5481565b60175481565b60205481565b601c5481565b60008060016000612347612c03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb90615324565b60405180910390fd5b61241861240f612c03565b85858403612c0b565b600191505092915050565b6000612437612430612c03565b8484612dd6565b6001905092915050565b60246020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b61247c612c03565b73ffffffffffffffffffffffffffffffffffffffff1661249a611e7d565b73ffffffffffffffffffffffffffffffffffffffff16146124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790614eb9565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161258d9190614a3a565b60405180910390a25050565b60155481565b6125a7612c03565b73ffffffffffffffffffffffffffffffffffffffff166125c5611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614eb9565b60405180910390fd5b670de0b6b3a76400006103e86005612631611099565b61263b9190614f08565b6126459190614f91565b61264f9190614f91565b811015612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906153b6565b60405180910390fd5b670de0b6b3a7640000816126a59190614f08565b600d8190555050565b601060009054906101000a900460ff1681565b600b5481565b60006126d1612c03565b73ffffffffffffffffffffffffffffffffffffffff166126ef611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90614eb9565b60405180910390fd5b620186a06001612753611099565b61275d9190614f08565b6127679190614f91565b8210156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090615448565b60405180910390fd5b6103e860056127b6611099565b6127c09190614f08565b6127ca9190614f91565b82111561280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906154da565b60405180910390fd5b81600c8190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b6128b7612c03565b73ffffffffffffffffffffffffffffffffffffffff166128d5611e7d565b73ffffffffffffffffffffffffffffffffffffffff161461292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614eb9565b60405180910390fd5b83601a8190555082601b8190555081601c8190555080601d81905550601d54601c54601b54601a5461295d91906150e6565b61296791906150e6565b61297191906150e6565b6019819055506031601954111561298757600080fd5b50505050565b6000612997612c03565b73ffffffffffffffffffffffffffffffffffffffff166129b5611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0290614eb9565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60165481565b6000612a3d612c03565b73ffffffffffffffffffffffffffffffffffffffff16612a5b611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa890614eb9565b60405180910390fd5b6001601060006101000a81548160ff0219169083151502179055506001905090565b612adb612c03565b73ffffffffffffffffffffffffffffffffffffffff16612af9611e7d565b73ffffffffffffffffffffffffffffffffffffffff1614612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614eb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb69061556c565b60405180910390fd5b612bc881613d58565b50565b601b5481565b600d5481565b60215481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c72906155fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290615690565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612dc99190614b0b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90615722565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead906157b4565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90615820565b60405180910390fd5b6000811415612f5d57612f5883836000613ebf565b613d53565b600e60009054906101000a900460ff161561381557612f7a611e7d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fe85750612fb8611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130215750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561305b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130745750600660149054906101000a900460ff16155b1561381457600e60019054906101000a900460ff1661316e57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061312e5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61316d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131649061588c565b60405180910390fd5b5b60125460115461317e91906150e6565b43111580156131d857507f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156132325750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561326a57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132c257507f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613363576001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e260405160405180910390a25b601060009054906101000a900460ff161561352b57613380611e7d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561340757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561345f57507f000000000000000000000000d82e0713a54205dd9ac79ff49fec5b6efb3b4d9673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561352a5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106134e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dc90615944565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ce5750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561367557600b54811115613618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360f906159d6565b60405180910390fd5b600d54613624836119c7565b8261362f91906150e6565b1115613670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366790615a42565b60405180910390fd5b613813565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137185750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561376757600b54811115613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375990615ad4565b60405180910390fd5b613812565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661381157600d546137c4836119c7565b826137cf91906150e6565b1115613810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380790615a42565b60405180910390fd5b5b5b5b5b5b6000613820306119c7565b90506000600c5482101590508080156138455750600e60029054906101000a900460ff165b801561385e5750600660149054906101000a900460ff16155b80156138b45750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561390a5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139605750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156139a4576001600660146101000a81548160ff021916908315150217905550613988614140565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a5a5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a6457600090505b60008115613d4357602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ac757506000601954115b15613bc757613af46064613ae66019548861450190919063ffffffff16565b61451790919063ffffffff16565b9050601954601b5482613b079190614f08565b613b119190614f91565b601f6000828254613b2291906150e6565b92505081905550601954601c5482613b3a9190614f08565b613b449190614f91565b60206000828254613b5591906150e6565b92505081905550601954601a5482613b6d9190614f08565b613b779190614f91565b601e6000828254613b8891906150e6565b92505081905550601954601d5482613ba09190614f08565b613baa9190614f91565b60216000828254613bbb91906150e6565b92505081905550613d1f565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c2257506000601454115b15613d1e57613c4f6064613c416014548861450190919063ffffffff16565b61451790919063ffffffff16565b905060145460165482613c629190614f08565b613c6c9190614f91565b601f6000828254613c7d91906150e6565b9250508190555060145460175482613c959190614f08565b613c9f9190614f91565b60206000828254613cb091906150e6565b9250508190555060145460155482613cc89190614f08565b613cd29190614f91565b601e6000828254613ce391906150e6565b9250508190555060145460185482613cfb9190614f08565b613d059190614f91565b60216000828254613d1691906150e6565b925050819055505b5b6000811115613d3457613d33873083613ebf565b5b8085613d409190615af4565b94505b613d4e878787613ebf565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2690615722565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f96906157b4565b60405180910390fd5b613faa83838361452d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161402790615b9a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546140c391906150e6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141279190614b0b565b60405180910390a361413a848484614532565b50505050565b600061414b306119c7565b90506000602154602054601e54601f5461416591906150e6565b61416f91906150e6565b61417991906150e6565b905060008083148061418b5750600082145b15614198575050506144ff565b6014600c546141a79190614f08565b8311156141c0576014600c546141bd9190614f08565b92505b6000600283601f54866141d39190614f08565b6141dd9190614f91565b6141e79190614f91565b905060006141fe828661453790919063ffffffff16565b9050600047905061420e8261454d565b6000614223824761453790919063ffffffff16565b9050600061424e87614240601e548561450190919063ffffffff16565b61451790919063ffffffff16565b905060006142798861426b6020548661450190919063ffffffff16565b61451790919063ffffffff16565b905060006142a4896142966021548761450190919063ffffffff16565b61451790919063ffffffff16565b90506000818385876142b69190615af4565b6142c09190615af4565b6142ca9190615af4565b90506000601f819055506000601e8190555060006020819055506000602181905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161433290615beb565b60006040518083038185875af1925050503d806000811461436f576040519150601f19603f3d011682016040523d82523d6000602084013e614374565b606091505b50508099505060008811801561438a5750600081115b156143d757614399888261478a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601f546040516143ce93929190615c00565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161441d90615beb565b60006040518083038185875af1925050503d806000811461445a576040519150601f19603f3d011682016040523d82523d6000602084013e61445f565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516144ab90615beb565b60006040518083038185875af1925050503d80600081146144e8576040519150601f19603f3d011682016040523d82523d6000602084013e6144ed565b606091505b50508099505050505050505050505050505b565b6000818361450f9190614f08565b905092915050565b600081836145259190614f91565b905092915050565b505050565b505050565b600081836145459190615af4565b905092915050565b6000600267ffffffffffffffff81111561456a57614569615c37565b5b6040519080825280602002602001820160405280156145985781602001602082028036833780820191505090505b50905030816000815181106145b0576145af6151a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146799190615c7b565b8160018151811061468d5761468c6151a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612c0b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614754959493929190615da1565b600060405180830381600087803b15801561476e57600080fd5b505af1158015614782573d6000803e3d6000fd5b505050505050565b6147b5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612c0b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161483c96959493929190615dfb565b60606040518083038185885af115801561485a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061487f9190615e71565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148c05780820151818401526020810190506148a5565b838111156148cf576000848401525b50505050565b6000601f19601f8301169050919050565b60006148f182614886565b6148fb8185614891565b935061490b8185602086016148a2565b614914816148d5565b840191505092915050565b6000602082019050818103600083015261493981846148e6565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149768261494b565b9050919050565b6149868161496b565b811461499157600080fd5b50565b6000813590506149a38161497d565b92915050565b6000819050919050565b6149bc816149a9565b81146149c757600080fd5b50565b6000813590506149d9816149b3565b92915050565b600080604083850312156149f6576149f5614941565b5b6000614a0485828601614994565b9250506020614a15858286016149ca565b9150509250929050565b60008115159050919050565b614a3481614a1f565b82525050565b6000602082019050614a4f6000830184614a2b565b92915050565b600060208284031215614a6b57614a6a614941565b5b6000614a7984828501614994565b91505092915050565b6000819050919050565b6000614aa7614aa2614a9d8461494b565b614a82565b61494b565b9050919050565b6000614ab982614a8c565b9050919050565b6000614acb82614aae565b9050919050565b614adb81614ac0565b82525050565b6000602082019050614af66000830184614ad2565b92915050565b614b05816149a9565b82525050565b6000602082019050614b206000830184614afc565b92915050565b600060208284031215614b3c57614b3b614941565b5b6000614b4a848285016149ca565b91505092915050565b600080600060608486031215614b6c57614b6b614941565b5b6000614b7a86828701614994565b9350506020614b8b86828701614994565b9250506040614b9c868287016149ca565b9150509250925092565b614baf8161496b565b82525050565b6000602082019050614bca6000830184614ba6565b92915050565b60008060008060808587031215614bea57614be9614941565b5b6000614bf8878288016149ca565b9450506020614c09878288016149ca565b9350506040614c1a878288016149ca565b9250506060614c2b878288016149ca565b91505092959194509250565b600060ff82169050919050565b614c4d81614c37565b82525050565b6000602082019050614c686000830184614c44565b92915050565b614c7781614a1f565b8114614c8257600080fd5b50565b600081359050614c9481614c6e565b92915050565b60008060408385031215614cb157614cb0614941565b5b6000614cbf85828601614994565b9250506020614cd085828601614c85565b9150509250929050565b600060208284031215614cf057614cef614941565b5b6000614cfe84828501614c85565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d2c57614d2b614d07565b5b8235905067ffffffffffffffff811115614d4957614d48614d0c565b5b602083019150836020820283011115614d6557614d64614d11565b5b9250929050565b600080600060408486031215614d8557614d84614941565b5b600084013567ffffffffffffffff811115614da357614da2614946565b5b614daf86828701614d16565b93509350506020614dc286828701614c85565b9150509250925092565b60008060408385031215614de357614de2614941565b5b6000614df185828601614994565b9250506020614e0285828601614994565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e5357607f821691505b60208210811415614e6757614e66614e0c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ea3602083614891565b9150614eae82614e6d565b602082019050919050565b60006020820190508181036000830152614ed281614e96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f13826149a9565b9150614f1e836149a9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f5757614f56614ed9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f9c826149a9565b9150614fa7836149a9565b925082614fb757614fb6614f62565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061501e602f83614891565b915061502982614fc2565b604082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006150b0602883614891565b91506150bb82615054565b604082019050919050565b600060208201905081810360008301526150df816150a3565b9050919050565b60006150f1826149a9565b91506150fc836149a9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561513157615130614ed9565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000615172600e83614891565b915061517d8261513c565b602082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151e2826149a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561521557615214614ed9565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061527c603983614891565b915061528782615220565b604082019050919050565b600060208201905081810360008301526152ab8161526f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061530e602583614891565b9150615319826152b2565b604082019050919050565b6000602082019050818103600083015261533d81615301565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153a0602483614891565b91506153ab82615344565b604082019050919050565b600060208201905081810360008301526153cf81615393565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615432603583614891565b915061543d826153d6565b604082019050919050565b6000602082019050818103600083015261546181615425565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c4603483614891565b91506154cf82615468565b604082019050919050565b600060208201905081810360008301526154f3816154b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615556602683614891565b9150615561826154fa565b604082019050919050565b6000602082019050818103600083015261558581615549565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155e8602483614891565b91506155f38261558c565b604082019050919050565b60006020820190508181036000830152615617816155db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061567a602283614891565b91506156858261561e565b604082019050919050565b600060208201905081810360008301526156a98161566d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061570c602583614891565b9150615717826156b0565b604082019050919050565b6000602082019050818103600083015261573b816156ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061579e602383614891565b91506157a982615742565b604082019050919050565b600060208201905081810360008301526157cd81615791565b9050919050565b7f536e69706572206f722056657374656400000000000000000000000000000000600082015250565b600061580a601083614891565b9150615815826157d4565b602082019050919050565b60006020820190508181036000830152615839816157fd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615876601683614891565b915061588182615840565b602082019050919050565b600060208201905081810360008301526158a581615869565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061592e604983614891565b9150615939826158ac565b606082019050919050565b6000602082019050818103600083015261595d81615921565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006159c0603583614891565b91506159cb82615964565b604082019050919050565b600060208201905081810360008301526159ef816159b3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a2c601383614891565b9150615a37826159f6565b602082019050919050565b60006020820190508181036000830152615a5b81615a1f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615abe603683614891565b9150615ac982615a62565b604082019050919050565b60006020820190508181036000830152615aed81615ab1565b9050919050565b6000615aff826149a9565b9150615b0a836149a9565b925082821015615b1d57615b1c614ed9565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615b84602683614891565b9150615b8f82615b28565b604082019050919050565b60006020820190508181036000830152615bb381615b77565b9050919050565b600081905092915050565b50565b6000615bd5600083615bba565b9150615be082615bc5565b600082019050919050565b6000615bf682615bc8565b9150819050919050565b6000606082019050615c156000830186614afc565b615c226020830185614afc565b615c2f6040830184614afc565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c758161497d565b92915050565b600060208284031215615c9157615c90614941565b5b6000615c9f84828501615c66565b91505092915050565b6000819050919050565b6000615ccd615cc8615cc384615ca8565b614a82565b6149a9565b9050919050565b615cdd81615cb2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d188161496b565b82525050565b6000615d2a8383615d0f565b60208301905092915050565b6000602082019050919050565b6000615d4e82615ce3565b615d588185615cee565b9350615d6383615cff565b8060005b83811015615d94578151615d7b8882615d1e565b9750615d8683615d36565b925050600181019050615d67565b5085935050505092915050565b600060a082019050615db66000830188614afc565b615dc36020830187615cd4565b8181036040830152615dd58186615d43565b9050615de46060830185614ba6565b615df16080830184614afc565b9695505050505050565b600060c082019050615e106000830189614ba6565b615e1d6020830188614afc565b615e2a6040830187615cd4565b615e376060830186615cd4565b615e446080830185614ba6565b615e5160a0830184614afc565b979650505050505050565b600081519050615e6b816149b3565b92915050565b600080600060608486031215615e8a57615e89614941565b5b6000615e9886828701615e5c565b9350506020615ea986828701615e5c565b9250506040615eba86828701615e5c565b915050925092509256fea264697066735822122079884b3a9e379d32240895f887ce90609dce6479637d56cb2653ed437925187664736f6c634300080a0033

Deployed Bytecode Sourcemap

15199:18837:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2896:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3810:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16835:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15292:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3217:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24594:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16659:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21877:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20790:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3987:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15616:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15395:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22795:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16480:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3116:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4487:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15350:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15865:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15679:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16583:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25125:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15455:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16405:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24413:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16445:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24759:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15945:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3333:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16224:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1018:103;;;;;;;;;;;;;:::i;:::-;;24951:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20635:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22424:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20328:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;795:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15648:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22687:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3004:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31213:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23905:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16624:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16374:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16699:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16551:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4710:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3468:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16907:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15905:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23715:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16305:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22160:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16111:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15750:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21372:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16271:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3651:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15792:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23249:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20968:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16337:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21167:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1129:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16513:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15832:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16733:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15710:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2896:100;2950:13;2983:5;2976:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2896:100;:::o;3810:169::-;3893:4;3910:39;3919:12;:10;:12::i;:::-;3933:7;3942:6;3910:8;:39::i;:::-;3967:4;3960:11;;3810:169;;;;:::o;16835:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;15292:51::-;;;:::o;3217:108::-;3278:7;3305:12;;3298:19;;3217:108;:::o;24594:157::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24701:9:::1;;;;;;;;;;;24673:38;;24690:9;24673:38;;;;;;;;;;;;24734:9;24722;;:21;;;;;;;;;;;;;;;;;;24594:157:::0;:::o;16659:33::-;;;;:::o;21877:275::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22014:4:::1;22006;22001:1;21985:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21984:26;;;;:::i;:::-;21983:35;;;;:::i;:::-;21973:6;:45;;21951:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;22137:6;22127;:17;;;;:::i;:::-;22104:20;:40;;;;21877:275:::0;:::o;20790:117::-;20839:4;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20873:4:::1;20856:14;;:21;;;;;;;;;;;;;;;;;;20895:4;20888:11;;20790:117:::0;:::o;3987:492::-;4127:4;4144:36;4154:6;4162:9;4173:6;4144:9;:36::i;:::-;4193:24;4220:11;:19;4232:6;4220:19;;;;;;;;;;;;;;;:33;4240:12;:10;:12::i;:::-;4220:33;;;;;;;;;;;;;;;;4193:60;;4292:6;4272:16;:26;;4264:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4379:57;4388:6;4396:12;:10;:12::i;:::-;4429:6;4410:16;:25;4379:8;:57::i;:::-;4467:4;4460:11;;;3987:492;;;;;:::o;15616:25::-;;;;;;;;;;;;;:::o;15395:53::-;15441:6;15395:53;:::o;22795:446::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22986:8:::1;22973:10;:21;;;;23023:13;23005:15;:31;;;;23059:7;23047:9;:19;;;;23096:14;23077:16;:33;;;;23179:16;;23167:9;;23149:15;;23136:10;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;:59;;;;:::i;:::-;23121:12;:74;;;;23230:2;23214:12;;:18;;23206:27;;;::::0;::::1;;22795:446:::0;;;;:::o;16480:26::-;;;;:::o;3116:93::-;3174:5;3199:2;3192:9;;3116:93;:::o;4487:215::-;4575:4;4592:80;4601:12;:10;:12::i;:::-;4615:7;4661:10;4624:11;:25;4636:12;:10;:12::i;:::-;4624:25;;;;;;;;;;;;;;;:34;4650:7;4624:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4592:8;:80::i;:::-;4690:4;4683:11;;4487:215;;;;:::o;15350:38::-;;;:::o;15865:33::-;;;;;;;;;;;;;:::o;15679:24::-;;;;;;;;;;;;;:::o;16583:32::-;;;;:::o;25125:126::-;25191:4;25215:19;:28;25235:7;25215:28;;;;;;;;;;;;;;;;;;;;;;;;;25208:35;;25125:126;;;:::o;15455:68::-;;;;;;;;;;;;;:::o;16405:31::-;;;;:::o;24413:173::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24530:10:::1;;;;;;;;;;;24497:44;;24515:13;24497:44;;;;;;;;;;;;24565:13;24552:10;;:26;;;;;;;;;;;;;;;;;;24413:173:::0;:::o;16445:28::-;;;;:::o;24759:184::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24879:16:::1;;;;;;;;;;;24844:52;;24868:9;24844:52;;;;;;;;;;;;24926:9;24907:16;;:28;;;;;;;;;;;;;;;;;;24759:184:::0;:::o;15945:31::-;;;;;;;;;;;;;:::o;3333:127::-;3407:7;3434:9;:18;3444:7;3434:18;;;;;;;;;;;;;;;;3427:25;;3333:127;;;:::o;16224:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;1018:103::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1083:30:::1;1110:1;1083:18;:30::i;:::-;1018:103::o:0;24951:166::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25064:9:::1;;;;;;;;;;;25033:41;;25050:12;25033:41;;;;;;;;;;;;25097:12;25085:9;;:24;;;;;;;;;;;;;;;;;;24951:166:::0;:::o;20635:121::-;20687:4;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20721:5:::1;20704:14;;:22;;;;;;;;;;;;;;;;;;20744:4;20737:11;;20635:121:::0;:::o;22424:167::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22579:4:::1;22537:31;:39;22569:6;22537:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22424:167:::0;;:::o;20328:255::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20411:13:::1;;;;;;;;;;;20410:14;20402:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20470:4;20454:13;;:20;;;;;;;;;;;;;;;;;;20499:12;20485:11;:26;;;;20536:4;20522:11;;:18;;;;;;;;;;;;;;;;;;20564:11;20551:10;:24;;;;20328:255:::0;:::o;795:87::-;841:7;868:6;;;;;;;;;;;861:13;;795:87;:::o;15648:24::-;;;;;;;;;;;;;:::o;22687:100::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22772:7:::1;22758:11;;:21;;;;;;;;;;;;;;;;;;22687:100:::0;:::o;3004:104::-;3060:13;3093:7;3086:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3004:104;:::o;31213:371::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31309:9:::1;31305:272;31325:7;;:14;;31323:1;:16;31305:272;;;31359:14;31376:7;;31384:1;31376:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31359:27;;31422:4;31404:23;;:6;:23;;;;:62;;;;;31458:8;;;;;;;;;;;31448:18;;:6;:18;;;;31404:62;:115;;;;;31505:13;31487:32;;:6;:32;;;;31404:115;31401:164;;;31555:10;31538:6;:14;31545:6;31538:14;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31401:164;31344:233;31340:3;;;;;:::i;:::-;;;;31305:272;;;;31213:371:::0;;;:::o;23905:304::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24049:13:::1;24041:21;;:4;:21;;;;24019:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;24160:41;24189:4;24195:5;24160:28;:41::i;:::-;23905:304:::0;;:::o;16624:28::-;;;;:::o;16374:24::-;;;;:::o;16699:27::-;;;;:::o;16551:25::-;;;;:::o;4710:413::-;4803:4;4820:24;4847:11;:25;4859:12;:10;:12::i;:::-;4847:25;;;;;;;;;;;;;;;:34;4873:7;4847:34;;;;;;;;;;;;;;;;4820:61;;4920:15;4900:16;:35;;4892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5013:67;5022:12;:10;:12::i;:::-;5036:7;5064:15;5045:16;:34;5013:8;:67::i;:::-;5111:4;5104:11;;;4710:413;;;;:::o;3468:175::-;3554:4;3571:42;3581:12;:10;:12::i;:::-;3595:9;3606:6;3571:9;:42::i;:::-;3631:4;3624:11;;3468:175;;;;:::o;16907:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15905:33::-;;;;;;;;;;;;;:::o;23715:182::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23831:8:::1;23800:19;:28;23820:7;23800:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23871:7;23855:34;;;23880:8;23855:34;;;;;;:::i;:::-;;;;;;;;23715:182:::0;;:::o;16305:25::-;;;;:::o;22160:256::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22300:4:::1;22292;22287:1;22271:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22270:26;;;;:::i;:::-;22269:35;;;;:::i;:::-;22259:6;:45;;22237:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22401:6;22391;:17;;;;:::i;:::-;22379:9;:29;;;;22160:256:::0;:::o;16111:39::-;;;;;;;;;;;;;:::o;15750:35::-;;;;:::o;21372:497::-;21480:4;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21559:6:::1;21554:1;21538:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21537:28;;;;:::i;:::-;21524:9;:41;;21502:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21714:4;21709:1;21693:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21692:26;;;;:::i;:::-;21679:9;:39;;21657:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21830:9;21809:18;:30;;;;21857:4;21850:11;;21372:497:::0;;;:::o;16271:27::-;;;;:::o;3651:151::-;3740:7;3767:11;:18;3779:5;3767:18;;;;;;;;;;;;;;;:27;3786:7;3767:27;;;;;;;;;;;;;;;;3760:34;;3651:151;;;;:::o;15792:33::-;;;;:::o;23249:458::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23442:8:::1;23428:11;:22;;;;23480:13;23461:16;:32;;;;23517:7;23504:10;:20;;;;23555:14;23535:17;:34;;;;23642:17;;23629:10;;23610:16;;23596:11;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;:63;;;;:::i;:::-;23580:13;:79;;;;23695:2;23678:13;;:19;;23670:28;;;::::0;::::1;;23249:458:::0;;;;:::o;20968:135::-;21028:4;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21068:5:::1;21045:20;;:28;;;;;;;;;;;;;;;;;;21091:4;21084:11;;20968:135:::0;:::o;16337:30::-;;;;:::o;21167:135::-;21226:4;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21266:4:::1;21243:20;;:27;;;;;;;;;;;;;;;;;;21289:4;21282:11;;21167:135:::0;:::o;1129:201::-;941:12;:10;:12::i;:::-;930:23;;:7;:5;:7::i;:::-;:23;;;922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1238:1:::1;1218:22;;:8;:22;;;;1210:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1294:28;1313:8;1294:18;:28::i;:::-;1129:201:::0;:::o;16513:31::-;;;;:::o;15832:24::-;;;;:::o;16733:34::-;;;;:::o;15710:31::-;;;;;;;;;;;;;:::o;341:98::-;394:7;421:10;414:17;;341:98;:::o;6878:380::-;7031:1;7014:19;;:5;:19;;;;7006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7112:1;7093:21;;:7;:21;;;;7085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7196:6;7166:11;:18;7178:5;7166:18;;;;;;;;;;;;;;;:27;7185:7;7166:27;;;;;;;;;;;;;;;:36;;;;7234:7;7218:32;;7227:5;7218:32;;;7243:6;7218:32;;;;;;:::i;:::-;;;;;;;;6878:380;;;:::o;25309:5209::-;25457:1;25441:18;;:4;:18;;;;25433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25534:1;25520:16;;:2;:16;;;;25512:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25596:6;:12;25603:4;25596:12;;;;;;;;;;;;;;;;;;;;;;;;;25595:13;25587:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;25656:1;25646:6;:11;25642:93;;;25674:28;25690:4;25696:2;25700:1;25674:15;:28::i;:::-;25717:7;;25642:93;25751:14;;;;;;;;;;;25747:2780;;;25812:7;:5;:7::i;:::-;25804:15;;:4;:15;;;;:49;;;;;25846:7;:5;:7::i;:::-;25840:13;;:2;:13;;;;25804:49;:86;;;;;25888:1;25874:16;;:2;:16;;;;25804:86;:128;;;;;25925:6;25911:21;;:2;:21;;;;25804:128;:158;;;;;25954:8;;;;;;;;;;;25953:9;25804:158;25782:2734;;;26002:13;;;;;;;;;;;25997:223;;26074:19;:25;26094:4;26074:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26103:19;:23;26123:2;26103:23;;;;;;;;;;;;;;;;;;;;;;;;;26074:52;26040:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25997:223;26273:10;;26259:11;;:24;;;;:::i;:::-;26243:12;:40;;:74;;;;;26303:13;26287:30;;:4;:30;;;26243:74;:111;;;;;26346:8;;;;;;;;;;;26340:14;;:2;:14;;;;26243:111;:134;;;;;26372:4;26358:19;;:2;:19;;;;26243:134;:166;;;;;26395:13;26381:28;;:2;:28;;;;26243:166;26240:273;;;26446:4;26433:6;:10;26440:2;26433:10;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;26490:2;26478:15;;;;;;;;;;;;26240:273;26669:20;;;;;;;;;;;26665:641;;;26750:7;:5;:7::i;:::-;26744:13;;:2;:13;;;;:72;;;;;26800:15;26786:30;;:2;:30;;;;26744:72;:129;;;;;26859:13;26845:28;;:2;:28;;;;26744:129;26714:573;;;27037:12;26962:28;:39;26991:9;26962:39;;;;;;;;;;;;;;;;:87;26924:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;27251:12;27209:28;:39;27238:9;27209:39;;;;;;;;;;;;;;;:54;;;;26714:573;26665:641;27380:25;:31;27406:4;27380:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;27437:31;:35;27469:2;27437:35;;;;;;;;;;;;;;;;;;;;;;;;;27436:36;27380:92;27354:1147;;;27559:20;;27549:6;:30;;27515:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27767:9;;27750:13;27760:2;27750:9;:13::i;:::-;27741:6;:22;;;;:::i;:::-;:35;;27707:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27354:1147;;;27945:25;:29;27971:2;27945:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;28000:31;:37;28032:4;28000:37;;;;;;;;;;;;;;;;;;;;;;;;;27999:38;27945:92;27919:582;;;28124:20;;28114:6;:30;;28080:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;27919:582;;;28281:31;:35;28313:2;28281:35;;;;;;;;;;;;;;;;;;;;;;;;;28276:225;;28401:9;;28384:13;28394:2;28384:9;:13::i;:::-;28375:6;:22;;;;:::i;:::-;:35;;28341:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28276:225;27919:582;27354:1147;25782:2734;25747:2780;28539:28;28570:24;28588:4;28570:9;:24::i;:::-;28539:55;;28607:12;28646:18;;28622:20;:42;;28607:57;;28695:7;:35;;;;;28719:11;;;;;;;;;;;28695:35;:61;;;;;28748:8;;;;;;;;;;;28747:9;28695:61;:110;;;;;28774:25;:31;28800:4;28774:31;;;;;;;;;;;;;;;;;;;;;;;;;28773:32;28695:110;:153;;;;;28823:19;:25;28843:4;28823:25;;;;;;;;;;;;;;;;;;;;;;;;;28822:26;28695:153;:194;;;;;28866:19;:23;28886:2;28866:23;;;;;;;;;;;;;;;;;;;;;;;;;28865:24;28695:194;28677:326;;;28927:4;28916:8;;:15;;;;;;;;;;;;;;;;;;28948:10;:8;:10::i;:::-;28986:5;28975:8;;:16;;;;;;;;;;;;;;;;;;28677:326;29015:12;29031:8;;;;;;;;;;;29030:9;29015:24;;29141:19;:25;29161:4;29141:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29170:19;:23;29190:2;29170:23;;;;;;;;;;;;;;;;;;;;;;;;;29141:52;29137:100;;;29220:5;29210:15;;29137:100;29249:12;29354:7;29350:1115;;;29406:25;:29;29432:2;29406:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29455:1;29439:13;;:17;29406:50;29402:914;;;29484:34;29514:3;29484:25;29495:13;;29484:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29477:41;;29587:13;;29567:16;;29560:4;:23;;;;:::i;:::-;29559:41;;;;:::i;:::-;29537:18;;:63;;;;;;;:::i;:::-;;;;;;;;29657:13;;29643:10;;29636:4;:17;;;;:::i;:::-;29635:35;;;;:::i;:::-;29619:12;;:51;;;;;;;:::i;:::-;;;;;;;;29729:13;;29714:11;;29707:4;:18;;;;:::i;:::-;29706:36;;;;:::i;:::-;29689:13;;:53;;;;;;;:::i;:::-;;;;;;;;29813:13;;29792:17;;29785:4;:24;;;;:::i;:::-;29784:42;;;;:::i;:::-;29761:19;;:65;;;;;;;:::i;:::-;;;;;;;;29402:914;;;29888:25;:31;29914:4;29888:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29938:1;29923:12;;:16;29888:51;29884:432;;;29967:33;29996:3;29967:24;29978:12;;29967:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29960:40;;30068:12;;30049:15;;30042:4;:22;;;;:::i;:::-;30041:39;;;;:::i;:::-;30019:18;;:61;;;;;;;:::i;:::-;;;;;;;;30136:12;;30123:9;;30116:4;:16;;;;:::i;:::-;30115:33;;;;:::i;:::-;30099:12;;:49;;;;;;;:::i;:::-;;;;;;;;30206:12;;30192:10;;30185:4;:17;;;;:::i;:::-;30184:34;;;;:::i;:::-;30167:13;;:51;;;;;;;:::i;:::-;;;;;;;;30288:12;;30268:16;;30261:4;:23;;;;:::i;:::-;30260:40;;;;:::i;:::-;30237:19;;:63;;;;;;;:::i;:::-;;;;;;;;29884:432;29402:914;30343:1;30336:4;:8;30332:91;;;30365:42;30381:4;30395;30402;30365:15;:42::i;:::-;30332:91;30449:4;30439:14;;;;;:::i;:::-;;;29350:1115;30477:33;30493:4;30499:2;30503:6;30477:15;:33::i;:::-;25422:5096;;;;25309:5209;;;;:::o;1338:191::-;1412:16;1431:6;;;;;;;;;;;1412:25;;1457:8;1448:6;;:17;;;;;;;;;;;;;;;;;;1512:8;1481:40;;1502:8;1481:40;;;;;;;;;;;;1401:128;1338:191;:::o;24217:188::-;24334:5;24300:25;:31;24326:4;24300:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24391:5;24357:40;;24385:4;24357:40;;;;;;;;;;;;24217:188;;:::o;5131:733::-;5289:1;5271:20;;:6;:20;;;;5263:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5373:1;5352:23;;:9;:23;;;;5344:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5428:47;5449:6;5457:9;5468:6;5428:20;:47::i;:::-;5488:21;5512:9;:17;5522:6;5512:17;;;;;;;;;;;;;;;;5488:41;;5565:6;5548:13;:23;;5540:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5686:6;5670:13;:22;5650:9;:17;5660:6;5650:17;;;;;;;;;;;;;;;:42;;;;5738:6;5714:9;:20;5724:9;5714:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5779:9;5762:35;;5771:6;5762:35;;;5790:6;5762:35;;;;;;:::i;:::-;;;;;;;;5810:46;5830:6;5838:9;5849:6;5810:19;:46::i;:::-;5252:612;5131:733;;;:::o;32115:1918::-;32154:23;32180:24;32198:4;32180:9;:24::i;:::-;32154:50;;32215:25;32334:19;;32306:12;;32277:13;;32243:18;;:47;;;;:::i;:::-;:75;;;;:::i;:::-;:110;;;;:::i;:::-;32215:138;;32364:12;32412:1;32393:15;:20;:46;;;;32438:1;32417:17;:22;32393:46;32389:85;;;32456:7;;;;;32389:85;32529:2;32508:18;;:23;;;;:::i;:::-;32490:15;:41;32486:115;;;32587:2;32566:18;;:23;;;;:::i;:::-;32548:41;;32486:115;32662:23;32749:1;32729:17;32707:18;;32689:15;:36;;;;:::i;:::-;32688:58;;;;:::i;:::-;:62;;;;:::i;:::-;32662:88;;32761:26;32790:36;32810:15;32790;:19;;:36;;;;:::i;:::-;32761:65;;32839:25;32867:21;32839:49;;32901:36;32918:18;32901:16;:36::i;:::-;32950:18;32971:44;32997:17;32971:21;:25;;:44;;;;:::i;:::-;32950:65;;33028:18;33049:52;33083:17;33049:29;33064:13;;33049:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;33028:73;;33112:17;33132:51;33165:17;33132:28;33147:12;;33132:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;33112:71;;33194:24;33221:58;33261:17;33221:35;33236:19;;33221:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;33194:85;;33292:23;33356:16;33344:9;33331:10;33318;:23;;;;:::i;:::-;:35;;;;:::i;:::-;:54;;;;:::i;:::-;33292:80;;33406:1;33385:18;:22;;;;33434:1;33418:13;:17;;;;33461:1;33446:12;:16;;;;33495:1;33473:19;:23;;;;33531:9;;;;;;;;;;;33523:23;;33554:9;33523:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33509:59;;;;;33603:1;33585:15;:19;:42;;;;;33626:1;33608:15;:19;33585:42;33581:278;;;33644:46;33657:15;33674;33644:12;:46::i;:::-;33710:137;33743:18;33780:15;33814:18;;33710:137;;;;;;;;:::i;:::-;;;;;;;;33581:278;33891:16;;;;;;;;;;;33883:30;;33921:16;33883:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33869:73;;;;;33975:10;;;;;;;;;;;33967:24;;33999:21;33967:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33953:72;;;;;32143:1890;;;;;;;;;;;32115:1918;:::o;8884:98::-;8942:7;8973:1;8969;:5;;;;:::i;:::-;8962:12;;8884:98;;;;:::o;8990:::-;9048:7;9079:1;9075;:5;;;;:::i;:::-;9068:12;;8990:98;;;;:::o;7266:125::-;;;;:::o;7399:124::-;;;;:::o;8778:98::-;8836:7;8867:1;8863;:5;;;;:::i;:::-;8856:12;;8778:98;;;;:::o;30526:589::-;30652:21;30690:1;30676:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30652:40;;30721:4;30703;30708:1;30703:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30747:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30737:4;30742:1;30737:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30782:62;30799:4;30814:15;30832:11;30782:8;:62::i;:::-;30883:15;:66;;;30964:11;30990:1;31034:4;31061;31081:15;30883:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30581:534;30526:589;:::o;31592:515::-;31740:62;31757:4;31772:15;31790:11;31740:8;:62::i;:::-;31845:15;:31;;;31884:9;31917:4;31937:11;31963:1;32006;32049:9;;;;;;;;;;;32073:15;31845:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31592:515;;:::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;1601:117;1710:1;1707;1700: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:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:765::-;6557:6;6565;6573;6581;6630:3;6618:9;6609:7;6605:23;6601:33;6598:120;;;6637:79;;:::i;:::-;6598:120;6757:1;6782:53;6827:7;6818:6;6807:9;6803:22;6782:53;:::i;:::-;6772:63;;6728:117;6884:2;6910:53;6955:7;6946:6;6935:9;6931:22;6910:53;:::i;:::-;6900:63;;6855:118;7012:2;7038:53;7083:7;7074:6;7063:9;7059:22;7038:53;:::i;:::-;7028:63;;6983:118;7140:2;7166:53;7211:7;7202:6;7191:9;7187:22;7166:53;:::i;:::-;7156:63;;7111:118;6471:765;;;;;;;:::o;7242:86::-;7277:7;7317:4;7310:5;7306:16;7295:27;;7242:86;;;:::o;7334:112::-;7417:22;7433:5;7417:22;:::i;:::-;7412:3;7405:35;7334:112;;:::o;7452:214::-;7541:4;7579:2;7568:9;7564:18;7556:26;;7592:67;7656:1;7645:9;7641:17;7632:6;7592:67;:::i;:::-;7452:214;;;;:::o;7672:116::-;7742:21;7757:5;7742:21;:::i;:::-;7735:5;7732:32;7722:60;;7778:1;7775;7768:12;7722:60;7672:116;:::o;7794:133::-;7837:5;7875:6;7862:20;7853:29;;7891:30;7915:5;7891:30;:::i;:::-;7794:133;;;;:::o;7933:468::-;7998:6;8006;8055:2;8043:9;8034:7;8030:23;8026:32;8023:119;;;8061:79;;:::i;:::-;8023:119;8181:1;8206:53;8251:7;8242:6;8231:9;8227:22;8206:53;:::i;:::-;8196:63;;8152:117;8308:2;8334:50;8376:7;8367:6;8356:9;8352:22;8334:50;:::i;:::-;8324:60;;8279:115;7933:468;;;;;:::o;8407:323::-;8463:6;8512:2;8500:9;8491:7;8487:23;8483:32;8480:119;;;8518:79;;:::i;:::-;8480:119;8638:1;8663:50;8705:7;8696:6;8685:9;8681:22;8663:50;:::i;:::-;8653:60;;8609:114;8407:323;;;;:::o;8736:117::-;8845:1;8842;8835:12;8859:117;8968:1;8965;8958:12;8982:117;9091:1;9088;9081:12;9122:568;9195:8;9205:6;9255:3;9248:4;9240:6;9236:17;9232:27;9222:122;;9263:79;;:::i;:::-;9222:122;9376:6;9363:20;9353:30;;9406:18;9398:6;9395:30;9392:117;;;9428:79;;:::i;:::-;9392:117;9542:4;9534:6;9530:17;9518:29;;9596:3;9588:4;9580:6;9576:17;9566:8;9562:32;9559:41;9556:128;;;9603:79;;:::i;:::-;9556:128;9122:568;;;;;:::o;9696:698::-;9788:6;9796;9804;9853:2;9841:9;9832:7;9828:23;9824:32;9821:119;;;9859:79;;:::i;:::-;9821:119;10007:1;9996:9;9992:17;9979:31;10037:18;10029:6;10026:30;10023:117;;;10059:79;;:::i;:::-;10023:117;10172:80;10244:7;10235:6;10224:9;10220:22;10172:80;:::i;:::-;10154:98;;;;9950:312;10301:2;10327:50;10369:7;10360:6;10349:9;10345:22;10327:50;:::i;:::-;10317:60;;10272:115;9696:698;;;;;:::o;10400:474::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10651:1;10676:53;10721:7;10712:6;10701:9;10697:22;10676:53;:::i;:::-;10666:63;;10622:117;10778:2;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10749:118;10400:474;;;;;:::o;10880:180::-;10928:77;10925:1;10918:88;11025:4;11022:1;11015:15;11049:4;11046:1;11039:15;11066:320;11110:6;11147:1;11141:4;11137:12;11127:22;;11194:1;11188:4;11184:12;11215:18;11205:81;;11271:4;11263:6;11259:17;11249:27;;11205:81;11333:2;11325:6;11322:14;11302:18;11299:38;11296:84;;;11352:18;;:::i;:::-;11296:84;11117:269;11066:320;;;:::o;11392:182::-;11532:34;11528:1;11520:6;11516:14;11509:58;11392:182;:::o;11580:366::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:419::-;12118:4;12156:2;12145:9;12141:18;12133:26;;12205:9;12199:4;12195:20;12191:1;12180:9;12176:17;12169:47;12233:131;12359:4;12233:131;:::i;:::-;12225:139;;11952:419;;;:::o;12377:180::-;12425:77;12422:1;12415:88;12522:4;12519:1;12512:15;12546:4;12543:1;12536:15;12563:348;12603:7;12626:20;12644:1;12626:20;:::i;:::-;12621:25;;12660:20;12678:1;12660:20;:::i;:::-;12655:25;;12848:1;12780:66;12776:74;12773:1;12770:81;12765:1;12758:9;12751:17;12747:105;12744:131;;;12855:18;;:::i;:::-;12744:131;12903:1;12900;12896:9;12885:20;;12563:348;;;;:::o;12917:180::-;12965:77;12962:1;12955:88;13062:4;13059:1;13052:15;13086:4;13083:1;13076:15;13103:185;13143:1;13160:20;13178:1;13160:20;:::i;:::-;13155:25;;13194:20;13212:1;13194:20;:::i;:::-;13189:25;;13233:1;13223:35;;13238:18;;:::i;:::-;13223:35;13280:1;13277;13273:9;13268:14;;13103:185;;;;:::o;13294:234::-;13434:34;13430:1;13422:6;13418:14;13411:58;13503:17;13498:2;13490:6;13486:15;13479:42;13294:234;:::o;13534:366::-;13676:3;13697:67;13761:2;13756:3;13697:67;:::i;:::-;13690:74;;13773:93;13862:3;13773:93;:::i;:::-;13891:2;13886:3;13882:12;13875:19;;13534:366;;;:::o;13906:419::-;14072:4;14110:2;14099:9;14095:18;14087:26;;14159:9;14153:4;14149:20;14145:1;14134:9;14130:17;14123:47;14187:131;14313:4;14187:131;:::i;:::-;14179:139;;13906:419;;;:::o;14331:227::-;14471:34;14467:1;14459:6;14455:14;14448:58;14540:10;14535:2;14527:6;14523:15;14516:35;14331:227;:::o;14564:366::-;14706:3;14727:67;14791:2;14786:3;14727:67;:::i;:::-;14720:74;;14803:93;14892:3;14803:93;:::i;:::-;14921:2;14916:3;14912:12;14905:19;;14564:366;;;:::o;14936:419::-;15102:4;15140:2;15129:9;15125:18;15117:26;;15189:9;15183:4;15179:20;15175:1;15164:9;15160:17;15153:47;15217:131;15343:4;15217:131;:::i;:::-;15209:139;;14936:419;;;:::o;15361:305::-;15401:3;15420:20;15438:1;15420:20;:::i;:::-;15415:25;;15454:20;15472:1;15454:20;:::i;:::-;15449:25;;15608:1;15540:66;15536:74;15533:1;15530:81;15527:107;;;15614:18;;:::i;:::-;15527:107;15658:1;15655;15651:9;15644:16;;15361:305;;;;:::o;15672:164::-;15812:16;15808:1;15800:6;15796:14;15789:40;15672:164;:::o;15842:366::-;15984:3;16005:67;16069:2;16064:3;16005:67;:::i;:::-;15998:74;;16081:93;16170:3;16081:93;:::i;:::-;16199:2;16194:3;16190:12;16183:19;;15842:366;;;:::o;16214:419::-;16380:4;16418:2;16407:9;16403:18;16395:26;;16467:9;16461:4;16457:20;16453:1;16442:9;16438:17;16431:47;16495:131;16621:4;16495:131;:::i;:::-;16487:139;;16214:419;;;:::o;16639:180::-;16687:77;16684:1;16677:88;16784:4;16781:1;16774:15;16808:4;16805:1;16798:15;16825:233;16864:3;16887:24;16905:5;16887:24;:::i;:::-;16878:33;;16933:66;16926:5;16923:77;16920:103;;;17003:18;;:::i;:::-;16920:103;17050:1;17043:5;17039:13;17032:20;;16825:233;;;:::o;17064:244::-;17204:34;17200:1;17192:6;17188:14;17181:58;17273:27;17268:2;17260:6;17256:15;17249:52;17064:244;:::o;17314:366::-;17456:3;17477:67;17541:2;17536:3;17477:67;:::i;:::-;17470:74;;17553:93;17642:3;17553:93;:::i;:::-;17671:2;17666:3;17662:12;17655:19;;17314:366;;;:::o;17686:419::-;17852:4;17890:2;17879:9;17875:18;17867:26;;17939:9;17933:4;17929:20;17925:1;17914:9;17910:17;17903:47;17967:131;18093:4;17967:131;:::i;:::-;17959:139;;17686:419;;;:::o;18111:224::-;18251:34;18247:1;18239:6;18235:14;18228:58;18320:7;18315:2;18307:6;18303:15;18296:32;18111:224;:::o;18341:366::-;18483:3;18504:67;18568:2;18563:3;18504:67;:::i;:::-;18497:74;;18580:93;18669:3;18580:93;:::i;:::-;18698:2;18693:3;18689:12;18682:19;;18341:366;;;:::o;18713:419::-;18879:4;18917:2;18906:9;18902:18;18894:26;;18966:9;18960:4;18956:20;18952:1;18941:9;18937:17;18930:47;18994:131;19120:4;18994:131;:::i;:::-;18986:139;;18713:419;;;:::o;19138:223::-;19278:34;19274:1;19266:6;19262:14;19255:58;19347:6;19342:2;19334:6;19330:15;19323:31;19138:223;:::o;19367:366::-;19509:3;19530:67;19594:2;19589:3;19530:67;:::i;:::-;19523:74;;19606:93;19695:3;19606:93;:::i;:::-;19724:2;19719:3;19715:12;19708:19;;19367:366;;;:::o;19739:419::-;19905:4;19943:2;19932:9;19928:18;19920:26;;19992:9;19986:4;19982:20;19978:1;19967:9;19963:17;19956:47;20020:131;20146:4;20020:131;:::i;:::-;20012:139;;19739:419;;;:::o;20164:240::-;20304:34;20300:1;20292:6;20288:14;20281:58;20373:23;20368:2;20360:6;20356:15;20349:48;20164:240;:::o;20410:366::-;20552:3;20573:67;20637:2;20632:3;20573:67;:::i;:::-;20566:74;;20649:93;20738:3;20649:93;:::i;:::-;20767:2;20762:3;20758:12;20751:19;;20410:366;;;:::o;20782:419::-;20948:4;20986:2;20975:9;20971:18;20963:26;;21035:9;21029:4;21025:20;21021:1;21010:9;21006:17;20999:47;21063:131;21189:4;21063:131;:::i;:::-;21055:139;;20782:419;;;:::o;21207:239::-;21347:34;21343:1;21335:6;21331:14;21324:58;21416:22;21411:2;21403:6;21399:15;21392:47;21207:239;:::o;21452:366::-;21594:3;21615:67;21679:2;21674:3;21615:67;:::i;:::-;21608:74;;21691:93;21780:3;21691:93;:::i;:::-;21809:2;21804:3;21800:12;21793:19;;21452:366;;;:::o;21824:419::-;21990:4;22028:2;22017:9;22013:18;22005:26;;22077:9;22071:4;22067:20;22063:1;22052:9;22048:17;22041:47;22105:131;22231:4;22105:131;:::i;:::-;22097:139;;21824:419;;;:::o;22249:225::-;22389:34;22385:1;22377:6;22373:14;22366:58;22458:8;22453:2;22445:6;22441:15;22434:33;22249:225;:::o;22480:366::-;22622:3;22643:67;22707:2;22702:3;22643:67;:::i;:::-;22636:74;;22719:93;22808:3;22719:93;:::i;:::-;22837:2;22832:3;22828:12;22821:19;;22480:366;;;:::o;22852:419::-;23018:4;23056:2;23045:9;23041:18;23033:26;;23105:9;23099:4;23095:20;23091:1;23080:9;23076:17;23069:47;23133:131;23259:4;23133:131;:::i;:::-;23125:139;;22852:419;;;:::o;23277:223::-;23417:34;23413:1;23405:6;23401:14;23394:58;23486:6;23481:2;23473:6;23469:15;23462:31;23277:223;:::o;23506:366::-;23648:3;23669:67;23733:2;23728:3;23669:67;:::i;:::-;23662:74;;23745:93;23834:3;23745:93;:::i;:::-;23863:2;23858:3;23854:12;23847:19;;23506:366;;;:::o;23878:419::-;24044:4;24082:2;24071:9;24067:18;24059:26;;24131:9;24125:4;24121:20;24117:1;24106:9;24102:17;24095:47;24159:131;24285:4;24159:131;:::i;:::-;24151:139;;23878:419;;;:::o;24303:221::-;24443:34;24439:1;24431:6;24427:14;24420:58;24512:4;24507:2;24499:6;24495:15;24488:29;24303:221;:::o;24530:366::-;24672:3;24693:67;24757:2;24752:3;24693:67;:::i;:::-;24686:74;;24769:93;24858:3;24769:93;:::i;:::-;24887:2;24882:3;24878:12;24871:19;;24530:366;;;:::o;24902:419::-;25068:4;25106:2;25095:9;25091:18;25083:26;;25155:9;25149:4;25145:20;25141:1;25130:9;25126:17;25119:47;25183:131;25309:4;25183:131;:::i;:::-;25175:139;;24902:419;;;:::o;25327:224::-;25467:34;25463:1;25455:6;25451:14;25444:58;25536:7;25531:2;25523:6;25519:15;25512:32;25327:224;:::o;25557:366::-;25699:3;25720:67;25784:2;25779:3;25720:67;:::i;:::-;25713:74;;25796:93;25885:3;25796:93;:::i;:::-;25914:2;25909:3;25905:12;25898:19;;25557:366;;;:::o;25929:419::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:222::-;26494:34;26490:1;26482:6;26478:14;26471:58;26563:5;26558:2;26550:6;26546:15;26539:30;26354:222;:::o;26582:366::-;26724:3;26745:67;26809:2;26804:3;26745:67;:::i;:::-;26738:74;;26821:93;26910:3;26821:93;:::i;:::-;26939:2;26934:3;26930:12;26923:19;;26582:366;;;:::o;26954:419::-;27120:4;27158:2;27147:9;27143:18;27135:26;;27207:9;27201:4;27197:20;27193:1;27182:9;27178:17;27171:47;27235:131;27361:4;27235:131;:::i;:::-;27227:139;;26954:419;;;:::o;27379:166::-;27519:18;27515:1;27507:6;27503:14;27496:42;27379:166;:::o;27551:366::-;27693:3;27714:67;27778:2;27773:3;27714:67;:::i;:::-;27707:74;;27790:93;27879:3;27790:93;:::i;:::-;27908:2;27903:3;27899:12;27892:19;;27551:366;;;:::o;27923:419::-;28089:4;28127:2;28116:9;28112:18;28104:26;;28176:9;28170:4;28166:20;28162:1;28151:9;28147:17;28140:47;28204:131;28330:4;28204:131;:::i;:::-;28196:139;;27923:419;;;:::o;28348:172::-;28488:24;28484:1;28476:6;28472:14;28465:48;28348:172;:::o;28526:366::-;28668:3;28689:67;28753:2;28748:3;28689:67;:::i;:::-;28682:74;;28765:93;28854:3;28765:93;:::i;:::-;28883:2;28878:3;28874:12;28867:19;;28526:366;;;:::o;28898:419::-;29064:4;29102:2;29091:9;29087:18;29079:26;;29151:9;29145:4;29141:20;29137:1;29126:9;29122:17;29115:47;29179:131;29305:4;29179:131;:::i;:::-;29171:139;;28898:419;;;:::o;29323:297::-;29463:34;29459:1;29451:6;29447:14;29440:58;29532:34;29527:2;29519:6;29515:15;29508:59;29601:11;29596:2;29588:6;29584:15;29577:36;29323:297;:::o;29626:366::-;29768:3;29789:67;29853:2;29848:3;29789:67;:::i;:::-;29782:74;;29865:93;29954:3;29865:93;:::i;:::-;29983:2;29978:3;29974:12;29967:19;;29626:366;;;:::o;29998:419::-;30164:4;30202:2;30191:9;30187:18;30179:26;;30251:9;30245:4;30241:20;30237:1;30226:9;30222:17;30215:47;30279:131;30405:4;30279:131;:::i;:::-;30271:139;;29998:419;;;:::o;30423:240::-;30563:34;30559:1;30551:6;30547:14;30540:58;30632:23;30627:2;30619:6;30615:15;30608:48;30423:240;:::o;30669:366::-;30811:3;30832:67;30896:2;30891:3;30832:67;:::i;:::-;30825:74;;30908:93;30997:3;30908:93;:::i;:::-;31026:2;31021:3;31017:12;31010:19;;30669:366;;;:::o;31041:419::-;31207:4;31245:2;31234:9;31230:18;31222:26;;31294:9;31288:4;31284:20;31280:1;31269:9;31265:17;31258:47;31322:131;31448:4;31322:131;:::i;:::-;31314:139;;31041:419;;;:::o;31466:169::-;31606:21;31602:1;31594:6;31590:14;31583:45;31466:169;:::o;31641:366::-;31783:3;31804:67;31868:2;31863:3;31804:67;:::i;:::-;31797:74;;31880:93;31969:3;31880:93;:::i;:::-;31998:2;31993:3;31989:12;31982:19;;31641:366;;;:::o;32013:419::-;32179:4;32217:2;32206:9;32202:18;32194:26;;32266:9;32260:4;32256:20;32252:1;32241:9;32237:17;32230:47;32294:131;32420:4;32294:131;:::i;:::-;32286:139;;32013:419;;;:::o;32438:241::-;32578:34;32574:1;32566:6;32562:14;32555:58;32647:24;32642:2;32634:6;32630:15;32623:49;32438:241;:::o;32685:366::-;32827:3;32848:67;32912:2;32907:3;32848:67;:::i;:::-;32841:74;;32924:93;33013:3;32924:93;:::i;:::-;33042:2;33037:3;33033:12;33026:19;;32685:366;;;:::o;33057:419::-;33223:4;33261:2;33250:9;33246:18;33238:26;;33310:9;33304:4;33300:20;33296:1;33285:9;33281:17;33274:47;33338:131;33464:4;33338:131;:::i;:::-;33330:139;;33057:419;;;:::o;33482:191::-;33522:4;33542:20;33560:1;33542:20;:::i;:::-;33537:25;;33576:20;33594:1;33576:20;:::i;:::-;33571:25;;33615:1;33612;33609:8;33606:34;;;33620:18;;:::i;:::-;33606:34;33665:1;33662;33658:9;33650:17;;33482:191;;;;:::o;33679:225::-;33819:34;33815:1;33807:6;33803:14;33796:58;33888:8;33883:2;33875:6;33871:15;33864:33;33679:225;:::o;33910:366::-;34052:3;34073:67;34137:2;34132:3;34073:67;:::i;:::-;34066:74;;34149:93;34238:3;34149:93;:::i;:::-;34267:2;34262:3;34258:12;34251:19;;33910:366;;;:::o;34282:419::-;34448:4;34486:2;34475:9;34471:18;34463:26;;34535:9;34529:4;34525:20;34521:1;34510:9;34506:17;34499:47;34563:131;34689:4;34563:131;:::i;:::-;34555:139;;34282:419;;;:::o;34707:147::-;34808:11;34845:3;34830:18;;34707:147;;;;:::o;34860:114::-;;:::o;34980:398::-;35139:3;35160:83;35241:1;35236:3;35160:83;:::i;:::-;35153:90;;35252:93;35341:3;35252:93;:::i;:::-;35370:1;35365:3;35361:11;35354:18;;34980:398;;;:::o;35384:379::-;35568:3;35590:147;35733:3;35590:147;:::i;:::-;35583:154;;35754:3;35747:10;;35384:379;;;:::o;35769:442::-;35918:4;35956:2;35945:9;35941:18;35933:26;;35969:71;36037:1;36026:9;36022:17;36013:6;35969:71;:::i;:::-;36050:72;36118:2;36107:9;36103:18;36094:6;36050:72;:::i;:::-;36132;36200:2;36189:9;36185:18;36176:6;36132:72;:::i;:::-;35769:442;;;;;;:::o;36217:180::-;36265:77;36262:1;36255:88;36362:4;36359:1;36352:15;36386:4;36383:1;36376:15;36403:143;36460:5;36491:6;36485:13;36476:22;;36507:33;36534:5;36507:33;:::i;:::-;36403:143;;;;:::o;36552:351::-;36622:6;36671:2;36659:9;36650:7;36646:23;36642:32;36639:119;;;36677:79;;:::i;:::-;36639:119;36797:1;36822:64;36878:7;36869:6;36858:9;36854:22;36822:64;:::i;:::-;36812:74;;36768:128;36552:351;;;;:::o;36909:85::-;36954:7;36983:5;36972:16;;36909:85;;;:::o;37000:158::-;37058:9;37091:61;37109:42;37118:32;37144:5;37118:32;:::i;:::-;37109:42;:::i;:::-;37091:61;:::i;:::-;37078:74;;37000:158;;;:::o;37164:147::-;37259:45;37298:5;37259:45;:::i;:::-;37254:3;37247:58;37164:147;;:::o;37317:114::-;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:807::-;40037:4;40075:3;40064:9;40060:19;40052:27;;40089:71;40157:1;40146:9;40142:17;40133:6;40089:71;:::i;:::-;40170:72;40238:2;40227:9;40223:18;40214:6;40170:72;:::i;:::-;40252:80;40328:2;40317:9;40313:18;40304:6;40252:80;:::i;:::-;40342;40418:2;40407:9;40403:18;40394:6;40342:80;:::i;:::-;40432:73;40500:3;40489:9;40485:19;40476:6;40432:73;:::i;:::-;40515;40583:3;40572:9;40568:19;40559:6;40515:73;:::i;:::-;39788:807;;;;;;;;;:::o;40601:143::-;40658:5;40689:6;40683:13;40674:22;;40705:33;40732:5;40705:33;:::i;:::-;40601:143;;;;:::o;40750:663::-;40838:6;40846;40854;40903:2;40891:9;40882:7;40878:23;40874:32;40871:119;;;40909:79;;:::i;:::-;40871:119;41029:1;41054:64;41110:7;41101:6;41090:9;41086:22;41054:64;:::i;:::-;41044:74;;41000:128;41167:2;41193:64;41249:7;41240:6;41229:9;41225:22;41193:64;:::i;:::-;41183:74;;41138:129;41306:2;41332:64;41388:7;41379:6;41368:9;41364:22;41332:64;:::i;:::-;41322:74;;41277:129;40750:663;;;;;:::o

Swarm Source

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