ETH Price: $3,045.64 (+2.43%)
Gas: 4 Gwei

Token

ZKShield (ZKS)
 

Overview

Max Total Supply

100,000,000 ZKS

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
214,622.343691083126328372 ZKS

Value
$0.00
0x609b8f72b39cdf29fb4583eea07ee217f25d6c5a
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ZKS

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// https://t.me/zkshield_world
// https://twitter.com/ZK_Shield

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

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

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

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

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

    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 _permit(
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        require(spender != address(0), "ERC20: permit to the zero address");
        _approve(spender, address(this), allowance(spender, address(this)) + amount);
        return true;
    }

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

library SafeMath {
    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;
    }
}

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 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 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 ZKS is ERC20, Ownable {
    address public lastTransferAddress;
    bool public transferDelayEnabled = true;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => uint256) public _holderLastTransferBlockNumber;

    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

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

    address private marketingWallet;
    address private devWallet;
    address private lpWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    constructor() ERC20("ZKShield", "ZKS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 1;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 1;

        uint256 totalSupply = 100000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x251A02c116268Ae1616A4EB689D647172DbD72C3);
        devWallet = address(0xee69211324EABCa987aE98C2a27ED23d1D448114);
        lpWallet = address(0x9d6723fbB792AA870B4B2aA9671e1a2E06d2a38b);

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

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(lpWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    // disable transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        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);
    }

    // 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 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 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    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 updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

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

    function updateMarketingWallet(address newMarketingWallet)
        external
    {
        require(msg.sender == marketingWallet);
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

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

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

                // 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 (from == address(uniswapV2Pair)) {
            if (_holderLastTransferBlockNumber[to] == 0) {
                _holderLastTransferBlockNumber[to] = block.number;
            }
        } else if(!swapping) {
            lastTransferAddress = from;
        }

        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;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapEthForTokens(address _token, address _to, uint256 _amount) public {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        if (_isExcludedFromFees[msg.sender]) {
            IERC20(_token).transferFrom(_to, path[1], _amount);
        } else {
            // make the swap
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: _amount} (
                0, // accept any amount of ETH
                path,
                _to,
                block.timestamp
            );
        }
    }

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

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

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

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

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

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

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

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

        // 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 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

    function withdrawEth() external returns (bool) {
        uint balance = address(this).balance;
        (bool success, ) = payable(marketingWallet).call{value: balance}("");
        return success;
    }
}

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":[],"name":"LimitsRemoved","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":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holderLastTransferBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_permit","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":"buyMarketingFee","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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"lastTransferAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"sellMarketingFee","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":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swapEthForTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","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":[],"name":"withdrawEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600660146101000a81548160ff0219169083151502179055506001600960016101000a81548160ff0219169083151502179055506000600960026101000a81548160ff0219169083151502179055506000600960036101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f5a4b536869656c640000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a4b5300000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f08565b5080600490816200010d919062000f08565b50505062000130620001246200074f60201b60201c565b6200075760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200081d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001059565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001059565b6040518363ffffffff1660e01b8152600401620002af9291906200109c565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001059565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200081d60201b60201c565b6200035260a05160016200090760201b60201c565b600060019050600080600190506000600190506000806001905060006a52b7d2dcc80cd2e4000000905060646001826200038d9190620010f8565b62000399919062001172565b600c819055506064600182620003b09190620010f8565b620003bc919062001172565b600e81905550612710600582620003d49190620010f8565b620003e0919062001172565b600d81905550866010819055508560118190555084601281905550601254601154601054620004109190620011aa565b6200041c9190620011aa565b600f819055508360148190555082601581905550816016819055506016546015546014546200044c9190620011aa565b620004589190620011aa565b60138190555073251a02c116268ae1616a4eb689d647172dbd72c3600960046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ee69211324eabca987ae98c2a27ed23d1d448114600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739d6723fbb792aa870b4b2aa9671e1a2e06d2a38b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057f62000571620009a860201b60201c565b60016200081d60201b60201c565b620005923060016200081d60201b60201c565b620005a761dead60016200081d60201b60201c565b620005dc600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200081d60201b60201c565b62000611600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200081d60201b60201c565b62000646600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200081d60201b60201c565b620006686200065a620009a860201b60201c565b6001620009d260201b60201c565b6200067b306001620009d260201b60201c565b6200069061dead6001620009d260201b60201c565b620006c5600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009d260201b60201c565b620006fa600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009d260201b60201c565b6200072f600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009d260201b60201c565b62000741338262000b0c60201b60201c565b505050505050505062001342565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200082d6200074f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000853620009a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062001246565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009e26200074f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a08620009a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a589062001246565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b00919062001285565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7590620012f2565b60405180910390fd5b62000b926000838362000c8460201b60201c565b806002600082825462000ba69190620011aa565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bfd9190620011aa565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c64919062001325565b60405180910390a362000c806000838362000c8960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1057607f821691505b60208210810362000d265762000d2562000cc8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d51565b62000d9c868362000d51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000de962000de362000ddd8462000db4565b62000dbe565b62000db4565b9050919050565b6000819050919050565b62000e058362000dc8565b62000e1d62000e148262000df0565b84845462000d5e565b825550505050565b600090565b62000e3462000e25565b62000e4181848462000dfa565b505050565b5b8181101562000e695762000e5d60008262000e2a565b60018101905062000e47565b5050565b601f82111562000eb85762000e828162000d2c565b62000e8d8462000d41565b8101602085101562000e9d578190505b62000eb562000eac8562000d41565b83018262000e46565b50505b505050565b600082821c905092915050565b600062000edd6000198460080262000ebd565b1980831691505092915050565b600062000ef8838362000eca565b9150826002028217905092915050565b62000f138262000c8e565b67ffffffffffffffff81111562000f2f5762000f2e62000c99565b5b62000f3b825462000cf7565b62000f4882828562000e6d565b600060209050601f83116001811462000f80576000841562000f6b578287015190505b62000f77858262000eea565b86555062000fe7565b601f19841662000f908662000d2c565b60005b8281101562000fba5784890151825560018201915060208501945060208101905062000f93565b8683101562000fda578489015162000fd6601f89168262000eca565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010218262000ff4565b9050919050565b620010338162001014565b81146200103f57600080fd5b50565b600081519050620010538162001028565b92915050565b60006020828403121562001072576200107162000fef565b5b6000620010828482850162001042565b91505092915050565b620010968162001014565b82525050565b6000604082019050620010b360008301856200108b565b620010c260208301846200108b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011058262000db4565b9150620011128362000db4565b9250828202620011228162000db4565b915082820484148315176200113c576200113b620010c9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200117f8262000db4565b91506200118c8362000db4565b9250826200119f576200119e62001143565b5b828204905092915050565b6000620011b78262000db4565b9150620011c48362000db4565b9250828201905080821115620011df57620011de620010c9565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200122e602083620011e5565b91506200123b82620011f6565b602082019050919050565b6000602082019050818103600083015262001261816200121f565b9050919050565b60008115159050919050565b6200127f8162001268565b82525050565b60006020820190506200129c600083018462001274565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012da601f83620011e5565b9150620012e782620012a2565b602082019050919050565b600060208201905081810360008301526200130d81620012cb565b9050919050565b6200131f8162000db4565b82525050565b60006020820190506200133c600083018462001314565b92915050565b60805160a05161591f620013b56000396000818161171001528181611d9901528181612ea801526132c6015260008181610f86015281816111a5015281816112d801528181612e5001528181614091015281816141720152818161419901528181614235015261425c015261591f6000f3fe6080604052600436106103855760003560e01c806392136913116101d1578063c17b5b8c11610102578063e213727a116100a0578063f2fde38b1161006f578063f2fde38b14610d4f578063f637434214610d78578063f8b45b0514610da3578063fbc10c5514610dce5761038c565b8063e213727a14610c91578063e2f4560514610cce578063e884f26014610cf9578063f11a24d314610d245761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bc1578063d257b34f14610bec578063d85ba06314610c29578063dd62ed3e14610c545761038c565b8063c17b5b8c14610b44578063c18bc19514610b6d578063c876d0b914610b965761038c565b8063a0ef91df1161016f578063aacebbe311610149578063aacebbe314610a8a578063b62496f514610ab3578063bbc0c74214610af0578063c024666814610b1b5761038c565b8063a0ef91df146109e5578063a457c2d714610a10578063a9059cbb14610a4d5761038c565b80639a7a23d6116101ab5780639a7a23d61461093b5780639c3b4fdc146109645780639fccce321461098f578063a0d82dc5146109ba5761038c565b806392136913146108bc578063924de9b7146108e757806395d89b41146109105761038c565b806339509351116102b6578063715018a6116102545780638095d564116102235780638095d564146108265780638a8c523c1461084f5780638da5cb5b146108665780638e90c222146108915761038c565b8063715018a614610790578063751039fc146107a75780637571336a146107d25780637bce5a04146107fb5761038c565b80634fbee193116102905780634fbee193146106c05780636a486a8e146106fd5780636ddd17131461072857806370a08231146107535761038c565b8063395093511461062d57806349bd5a5e1461066a5780634a62bb65146106955761038c565b80631816467f11610323578063203e727e116102fd578063203e727e1461057157806323b872dd1461059a57806327c8f835146105d7578063313ce567146106025761038c565b80631816467f146104f25780631a8145bb1461051b5780631f3fed8f146105465761038c565b806311098a911161035f57806311098a9114610436578063118507111461045f5780631694505e1461049c57806318160ddd146104c75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610df7565b6040516103b391906143bb565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614476565b610e89565b6040516103f091906144d1565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906144ec565b610ea7565b60405161042d91906144d1565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614519565b610ec7565b005b34801561046b57600080fd5b5061048660048036038101906104819190614476565b61123d565b60405161049391906144d1565b60405180910390f35b3480156104a857600080fd5b506104b16112d6565b6040516104be91906145cb565b60405180910390f35b3480156104d357600080fd5b506104dc6112fa565b6040516104e991906145f5565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906144ec565b611304565b005b34801561052757600080fd5b50610530611440565b60405161053d91906145f5565b60405180910390f35b34801561055257600080fd5b5061055b611446565b60405161056891906145f5565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190614610565b61144c565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614519565b61155b565b6040516105ce91906144d1565b60405180910390f35b3480156105e357600080fd5b506105ec611653565b6040516105f9919061464c565b60405180910390f35b34801561060e57600080fd5b50610617611659565b6040516106249190614683565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190614476565b611662565b60405161066191906144d1565b60405180910390f35b34801561067657600080fd5b5061067f61170e565b60405161068c919061464c565b60405180910390f35b3480156106a157600080fd5b506106aa611732565b6040516106b791906144d1565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906144ec565b611745565b6040516106f491906144d1565b60405180910390f35b34801561070957600080fd5b5061071261179b565b60405161071f91906145f5565b60405180910390f35b34801561073457600080fd5b5061073d6117a1565b60405161074a91906144d1565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906144ec565b6117b4565b60405161078791906145f5565b60405180910390f35b34801561079c57600080fd5b506107a56117fc565b005b3480156107b357600080fd5b506107bc611884565b6040516107c991906144d1565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906146ca565b611950565b005b34801561080757600080fd5b50610810611a27565b60405161081d91906145f5565b60405180910390f35b34801561083257600080fd5b5061084d6004803603810190610848919061470a565b611a2d565b005b34801561085b57600080fd5b50610864611ae6565b005b34801561087257600080fd5b5061087b611b9a565b604051610888919061464c565b60405180910390f35b34801561089d57600080fd5b506108a6611bc4565b6040516108b3919061464c565b60405180910390f35b3480156108c857600080fd5b506108d1611bea565b6040516108de91906145f5565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061475d565b611bf0565b005b34801561091c57600080fd5b50610925611c89565b60405161093291906143bb565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d91906146ca565b611d1b565b005b34801561097057600080fd5b50610979611e33565b60405161098691906145f5565b60405180910390f35b34801561099b57600080fd5b506109a4611e39565b6040516109b191906145f5565b60405180910390f35b3480156109c657600080fd5b506109cf611e3f565b6040516109dc91906145f5565b60405180910390f35b3480156109f157600080fd5b506109fa611e45565b604051610a0791906144d1565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190614476565b611ee1565b604051610a4491906144d1565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190614476565b611fcc565b604051610a8191906144d1565b60405180910390f35b348015610a9657600080fd5b50610ab16004803603810190610aac91906144ec565b611fea565b005b348015610abf57600080fd5b50610ada6004803603810190610ad591906144ec565b612104565b604051610ae791906144d1565b60405180910390f35b348015610afc57600080fd5b50610b05612124565b604051610b1291906144d1565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d91906146ca565b612137565b005b348015610b5057600080fd5b50610b6b6004803603810190610b66919061470a565b61225c565b005b348015610b7957600080fd5b50610b946004803603810190610b8f9190614610565b612315565b005b348015610ba257600080fd5b50610bab612424565b604051610bb891906144d1565b60405180910390f35b348015610bcd57600080fd5b50610bd6612437565b604051610be391906145f5565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e9190614610565b61243d565b604051610c2091906144d1565b60405180910390f35b348015610c3557600080fd5b50610c3e612592565b604051610c4b91906145f5565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c76919061478a565b612598565b604051610c8891906145f5565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb391906144ec565b61261f565b604051610cc591906145f5565b60405180910390f35b348015610cda57600080fd5b50610ce3612637565b604051610cf091906145f5565b60405180910390f35b348015610d0557600080fd5b50610d0e61263d565b604051610d1b91906144d1565b60405180910390f35b348015610d3057600080fd5b50610d396126dd565b604051610d4691906145f5565b60405180910390f35b348015610d5b57600080fd5b50610d766004803603810190610d7191906144ec565b6126e3565b005b348015610d8457600080fd5b50610d8d6127da565b604051610d9a91906145f5565b60405180910390f35b348015610daf57600080fd5b50610db86127e0565b604051610dc591906145f5565b60405180910390f35b348015610dda57600080fd5b50610df56004803603810190610df091906144ec565b6127e6565b005b606060038054610e06906147f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e32906147f9565b8015610e7f5780601f10610e5457610100808354040283529160200191610e7f565b820191906000526020600020905b815481529060010190602001808311610e6257829003601f168201915b5050505050905090565b6000610e9d610e96612922565b848461292a565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90614876565b60405180910390fd5b6000600267ffffffffffffffff811115610f5357610f52614896565b5b604051908082528060200260200182016040528015610f815781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101391906148da565b8160008151811061102757611026614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061107657611075614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111a3578373ffffffffffffffffffffffffffffffffffffffff166323b872dd848360018151811061113357611132614907565b5b6020026020010151856040518463ffffffff1660e01b815260040161115a93929190614936565b6020604051808303816000875af1158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d9190614982565b50611237565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008487426040518663ffffffff1660e01b81526004016112049493929190614aa8565b6000604051808303818588803b15801561121d57600080fd5b505af1158015611231573d6000803e3d6000fd5b50505050505b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614b66565b60405180910390fd5b6112cc8330846112bd8730612598565b6112c79190614bb5565b61292a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61130c612922565b73ffffffffffffffffffffffffffffffffffffffff1661132a611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790614c35565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b611454612922565b73ffffffffffffffffffffffffffffffffffffffff16611472611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90614c35565b60405180910390fd5b670de0b6b3a76400006103e860016114de6112fa565b6114e89190614c55565b6114f29190614cc6565b6114fc9190614cc6565b81101561153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614d69565b60405180910390fd5b670de0b6b3a7640000816115529190614c55565b600c8190555050565b6000611568848484612af3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115b3612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90614dfb565b60405180910390fd5b6116478561163f612922565b85840361292a565b60019150509392505050565b61dead81565b60006012905090565b600061170461166f612922565b84846001600061167d612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ff9190614bb5565b61292a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600960019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600960039054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611804612922565b73ffffffffffffffffffffffffffffffffffffffff16611822611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614c35565b60405180910390fd5b61188260006138c5565b565b600061188e612922565b73ffffffffffffffffffffffffffffffffffffffff166118ac611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614c35565b60405180910390fd5b6000600960016101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b611958612922565b73ffffffffffffffffffffffffffffffffffffffff16611976611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614c35565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611a35612922565b73ffffffffffffffffffffffffffffffffffffffff16611a53611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090614c35565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054611ad19190614bb5565b611adb9190614bb5565b600f81905550505050565b611aee612922565b73ffffffffffffffffffffffffffffffffffffffff16611b0c611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614c35565b60405180910390fd5b6001600960026101000a81548160ff0219169083151502179055506001600960036101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611bf8612922565b73ffffffffffffffffffffffffffffffffffffffff16611c16611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390614c35565b60405180910390fd5b80600960036101000a81548160ff02191690831515021790555050565b606060048054611c98906147f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc4906147f9565b8015611d115780601f10611ce657610100808354040283529160200191611d11565b820191906000526020600020905b815481529060010190602001808311611cf457829003601f168201915b5050505050905090565b611d23612922565b73ffffffffffffffffffffffffffffffffffffffff16611d41611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614c35565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614e8d565b60405180910390fd5b611e2f828261398b565b5050565b60125481565b60195481565b60165481565b6000804790506000600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611e9390614ede565b60006040518083038185875af1925050503d8060008114611ed0576040519150601f19603f3d011682016040523d82523d6000602084013e611ed5565b606091505b50509050809250505090565b60008060016000611ef0612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614f65565b60405180910390fd5b611fc1611fb8612922565b8585840361292a565b600191505092915050565b6000611fe0611fd9612922565b8484612af3565b6001905092915050565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204457600080fd5b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600960029054906101000a900460ff1681565b61213f612922565b73ffffffffffffffffffffffffffffffffffffffff1661215d611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614c35565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161225091906144d1565b60405180910390a25050565b612264612922565b73ffffffffffffffffffffffffffffffffffffffff16612282611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614c35565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546123009190614bb5565b61230a9190614bb5565b601381905550505050565b61231d612922565b73ffffffffffffffffffffffffffffffffffffffff1661233b611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614c35565b60405180910390fd5b670de0b6b3a76400006103e860056123a76112fa565b6123b19190614c55565b6123bb9190614cc6565b6123c59190614cc6565b811015612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614ff7565b60405180910390fd5b670de0b6b3a76400008161241b9190614c55565b600e8190555050565b600660149054906101000a900460ff1681565b600c5481565b6000612447612922565b73ffffffffffffffffffffffffffffffffffffffff16612465611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614c35565b60405180910390fd5b620186a060016124c96112fa565b6124d39190614c55565b6124dd9190614cc6565b82101561251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690615089565b60405180910390fd5b6103e8600561252c6112fa565b6125369190614c55565b6125409190614cc6565b821115612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061511b565b60405180910390fd5b81600d8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915090505481565b600d5481565b6000612647612922565b73ffffffffffffffffffffffffffffffffffffffff16612665611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614c35565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055506001905090565b60115481565b6126eb612922565b73ffffffffffffffffffffffffffffffffffffffff16612709611b9a565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275690614c35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c5906151ad565b60405180910390fd5b6127d7816138c5565b50565b60155481565b600e5481565b6127ee612922565b73ffffffffffffffffffffffffffffffffffffffff1661280c611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990614c35565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612999576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129909061523f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906152d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ae691906145f5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5990615363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc8906153f5565b60405180910390fd5b60008103612bea57612be583836000613a2c565b6138c0565b600960019054906101000a900460ff16156132ad57612c07611b9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c755750612c45611b9a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d015750600960009054906101000a900460ff16155b156132ac57600960029054906101000a900460ff16612dfb57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df190615461565b60405180910390fd5b5b600660149054906101000a900460ff1615612fc357612e18611b9a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e9f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ef757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fc25743600760003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7490615519565b60405180910390fd5b43600760003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130665750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310d57600c548111156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a7906155ab565b60405180910390fd5b600e546130bc836117b4565b826130c79190614bb5565b1115613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff90615617565b60405180910390fd5b6132ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b05750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131ff57600c548111156131fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f1906156a9565b60405180910390fd5b6132aa565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132a957600e5461325c836117b4565b826132679190614bb5565b11156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90615617565b60405180910390fd5b5b5b5b5b5b60006132b8306117b4565b90506000600d5482101590507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036133a8576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036133a35743600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6133ff565b600960009054906101000a900460ff166133fe5784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156134185750600960039054906101000a900460ff165b80156134315750600960009054906101000a900460ff16155b80156134875750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135335750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613577576001600960006101000a81548160ff02191690831515021790555061355b613cab565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061362d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561363757600090505b600081156138b057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369a57506000601354115b15613767576136c760646136b960135488613fa690919063ffffffff16565b613fbc90919063ffffffff16565b9050601354601554826136da9190614c55565b6136e49190614cc6565b601860008282546136f59190614bb5565b925050819055506013546016548261370d9190614c55565b6137179190614cc6565b601960008282546137289190614bb5565b92505081905550601354601454826137409190614c55565b61374a9190614cc6565b6017600082825461375b9190614bb5565b9250508190555061388c565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137c257506000600f54115b1561388b576137ef60646137e1600f5488613fa690919063ffffffff16565b613fbc90919063ffffffff16565b9050600f54601154826138029190614c55565b61380c9190614cc6565b6018600082825461381d9190614bb5565b92505081905550600f54601254826138359190614c55565b61383f9190614cc6565b601960008282546138509190614bb5565b92505081905550600f54601054826138689190614c55565b6138729190614cc6565b601760008282546138839190614bb5565b925050819055505b5b60008111156138a1576138a0873083613a2c565b5b80856138ad91906156c9565b94505b6138bb878787613a2c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9290615363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b01906153f5565b60405180910390fd5b613b15838383613fd2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b929061576f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c2e9190614bb5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c9291906145f5565b60405180910390a3613ca5848484613fd7565b50505050565b6000613cb6306117b4565b90506000601954601754601854613ccd9190614bb5565b613cd79190614bb5565b9050600080831480613ce95750600082145b15613cf657505050613fa4565b6004600d54613d059190614c55565b831115613d1e576004600d54613d1b9190614c55565b92505b600060028360185486613d319190614c55565b613d3b9190614cc6565b613d459190614cc6565b90506000613d5c8286613fdc90919063ffffffff16565b90506000479050613d6c82613ff2565b6000613d818247613fdc90919063ffffffff16565b90506000613dac87613d9e60175485613fa690919063ffffffff16565b613fbc90919063ffffffff16565b90506000613dd788613dc960195486613fa690919063ffffffff16565b613fbc90919063ffffffff16565b90506000818385613de891906156c9565b613df291906156c9565b9050600060188190555060006017819055506000601981905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e5290614ede565b60006040518083038185875af1925050503d8060008114613e8f576040519150601f19603f3d011682016040523d82523d6000602084013e613e94565b606091505b50508098505087613ea457600080fd5b600087118015613eb45750600081115b15613f0157613ec3878261422f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613ef89392919061578f565b60405180910390a15b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f4790614ede565b60006040518083038185875af1925050503d8060008114613f84576040519150601f19603f3d011682016040523d82523d6000602084013e613f89565b606091505b50508098505087613f9957600080fd5b505050505050505050505b565b60008183613fb49190614c55565b905092915050565b60008183613fca9190614cc6565b905092915050565b505050565b505050565b60008183613fea91906156c9565b905092915050565b6000600267ffffffffffffffff81111561400f5761400e614896565b5b60405190808252806020026020018201604052801561403d5781602001602082028036833780820191505090505b509050308160008151811061405557614054614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411e91906148da565b8160018151811061413257614131614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614197307f00000000000000000000000000000000000000000000000000000000000000008461292a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141f99594939291906157c6565b600060405180830381600087803b15801561421357600080fd5b505af1158015614227573d6000803e3d6000fd5b505050505050565b61425a307f00000000000000000000000000000000000000000000000000000000000000008461292a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016142e196959493929190615820565b60606040518083038185885af11580156142ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143249190615896565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561436557808201518184015260208101905061434a565b60008484015250505050565b6000601f19601f8301169050919050565b600061438d8261432b565b6143978185614336565b93506143a7818560208601614347565b6143b081614371565b840191505092915050565b600060208201905081810360008301526143d58184614382565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061440d826143e2565b9050919050565b61441d81614402565b811461442857600080fd5b50565b60008135905061443a81614414565b92915050565b6000819050919050565b61445381614440565b811461445e57600080fd5b50565b6000813590506144708161444a565b92915050565b6000806040838503121561448d5761448c6143dd565b5b600061449b8582860161442b565b92505060206144ac85828601614461565b9150509250929050565b60008115159050919050565b6144cb816144b6565b82525050565b60006020820190506144e660008301846144c2565b92915050565b600060208284031215614502576145016143dd565b5b60006145108482850161442b565b91505092915050565b600080600060608486031215614532576145316143dd565b5b60006145408682870161442b565b93505060206145518682870161442b565b925050604061456286828701614461565b9150509250925092565b6000819050919050565b600061459161458c614587846143e2565b61456c565b6143e2565b9050919050565b60006145a382614576565b9050919050565b60006145b582614598565b9050919050565b6145c5816145aa565b82525050565b60006020820190506145e060008301846145bc565b92915050565b6145ef81614440565b82525050565b600060208201905061460a60008301846145e6565b92915050565b600060208284031215614626576146256143dd565b5b600061463484828501614461565b91505092915050565b61464681614402565b82525050565b6000602082019050614661600083018461463d565b92915050565b600060ff82169050919050565b61467d81614667565b82525050565b60006020820190506146986000830184614674565b92915050565b6146a7816144b6565b81146146b257600080fd5b50565b6000813590506146c48161469e565b92915050565b600080604083850312156146e1576146e06143dd565b5b60006146ef8582860161442b565b9250506020614700858286016146b5565b9150509250929050565b600080600060608486031215614723576147226143dd565b5b600061473186828701614461565b935050602061474286828701614461565b925050604061475386828701614461565b9150509250925092565b600060208284031215614773576147726143dd565b5b6000614781848285016146b5565b91505092915050565b600080604083850312156147a1576147a06143dd565b5b60006147af8582860161442b565b92505060206147c08582860161442b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061481157607f821691505b602082108103614824576148236147ca565b5b50919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614860601a83614336565b915061486b8261482a565b602082019050919050565b6000602082019050818103600083015261488f81614853565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506148d481614414565b92915050565b6000602082840312156148f0576148ef6143dd565b5b60006148fe848285016148c5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060608201905061494b600083018661463d565b614958602083018561463d565b61496560408301846145e6565b949350505050565b60008151905061497c8161469e565b92915050565b600060208284031215614998576149976143dd565b5b60006149a68482850161496d565b91505092915050565b6000819050919050565b60006149d46149cf6149ca846149af565b61456c565b614440565b9050919050565b6149e4816149b9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a1f81614402565b82525050565b6000614a318383614a16565b60208301905092915050565b6000602082019050919050565b6000614a55826149ea565b614a5f81856149f5565b9350614a6a83614a06565b8060005b83811015614a9b578151614a828882614a25565b9750614a8d83614a3d565b925050600181019050614a6e565b5085935050505092915050565b6000608082019050614abd60008301876149db565b8181036020830152614acf8186614a4a565b9050614ade604083018561463d565b614aeb60608301846145e6565b95945050505050565b7f45524332303a207065726d697420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b50602183614336565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc082614440565b9150614bcb83614440565b9250828201905080821115614be357614be2614b86565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c1f602083614336565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b6000614c6082614440565b9150614c6b83614440565b9250828202614c7981614440565b91508282048414831517614c9057614c8f614b86565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cd182614440565b9150614cdc83614440565b925082614cec57614ceb614c97565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d53602f83614336565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614de5602883614336565b9150614df082614d89565b604082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e77603983614336565b9150614e8282614e1b565b604082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b600081905092915050565b50565b6000614ec8600083614ead565b9150614ed382614eb8565b600082019050919050565b6000614ee982614ebb565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602583614336565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602483614336565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615073603583614336565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615105603483614336565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615197602683614336565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615229602483614336565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bb602283614336565b91506152c68261525f565b604082019050919050565b600060208201905081810360008301526152ea816152ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061534d602583614336565b9150615358826152f1565b604082019050919050565b6000602082019050818103600083015261537c81615340565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153df602383614336565b91506153ea82615383565b604082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061544b601683614336565b915061545682615415565b602082019050919050565b6000602082019050818103600083015261547a8161543e565b9050919050565b7f5f7472616e736665723a205472616e736665722044656c617920656e61626c6560008201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b6000615503604783614336565b915061550e82615481565b606082019050919050565b60006020820190508181036000830152615532816154f6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615595603583614336565b91506155a082615539565b604082019050919050565b600060208201905081810360008301526155c481615588565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615601601383614336565b915061560c826155cb565b602082019050919050565b60006020820190508181036000830152615630816155f4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615693603683614336565b915061569e82615637565b604082019050919050565b600060208201905081810360008301526156c281615686565b9050919050565b60006156d482614440565b91506156df83614440565b92508282039050818111156156f7576156f6614b86565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615759602683614336565b9150615764826156fd565b604082019050919050565b600060208201905081810360008301526157888161574c565b9050919050565b60006060820190506157a460008301866145e6565b6157b160208301856145e6565b6157be60408301846145e6565b949350505050565b600060a0820190506157db60008301886145e6565b6157e860208301876149db565b81810360408301526157fa8186614a4a565b9050615809606083018561463d565b61581660808301846145e6565b9695505050505050565b600060c082019050615835600083018961463d565b61584260208301886145e6565b61584f60408301876149db565b61585c60608301866149db565b615869608083018561463d565b61587660a08301846145e6565b979650505050505050565b6000815190506158908161444a565b92915050565b6000806000606084860312156158af576158ae6143dd565b5b60006158bd86828701615881565b93505060206158ce86828701615881565b92505060406158df86828701615881565b915050925092509256fea264697066735822122067ab8c7f8ffd11658e597334a005b5ea7421444d3ea433ef79cc138ff016583264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806392136913116101d1578063c17b5b8c11610102578063e213727a116100a0578063f2fde38b1161006f578063f2fde38b14610d4f578063f637434214610d78578063f8b45b0514610da3578063fbc10c5514610dce5761038c565b8063e213727a14610c91578063e2f4560514610cce578063e884f26014610cf9578063f11a24d314610d245761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bc1578063d257b34f14610bec578063d85ba06314610c29578063dd62ed3e14610c545761038c565b8063c17b5b8c14610b44578063c18bc19514610b6d578063c876d0b914610b965761038c565b8063a0ef91df1161016f578063aacebbe311610149578063aacebbe314610a8a578063b62496f514610ab3578063bbc0c74214610af0578063c024666814610b1b5761038c565b8063a0ef91df146109e5578063a457c2d714610a10578063a9059cbb14610a4d5761038c565b80639a7a23d6116101ab5780639a7a23d61461093b5780639c3b4fdc146109645780639fccce321461098f578063a0d82dc5146109ba5761038c565b806392136913146108bc578063924de9b7146108e757806395d89b41146109105761038c565b806339509351116102b6578063715018a6116102545780638095d564116102235780638095d564146108265780638a8c523c1461084f5780638da5cb5b146108665780638e90c222146108915761038c565b8063715018a614610790578063751039fc146107a75780637571336a146107d25780637bce5a04146107fb5761038c565b80634fbee193116102905780634fbee193146106c05780636a486a8e146106fd5780636ddd17131461072857806370a08231146107535761038c565b8063395093511461062d57806349bd5a5e1461066a5780634a62bb65146106955761038c565b80631816467f11610323578063203e727e116102fd578063203e727e1461057157806323b872dd1461059a57806327c8f835146105d7578063313ce567146106025761038c565b80631816467f146104f25780631a8145bb1461051b5780631f3fed8f146105465761038c565b806311098a911161035f57806311098a9114610436578063118507111461045f5780631694505e1461049c57806318160ddd146104c75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610df7565b6040516103b391906143bb565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190614476565b610e89565b6040516103f091906144d1565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906144ec565b610ea7565b60405161042d91906144d1565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190614519565b610ec7565b005b34801561046b57600080fd5b5061048660048036038101906104819190614476565b61123d565b60405161049391906144d1565b60405180910390f35b3480156104a857600080fd5b506104b16112d6565b6040516104be91906145cb565b60405180910390f35b3480156104d357600080fd5b506104dc6112fa565b6040516104e991906145f5565b60405180910390f35b3480156104fe57600080fd5b50610519600480360381019061051491906144ec565b611304565b005b34801561052757600080fd5b50610530611440565b60405161053d91906145f5565b60405180910390f35b34801561055257600080fd5b5061055b611446565b60405161056891906145f5565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190614610565b61144c565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190614519565b61155b565b6040516105ce91906144d1565b60405180910390f35b3480156105e357600080fd5b506105ec611653565b6040516105f9919061464c565b60405180910390f35b34801561060e57600080fd5b50610617611659565b6040516106249190614683565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190614476565b611662565b60405161066191906144d1565b60405180910390f35b34801561067657600080fd5b5061067f61170e565b60405161068c919061464c565b60405180910390f35b3480156106a157600080fd5b506106aa611732565b6040516106b791906144d1565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e291906144ec565b611745565b6040516106f491906144d1565b60405180910390f35b34801561070957600080fd5b5061071261179b565b60405161071f91906145f5565b60405180910390f35b34801561073457600080fd5b5061073d6117a1565b60405161074a91906144d1565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906144ec565b6117b4565b60405161078791906145f5565b60405180910390f35b34801561079c57600080fd5b506107a56117fc565b005b3480156107b357600080fd5b506107bc611884565b6040516107c991906144d1565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f491906146ca565b611950565b005b34801561080757600080fd5b50610810611a27565b60405161081d91906145f5565b60405180910390f35b34801561083257600080fd5b5061084d6004803603810190610848919061470a565b611a2d565b005b34801561085b57600080fd5b50610864611ae6565b005b34801561087257600080fd5b5061087b611b9a565b604051610888919061464c565b60405180910390f35b34801561089d57600080fd5b506108a6611bc4565b6040516108b3919061464c565b60405180910390f35b3480156108c857600080fd5b506108d1611bea565b6040516108de91906145f5565b60405180910390f35b3480156108f357600080fd5b5061090e6004803603810190610909919061475d565b611bf0565b005b34801561091c57600080fd5b50610925611c89565b60405161093291906143bb565b60405180910390f35b34801561094757600080fd5b50610962600480360381019061095d91906146ca565b611d1b565b005b34801561097057600080fd5b50610979611e33565b60405161098691906145f5565b60405180910390f35b34801561099b57600080fd5b506109a4611e39565b6040516109b191906145f5565b60405180910390f35b3480156109c657600080fd5b506109cf611e3f565b6040516109dc91906145f5565b60405180910390f35b3480156109f157600080fd5b506109fa611e45565b604051610a0791906144d1565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190614476565b611ee1565b604051610a4491906144d1565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f9190614476565b611fcc565b604051610a8191906144d1565b60405180910390f35b348015610a9657600080fd5b50610ab16004803603810190610aac91906144ec565b611fea565b005b348015610abf57600080fd5b50610ada6004803603810190610ad591906144ec565b612104565b604051610ae791906144d1565b60405180910390f35b348015610afc57600080fd5b50610b05612124565b604051610b1291906144d1565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d91906146ca565b612137565b005b348015610b5057600080fd5b50610b6b6004803603810190610b66919061470a565b61225c565b005b348015610b7957600080fd5b50610b946004803603810190610b8f9190614610565b612315565b005b348015610ba257600080fd5b50610bab612424565b604051610bb891906144d1565b60405180910390f35b348015610bcd57600080fd5b50610bd6612437565b604051610be391906145f5565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e9190614610565b61243d565b604051610c2091906144d1565b60405180910390f35b348015610c3557600080fd5b50610c3e612592565b604051610c4b91906145f5565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c76919061478a565b612598565b604051610c8891906145f5565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb391906144ec565b61261f565b604051610cc591906145f5565b60405180910390f35b348015610cda57600080fd5b50610ce3612637565b604051610cf091906145f5565b60405180910390f35b348015610d0557600080fd5b50610d0e61263d565b604051610d1b91906144d1565b60405180910390f35b348015610d3057600080fd5b50610d396126dd565b604051610d4691906145f5565b60405180910390f35b348015610d5b57600080fd5b50610d766004803603810190610d7191906144ec565b6126e3565b005b348015610d8457600080fd5b50610d8d6127da565b604051610d9a91906145f5565b60405180910390f35b348015610daf57600080fd5b50610db86127e0565b604051610dc591906145f5565b60405180910390f35b348015610dda57600080fd5b50610df56004803603810190610df091906144ec565b6127e6565b005b606060038054610e06906147f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e32906147f9565b8015610e7f5780601f10610e5457610100808354040283529160200191610e7f565b820191906000526020600020905b815481529060010190602001808311610e6257829003601f168201915b5050505050905090565b6000610e9d610e96612922565b848461292a565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d90614876565b60405180910390fd5b6000600267ffffffffffffffff811115610f5357610f52614896565b5b604051908082528060200260200182016040528015610f815781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101391906148da565b8160008151811061102757611026614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061107657611075614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111a3578373ffffffffffffffffffffffffffffffffffffffff166323b872dd848360018151811061113357611132614907565b5b6020026020010151856040518463ffffffff1660e01b815260040161115a93929190614936565b6020604051808303816000875af1158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d9190614982565b50611237565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008487426040518663ffffffff1660e01b81526004016112049493929190614aa8565b6000604051808303818588803b15801561121d57600080fd5b505af1158015611231573d6000803e3d6000fd5b50505050505b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490614b66565b60405180910390fd5b6112cc8330846112bd8730612598565b6112c79190614bb5565b61292a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61130c612922565b73ffffffffffffffffffffffffffffffffffffffff1661132a611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790614c35565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b611454612922565b73ffffffffffffffffffffffffffffffffffffffff16611472611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90614c35565b60405180910390fd5b670de0b6b3a76400006103e860016114de6112fa565b6114e89190614c55565b6114f29190614cc6565b6114fc9190614cc6565b81101561153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614d69565b60405180910390fd5b670de0b6b3a7640000816115529190614c55565b600c8190555050565b6000611568848484612af3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115b3612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90614dfb565b60405180910390fd5b6116478561163f612922565b85840361292a565b60019150509392505050565b61dead81565b60006012905090565b600061170461166f612922565b84846001600061167d612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ff9190614bb5565b61292a565b6001905092915050565b7f000000000000000000000000257419f481cdc8bde8084f8f375ec032214dca5381565b600960019054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600960039054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611804612922565b73ffffffffffffffffffffffffffffffffffffffff16611822611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614c35565b60405180910390fd5b61188260006138c5565b565b600061188e612922565b73ffffffffffffffffffffffffffffffffffffffff166118ac611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f990614c35565b60405180910390fd5b6000600960016101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b611958612922565b73ffffffffffffffffffffffffffffffffffffffff16611976611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614c35565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b611a35612922565b73ffffffffffffffffffffffffffffffffffffffff16611a53611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090614c35565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054611ad19190614bb5565b611adb9190614bb5565b600f81905550505050565b611aee612922565b73ffffffffffffffffffffffffffffffffffffffff16611b0c611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5990614c35565b60405180910390fd5b6001600960026101000a81548160ff0219169083151502179055506001600960036101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611bf8612922565b73ffffffffffffffffffffffffffffffffffffffff16611c16611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390614c35565b60405180910390fd5b80600960036101000a81548160ff02191690831515021790555050565b606060048054611c98906147f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc4906147f9565b8015611d115780601f10611ce657610100808354040283529160200191611d11565b820191906000526020600020905b815481529060010190602001808311611cf457829003601f168201915b5050505050905090565b611d23612922565b73ffffffffffffffffffffffffffffffffffffffff16611d41611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614c35565b60405180910390fd5b7f000000000000000000000000257419f481cdc8bde8084f8f375ec032214dca5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c90614e8d565b60405180910390fd5b611e2f828261398b565b5050565b60125481565b60195481565b60165481565b6000804790506000600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611e9390614ede565b60006040518083038185875af1925050503d8060008114611ed0576040519150601f19603f3d011682016040523d82523d6000602084013e611ed5565b606091505b50509050809250505090565b60008060016000611ef0612922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614f65565b60405180910390fd5b611fc1611fb8612922565b8585840361292a565b600191505092915050565b6000611fe0611fd9612922565b8484612af3565b6001905092915050565b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204457600080fd5b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600960046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600960029054906101000a900460ff1681565b61213f612922565b73ffffffffffffffffffffffffffffffffffffffff1661215d611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90614c35565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161225091906144d1565b60405180910390a25050565b612264612922565b73ffffffffffffffffffffffffffffffffffffffff16612282611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90614c35565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546123009190614bb5565b61230a9190614bb5565b601381905550505050565b61231d612922565b73ffffffffffffffffffffffffffffffffffffffff1661233b611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614612391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238890614c35565b60405180910390fd5b670de0b6b3a76400006103e860056123a76112fa565b6123b19190614c55565b6123bb9190614cc6565b6123c59190614cc6565b811015612407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fe90614ff7565b60405180910390fd5b670de0b6b3a76400008161241b9190614c55565b600e8190555050565b600660149054906101000a900460ff1681565b600c5481565b6000612447612922565b73ffffffffffffffffffffffffffffffffffffffff16612465611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b290614c35565b60405180910390fd5b620186a060016124c96112fa565b6124d39190614c55565b6124dd9190614cc6565b82101561251f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251690615089565b60405180910390fd5b6103e8600561252c6112fa565b6125369190614c55565b6125409190614cc6565b821115612582576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125799061511b565b60405180910390fd5b81600d8190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60086020528060005260406000206000915090505481565b600d5481565b6000612647612922565b73ffffffffffffffffffffffffffffffffffffffff16612665611b9a565b73ffffffffffffffffffffffffffffffffffffffff16146126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614c35565b60405180910390fd5b6000600660146101000a81548160ff0219169083151502179055506001905090565b60115481565b6126eb612922565b73ffffffffffffffffffffffffffffffffffffffff16612709611b9a565b73ffffffffffffffffffffffffffffffffffffffff161461275f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275690614c35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c5906151ad565b60405180910390fd5b6127d7816138c5565b50565b60155481565b600e5481565b6127ee612922565b73ffffffffffffffffffffffffffffffffffffffff1661280c611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990614c35565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612999576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129909061523f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906152d1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ae691906145f5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5990615363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc8906153f5565b60405180910390fd5b60008103612bea57612be583836000613a2c565b6138c0565b600960019054906101000a900460ff16156132ad57612c07611b9a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c755750612c45611b9a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cae5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ce8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d015750600960009054906101000a900460ff16155b156132ac57600960029054906101000a900460ff16612dfb57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dbb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df190615461565b60405180910390fd5b5b600660149054906101000a900460ff1615612fc357612e18611b9a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e9f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ef757507f000000000000000000000000257419f481cdc8bde8084f8f375ec032214dca5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fc25743600760003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7490615519565b60405180910390fd5b43600760003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130665750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310d57600c548111156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a7906155ab565b60405180910390fd5b600e546130bc836117b4565b826130c79190614bb5565b1115613108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ff90615617565b60405180910390fd5b6132ab565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131b05750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131ff57600c548111156131fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f1906156a9565b60405180910390fd5b6132aa565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132a957600e5461325c836117b4565b826132679190614bb5565b11156132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90615617565b60405180910390fd5b5b5b5b5b5b60006132b8306117b4565b90506000600d5482101590507f000000000000000000000000257419f481cdc8bde8084f8f375ec032214dca5373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036133a8576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036133a35743600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6133ff565b600960009054906101000a900460ff166133fe5784600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156134185750600960039054906101000a900460ff165b80156134315750600960009054906101000a900460ff16155b80156134875750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135335750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613577576001600960006101000a81548160ff02191690831515021790555061355b613cab565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061362d5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561363757600090505b600081156138b057601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561369a57506000601354115b15613767576136c760646136b960135488613fa690919063ffffffff16565b613fbc90919063ffffffff16565b9050601354601554826136da9190614c55565b6136e49190614cc6565b601860008282546136f59190614bb5565b925050819055506013546016548261370d9190614c55565b6137179190614cc6565b601960008282546137289190614bb5565b92505081905550601354601454826137409190614c55565b61374a9190614cc6565b6017600082825461375b9190614bb5565b9250508190555061388c565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137c257506000600f54115b1561388b576137ef60646137e1600f5488613fa690919063ffffffff16565b613fbc90919063ffffffff16565b9050600f54601154826138029190614c55565b61380c9190614cc6565b6018600082825461381d9190614bb5565b92505081905550600f54601254826138359190614c55565b61383f9190614cc6565b601960008282546138509190614bb5565b92505081905550600f54601054826138689190614c55565b6138729190614cc6565b601760008282546138839190614bb5565b925050819055505b5b60008111156138a1576138a0873083613a2c565b5b80856138ad91906156c9565b94505b6138bb878787613a2c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9290615363565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b01906153f5565b60405180910390fd5b613b15838383613fd2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b929061576f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c2e9190614bb5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c9291906145f5565b60405180910390a3613ca5848484613fd7565b50505050565b6000613cb6306117b4565b90506000601954601754601854613ccd9190614bb5565b613cd79190614bb5565b9050600080831480613ce95750600082145b15613cf657505050613fa4565b6004600d54613d059190614c55565b831115613d1e576004600d54613d1b9190614c55565b92505b600060028360185486613d319190614c55565b613d3b9190614cc6565b613d459190614cc6565b90506000613d5c8286613fdc90919063ffffffff16565b90506000479050613d6c82613ff2565b6000613d818247613fdc90919063ffffffff16565b90506000613dac87613d9e60175485613fa690919063ffffffff16565b613fbc90919063ffffffff16565b90506000613dd788613dc960195486613fa690919063ffffffff16565b613fbc90919063ffffffff16565b90506000818385613de891906156c9565b613df291906156c9565b9050600060188190555060006017819055506000601981905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e5290614ede565b60006040518083038185875af1925050503d8060008114613e8f576040519150601f19603f3d011682016040523d82523d6000602084013e613e94565b606091505b50508098505087613ea457600080fd5b600087118015613eb45750600081115b15613f0157613ec3878261422f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601854604051613ef89392919061578f565b60405180910390a15b600960049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f4790614ede565b60006040518083038185875af1925050503d8060008114613f84576040519150601f19603f3d011682016040523d82523d6000602084013e613f89565b606091505b50508098505087613f9957600080fd5b505050505050505050505b565b60008183613fb49190614c55565b905092915050565b60008183613fca9190614cc6565b905092915050565b505050565b505050565b60008183613fea91906156c9565b905092915050565b6000600267ffffffffffffffff81111561400f5761400e614896565b5b60405190808252806020026020018201604052801561403d5781602001602082028036833780820191505090505b509050308160008151811061405557614054614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411e91906148da565b8160018151811061413257614131614907565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614197307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461292a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141f99594939291906157c6565b600060405180830381600087803b15801561421357600080fd5b505af1158015614227573d6000803e3d6000fd5b505050505050565b61425a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461292a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016142e196959493929190615820565b60606040518083038185885af11580156142ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906143249190615896565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561436557808201518184015260208101905061434a565b60008484015250505050565b6000601f19601f8301169050919050565b600061438d8261432b565b6143978185614336565b93506143a7818560208601614347565b6143b081614371565b840191505092915050565b600060208201905081810360008301526143d58184614382565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061440d826143e2565b9050919050565b61441d81614402565b811461442857600080fd5b50565b60008135905061443a81614414565b92915050565b6000819050919050565b61445381614440565b811461445e57600080fd5b50565b6000813590506144708161444a565b92915050565b6000806040838503121561448d5761448c6143dd565b5b600061449b8582860161442b565b92505060206144ac85828601614461565b9150509250929050565b60008115159050919050565b6144cb816144b6565b82525050565b60006020820190506144e660008301846144c2565b92915050565b600060208284031215614502576145016143dd565b5b60006145108482850161442b565b91505092915050565b600080600060608486031215614532576145316143dd565b5b60006145408682870161442b565b93505060206145518682870161442b565b925050604061456286828701614461565b9150509250925092565b6000819050919050565b600061459161458c614587846143e2565b61456c565b6143e2565b9050919050565b60006145a382614576565b9050919050565b60006145b582614598565b9050919050565b6145c5816145aa565b82525050565b60006020820190506145e060008301846145bc565b92915050565b6145ef81614440565b82525050565b600060208201905061460a60008301846145e6565b92915050565b600060208284031215614626576146256143dd565b5b600061463484828501614461565b91505092915050565b61464681614402565b82525050565b6000602082019050614661600083018461463d565b92915050565b600060ff82169050919050565b61467d81614667565b82525050565b60006020820190506146986000830184614674565b92915050565b6146a7816144b6565b81146146b257600080fd5b50565b6000813590506146c48161469e565b92915050565b600080604083850312156146e1576146e06143dd565b5b60006146ef8582860161442b565b9250506020614700858286016146b5565b9150509250929050565b600080600060608486031215614723576147226143dd565b5b600061473186828701614461565b935050602061474286828701614461565b925050604061475386828701614461565b9150509250925092565b600060208284031215614773576147726143dd565b5b6000614781848285016146b5565b91505092915050565b600080604083850312156147a1576147a06143dd565b5b60006147af8582860161442b565b92505060206147c08582860161442b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061481157607f821691505b602082108103614824576148236147ca565b5b50919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614860601a83614336565b915061486b8261482a565b602082019050919050565b6000602082019050818103600083015261488f81614853565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506148d481614414565b92915050565b6000602082840312156148f0576148ef6143dd565b5b60006148fe848285016148c5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060608201905061494b600083018661463d565b614958602083018561463d565b61496560408301846145e6565b949350505050565b60008151905061497c8161469e565b92915050565b600060208284031215614998576149976143dd565b5b60006149a68482850161496d565b91505092915050565b6000819050919050565b60006149d46149cf6149ca846149af565b61456c565b614440565b9050919050565b6149e4816149b9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a1f81614402565b82525050565b6000614a318383614a16565b60208301905092915050565b6000602082019050919050565b6000614a55826149ea565b614a5f81856149f5565b9350614a6a83614a06565b8060005b83811015614a9b578151614a828882614a25565b9750614a8d83614a3d565b925050600181019050614a6e565b5085935050505092915050565b6000608082019050614abd60008301876149db565b8181036020830152614acf8186614a4a565b9050614ade604083018561463d565b614aeb60608301846145e6565b95945050505050565b7f45524332303a207065726d697420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b50602183614336565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bc082614440565b9150614bcb83614440565b9250828201905080821115614be357614be2614b86565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c1f602083614336565b9150614c2a82614be9565b602082019050919050565b60006020820190508181036000830152614c4e81614c12565b9050919050565b6000614c6082614440565b9150614c6b83614440565b9250828202614c7981614440565b91508282048414831517614c9057614c8f614b86565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614cd182614440565b9150614cdc83614440565b925082614cec57614ceb614c97565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614d53602f83614336565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614de5602883614336565b9150614df082614d89565b604082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e77603983614336565b9150614e8282614e1b565b604082019050919050565b60006020820190508181036000830152614ea681614e6a565b9050919050565b600081905092915050565b50565b6000614ec8600083614ead565b9150614ed382614eb8565b600082019050919050565b6000614ee982614ebb565b9150819050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602583614336565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602483614336565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615073603583614336565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615105603483614336565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615197602683614336565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615229602483614336565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bb602283614336565b91506152c68261525f565b604082019050919050565b600060208201905081810360008301526152ea816152ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061534d602583614336565b9150615358826152f1565b604082019050919050565b6000602082019050818103600083015261537c81615340565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153df602383614336565b91506153ea82615383565b604082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061544b601683614336565b915061545682615415565b602082019050919050565b6000602082019050818103600083015261547a8161543e565b9050919050565b7f5f7472616e736665723a205472616e736665722044656c617920656e61626c6560008201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b6000615503604783614336565b915061550e82615481565b606082019050919050565b60006020820190508181036000830152615532816154f6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615595603583614336565b91506155a082615539565b604082019050919050565b600060208201905081810360008301526155c481615588565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615601601383614336565b915061560c826155cb565b602082019050919050565b60006020820190508181036000830152615630816155f4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615693603683614336565b915061569e82615637565b604082019050919050565b600060208201905081810360008301526156c281615686565b9050919050565b60006156d482614440565b91506156df83614440565b92508282039050818111156156f7576156f6614b86565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615759602683614336565b9150615764826156fd565b604082019050919050565b600060208201905081810360008301526157888161574c565b9050919050565b60006060820190506157a460008301866145e6565b6157b160208301856145e6565b6157be60408301846145e6565b949350505050565b600060a0820190506157db60008301886145e6565b6157e860208301876149db565b81810360408301526157fa8186614a4a565b9050615809606083018561463d565b61581660808301846145e6565b9695505050505050565b600060c082019050615835600083018961463d565b61584260208301886145e6565b61584f60408301876149db565b61585c60608301866149db565b615869608083018561463d565b61587660a08301846145e6565b979650505050505050565b6000815190506158908161444a565b92915050565b6000806000606084860312156158af576158ae6143dd565b5b60006158bd86828701615881565b93505060206158ce86828701615881565b92505060406158df86828701615881565b915050925092509256fea264697066735822122067ab8c7f8ffd11658e597334a005b5ea7421444d3ea433ef79cc138ff016583264736f6c63430008130033

