ETH Price: $2,454.19 (-1.35%)

Token

Accord AI (ACCORD)
 

Overview

Max Total Supply

100,000,000 ACCORD

Holders

492

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
myethfi.eth
Balance
5,012.986823709424676335 ACCORD

Value
$0.00
0x59cef220a9adbee23f8a2f5f734fe553e4f7cbef
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:
Accord

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-14
*/

/**

Accord AI: Revolutionizing Crypto Trading on Discord

Step into the future of cryptocurrency with Accord AI, the first-ever crypto-specialized AI seamlessly integrated into Discord. 
Transform your trading experience with the ultimate CEX trading bot designed to bring the power of real-time trading, portfolio management, and secure cross-chain swaps directly to your Discord server.


Website: https://accordai.tech
Twitter: https://twitter.com/Accord_AI
Telegram: https://t.me/Accord_AI
Discord + Utility: https://discord.com/invite/EzQKUamq
                                                                                                   
**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public marketerWallet;
    address public DevsWallet;

    uint256 public maxTx;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallets;

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

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

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

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

    uint256 public tokensForMarkets;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTx;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event marketerWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    event DevsWalletUpdated(
        address indexed newWallet,
        address indexed olDevsWalletallet
    );

    constructor() ERC20("Accord AI", unicode"ACCORD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 5;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 5;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTx = 1_000_000 * 1e18;
        maxWallets = 1_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 3) / 10000;

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

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

        marketerWallet = address(0xC37Fb205EAaD8BC6d48D23Fc9884e30734133A5a);
        DevsWallet = address(0xC37Fb205EAaD8BC6d48D23Fc9884e30734133A5a);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

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

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

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

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

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

    function updateFees(
        uint256 _buyMarketingFee,
        uint256 _buyDevFee,
        uint256 _sellMarketingFee,
        uint256 _sellDevFee) external onlyOwner {
        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 75, "Must keep fees at 75% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 75, "Must keep fees at 75% or less");
    }

    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 updatemarketerWallet(address newmarketerWallet) external onlyOwner {
        emit marketerWalletUpdated(newmarketerWallet, marketerWallet);
        marketerWallet = newmarketerWallet;
    }

    function updateDevsWallet(address newWallet) external onlyOwner {
        emit DevsWalletUpdated(newWallet, DevsWallet);
        DevsWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !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] && !_isExcludedmaxTx[to]) {
                    require(amount <= maxTx, "Buy transfer amount exceeds the maxTx.");
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTx[from]) {
                    require(amount <= maxTx, "Sell transfer amount exceeds the maxTx.");
                }
                else if (!_isExcludedmaxTx[to]) {
                    require(amount + balanceOf(to) <= maxWallets, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarkets += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarkets += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

    function manualSwap(uint256 amount) external {
        require(_msgSender() == marketerWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    } 

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

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

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

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

        if (contractBalance == 0) {
            return;
        }

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

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

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

        tokensForMarkets = 0;
        tokensForDev = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"olDevsWalletallet","type":"address"}],"name":"DevsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"olDevsWalletallet","type":"address"}],"name":"marketerWalletUpdated","type":"event"},{"inputs":[],"name":"DevsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"excludeFrommaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallets","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":"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":[],"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":"tokensForMarkets","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":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","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":[{"internalType":"address","name":"newmarketerWallet","type":"address"}],"name":"updatemarketerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWalletsAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600981526020017f4163636f726420414900000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4143434f5244000000000000000000000000000000000000000000000000000081525081600390816100f29190610ca5565b5080600490816101029190610ca5565b50505061012161011661056060201b60201c565b61056760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014a81600161062a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101eb9190610dd2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102749190610dd2565b6040518363ffffffff1660e01b8152600401610291929190610e0c565b6020604051808303815f875af11580156102ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d19190610dd2565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061034260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161062a60201b60201c565b61037460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161070a60201b60201c565b5f600590505f80600590505f806a52b7d2dcc80cd2e4000000905069d3c21bcecceda100000060098190555069d3c21bcecceda1000000600b819055506127106003826103c19190610e60565b6103cb9190610ece565b600a8190555084601081905550836011819055506011546010546103ef9190610efe565b600f8190555082601381905550816014819055506014546013546104139190610efe565b60128190555073c37fb205eaad8bc6d48d23fc9884e30734133a5a60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c37fb205eaad8bc6d48d23fc9884e30734133a5a60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104df6104d26107a860201b60201c565b60016107d060201b60201c565b6104f03060016107d060201b60201c565b61050361dead60016107d060201b60201c565b6105216105146107a860201b60201c565b600161062a60201b60201c565b61053230600161062a60201b60201c565b61054561dead600161062a60201b60201c565b61055533826108fe60201b60201c565b50505050505061106c565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61063861056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661065c6107a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990610f8b565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107de61056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108026107a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90610f8b565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108f29190610fc3565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611026565b60405180910390fd5b61097d5f8383610a6160201b60201c565b8060025f82825461098e9190610efe565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e09190610efe565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a449190611053565b60405180910390a3610a5d5f8383610a6660201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae657607f821691505b602082108103610af957610af8610aa2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b20565b610b658683610b20565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610ba9610ba4610b9f84610b7d565b610b86565b610b7d565b9050919050565b5f819050919050565b610bc283610b8f565b610bd6610bce82610bb0565b848454610b2c565b825550505050565b5f90565b610bea610bde565b610bf5818484610bb9565b505050565b5b81811015610c1857610c0d5f82610be2565b600181019050610bfb565b5050565b601f821115610c5d57610c2e81610aff565b610c3784610b11565b81016020851015610c46578190505b610c5a610c5285610b11565b830182610bfa565b50505b505050565b5f82821c905092915050565b5f610c7d5f1984600802610c62565b1980831691505092915050565b5f610c958383610c6e565b9150826002028217905092915050565b610cae82610a6b565b67ffffffffffffffff811115610cc757610cc6610a75565b5b610cd18254610acf565b610cdc828285610c1c565b5f60209050601f831160018114610d0d575f8415610cfb578287015190505b610d058582610c8a565b865550610d6c565b601f198416610d1b86610aff565b5f5b82811015610d4257848901518255600182019150602085019450602081019050610d1d565b86831015610d5f5784890151610d5b601f891682610c6e565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da182610d78565b9050919050565b610db181610d97565b8114610dbb575f80fd5b50565b5f81519050610dcc81610da8565b92915050565b5f60208284031215610de757610de6610d74565b5b5f610df484828501610dbe565b91505092915050565b610e0681610d97565b82525050565b5f604082019050610e1f5f830185610dfd565b610e2c6020830184610dfd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6a82610b7d565b9150610e7583610b7d565b9250828202610e8381610b7d565b91508282048414831517610e9a57610e99610e33565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ed882610b7d565b9150610ee383610b7d565b925082610ef357610ef2610ea1565b5b828204905092915050565b5f610f0882610b7d565b9150610f1383610b7d565b9250828201905080821115610f2b57610f2a610e33565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f75602083610f31565b9150610f8082610f41565b602082019050919050565b5f6020820190508181035f830152610fa281610f69565b9050919050565b5f8115159050919050565b610fbd81610fa9565b82525050565b5f602082019050610fd65f830184610fb4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611010601f83610f31565b915061101b82610fdc565b602082019050919050565b5f6020820190508181035f83015261103d81611004565b9050919050565b61104d81610b7d565b82525050565b5f6020820190506110665f830184611044565b92915050565b608051614efc6110a05f395f8181610df7015281816129fa0152818161349801528181613577015261359e0152614efc5ff3fe60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613db1565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c72565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613dfe565b611249565b6040516106019190613c72565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d0e565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e53565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d0e565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c72565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613dfe565b611478565b60405161070b9190613d0e565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d0e565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c72565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d0e565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fa8565b60405180910390fd5b816010819055508060118190555060115460105461140f9190613ff3565b600f81905550604b600f54111561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fa8565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d83611478565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea2646970667358221220ad29ff4cce298c7ce3900e4b37cffbc1c1ebe8bba05f1d6921fa9618e9dc3b0764736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638a8c523c116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80638a8c523c146107a85780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b806349bd5a5e116102695780636a486a8e11610222578063715018a6116101fc578063715018a6146107145780637437681e1461072a578063751039fc146107545780637bce5a041461077e57610324565b80636a486a8e146106845780636ddd1713146106ae57806370a08231146106d857610324565b806349bd5a5e1461057a5780634a62bb65146105a45780634fbee193146105ce57806361528e271461060a578063644130d81461063457806366ca9b831461065c57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b60405161059b9190613db1565b60405180910390f35b3480156105af575f80fd5b506105b8611237565b6040516105c59190613c72565b60405180910390f35b3480156105d9575f80fd5b506105f460048036038101906105ef9190613dfe565b611249565b6040516106019190613c72565b60405180910390f35b348015610615575f80fd5b5061061e61129b565b60405161062b9190613d0e565b60405180910390f35b34801561063f575f80fd5b5061065a60048036038101906106559190613e53565b6112a1565b005b348015610667575f80fd5b50610682600480360381019061067d9190613af2565b611375565b005b34801561068f575f80fd5b5061069861145f565b6040516106a59190613d0e565b60405180910390f35b3480156106b9575f80fd5b506106c2611465565b6040516106cf9190613c72565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190613dfe565b611478565b60405161070b9190613d0e565b60405180910390f35b34801561071f575f80fd5b506107286114bd565b005b348015610735575f80fd5b5061073e611544565b60405161074b9190613d0e565b60405180910390f35b34801561075f575f80fd5b5061076861154a565b6040516107759190613c72565b60405180910390f35b348015610789575f80fd5b506107926115e7565b60405161079f9190613d0e565b60405180910390f35b3480156107b3575f80fd5b506107bc6115ed565b005b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b6112a96123cc565b73ffffffffffffffffffffffffffffffffffffffff166112c76116a1565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61137d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661139b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890613fa8565b60405180910390fd5b816010819055508060118190555060115460105461140f9190613ff3565b600f81905550604b600f54111561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114c56123cc565b73ffffffffffffffffffffffffffffffffffffffff166114e36116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090613fa8565b60405180910390fd5b6115425f61329a565b565b60095481565b5f6115536123cc565b73ffffffffffffffffffffffffffffffffffffffff166115716116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be90613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b6115f56123cc565b73ffffffffffffffffffffffffffffffffffffffff166116136116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad030611478565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d83611478565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df483611478565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f30611478565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad30611478565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea2646970667358221220ad29ff4cce298c7ce3900e4b37cffbc1c1ebe8bba05f1d6921fa9618e9dc3b0764736f6c634300081a0033

Deployed Bytecode Sourcemap

15624:13192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21640:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3321:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4235:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15700:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3642:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19944:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20197:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4412:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15793:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16022:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15921;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3541:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4912:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15758:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16056:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23042:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16562:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20464:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21321:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16455:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16136:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3758:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1443:103;;;;;;;;;;;;;:::i;:::-;;15955:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19167:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16385:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19047:112;;;;;;;;;;;;;:::i;:::-;;1220:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16490:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20615:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3429:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22156:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16422:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16600:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16528:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5135:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15885:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3893:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16804:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27169:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22873:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16096:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21966:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20723:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16302:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19439:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16351:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4076:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15982:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16747:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19296:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22664:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1554;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21640:318;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21778:13:::1;21759:16;:32;;;;21815:7;21802:10;:20;;;;21868:10;;21849:16;;:29;;;;:::i;:::-;21833:13;:45;;;;21914:2;21897:13;;:19;;21889:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21640:318:::0;;:::o;3321:100::-;3375:13;3408:5;3401:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3321:100;:::o;4235:169::-;4318:4;4335:39;4344:12;:10;:12::i;:::-;4358:7;4367:6;4335:8;:39::i;:::-;4392:4;4385:11;;4235:169;;;;:::o;15700:51::-;;;:::o;3642:108::-;3703:7;3730:12;;3723:19;;3642:108;:::o;19944:245::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20081:4:::1;20073;20068:1;20052:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20051:26;;;;:::i;:::-;20050:35;;;;:::i;:::-;20040:6;:45;;20018:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;20174:6;20164;:17;;;;:::i;:::-;20156:5;:25;;;;19944:245:::0;:::o;20197:259::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20338:4:::1;20330;20325:1;20309:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20308:26;;;;:::i;:::-;20307:35;;;;:::i;:::-;20297:6;:45;;20275:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;20441:6;20431;:17;;;;:::i;:::-;20418:10;:30;;;;20197:259:::0;:::o;4412:492::-;4552:4;4569:36;4579:6;4587:9;4598:6;4569:9;:36::i;:::-;4618:24;4645:11;:19;4657:6;4645:19;;;;;;;;;;;;;;;:33;4665:12;:10;:12::i;:::-;4645:33;;;;;;;;;;;;;;;;4618:60;;4717:6;4697:16;:26;;4689:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4804:57;4813:6;4821:12;:10;:12::i;:::-;4854:6;4835:16;:25;4804:8;:57::i;:::-;4892:4;4885:11;;;4412:492;;;;;:::o;15793:53::-;15839:6;15793:53;:::o;16022:25::-;;;;:::o;15921:::-;;;;;;;;;;;;;:::o;3541:93::-;3599:5;3624:2;3617:9;;3541:93;:::o;4912:215::-;5000:4;5017:80;5026:12;:10;:12::i;:::-;5040:7;5086:10;5049:11;:25;5061:12;:10;:12::i;:::-;5049:25;;;;;;;;;;;;;;;:34;5075:7;5049:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5017:8;:80::i;:::-;5115:4;5108:11;;4912:215;;;;:::o;15758:28::-;;;;;;;;;;;;;:::o;16056:33::-;;;;;;;;;;;;;:::o;23042:126::-;23108:4;23132:19;:28;23152:7;23132:28;;;;;;;;;;;;;;;;;;;;;;;;;23125:35;;23042:126;;;:::o;16562:31::-;;;;:::o;20464:143::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20595:4:::1;20568:16;:24;20585:6;20568:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20464:143:::0;;:::o;21321:311::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21457:13:::1;21439:15;:31;;;;21493:7;21481:9;:19;;;;21544:9;;21526:15;;:27;;;;:::i;:::-;21511:12;:42;;;;21588:2;21572:12;;:18;;21564:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21321:311:::0;;:::o;16455:28::-;;;;:::o;16136:31::-;;;;;;;;;;;;;:::o;3758:127::-;3832:7;3859:9;:18;3869:7;3859:18;;;;;;;;;;;;;;;;3852:25;;3758:127;;;:::o;1443:103::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1508:30:::1;1535:1;1508:18;:30::i;:::-;1443:103::o:0;15955:20::-;;;;:::o;19167:121::-;19219:4;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19253:5:::1;19236:14;;:22;;;;;;;;;;;;;;;;;;19276:4;19269:11;;19167:121:::0;:::o;16385:30::-;;;;:::o;19047:112::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19118:4:::1;19102:13;;:20;;;;;;;;;;;;;;;;;;19147:4;19133:11;;:18;;;;;;;;;;;;;;;;;;19047:112::o:0;1220:87::-;1266:7;1293:6;;;;;;;;;;;1286:13;;1220:87;:::o;16490:31::-;;;;:::o;20615:100::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20700:7:::1;20686:11;;:21;;;;;;;;;;;;;;;;;;20615:100:::0;:::o;3429:104::-;3485:13;3518:7;3511:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3429:104;:::o;22156:304::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22300:13:::1;;;;;;;;;;;22292:21;;:4;:21;;::::0;22270:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22411:41;22440:4;22446:5;22411:28;:41::i;:::-;22156:304:::0;;:::o;16422:24::-;;;;:::o;16600:27::-;;;;:::o;16528:25::-;;;;:::o;5135:413::-;5228:4;5245:24;5272:11;:25;5284:12;:10;:12::i;:::-;5272:25;;;;;;;;;;;;;;;:34;5298:7;5272:34;;;;;;;;;;;;;;;;5245:61;;5345:15;5325:16;:35;;5317:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5438:67;5447:12;:10;:12::i;:::-;5461:7;5489:15;5470:16;:34;5438:8;:67::i;:::-;5536:4;5529:11;;;5135:413;;;;:::o;15885:29::-;;;;;;;;;;;;;:::o;3893:175::-;3979:4;3996:42;4006:12;:10;:12::i;:::-;4020:9;4031:6;3996:9;:42::i;:::-;4056:4;4049:11;;3893:175;;;;:::o;16804:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27169:222::-;27249:14;;;;;;;;;;;27233:30;;:12;:10;:12::i;:::-;:30;;;27225:39;;;;;;27293:24;27311:4;27293:9;:24::i;:::-;27283:6;:34;;:48;;;;;27330:1;27321:6;:10;27283:48;27275:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27359:24;27376:6;27359:16;:24::i;:::-;27169:222;:::o;22873:161::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22982:10:::1;;;;;;;;;;;22953:40;;22971:9;22953:40;;;;;;;;;;;;23017:9;23004:10;;:22;;;;;;;;;;;;;;;;;;22873:161:::0;:::o;16096:33::-;;;;;;;;;;;;;:::o;21966:182::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22082:8:::1;22051:19;:28;22071:7;22051:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22122:7;22106:34;;;22131:8;22106:34;;;;;;:::i;:::-;;;;;;;;21966:182:::0;;:::o;20723:590::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20922:16:::1;20904:15;:34;;;;20961:10;20949:9;:22;;;;21015:9;;20997:15;;:27;;;;:::i;:::-;20982:12;:42;;;;21054:17;21035:16;:36;;;;21095:11;21082:10;:24;;;;21152:10;;21133:16;;:29;;;;:::i;:::-;21117:13;:45;;;;21197:2;21181:12;;:18;;21173:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21269:2;21252:13;;:19;;21244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20723:590:::0;;;;:::o;16302:40::-;;;;;;;;;;;;;:::o;19439:497::-;19547:4;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19626:6:::1;19621:1;19605:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19604:28;;;;:::i;:::-;19591:9;:41;;19569:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19781:4;19776:1;19760:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19759:26;;;;:::i;:::-;19746:9;:39;;19724:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19897:9;19876:18;:30;;;;19924:4;19917:11;;19439:497:::0;;;:::o;16351:27::-;;;;:::o;4076:151::-;4165:7;4192:11;:18;4204:5;4192:18;;;;;;;;;;;;;;;:27;4211:7;4192:27;;;;;;;;;;;;;;;;4185:34;;4076:151;;;;:::o;15982:33::-;;;;:::o;16747:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;19296:135::-;19356:4;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19396:5:::1;19373:20;;:28;;;;;;;;;;;;;;;;;;19419:4;19412:11;;19296:135:::0;:::o;22664:201::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22797:14:::1;;;;;;;;;;;22756:56;;22778:17;22756:56;;;;;;;;;;;;22840:17;22823:14;;:34;;;;;;;;;;;;;;;;;;22664:201:::0;:::o;1554:::-;1366:12;:10;:12::i;:::-;1355:23;;:7;:5;:7::i;:::-;:23;;;1347:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1663:1:::1;1643:22;;:8;:22;;::::0;1635:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1719:28;1738:8;1719:18;:28::i;:::-;1554:201:::0;:::o;766:98::-;819:7;846:10;839:17;;766:98;:::o;7303:380::-;7456:1;7439:19;;:5;:19;;;7431:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7537:1;7518:21;;:7;:21;;;7510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7621:6;7591:11;:18;7603:5;7591:18;;;;;;;;;;;;;;;:27;7610:7;7591:27;;;;;;;;;;;;;;;:36;;;;7659:7;7643:32;;7652:5;7643:32;;;7668:6;7643:32;;;;;;:::i;:::-;;;;;;;;7303:380;;;:::o;23226:3820::-;23374:1;23358:18;;:4;:18;;;23350:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23451:1;23437:16;;:2;:16;;;23429:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23513:12;:18;23526:4;23513:18;;;;;;;;;;;;;;;;;;;;;;;;;23512:19;23504:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;23573:12;:16;23586:2;23573:16;;;;;;;;;;;;;;;;;;;;;;;;;23572:17;23564:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:1;23626:6;:11;23622:93;;23654:28;23670:4;23676:2;23680:1;23654:15;:28::i;:::-;23697:7;;23622:93;23731:14;;;;;;;;;;;23727:1666;;;23774:7;:5;:7::i;:::-;23766:15;;:4;:15;;;;:49;;;;;23808:7;:5;:7::i;:::-;23802:13;;:2;:13;;;;23766:49;:86;;;;;23850:1;23836:16;;:2;:16;;;;23766:86;:128;;;;;23887:6;23873:21;;:2;:21;;;;23766:128;:158;;;;;23916:8;;;;;;;;;;;23915:9;23766:158;23762:1620;;;23950:13;;;;;;;;;;;23945:150;;23996:19;:25;24016:4;23996:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24025:19;:23;24045:2;24025:23;;;;;;;;;;;;;;;;;;;;;;;;;23996:52;23988:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23945:150;24251:20;;;;;;;;;;;24247:425;;;24306:7;:5;:7::i;:::-;24300:13;;:2;:13;;;;:47;;;;;24331:15;24317:30;;:2;:30;;;;24300:47;:79;;;;;24365:13;;;;;;;;;;;24351:28;;:2;:28;;;;24300:79;24296:357;;;24458:12;24416:28;:39;24445:9;24416:39;;;;;;;;;;;;;;;;:54;24408:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:12;24575:28;:39;24604:9;24575:39;;;;;;;;;;;;;;;:54;;;;24296:357;24247:425;24724:25;:31;24750:4;24724:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;24760:16;:20;24777:2;24760:20;;;;;;;;;;;;;;;;;;;;;;;;;24759:21;24724:56;24720:647;;;24823:5;;24813:6;:15;;24805:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24928:10;;24911:13;24921:2;24911:9;:13::i;:::-;24902:6;:22;;;;:::i;:::-;:36;;24894:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:647;;;25038:25;:29;25064:2;25038:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;25072:16;:22;25089:4;25072:22;;;;;;;;;;;;;;;;;;;;;;;;;25071:23;25038:56;25034:333;;;25137:5;;25127:6;:15;;25119:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25034:333;;;25234:16;:20;25251:2;25234:20;;;;;;;;;;;;;;;;;;;;;;;;;25229:138;;25313:10;;25296:13;25306:2;25296:9;:13::i;:::-;25287:6;:22;;;;:::i;:::-;:36;;25279:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25229:138;25034:333;24720:647;23762:1620;23727:1666;25405:28;25436:24;25454:4;25436:9;:24::i;:::-;25405:55;;25471:12;25510:18;;25486:20;:42;;25471:57;;25545:7;:35;;;;;25569:11;;;;;;;;;;;25545:35;:61;;;;;25598:8;;;;;;;;;;;25597:9;25545:61;:110;;;;;25624:25;:31;25650:4;25624:31;;;;;;;;;;;;;;;;;;;;;;;;;25623:32;25545:110;:153;;;;;25673:19;:25;25693:4;25673:25;;;;;;;;;;;;;;;;;;;;;;;;;25672:26;25545:153;:194;;;;;25716:19;:23;25736:2;25716:23;;;;;;;;;;;;;;;;;;;;;;;;;25715:24;25545:194;25541:302;;;25767:4;25756:8;;:15;;;;;;;;;;;;;;;;;;25788:10;:8;:10::i;:::-;25826:5;25815:8;;:16;;;;;;;;;;;;;;;;;;25541:302;25855:12;25871:8;;;;;;;;;;;25870:9;25855:24;;25981:19;:25;26001:4;25981:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26010:19;:23;26030:2;26010:23;;;;;;;;;;;;;;;;;;;;;;;;;25981:52;25977:100;;;26060:5;26050:15;;25977:100;26089:12;26194:7;26190:803;;;26246:25;:29;26272:2;26246:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26295:1;26279:13;;:17;26246:50;26242:602;;;26324:34;26354:3;26324:25;26335:13;;26324:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26317:41;;26415:13;;26401:10;;26394:4;:17;;;;:::i;:::-;26393:35;;;;:::i;:::-;26377:12;;:51;;;;;;;:::i;:::-;;;;;;;;26495:13;;26475:16;;26468:4;:23;;;;:::i;:::-;26467:41;;;;:::i;:::-;26447:16;;:61;;;;;;;:::i;:::-;;;;;;;;26242:602;;;26570:25;:31;26596:4;26570:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26620:1;26605:12;;:16;26570:51;26566:278;;;26649:33;26678:3;26649:24;26660:12;;26649:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26642:40;;26738:12;;26725:9;;26718:4;:16;;;;:::i;:::-;26717:33;;;;:::i;:::-;26701:12;;:49;;;;;;;:::i;:::-;;;;;;;;26816:12;;26797:15;;26790:4;:22;;;;:::i;:::-;26789:39;;;;:::i;:::-;26769:16;;:59;;;;;;;:::i;:::-;;;;;;;;26566:278;26242:602;26871:1;26864:4;:8;26860:91;;;26893:42;26909:4;26923;26930;26893:15;:42::i;:::-;26860:91;26977:4;26967:14;;;;;:::i;:::-;;;26190:803;27005:33;27021:4;27027:2;27031:6;27005:15;:33::i;:::-;23339:3707;;;;23226:3820;;;;:::o;1763:191::-;1837:16;1856:6;;;;;;;;;;;1837:25;;1882:8;1873:6;;:17;;;;;;;;;;;;;;;;;;1937:8;1906:40;;1927:8;1906:40;;;;;;;;;;;;1826:128;1763:191;:::o;22468:188::-;22585:5;22551:25;:31;22577:4;22551:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22642:5;22608:40;;22636:4;22608:40;;;;;;;;;;;;22468:188;;:::o;27400:529::-;27466:21;27504:1;27490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27466:40;;27535:4;27517;27522:1;27517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27561:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27551:4;27556:1;27551:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27596:62;27613:4;27628:15;27646:11;27596:8;:62::i;:::-;27697:15;:66;;;27778:11;27804:1;27848:4;27875;27895:15;27697:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27455:474;27400:529;:::o;5556:733::-;5714:1;5696:20;;:6;:20;;;5688:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5798:1;5777:23;;:9;:23;;;5769:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5853:47;5874:6;5882:9;5893:6;5853:20;:47::i;:::-;5913:21;5937:9;:17;5947:6;5937:17;;;;;;;;;;;;;;;;5913:41;;5990:6;5973:13;:23;;5965:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6111:6;6095:13;:22;6075:9;:17;6085:6;6075:17;;;;;;;;;;;;;;;:42;;;;6163:6;6139:9;:20;6149:9;6139:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6204:9;6187:35;;6196:6;6187:35;;;6215:6;6187:35;;;;;;:::i;:::-;;;;;;;;6235:46;6255:6;6263:9;6274:6;6235:19;:46::i;:::-;5677:612;5556:733;;;:::o;27937:876::-;27976:23;28002:24;28020:4;28002:9;:24::i;:::-;27976:50;;28037:25;28084:12;;28065:16;;:31;;;;:::i;:::-;28037:59;;28107:12;28155:1;28136:15;:20;28132:59;;28173:7;;;;;28132:59;28246:2;28225:18;;:23;;;;:::i;:::-;28207:15;:41;28203:115;;;28304:2;28283:18;;:23;;;;:::i;:::-;28265:41;;28203:115;28330:25;28358:21;28330:49;;28390:33;28407:15;28390:16;:33::i;:::-;28436:18;28457:44;28483:17;28457:21;:25;;:44;;;;:::i;:::-;28436:65;;28512:17;28532:51;28565:17;28532:28;28547:12;;28532:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;28512:71;;28615:1;28596:16;:20;;;;28642:1;28627:12;:16;;;;28678:10;;;;;;;;;;;28670:24;;28702:9;28670:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28656:60;;;;;28749:14;;;;;;;;;;;28741:28;;28778:21;28741:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28727:78;;;;;27965:848;;;;;;27937:876;:::o;9309:98::-;9367:7;9398:1;9394;:5;;;;:::i;:::-;9387:12;;9309:98;;;;:::o;9415:::-;9473:7;9504:1;9500;:5;;;;:::i;:::-;9493:12;;9415:98;;;;:::o;7691:125::-;;;;:::o;7824:124::-;;;;:::o;9203:98::-;9261:7;9292:1;9288;:5;;;;:::i;:::-;9281:12;;9203:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:60::-;3847:3;3868:5;3861:12;;3819:60;;;:::o;3885:142::-;3935:9;3968:53;3986:34;3995:24;4013:5;3995:24;:::i;:::-;3986:34;:::i;:::-;3968:53;:::i;:::-;3955:66;;3885:142;;;:::o;4033:126::-;4083:9;4116:37;4147:5;4116:37;:::i;:::-;4103:50;;4033:126;;;:::o;4165:153::-;4242:9;4275:37;4306:5;4275:37;:::i;:::-;4262:50;;4165:153;;;:::o;4324:185::-;4438:64;4496:5;4438:64;:::i;:::-;4433:3;4426:77;4324:185;;:::o;4515:276::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4686:98;4781:1;4770:9;4766:17;4757:6;4686:98;:::i;:::-;4515:276;;;;:::o;4797:118::-;4884:24;4902:5;4884:24;:::i;:::-;4879:3;4872:37;4797:118;;:::o;4921:222::-;5014:4;5052:2;5041:9;5037:18;5029:26;;5065:71;5133:1;5122:9;5118:17;5109:6;5065:71;:::i;:::-;4921:222;;;;:::o;5149:329::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:119;;;5263:79;;:::i;:::-;5225:119;5383:1;5408:53;5453:7;5444:6;5433:9;5429:22;5408:53;:::i;:::-;5398:63;;5354:117;5149:329;;;;:::o;5484:619::-;5561:6;5569;5577;5626:2;5614:9;5605:7;5601:23;5597:32;5594:119;;;5632:79;;:::i;:::-;5594:119;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5879:2;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5850:118;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;5484:619;;;;;:::o;6109:118::-;6196:24;6214:5;6196:24;:::i;:::-;6191:3;6184:37;6109:118;;:::o;6233:222::-;6326:4;6364:2;6353:9;6349:18;6341:26;;6377:71;6445:1;6434:9;6430:17;6421:6;6377:71;:::i;:::-;6233:222;;;;:::o;6461:86::-;6496:7;6536:4;6529:5;6525:16;6514:27;;6461:86;;;:::o;6553:112::-;6636:22;6652:5;6636:22;:::i;:::-;6631:3;6624:35;6553:112;;:::o;6671:214::-;6760:4;6798:2;6787:9;6783:18;6775:26;;6811:67;6875:1;6864:9;6860:17;6851:6;6811:67;:::i;:::-;6671:214;;;;:::o;6891:329::-;6950:6;6999:2;6987:9;6978:7;6974:23;6970:32;6967:119;;;7005:79;;:::i;:::-;6967:119;7125:1;7150:53;7195:7;7186:6;7175:9;7171:22;7150:53;:::i;:::-;7140:63;;7096:117;6891:329;;;;:::o;7226:116::-;7296:21;7311:5;7296:21;:::i;:::-;7289:5;7286:32;7276:60;;7332:1;7329;7322:12;7276:60;7226:116;:::o;7348:133::-;7391:5;7429:6;7416:20;7407:29;;7445:30;7469:5;7445:30;:::i;:::-;7348:133;;;;:::o;7487:468::-;7552:6;7560;7609:2;7597:9;7588:7;7584:23;7580:32;7577:119;;;7615:79;;:::i;:::-;7577:119;7735:1;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7706:117;7862:2;7888:50;7930:7;7921:6;7910:9;7906:22;7888:50;:::i;:::-;7878:60;;7833:115;7487:468;;;;;:::o;7961:323::-;8017:6;8066:2;8054:9;8045:7;8041:23;8037:32;8034:119;;;8072:79;;:::i;:::-;8034:119;8192:1;8217:50;8259:7;8250:6;8239:9;8235:22;8217:50;:::i;:::-;8207:60;;8163:114;7961:323;;;;:::o;8290:765::-;8376:6;8384;8392;8400;8449:3;8437:9;8428:7;8424:23;8420:33;8417:120;;;8456:79;;:::i;:::-;8417:120;8576:1;8601:53;8646:7;8637:6;8626:9;8622:22;8601:53;:::i;:::-;8591:63;;8547:117;8703:2;8729:53;8774:7;8765:6;8754:9;8750:22;8729:53;:::i;:::-;8719:63;;8674:118;8831:2;8857:53;8902:7;8893:6;8882:9;8878:22;8857:53;:::i;:::-;8847:63;;8802:118;8959:2;8985:53;9030:7;9021:6;9010:9;9006:22;8985:53;:::i;:::-;8975:63;;8930:118;8290:765;;;;;;;:::o;9061:474::-;9129:6;9137;9186:2;9174:9;9165:7;9161:23;9157:32;9154:119;;;9192:79;;:::i;:::-;9154:119;9312:1;9337:53;9382:7;9373:6;9362:9;9358:22;9337:53;:::i;:::-;9327:63;;9283:117;9439:2;9465:53;9510:7;9501:6;9490:9;9486:22;9465:53;:::i;:::-;9455:63;;9410:118;9061:474;;;;;:::o;9541:182::-;9681:34;9677:1;9669:6;9665:14;9658:58;9541:182;:::o;9729:366::-;9871:3;9892:67;9956:2;9951:3;9892:67;:::i;:::-;9885:74;;9968:93;10057:3;9968:93;:::i;:::-;10086:2;10081:3;10077:12;10070:19;;9729:366;;;:::o;10101:419::-;10267:4;10305:2;10294:9;10290:18;10282:26;;10354:9;10348:4;10344:20;10340:1;10329:9;10325:17;10318:47;10382:131;10508:4;10382:131;:::i;:::-;10374:139;;10101:419;;;:::o;10526:180::-;10574:77;10571:1;10564:88;10671:4;10668:1;10661:15;10695:4;10692:1;10685:15;10712:191;10752:3;10771:20;10789:1;10771:20;:::i;:::-;10766:25;;10805:20;10823:1;10805:20;:::i;:::-;10800:25;;10848:1;10845;10841:9;10834:16;;10869:3;10866:1;10863:10;10860:36;;;10876:18;;:::i;:::-;10860:36;10712:191;;;;:::o;10909:179::-;11049:31;11045:1;11037:6;11033:14;11026:55;10909:179;:::o;11094:366::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:419::-;11632:4;11670:2;11659:9;11655:18;11647:26;;11719:9;11713:4;11709:20;11705:1;11694:9;11690:17;11683:47;11747:131;11873:4;11747:131;:::i;:::-;11739:139;;11466:419;;;:::o;11891:180::-;11939:77;11936:1;11929:88;12036:4;12033:1;12026:15;12060:4;12057:1;12050:15;12077:320;12121:6;12158:1;12152:4;12148:12;12138:22;;12205:1;12199:4;12195:12;12226:18;12216:81;;12282:4;12274:6;12270:17;12260:27;;12216:81;12344:2;12336:6;12333:14;12313:18;12310:38;12307:84;;12363:18;;:::i;:::-;12307:84;12128:269;12077:320;;;:::o;12403:410::-;12443:7;12466:20;12484:1;12466:20;:::i;:::-;12461:25;;12500:20;12518:1;12500:20;:::i;:::-;12495:25;;12555:1;12552;12548:9;12577:30;12595:11;12577:30;:::i;:::-;12566:41;;12756:1;12747:7;12743:15;12740:1;12737:22;12717:1;12710:9;12690:83;12667:139;;12786:18;;:::i;:::-;12667:139;12451:362;12403:410;;;;:::o;12819:180::-;12867:77;12864:1;12857:88;12964:4;12961:1;12954:15;12988:4;12985:1;12978:15;13005:185;13045:1;13062:20;13080:1;13062:20;:::i;:::-;13057:25;;13096:20;13114:1;13096:20;:::i;:::-;13091:25;;13135:1;13125:35;;13140:18;;:::i;:::-;13125:35;13182:1;13179;13175:9;13170:14;;13005:185;;;;:::o;13196:182::-;13336:34;13332:1;13324:6;13320:14;13313:58;13196:182;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:224::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:7;14385:2;14377:6;14373:15;14366:32;14181:224;:::o;14411:366::-;14553:3;14574:67;14638:2;14633:3;14574:67;:::i;:::-;14567:74;;14650:93;14739:3;14650:93;:::i;:::-;14768:2;14763:3;14759:12;14752:19;;14411:366;;;:::o;14783:419::-;14949:4;14987:2;14976:9;14972:18;14964:26;;15036:9;15030:4;15026:20;15022:1;15011:9;15007:17;15000:47;15064:131;15190:4;15064:131;:::i;:::-;15056:139;;14783:419;;;:::o;15208:227::-;15348:34;15344:1;15336:6;15332:14;15325:58;15417:10;15412:2;15404:6;15400:15;15393:35;15208:227;:::o;15441:366::-;15583:3;15604:67;15668:2;15663:3;15604:67;:::i;:::-;15597:74;;15680:93;15769:3;15680:93;:::i;:::-;15798:2;15793:3;15789:12;15782:19;;15441:366;;;:::o;15813:419::-;15979:4;16017:2;16006:9;16002:18;15994:26;;16066:9;16060:4;16056:20;16052:1;16041:9;16037:17;16030:47;16094:131;16220:4;16094:131;:::i;:::-;16086:139;;15813:419;;;:::o;16238:244::-;16378:34;16374:1;16366:6;16362:14;16355:58;16447:27;16442:2;16434:6;16430:15;16423:52;16238:244;:::o;16488:366::-;16630:3;16651:67;16715:2;16710:3;16651:67;:::i;:::-;16644:74;;16727:93;16816:3;16727:93;:::i;:::-;16845:2;16840:3;16836:12;16829:19;;16488:366;;;:::o;16860:419::-;17026:4;17064:2;17053:9;17049:18;17041:26;;17113:9;17107:4;17103:20;17099:1;17088:9;17084:17;17077:47;17141:131;17267:4;17141:131;:::i;:::-;17133:139;;16860:419;;;:::o;17285:224::-;17425:34;17421:1;17413:6;17409:14;17402:58;17494:7;17489:2;17481:6;17477:15;17470:32;17285:224;:::o;17515:366::-;17657:3;17678:67;17742:2;17737:3;17678:67;:::i;:::-;17671:74;;17754:93;17843:3;17754:93;:::i;:::-;17872:2;17867:3;17863:12;17856:19;;17515:366;;;:::o;17887:419::-;18053:4;18091:2;18080:9;18076:18;18068:26;;18140:9;18134:4;18130:20;18126:1;18115:9;18111:17;18104:47;18168:131;18294:4;18168:131;:::i;:::-;18160:139;;17887:419;;;:::o;18312:162::-;18452:14;18448:1;18440:6;18436:14;18429:38;18312:162;:::o;18480:366::-;18622:3;18643:67;18707:2;18702:3;18643:67;:::i;:::-;18636:74;;18719:93;18808:3;18719:93;:::i;:::-;18837:2;18832:3;18828:12;18821:19;;18480:366;;;:::o;18852:419::-;19018:4;19056:2;19045:9;19041:18;19033:26;;19105:9;19099:4;19095:20;19091:1;19080:9;19076:17;19069:47;19133:131;19259:4;19133:131;:::i;:::-;19125:139;;18852:419;;;:::o;19277:240::-;19417:34;19413:1;19405:6;19401:14;19394:58;19486:23;19481:2;19473:6;19469:15;19462:48;19277:240;:::o;19523:366::-;19665:3;19686:67;19750:2;19745:3;19686:67;:::i;:::-;19679:74;;19762:93;19851:3;19762:93;:::i;:::-;19880:2;19875:3;19871:12;19864:19;;19523:366;;;:::o;19895:419::-;20061:4;20099:2;20088:9;20084:18;20076:26;;20148:9;20142:4;20138:20;20134:1;20123:9;20119:17;20112:47;20176:131;20302:4;20176:131;:::i;:::-;20168:139;;19895:419;;;:::o;20320:239::-;20460:34;20456:1;20448:6;20444:14;20437:58;20529:22;20524:2;20516:6;20512:15;20505:47;20320:239;:::o;20565:366::-;20707:3;20728:67;20792:2;20787:3;20728:67;:::i;:::-;20721:74;;20804:93;20893:3;20804:93;:::i;:::-;20922:2;20917:3;20913:12;20906:19;;20565:366;;;:::o;20937:419::-;21103:4;21141:2;21130:9;21126:18;21118:26;;21190:9;21184:4;21180:20;21176:1;21165:9;21161:17;21154:47;21218:131;21344:4;21218:131;:::i;:::-;21210:139;;20937:419;;;:::o;21362:225::-;21502:34;21498:1;21490:6;21486:14;21479:58;21571:8;21566:2;21558:6;21554:15;21547:33;21362:225;:::o;21593:366::-;21735:3;21756:67;21820:2;21815:3;21756:67;:::i;:::-;21749:74;;21832:93;21921:3;21832:93;:::i;:::-;21950:2;21945:3;21941:12;21934:19;;21593:366;;;:::o;21965:419::-;22131:4;22169:2;22158:9;22154:18;22146:26;;22218:9;22212:4;22208:20;22204:1;22193:9;22189:17;22182:47;22246:131;22372:4;22246:131;:::i;:::-;22238:139;;21965:419;;;:::o;22390:223::-;22530:34;22526:1;22518:6;22514:14;22507:58;22599:6;22594:2;22586:6;22582:15;22575:31;22390:223;:::o;22619:366::-;22761:3;22782:67;22846:2;22841:3;22782:67;:::i;:::-;22775:74;;22858:93;22947:3;22858:93;:::i;:::-;22976:2;22971:3;22967:12;22960:19;;22619:366;;;:::o;22991:419::-;23157:4;23195:2;23184:9;23180:18;23172:26;;23244:9;23238:4;23234:20;23230:1;23219:9;23215:17;23208:47;23272:131;23398:4;23272:131;:::i;:::-;23264:139;;22991:419;;;:::o;23416:221::-;23556:34;23552:1;23544:6;23540:14;23533:58;23625:4;23620:2;23612:6;23608:15;23601:29;23416:221;:::o;23643:366::-;23785:3;23806:67;23870:2;23865:3;23806:67;:::i;:::-;23799:74;;23882:93;23971:3;23882:93;:::i;:::-;24000:2;23995:3;23991:12;23984:19;;23643:366;;;:::o;24015:419::-;24181:4;24219:2;24208:9;24204:18;24196:26;;24268:9;24262:4;24258:20;24254:1;24243:9;24239:17;24232:47;24296:131;24422:4;24296:131;:::i;:::-;24288:139;;24015:419;;;:::o;24440:224::-;24580:34;24576:1;24568:6;24564:14;24557:58;24649:7;24644:2;24636:6;24632:15;24625:32;24440:224;:::o;24670:366::-;24812:3;24833:67;24897:2;24892:3;24833:67;:::i;:::-;24826:74;;24909:93;24998:3;24909:93;:::i;:::-;25027:2;25022:3;25018:12;25011:19;;24670:366;;;:::o;25042:419::-;25208:4;25246:2;25235:9;25231:18;25223:26;;25295:9;25289:4;25285:20;25281:1;25270:9;25266:17;25259:47;25323:131;25449:4;25323:131;:::i;:::-;25315:139;;25042:419;;;:::o;25467:222::-;25607:34;25603:1;25595:6;25591:14;25584:58;25676:5;25671:2;25663:6;25659:15;25652:30;25467:222;:::o;25695:366::-;25837:3;25858:67;25922:2;25917:3;25858:67;:::i;:::-;25851:74;;25934:93;26023:3;25934:93;:::i;:::-;26052:2;26047:3;26043:12;26036:19;;25695:366;;;:::o;26067:419::-;26233:4;26271:2;26260:9;26256:18;26248:26;;26320:9;26314:4;26310:20;26306:1;26295:9;26291:17;26284:47;26348:131;26474:4;26348:131;:::i;:::-;26340:139;;26067:419;;;:::o;26492:167::-;26632:19;26628:1;26620:6;26616:14;26609:43;26492:167;:::o;26665:366::-;26807:3;26828:67;26892:2;26887:3;26828:67;:::i;:::-;26821:74;;26904:93;26993:3;26904:93;:::i;:::-;27022:2;27017:3;27013:12;27006:19;;26665:366;;;:::o;27037:419::-;27203:4;27241:2;27230:9;27226:18;27218:26;;27290:9;27284:4;27280:20;27276:1;27265:9;27261:17;27254:47;27318:131;27444:4;27318:131;:::i;:::-;27310:139;;27037:419;;;:::o;27462:165::-;27602:17;27598:1;27590:6;27586:14;27579:41;27462:165;:::o;27633:366::-;27775:3;27796:67;27860:2;27855:3;27796:67;:::i;:::-;27789:74;;27872:93;27961:3;27872:93;:::i;:::-;27990:2;27985:3;27981:12;27974:19;;27633:366;;;:::o;28005:419::-;28171:4;28209:2;28198:9;28194:18;28186:26;;28258:9;28252:4;28248:20;28244:1;28233:9;28229:17;28222:47;28286:131;28412:4;28286:131;:::i;:::-;28278:139;;28005:419;;;:::o;28430:172::-;28570:24;28566:1;28558:6;28554:14;28547:48;28430:172;:::o;28608:366::-;28750:3;28771:67;28835:2;28830:3;28771:67;:::i;:::-;28764:74;;28847:93;28936:3;28847:93;:::i;:::-;28965:2;28960:3;28956:12;28949:19;;28608:366;;;:::o;28980:419::-;29146:4;29184:2;29173:9;29169:18;29161:26;;29233:9;29227:4;29223:20;29219:1;29208:9;29204:17;29197:47;29261:131;29387:4;29261:131;:::i;:::-;29253:139;;28980:419;;;:::o;29405:297::-;29545:34;29541:1;29533:6;29529:14;29522:58;29614:34;29609:2;29601:6;29597:15;29590:59;29683:11;29678:2;29670:6;29666:15;29659:36;29405:297;:::o;29708:366::-;29850:3;29871:67;29935:2;29930:3;29871:67;:::i;:::-;29864:74;;29947:93;30036:3;29947:93;:::i;:::-;30065:2;30060:3;30056:12;30049:19;;29708:366;;;:::o;30080:419::-;30246:4;30284:2;30273:9;30269:18;30261:26;;30333:9;30327:4;30323:20;30319:1;30308:9;30304:17;30297:47;30361:131;30487:4;30361:131;:::i;:::-;30353:139;;30080:419;;;:::o;30505:225::-;30645:34;30641:1;30633:6;30629:14;30622:58;30714:8;30709:2;30701:6;30697:15;30690:33;30505:225;:::o;30736:366::-;30878:3;30899:67;30963:2;30958:3;30899:67;:::i;:::-;30892:74;;30975:93;31064:3;30975:93;:::i;:::-;31093:2;31088:3;31084:12;31077:19;;30736:366;;;:::o;31108:419::-;31274:4;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31108:419;;;:::o;31533:169::-;31673:21;31669:1;31661:6;31657:14;31650:45;31533:169;:::o;31708:366::-;31850:3;31871:67;31935:2;31930:3;31871:67;:::i;:::-;31864:74;;31947:93;32036:3;31947:93;:::i;:::-;32065:2;32060:3;32056:12;32049:19;;31708:366;;;:::o;32080:419::-;32246:4;32284:2;32273:9;32269:18;32261:26;;32333:9;32327:4;32323:20;32319:1;32308:9;32304:17;32297:47;32361:131;32487:4;32361:131;:::i;:::-;32353:139;;32080:419;;;:::o;32505:226::-;32645:34;32641:1;32633:6;32629:14;32622:58;32714:9;32709:2;32701:6;32697:15;32690:34;32505:226;:::o;32737:366::-;32879:3;32900:67;32964:2;32959:3;32900:67;:::i;:::-;32893:74;;32976:93;33065:3;32976:93;:::i;:::-;33094:2;33089:3;33085:12;33078:19;;32737:366;;;:::o;33109:419::-;33275:4;33313:2;33302:9;33298:18;33290:26;;33362:9;33356:4;33352:20;33348:1;33337:9;33333:17;33326:47;33390:131;33516:4;33390:131;:::i;:::-;33382:139;;33109:419;;;:::o;33534:194::-;33574:4;33594:20;33612:1;33594:20;:::i;:::-;33589:25;;33628:20;33646:1;33628:20;:::i;:::-;33623:25;;33672:1;33669;33665:9;33657:17;;33696:1;33690:4;33687:11;33684:37;;;33701:18;;:::i;:::-;33684:37;33534:194;;;;:::o;33734:180::-;33782:77;33779:1;33772:88;33879:4;33876:1;33869:15;33903:4;33900:1;33893:15;33920:180;33968:77;33965:1;33958:88;34065:4;34062:1;34055:15;34089:4;34086:1;34079:15;34106:143;34163:5;34194:6;34188:13;34179:22;;34210:33;34237:5;34210:33;:::i;:::-;34106:143;;;;:::o;34255:351::-;34325:6;34374:2;34362:9;34353:7;34349:23;34345:32;34342:119;;;34380:79;;:::i;:::-;34342:119;34500:1;34525:64;34581:7;34572:6;34561:9;34557:22;34525:64;:::i;:::-;34515:74;;34471:128;34255:351;;;;:::o;34612:85::-;34657:7;34686:5;34675:16;;34612:85;;;:::o;34703:158::-;34761:9;34794:61;34812:42;34821:32;34847:5;34821:32;:::i;:::-;34812:42;:::i;:::-;34794:61;:::i;:::-;34781:74;;34703:158;;;:::o;34867:147::-;34962:45;35001:5;34962:45;:::i;:::-;34957:3;34950:58;34867:147;;:::o;35020:114::-;35087:6;35121:5;35115:12;35105:22;;35020:114;;;:::o;35140:184::-;35239:11;35273:6;35268:3;35261:19;35313:4;35308:3;35304:14;35289:29;;35140:184;;;;:::o;35330:132::-;35397:4;35420:3;35412:11;;35450:4;35445:3;35441:14;35433:22;;35330:132;;;:::o;35468:108::-;35545:24;35563:5;35545:24;:::i;:::-;35540:3;35533:37;35468:108;;:::o;35582:179::-;35651:10;35672:46;35714:3;35706:6;35672:46;:::i;:::-;35750:4;35745:3;35741:14;35727:28;;35582:179;;;;:::o;35767:113::-;35837:4;35869;35864:3;35860:14;35852:22;;35767:113;;;:::o;35916:732::-;36035:3;36064:54;36112:5;36064:54;:::i;:::-;36134:86;36213:6;36208:3;36134:86;:::i;:::-;36127:93;;36244:56;36294:5;36244:56;:::i;:::-;36323:7;36354:1;36339:284;36364:6;36361:1;36358:13;36339:284;;;36440:6;36434:13;36467:63;36526:3;36511:13;36467:63;:::i;:::-;36460:70;;36553:60;36606:6;36553:60;:::i;:::-;36543:70;;36399:224;36386:1;36383;36379:9;36374:14;;36339:284;;;36343:14;36639:3;36632:10;;36040:608;;;35916:732;;;;:::o;36654:831::-;36917:4;36955:3;36944:9;36940:19;36932:27;;36969:71;37037:1;37026:9;37022:17;37013:6;36969:71;:::i;:::-;37050:80;37126:2;37115:9;37111:18;37102:6;37050:80;:::i;:::-;37177:9;37171:4;37167:20;37162:2;37151:9;37147:18;37140:48;37205:108;37308:4;37299:6;37205:108;:::i;:::-;37197:116;;37323:72;37391:2;37380:9;37376:18;37367:6;37323:72;:::i;:::-;37405:73;37473:3;37462:9;37458:19;37449:6;37405:73;:::i;:::-;36654:831;;;;;;;;:::o;37491:225::-;37631:34;37627:1;37619:6;37615:14;37608:58;37700:8;37695:2;37687:6;37683:15;37676:33;37491:225;:::o;37722:366::-;37864:3;37885:67;37949:2;37944:3;37885:67;:::i;:::-;37878:74;;37961:93;38050:3;37961:93;:::i;:::-;38079:2;38074:3;38070:12;38063:19;;37722:366;;;:::o;38094:419::-;38260:4;38298:2;38287:9;38283:18;38275:26;;38347:9;38341:4;38337:20;38333:1;38322:9;38318:17;38311:47;38375:131;38501:4;38375:131;:::i;:::-;38367:139;;38094:419;;;:::o;38519:147::-;38620:11;38657:3;38642:18;;38519:147;;;;:::o;38672:114::-;;:::o;38792:398::-;38951:3;38972:83;39053:1;39048:3;38972:83;:::i;:::-;38965:90;;39064:93;39153:3;39064:93;:::i;:::-;39182:1;39177:3;39173:11;39166:18;;38792:398;;;:::o;39196:379::-;39380:3;39402:147;39545:3;39402:147;:::i;:::-;39395:154;;39566:3;39559:10;;39196:379;;;:::o

Swarm Source

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