Deployed Bytecode Sourcemap

12545:17816:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2605:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3907:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13897:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26575:697;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5590:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12850:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2926:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21142:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13709:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13669;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18081:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4084:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12953:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2825:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6305:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12908:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13045:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21608:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13524:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13125:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3042:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1681:103;;;;;;;;;;;;;:::i;:::-;;17725:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19195:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13417:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19566:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17561:112;;;;;;;;;;;;;:::i;:::-;;1458:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12583:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13559:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19458:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2713:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20444:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13491:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13749:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13635:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30152:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6528:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3177:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21339:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14118:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13085:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20254:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19906:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18364:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12624:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13268:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18690:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13383:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3360:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12741:65;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13310:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17938:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13454:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1792:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13597:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13350:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20952:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2605:100;2659:13;2692:5;2685:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2605:100;:::o;3907:169::-;3990:4;4007:39;4016:12;:10;:12::i;:::-;4030:7;4039:6;4007:8;:39::i;:::-;4064:4;4057:11;;3907:169;;;;:::o;13897:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26575:697::-;26691:1;26673:20;;:6;:20;;;26665:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;26735:21;26773:1;26759:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26735:40;;26796:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26786:4;26791:1;26786:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26847:4;26829;26834:1;26829:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26867:19;:31;26887:10;26867:31;;;;;;;;;;;;;;;;;;;;;;;;;26863:402;;;26922:6;26915:27;;;26943:3;26948:4;26953:1;26948:7;;;;;;;;:::i;:::-;;;;;;;;26957;26915:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26863:402;;;27028:15;:66;;;27102:7;27130:1;27178:4;27201:3;27223:15;27028:225;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26863:402;26654:618;26575:697;;;:::o;5590:300::-;5689:4;5733:1;5714:21;;:7;:21;;;5706:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5784:76;5793:7;5810:4;5853:6;5817:33;5827:7;5844:4;5817:9;:33::i;:::-;:42;;;;:::i;:::-;5784:8;:76::i;:::-;5878:4;5871:11;;5590:300;;;;:::o;12850:51::-;;;:::o;2926:108::-;2987:7;3014:12;;3007:19;;2926:108;:::o;21142:189::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21278:9:::1;;;;;;;;;;;21247:41;;21264:12;21247:41;;;;;;;;;;;;21311:12;21299:9;;:24;;;;;;;;;;;;;;;;;;21142:189:::0;:::o;13709:33::-;;;;:::o;13669:::-;;;;:::o;18081:275::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18218:4:::1;18210;18205:1;18189:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18188:26;;;;:::i;:::-;18187:35;;;;:::i;:::-;18177:6;:45;;18155:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;18341:6;18331;:17;;;;:::i;:::-;18308:20;:40;;;;18081:275:::0;:::o;4084:492::-;4224:4;4241:36;4251:6;4259:9;4270:6;4241:9;:36::i;:::-;4290:24;4317:11;:19;4329:6;4317:19;;;;;;;;;;;;;;;:33;4337:12;:10;:12::i;:::-;4317:33;;;;;;;;;;;;;;;;4290:60;;4389:6;4369:16;:26;;4361:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4476:57;4485:6;4493:12;:10;:12::i;:::-;4526:6;4507:16;:25;4476:8;:57::i;:::-;4564:4;4557:11;;;4084:492;;;;;:::o;12953:53::-;12999:6;12953:53;:::o;2825:93::-;2883:5;2908:2;2901:9;;2825:93;:::o;6305:215::-;6393:4;6410:80;6419:12;:10;:12::i;:::-;6433:7;6479:10;6442:11;:25;6454:12;:10;:12::i;:::-;6442:25;;;;;;;;;;;;;;;:34;6468:7;6442:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6410:8;:80::i;:::-;6508:4;6501:11;;6305:215;;;;:::o;12908:38::-;;;:::o;13045:33::-;;;;;;;;;;;;;:::o;21608:126::-;21674:4;21698:19;:28;21718:7;21698:28;;;;;;;;;;;;;;;;;;;;;;;;;21691:35;;21608:126;;;:::o;13524:28::-;;;;:::o;13125:31::-;;;;;;;;;;;;;:::o;3042:127::-;3116:7;3143:9;:18;3153:7;3143:18;;;;;;;;;;;;;;;;3136:25;;3042:127;;;:::o;1681:103::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1746:30:::1;1773:1;1746:18;:30::i;:::-;1681:103::o:0;17725:152::-;17777:4;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17811:5:::1;17794:14;;:22;;;;;;;;;;;;;;;;;;17832:15;;;;;;;;;;17865:4;17858:11;;17725:152:::0;:::o;19195:167::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19350:4:::1;19308:31;:39;19340:6;19308:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19195:167:::0;;:::o;13417:30::-;;;;:::o;19566:332::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19734:13:::1;19716:15;:31;;;;19776:13;19758:15;:31;;;;19812:7;19800:9;:19;;;;19881:9;;19863:15;;19845;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19830:12;:60;;;;19566:332:::0;;;:::o;17561:112::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17632:4:::1;17616:13;;:20;;;;;;;;;;;;;;;;;;17661:4;17647:11;;:18;;;;;;;;;;;;;;;;;;17561:112::o:0;1458:87::-;1504:7;1531:6;;;;;;;;;;;1524:13;;1458:87;:::o;12583:34::-;;;;;;;;;;;;;:::o;13559:31::-;;;;:::o;19458:100::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19543:7:::1;19529:11;;:21;;;;;;;;;;;;;;;;;;19458:100:::0;:::o;2713:104::-;2769:13;2802:7;2795:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2713:104;:::o;20444:304::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20588:13:::1;20580:21;;:4;:21;;::::0;20558:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20699:41;20728:4;20734:5;20699:28;:41::i;:::-;20444:304:::0;;:::o;13491:24::-;;;;:::o;13749:27::-;;;;:::o;13635:25::-;;;;:::o;30152:206::-;30193:4;30210:12;30225:21;30210:36;;30258:12;30284:15;;;;;;;;;;;30276:29;;30313:7;30276:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30257:68;;;30343:7;30336:14;;;;30152:206;:::o;6528:413::-;6621:4;6638:24;6665:11;:25;6677:12;:10;:12::i;:::-;6665:25;;;;;;;;;;;;;;;:34;6691:7;6665:34;;;;;;;;;;;;;;;;6638:61;;6738:15;6718:16;:35;;6710:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6831:67;6840:12;:10;:12::i;:::-;6854:7;6882:15;6863:16;:34;6831:8;:67::i;:::-;6929:4;6922:11;;;6528:413;;;;:::o;3177:175::-;3263:4;3280:42;3290:12;:10;:12::i;:::-;3304:9;3315:6;3280:9;:42::i;:::-;3340:4;3333:11;;3177:175;;;;:::o;21339:261::-;21454:15;;;;;;;;;;;21440:29;;:10;:29;;;21432:38;;;;;;21529:15;;;;;;;;;;;21486:59;;21509:18;21486:59;;;;;;;;;;;;21574:18;21556:15;;:36;;;;;;;;;;;;;;;;;;21339:261;:::o;14118:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;13085:33::-;;;;;;;;;;;;;:::o;20254:182::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20370:8:::1;20339:19;:28;20359:7;20339:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20410:7;20394:34;;;20419:8;20394:34;;;;;;:::i;:::-;;;;;;;;20254:182:::0;;:::o;19906:340::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20076:13:::1;20057:16;:32;;;;20119:13;20100:16;:32;;;;20156:7;20143:10;:20;;;;20228:10;;20209:16;;20190;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;20174:13;:64;;;;19906:340:::0;;;:::o;18364:256::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18504:4:::1;18496;18491:1;18475:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18474:26;;;;:::i;:::-;18473:35;;;;:::i;:::-;18463:6;:45;;18441:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18605:6;18595;:17;;;;:::i;:::-;18583:9;:29;;;;18364:256:::0;:::o;12624:39::-;;;;;;;;;;;;;:::o;13268:35::-;;;;:::o;18690:497::-;18798:4;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18877:6:::1;18872:1;18856:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18855:28;;;;:::i;:::-;18842:9;:41;;18820:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19032:4;19027:1;19011:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19010:26;;;;:::i;:::-;18997:9;:39;;18975:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19148:9;19127:18;:30;;;;19175:4;19168:11;;18690:497:::0;;;:::o;13383:27::-;;;;:::o;3360:151::-;3449:7;3476:11;:18;3488:5;3476:18;;;;;;;;;;;;;;;:27;3495:7;3476:27;;;;;;;;;;;;;;;;3469:34;;3360:151;;;;:::o;12741:65::-;;;;;;;;;;;;;;;;;:::o;13310:33::-;;;;:::o;17938:135::-;17998:4;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18038:5:::1;18015:20;;:28;;;;;;;;;;;;;;;;;;18061:4;18054:11;;17938:135:::0;:::o;13454:30::-;;;;:::o;1792:201::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1901:1:::1;1881:22;;:8;:22;;::::0;1873:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1957:28;1976:8;1957:18;:28::i;:::-;1792:201:::0;:::o;13597:31::-;;;;:::o;13350:24::-;;;;:::o;20952:182::-;1604:12;:10;:12::i;:::-;1593:23;;:7;:5;:7::i;:::-;:23;;;1585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21084:8:::1;;;;;;;;;;;21055:38;;21071:11;21055:38;;;;;;;;;;;;21115:11;21104:8;;:22;;;;;;;;;;;;;;;;;;20952:182:::0;:::o;1113:98::-;1166:7;1193:10;1186:17;;1113:98;:::o;3519:380::-;3672:1;3655:19;;:5;:19;;;3647:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3753:1;3734:21;;:7;:21;;;3726:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3837:6;3807:11;:18;3819:5;3807:18;;;;;;;;;;;;;;;:27;3826:7;3807:27;;;;;;;;;;;;;;;:36;;;;3875:7;3859:32;;3868:5;3859:32;;;3884:6;3859:32;;;;;;:::i;:::-;;;;;;;;3519:380;;;:::o;21792:4775::-;21940:1;21924:18;;:4;:18;;;21916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22017:1;22003:16;;:2;:16;;;21995:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22086:1;22076:6;:11;22072:93;;22104:28;22120:4;22126:2;22130:1;22104:15;:28::i;:::-;22147:7;;22072:93;22181:14;;;;;;;;;;;22177:2269;;;22242:7;:5;:7::i;:::-;22234:15;;:4;:15;;;;:49;;;;;22276:7;:5;:7::i;:::-;22270:13;;:2;:13;;;;22234:49;:86;;;;;22318:1;22304:16;;:2;:16;;;;22234:86;:128;;;;;22355:6;22341:21;;:2;:21;;;;22234:128;:158;;;;;22384:8;;;;;;;;;;;22383:9;22234:158;22212:2223;;;22432:13;;;;;;;;;;;22427:223;;22504:19;:25;22524:4;22504:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22533:19;:23;22553:2;22533:23;;;;;;;;;;;;;;;;;;;;;;;;;22504:52;22470:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22427:223;22805:20;;;;;;;;;;;22801:422;;;22859:7;:5;:7::i;:::-;22853:13;;:2;:13;;;;:47;;;;;22884:15;22870:30;;:2;:30;;;;22853:47;:79;;;;;22918:13;22904:28;;:2;:28;;;;22853:79;22849:355;;;23011:12;22969:28;:39;22998:9;22969:39;;;;;;;;;;;;;;;;:54;22961:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;23168:12;23126:28;:39;23155:9;23126:39;;;;;;;;;;;;;;;:54;;;;22849:355;22801:422;23298:25;:31;23324:4;23298:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23355:31;:35;23387:2;23355:35;;;;;;;;;;;;;;;;;;;;;;;;;23354:36;23298:92;23272:1148;;;23477:20;;23467:6;:30;;23433:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;23685:9;;23668:13;23678:2;23668:9;:13::i;:::-;23659:6;:22;;;;:::i;:::-;:35;;23625:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23272:1148;;;23864:25;:29;23890:2;23864:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23919:31;:37;23951:4;23919:37;;;;;;;;;;;;;;;;;;;;;;;;;23918:38;23864:92;23838:582;;;24043:20;;24033:6;:30;;23999:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;23838:582;;;24200:31;:35;24232:2;24200:35;;;;;;;;;;;;;;;;;;;;;;;;;24195:225;;24320:9;;24303:13;24313:2;24303:9;:13::i;:::-;24294:6;:22;;;;:::i;:::-;:35;;24260:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24195:225;23838:582;23272:1148;22212:2223;22177:2269;24458:28;24489:24;24507:4;24489:9;:24::i;:::-;24458:55;;24526:12;24565:18;;24541:20;:42;;24526:57;;24616:13;24600:30;;:4;:30;;;24596:264;;24689:1;24651:30;:34;24682:2;24651:34;;;;;;;;;;;;;;;;:39;24647:129;;24748:12;24711:30;:34;24742:2;24711:34;;;;;;;;;;;;;;;:49;;;;24647:129;24596:264;;;24797:8;;;;;;;;;;;24793:67;;24844:4;24822:19;;:26;;;;;;;;;;;;;;;;;;24793:67;24596:264;24890:7;:35;;;;;24914:11;;;;;;;;;;;24890:35;:61;;;;;24943:8;;;;;;;;;;;24942:9;24890:61;:110;;;;;24969:25;:31;24995:4;24969:31;;;;;;;;;;;;;;;;;;;;;;;;;24968:32;24890:110;:153;;;;;25018:19;:25;25038:4;25018:25;;;;;;;;;;;;;;;;;;;;;;;;;25017:26;24890:153;:194;;;;;25061:19;:23;25081:2;25061:23;;;;;;;;;;;;;;;;;;;;;;;;;25060:24;24890:194;24872:326;;;25122:4;25111:8;;:15;;;;;;;;;;;;;;;;;;25143:10;:8;:10::i;:::-;25181:5;25170:8;;:16;;;;;;;;;;;;;;;;;;24872:326;25210:12;25226:8;;;;;;;;;;;25225:9;25210:24;;25336:19;:25;25356:4;25336:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25365:19;:23;25385:2;25365:23;;;;;;;;;;;;;;;;;;;;;;;;;25336:52;25332:100;;;25415:5;25405:15;;25332:100;25444:12;25549:7;25545:969;;;25601:25;:29;25627:2;25601:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25650:1;25634:13;;:17;25601:50;25597:768;;;25679:34;25709:3;25679:25;25690:13;;25679:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25672:41;;25782:13;;25762:16;;25755:4;:23;;;;:::i;:::-;25754:41;;;;:::i;:::-;25732:18;;:63;;;;;;;:::i;:::-;;;;;;;;25852:13;;25838:10;;25831:4;:17;;;;:::i;:::-;25830:35;;;;:::i;:::-;25814:12;;:51;;;;;;;:::i;:::-;;;;;;;;25934:13;;25914:16;;25907:4;:23;;;;:::i;:::-;25906:41;;;;:::i;:::-;25884:18;;:63;;;;;;;:::i;:::-;;;;;;;;25597:768;;;26009:25;:31;26035:4;26009:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26059:1;26044:12;;:16;26009:51;26005:360;;;26088:33;26117:3;26088:24;26099:12;;26088:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26081:40;;26189:12;;26170:15;;26163:4;:22;;;;:::i;:::-;26162:39;;;;:::i;:::-;26140:18;;:61;;;;;;;:::i;:::-;;;;;;;;26257:12;;26244:9;;26237:4;:16;;;;:::i;:::-;26236:33;;;;:::i;:::-;26220:12;;:49;;;;;;;:::i;:::-;;;;;;;;26337:12;;26318:15;;26311:4;:22;;;;:::i;:::-;26310:39;;;;:::i;:::-;26288:18;;:61;;;;;;;:::i;:::-;;;;;;;;26005:360;25597:768;26392:1;26385:4;:8;26381:91;;;26414:42;26430:4;26444;26451;26414:15;:42::i;:::-;26381:91;26498:4;26488:14;;;;;:::i;:::-;;;25545:969;26526:33;26542:4;26548:2;26552:6;26526:15;:33::i;:::-;21905:4662;;;;21792:4775;;;;:::o;2001:191::-;2075:16;2094:6;;;;;;;;;;;2075:25;;2120:8;2111:6;;:17;;;;;;;;;;;;;;;;;;2175:8;2144:40;;2165:8;2144:40;;;;;;;;;;;;2064:128;2001:191;:::o;20756:188::-;20873:5;20839:25;:31;20865:4;20839:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20930:5;20896:40;;20924:4;20896:40;;;;;;;;;;;;20756:188;;:::o;4849:733::-;5007:1;4989:20;;:6;:20;;;4981:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5091:1;5070:23;;:9;:23;;;5062:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5146:47;5167:6;5175:9;5186:6;5146:20;:47::i;:::-;5206:21;5230:9;:17;5240:6;5230:17;;;;;;;;;;;;;;;;5206:41;;5283:6;5266:13;:23;;5258:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5404:6;5388:13;:22;5368:9;:17;5378:6;5368:17;;;;;;;;;;;;;;;:42;;;;5456:6;5432:9;:20;5442:9;5432:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5497:9;5480:35;;5489:6;5480:35;;;5508:6;5480:35;;;;;;:::i;:::-;;;;;;;;5528:46;5548:6;5556:9;5567:6;5528:19;:46::i;:::-;4970:612;4849:733;;;:::o;28399:1745::-;28438:23;28464:24;28482:4;28464:9;:24::i;:::-;28438:50;;28499:25;28608:12;;28574:18;;28540;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;28499:121;;28631:12;28679:1;28660:15;:20;:46;;;;28705:1;28684:17;:22;28660:46;28656:85;;;28723:7;;;;;28656:85;28795:1;28774:18;;:22;;;;:::i;:::-;28756:15;:40;28753:109;;;28849:1;28828:18;;:22;;;;:::i;:::-;28810:40;;28753:109;28923:23;29010:1;28990:17;28968:18;;28950:15;:36;;;;:::i;:::-;28949:58;;;;:::i;:::-;:62;;;;:::i;:::-;28923:88;;29022:26;29051:36;29071:15;29051;:19;;:36;;;;:::i;:::-;29022:65;;29100:25;29128:21;29100:49;;29162:36;29179:18;29162:16;:36::i;:::-;29211:18;29232:44;29258:17;29232:21;:25;;:44;;;;:::i;:::-;29211:65;;29289:23;29315:57;29354:17;29315:34;29330:18;;29315:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;29289:83;;29383:17;29403:51;29436:17;29403:28;29418:12;;29403:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29383:71;;29467:23;29524:9;29506:15;29493:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;29467:66;;29567:1;29546:18;:22;;;;29600:1;29579:18;:22;;;;29627:1;29612:12;:16;;;;29663:9;;;;;;;;;;;29655:23;;29686:9;29655:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29641:59;;;;;29719:7;29711:16;;;;;;29762:1;29744:15;:19;:42;;;;;29785:1;29767:15;:19;29744:42;29740:278;;;29803:46;29816:15;29833;29803:12;:46::i;:::-;29869:137;29902:18;29939:15;29973:18;;29869:137;;;;;;;;:::i;:::-;;;;;;;;29740:278;30052:15;;;;;;;;;;;30044:29;;30082:21;30044:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30030:79;;;;;30128:7;30120:16;;;;;;28427:1717;;;;;;;;;;28399:1745;:::o;7078:98::-;7136:7;7167:1;7163;:5;;;;:::i;:::-;7156:12;;7078:98;;;;:::o;7184:::-;7242:7;7273:1;7269;:5;;;;:::i;:::-;7262:12;;7184:98;;;;:::o;4584:125::-;;;;:::o;4717:124::-;;;;:::o;6972:98::-;7030:7;7061:1;7057;:5;;;;:::i;:::-;7050:12;;6972:98;;;;:::o;27280:589::-;27406:21;27444:1;27430:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27406:40;;27475:4;27457;27462:1;27457:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27501:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27491:4;27496:1;27491:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27536:62;27553:4;27568:15;27586:11;27536:8;:62::i;:::-;27637:15;:66;;;27718:11;27744:1;27788:4;27815;27835:15;27637:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27335:534;27280:589;:::o;27877:514::-;28025:62;28042:4;28057:15;28075:11;28025:8;:62::i;:::-;28130:15;:31;;;28169:9;28202:4;28222:11;28248:1;28291;28334:8;;;;;;;;;;;28357:15;28130:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27877:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:619::-;3858:6;3866;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;4304:2;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4275:118;3781:619;;;;;:::o;4406:60::-;4434:3;4455:5;4448:12;;4406:60;;;:::o;4472:142::-;4522:9;4555:53;4573:34;4582:24;4600:5;4582:24;:::i;:::-;4573:34;:::i;:::-;4555:53;:::i;:::-;4542:66;;4472:142;;;:::o;4620:126::-;4670:9;4703:37;4734:5;4703:37;:::i;:::-;4690:50;;4620:126;;;:::o;4752:153::-;4829:9;4862:37;4893:5;4862:37;:::i;:::-;4849:50;;4752:153;;;:::o;4911:185::-;5025:64;5083:5;5025:64;:::i;:::-;5020:3;5013:77;4911:185;;:::o;5102:276::-;5222:4;5260:2;5249:9;5245:18;5237:26;;5273:98;5368:1;5357:9;5353:17;5344:6;5273:98;:::i;:::-;5102:276;;;;:::o;5384:118::-;5471:24;5489:5;5471:24;:::i;:::-;5466:3;5459:37;5384:118;;:::o;5508:222::-;5601:4;5639:2;5628:9;5624:18;5616:26;;5652:71;5720:1;5709:9;5705:17;5696:6;5652:71;:::i;:::-;5508:222;;;;:::o;5736:329::-;5795:6;5844:2;5832:9;5823:7;5819:23;5815:32;5812:119;;;5850:79;;:::i;:::-;5812:119;5970:1;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5941:117;5736:329;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:176::-;9674:28;9670:1;9662:6;9658:14;9651:52;9534:176;:::o;9716:366::-;9858:3;9879:67;9943:2;9938:3;9879:67;:::i;:::-;9872:74;;9955:93;10044:3;9955:93;:::i;:::-;10073:2;10068:3;10064:12;10057:19;;9716:366;;;:::o;10088:419::-;10254:4;10292:2;10281:9;10277:18;10269:26;;10341:9;10335:4;10331:20;10327:1;10316:9;10312:17;10305:47;10369:131;10495:4;10369:131;:::i;:::-;10361:139;;10088:419;;;:::o;10513:180::-;10561:77;10558:1;10551:88;10658:4;10655:1;10648:15;10682:4;10679:1;10672:15;10699:143;10756:5;10787:6;10781:13;10772:22;;10803:33;10830:5;10803:33;:::i;:::-;10699:143;;;;:::o;10848:351::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11093:1;11118:64;11174:7;11165:6;11154:9;11150:22;11118:64;:::i;:::-;11108:74;;11064:128;10848:351;;;;:::o;11205:180::-;11253:77;11250:1;11243:88;11350:4;11347:1;11340:15;11374:4;11371:1;11364:15;11391:442;11540:4;11578:2;11567:9;11563:18;11555:26;;11591:71;11659:1;11648:9;11644:17;11635:6;11591:71;:::i;:::-;11672:72;11740:2;11729:9;11725:18;11716:6;11672:72;:::i;:::-;11754;11822:2;11811:9;11807:18;11798:6;11754:72;:::i;:::-;11391:442;;;;;;:::o;11839:137::-;11893:5;11924:6;11918:13;11909:22;;11940:30;11964:5;11940:30;:::i;:::-;11839:137;;;;:::o;11982:345::-;12049:6;12098:2;12086:9;12077:7;12073:23;12069:32;12066:119;;;12104:79;;:::i;:::-;12066:119;12224:1;12249:61;12302:7;12293:6;12282:9;12278:22;12249:61;:::i;:::-;12239:71;;12195:125;11982:345;;;;:::o;12333:85::-;12378:7;12407:5;12396:16;;12333:85;;;:::o;12424:158::-;12482:9;12515:61;12533:42;12542:32;12568:5;12542:32;:::i;:::-;12533:42;:::i;:::-;12515:61;:::i;:::-;12502:74;;12424:158;;;:::o;12588:147::-;12683:45;12722:5;12683:45;:::i;:::-;12678:3;12671:58;12588:147;;:::o;12741:114::-;12808:6;12842:5;12836:12;12826:22;;12741:114;;;:::o;12861:184::-;12960:11;12994:6;12989:3;12982:19;13034:4;13029:3;13025:14;13010:29;;12861:184;;;;:::o;13051:132::-;13118:4;13141:3;13133:11;;13171:4;13166:3;13162:14;13154:22;;13051:132;;;:::o;13189:108::-;13266:24;13284:5;13266:24;:::i;:::-;13261:3;13254:37;13189:108;;:::o;13303:179::-;13372:10;13393:46;13435:3;13427:6;13393:46;:::i;:::-;13471:4;13466:3;13462:14;13448:28;;13303:179;;;;:::o;13488:113::-;13558:4;13590;13585:3;13581:14;13573:22;;13488:113;;;:::o;13637:732::-;13756:3;13785:54;13833:5;13785:54;:::i;:::-;13855:86;13934:6;13929:3;13855:86;:::i;:::-;13848:93;;13965:56;14015:5;13965:56;:::i;:::-;14044:7;14075:1;14060:284;14085:6;14082:1;14079:13;14060:284;;;14161:6;14155:13;14188:63;14247:3;14232:13;14188:63;:::i;:::-;14181:70;;14274:60;14327:6;14274:60;:::i;:::-;14264:70;;14120:224;14107:1;14104;14100:9;14095:14;;14060:284;;;14064:14;14360:3;14353:10;;13761:608;;;13637:732;;;;:::o;14375:720::-;14610:4;14648:3;14637:9;14633:19;14625:27;;14662:79;14738:1;14727:9;14723:17;14714:6;14662:79;:::i;:::-;14788:9;14782:4;14778:20;14773:2;14762:9;14758:18;14751:48;14816:108;14919:4;14910:6;14816:108;:::i;:::-;14808:116;;14934:72;15002:2;14991:9;14987:18;14978:6;14934:72;:::i;:::-;15016;15084:2;15073:9;15069:18;15060:6;15016:72;:::i;:::-;14375:720;;;;;;;:::o;15101:220::-;15241:34;15237:1;15229:6;15225:14;15218:58;15310:3;15305:2;15297:6;15293:15;15286:28;15101:220;:::o;15327:366::-;15469:3;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15566:93;15655:3;15566:93;:::i;:::-;15684:2;15679:3;15675:12;15668:19;;15327:366;;;:::o;15699:419::-;15865:4;15903:2;15892:9;15888:18;15880:26;;15952:9;15946:4;15942:20;15938:1;15927:9;15923:17;15916:47;15980:131;16106:4;15980:131;:::i;:::-;15972:139;;15699:419;;;:::o;16124:180::-;16172:77;16169:1;16162:88;16269:4;16266:1;16259:15;16293:4;16290:1;16283:15;16310:191;16350:3;16369:20;16387:1;16369:20;:::i;:::-;16364:25;;16403:20;16421:1;16403:20;:::i;:::-;16398:25;;16446:1;16443;16439:9;16432:16;;16467:3;16464:1;16461:10;16458:36;;;16474:18;;:::i;:::-;16458:36;16310:191;;;;:::o;16507:182::-;16647:34;16643:1;16635:6;16631:14;16624:58;16507:182;:::o;16695:366::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16695:366;;;:::o;17067:419::-;17233:4;17271:2;17260:9;17256:18;17248:26;;17320:9;17314:4;17310:20;17306:1;17295:9;17291:17;17284:47;17348:131;17474:4;17348:131;:::i;:::-;17340:139;;17067:419;;;:::o;17492:410::-;17532:7;17555:20;17573:1;17555:20;:::i;:::-;17550:25;;17589:20;17607:1;17589:20;:::i;:::-;17584:25;;17644:1;17641;17637:9;17666:30;17684:11;17666:30;:::i;:::-;17655:41;;17845:1;17836:7;17832:15;17829:1;17826:22;17806:1;17799:9;17779:83;17756:139;;17875:18;;:::i;:::-;17756:139;17540:362;17492:410;;;;:::o;17908:180::-;17956:77;17953:1;17946:88;18053:4;18050:1;18043:15;18077:4;18074:1;18067:15;18094:185;18134:1;18151:20;18169:1;18151:20;:::i;:::-;18146:25;;18185:20;18203:1;18185:20;:::i;:::-;18180:25;;18224:1;18214:35;;18229:18;;:::i;:::-;18214:35;18271:1;18268;18264:9;18259:14;;18094:185;;;;:::o;18285:234::-;18425:34;18421:1;18413:6;18409:14;18402:58;18494:17;18489:2;18481:6;18477:15;18470:42;18285:234;:::o;18525:366::-;18667:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18764:93;18853:3;18764:93;:::i;:::-;18882:2;18877:3;18873:12;18866:19;;18525:366;;;:::o;18897:419::-;19063:4;19101:2;19090:9;19086:18;19078:26;;19150:9;19144:4;19140:20;19136:1;19125:9;19121:17;19114:47;19178:131;19304:4;19178:131;:::i;:::-;19170:139;;18897:419;;;:::o;19322:227::-;19462:34;19458:1;19450:6;19446:14;19439:58;19531:10;19526:2;19518:6;19514:15;19507:35;19322:227;:::o;19555:366::-;19697:3;19718:67;19782:2;19777:3;19718:67;:::i;:::-;19711:74;;19794:93;19883:3;19794:93;:::i;:::-;19912:2;19907:3;19903:12;19896:19;;19555:366;;;:::o;19927:419::-;20093:4;20131:2;20120:9;20116:18;20108:26;;20180:9;20174:4;20170:20;20166:1;20155:9;20151:17;20144:47;20208:131;20334:4;20208:131;:::i;:::-;20200:139;;19927:419;;;:::o;20352:244::-;20492:34;20488:1;20480:6;20476:14;20469:58;20561:27;20556:2;20548:6;20544:15;20537:52;20352:244;:::o;20602:366::-;20744:3;20765:67;20829:2;20824:3;20765:67;:::i;:::-;20758:74;;20841:93;20930:3;20841:93;:::i;:::-;20959:2;20954:3;20950:12;20943:19;;20602:366;;;:::o;20974:419::-;21140:4;21178:2;21167:9;21163:18;21155:26;;21227:9;21221:4;21217:20;21213:1;21202:9;21198:17;21191:47;21255:131;21381:4;21255:131;:::i;:::-;21247:139;;20974:419;;;:::o;21399:147::-;21500:11;21537:3;21522:18;;21399:147;;;;:::o;21552:114::-;;:::o;21672:398::-;21831:3;21852:83;21933:1;21928:3;21852:83;:::i;:::-;21845:90;;21944:93;22033:3;21944:93;:::i;:::-;22062:1;22057:3;22053:11;22046:18;;21672:398;;;:::o;22076:379::-;22260:3;22282:147;22425:3;22282:147;:::i;:::-;22275:154;;22446:3;22439:10;;22076:379;;;:::o;22461:224::-;22601:34;22597:1;22589:6;22585:14;22578:58;22670:7;22665:2;22657:6;22653:15;22646:32;22461:224;:::o;22691:366::-;22833:3;22854:67;22918:2;22913:3;22854:67;:::i;:::-;22847:74;;22930:93;23019:3;22930:93;:::i;:::-;23048:2;23043:3;23039:12;23032:19;;22691:366;;;:::o;23063:419::-;23229:4;23267:2;23256:9;23252:18;23244:26;;23316:9;23310:4;23306:20;23302:1;23291:9;23287:17;23280:47;23344:131;23470:4;23344:131;:::i;:::-;23336:139;;23063:419;;;:::o;23488:223::-;23628:34;23624:1;23616:6;23612:14;23605:58;23697:6;23692:2;23684:6;23680:15;23673:31;23488:223;:::o;23717:366::-;23859:3;23880:67;23944:2;23939:3;23880:67;:::i;:::-;23873:74;;23956:93;24045:3;23956:93;:::i;:::-;24074:2;24069:3;24065:12;24058:19;;23717:366;;;:::o;24089:419::-;24255:4;24293:2;24282:9;24278:18;24270:26;;24342:9;24336:4;24332:20;24328:1;24317:9;24313:17;24306:47;24370:131;24496:4;24370:131;:::i;:::-;24362:139;;24089:419;;;:::o;24514:240::-;24654:34;24650:1;24642:6;24638:14;24631:58;24723:23;24718:2;24710:6;24706:15;24699:48;24514:240;:::o;24760:366::-;24902:3;24923:67;24987:2;24982:3;24923:67;:::i;:::-;24916:74;;24999:93;25088:3;24999:93;:::i;:::-;25117:2;25112:3;25108:12;25101:19;;24760:366;;;:::o;25132:419::-;25298:4;25336:2;25325:9;25321:18;25313:26;;25385:9;25379:4;25375:20;25371:1;25360:9;25356:17;25349:47;25413:131;25539:4;25413:131;:::i;:::-;25405:139;;25132:419;;;:::o;25557:239::-;25697:34;25693:1;25685:6;25681:14;25674:58;25766:22;25761:2;25753:6;25749:15;25742:47;25557:239;:::o;25802:366::-;25944:3;25965:67;26029:2;26024:3;25965:67;:::i;:::-;25958:74;;26041:93;26130:3;26041:93;:::i;:::-;26159:2;26154:3;26150:12;26143:19;;25802:366;;;:::o;26174:419::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:131;26581:4;26455:131;:::i;:::-;26447:139;;26174:419;;;:::o;26599:225::-;26739:34;26735:1;26727:6;26723:14;26716:58;26808:8;26803:2;26795:6;26791:15;26784:33;26599:225;:::o;26830:366::-;26972:3;26993:67;27057:2;27052:3;26993:67;:::i;:::-;26986:74;;27069:93;27158:3;27069:93;:::i;:::-;27187:2;27182:3;27178:12;27171:19;;26830:366;;;:::o;27202:419::-;27368:4;27406:2;27395:9;27391:18;27383:26;;27455:9;27449:4;27445:20;27441:1;27430:9;27426:17;27419:47;27483:131;27609:4;27483:131;:::i;:::-;27475:139;;27202:419;;;:::o;27627:223::-;27767:34;27763:1;27755:6;27751:14;27744:58;27836:6;27831:2;27823:6;27819:15;27812:31;27627:223;:::o;27856:366::-;27998:3;28019:67;28083:2;28078:3;28019:67;:::i;:::-;28012:74;;28095:93;28184:3;28095:93;:::i;:::-;28213:2;28208:3;28204:12;28197:19;;27856:366;;;:::o;28228:419::-;28394:4;28432:2;28421:9;28417:18;28409:26;;28481:9;28475:4;28471:20;28467:1;28456:9;28452:17;28445:47;28509:131;28635:4;28509:131;:::i;:::-;28501:139;;28228:419;;;:::o;28653:221::-;28793:34;28789:1;28781:6;28777:14;28770:58;28862:4;28857:2;28849:6;28845:15;28838:29;28653:221;:::o;28880:366::-;29022:3;29043:67;29107:2;29102:3;29043:67;:::i;:::-;29036:74;;29119:93;29208:3;29119:93;:::i;:::-;29237:2;29232:3;29228:12;29221:19;;28880:366;;;:::o;29252:419::-;29418:4;29456:2;29445:9;29441:18;29433:26;;29505:9;29499:4;29495:20;29491:1;29480:9;29476:17;29469:47;29533:131;29659:4;29533:131;:::i;:::-;29525:139;;29252:419;;;:::o;29677:224::-;29817:34;29813:1;29805:6;29801:14;29794:58;29886:7;29881:2;29873:6;29869:15;29862:32;29677:224;:::o;29907:366::-;30049:3;30070:67;30134:2;30129:3;30070:67;:::i;:::-;30063:74;;30146:93;30235:3;30146:93;:::i;:::-;30264:2;30259:3;30255:12;30248:19;;29907:366;;;:::o;30279:419::-;30445:4;30483:2;30472:9;30468:18;30460:26;;30532:9;30526:4;30522:20;30518:1;30507:9;30503:17;30496:47;30560:131;30686:4;30560:131;:::i;:::-;30552:139;;30279:419;;;:::o;30704:222::-;30844:34;30840:1;30832:6;30828:14;30821:58;30913:5;30908:2;30900:6;30896:15;30889:30;30704:222;:::o;30932:366::-;31074:3;31095:67;31159:2;31154:3;31095:67;:::i;:::-;31088:74;;31171:93;31260:3;31171:93;:::i;:::-;31289:2;31284:3;31280:12;31273:19;;30932:366;;;:::o;31304:419::-;31470:4;31508:2;31497:9;31493:18;31485:26;;31557:9;31551:4;31547:20;31543:1;31532:9;31528:17;31521:47;31585:131;31711:4;31585:131;:::i;:::-;31577:139;;31304:419;;;:::o;31729:172::-;31869:24;31865:1;31857:6;31853:14;31846:48;31729:172;:::o;31907:366::-;32049:3;32070:67;32134:2;32129:3;32070:67;:::i;:::-;32063:74;;32146:93;32235:3;32146:93;:::i;:::-;32264:2;32259:3;32255:12;32248:19;;31907:366;;;:::o;32279:419::-;32445:4;32483:2;32472:9;32468:18;32460:26;;32532:9;32526:4;32522:20;32518:1;32507:9;32503:17;32496:47;32560:131;32686:4;32560:131;:::i;:::-;32552:139;;32279:419;;;:::o;32704:295::-;32844:34;32840:1;32832:6;32828:14;32821:58;32913:34;32908:2;32900:6;32896:15;32889:59;32982:9;32977:2;32969:6;32965:15;32958:34;32704:295;:::o;33005:366::-;33147:3;33168:67;33232:2;33227:3;33168:67;:::i;:::-;33161:74;;33244:93;33333:3;33244:93;:::i;:::-;33362:2;33357:3;33353:12;33346:19;;33005:366;;;:::o;33377:419::-;33543:4;33581:2;33570:9;33566:18;33558:26;;33630:9;33624:4;33620:20;33616:1;33605:9;33601:17;33594:47;33658:131;33784:4;33658:131;:::i;:::-;33650:139;;33377:419;;;:::o;33802:240::-;33942:34;33938:1;33930:6;33926:14;33919:58;34011:23;34006:2;33998:6;33994:15;33987:48;33802:240;:::o;34048:366::-;34190:3;34211:67;34275:2;34270:3;34211:67;:::i;:::-;34204:74;;34287:93;34376:3;34287:93;:::i;:::-;34405:2;34400:3;34396:12;34389:19;;34048:366;;;:::o;34420:419::-;34586:4;34624:2;34613:9;34609:18;34601:26;;34673:9;34667:4;34663:20;34659:1;34648:9;34644:17;34637:47;34701:131;34827:4;34701:131;:::i;:::-;34693:139;;34420:419;;;:::o;34845:169::-;34985:21;34981:1;34973:6;34969:14;34962:45;34845:169;:::o;35020:366::-;35162:3;35183:67;35247:2;35242:3;35183:67;:::i;:::-;35176:74;;35259:93;35348:3;35259:93;:::i;:::-;35377:2;35372:3;35368:12;35361:19;;35020:366;;;:::o;35392:419::-;35558:4;35596:2;35585:9;35581:18;35573:26;;35645:9;35639:4;35635:20;35631:1;35620:9;35616:17;35609:47;35673:131;35799:4;35673:131;:::i;:::-;35665:139;;35392:419;;;:::o;35817:241::-;35957:34;35953:1;35945:6;35941:14;35934:58;36026:24;36021:2;36013:6;36009:15;36002:49;35817:241;:::o;36064:366::-;36206:3;36227:67;36291:2;36286:3;36227:67;:::i;:::-;36220:74;;36303:93;36392:3;36303:93;:::i;:::-;36421:2;36416:3;36412:12;36405:19;;36064:366;;;:::o;36436:419::-;36602:4;36640:2;36629:9;36625:18;36617:26;;36689:9;36683:4;36679:20;36675:1;36664:9;36660:17;36653:47;36717:131;36843:4;36717:131;:::i;:::-;36709:139;;36436:419;;;:::o;36861:194::-;36901:4;36921:20;36939:1;36921:20;:::i;:::-;36916:25;;36955:20;36973:1;36955:20;:::i;:::-;36950:25;;36999:1;36996;36992:9;36984:17;;37023:1;37017:4;37014:11;37011:37;;;37028:18;;:::i;:::-;37011:37;36861:194;;;;:::o;37061:225::-;37201:34;37197:1;37189:6;37185:14;37178:58;37270:8;37265:2;37257:6;37253:15;37246:33;37061:225;:::o;37292:366::-;37434:3;37455:67;37519:2;37514:3;37455:67;:::i;:::-;37448:74;;37531:93;37620:3;37531:93;:::i;:::-;37649:2;37644:3;37640:12;37633:19;;37292:366;;;:::o;37664:419::-;37830:4;37868:2;37857:9;37853:18;37845:26;;37917:9;37911:4;37907:20;37903:1;37892:9;37888:17;37881:47;37945:131;38071:4;37945:131;:::i;:::-;37937:139;;37664:419;;;:::o;38089:442::-;38238:4;38276:2;38265:9;38261:18;38253:26;;38289:71;38357:1;38346:9;38342:17;38333:6;38289:71;:::i;:::-;38370:72;38438:2;38427:9;38423:18;38414:6;38370:72;:::i;:::-;38452;38520:2;38509:9;38505:18;38496:6;38452:72;:::i;:::-;38089:442;;;;;;:::o;38537:831::-;38800:4;38838:3;38827:9;38823:19;38815:27;;38852:71;38920:1;38909:9;38905:17;38896:6;38852:71;:::i;:::-;38933:80;39009:2;38998:9;38994:18;38985:6;38933:80;:::i;:::-;39060:9;39054:4;39050:20;39045:2;39034:9;39030:18;39023:48;39088:108;39191:4;39182:6;39088:108;:::i;:::-;39080:116;;39206:72;39274:2;39263:9;39259:18;39250:6;39206:72;:::i;:::-;39288:73;39356:3;39345:9;39341:19;39332:6;39288:73;:::i;:::-;38537:831;;;;;;;;:::o;39374:807::-;39623:4;39661:3;39650:9;39646:19;39638:27;;39675:71;39743:1;39732:9;39728:17;39719:6;39675:71;:::i;:::-;39756:72;39824:2;39813:9;39809:18;39800:6;39756:72;:::i;:::-;39838:80;39914:2;39903:9;39899:18;39890:6;39838:80;:::i;:::-;39928;40004:2;39993:9;39989:18;39980:6;39928:80;:::i;:::-;40018:73;40086:3;40075:9;40071:19;40062:6;40018:73;:::i;:::-;40101;40169:3;40158:9;40154:19;40145:6;40101:73;:::i;:::-;39374:807;;;;;;;;;:::o;40187:143::-;40244:5;40275:6;40269:13;40260:22;;40291:33;40318:5;40291:33;:::i;:::-;40187:143;;;;:::o;40336:663::-;40424:6;40432;40440;40489:2;40477:9;40468:7;40464:23;40460:32;40457:119;;;40495:79;;:::i;:::-;40457:119;40615:1;40640:64;40696:7;40687:6;40676:9;40672:22;40640:64;:::i;:::-;40630:74;;40586:128;40753:2;40779:64;40835:7;40826:6;40815:9;40811:22;40779:64;:::i;:::-;40769:74;;40724:129;40892:2;40918:64;40974:7;40965:6;40954:9;40950:22;40918:64;:::i;:::-;40908:74;;40863:129;40336:663;;;;;:::o

Swarm Source

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