ETH Price: $3,342.97 (-2.22%)

Token

SCALEX (SCALEX)
 

Overview

Max Total Supply

10,000,000 SCALEX

Holders

271

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,233.49672534504950963 SCALEX

Value
$0.00
0x0ec4c79483c3af3f7cbd2d7948d89b7b1a963853
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:
ScalexToken

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-27
*/

/****

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@###########@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@####@@@@@###############@@@@@###@@@@@@@@@@@@@@
@@@@@@@@@@@#######@@@@#######@@@#######@@@@@#####%@@@@@@@@@@
@@@@@@@@@@#######%@@@@#######@@@@@&####@@@@@#######@@@@@@@@@
@@@@@@@@@#########@@@@@########@@@@@@##@@@@########@@@@@@@@@
@@@@@@@@@@#########@@@@@#########@@@@@@@@@@########@@@@@@@@@
@@@@@@@@@@@#########@@@@@@##########@@@@@#########@@@@@@@@@@
@@@@@@@@@@@@@##########@@@@@@###################@@@@@@@@@@@@
@@@@@@@@@@@@@@@##########@@@@@@##############@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@##########@@@@@@@##########@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@##############@@@@@@##########@@@@@@@@@@@@@@
@@@@@@@@@@@@@###################@@@@@@##########@@@@@@@@@@@@
@@@@@@@@@@@#########@@@@@##########@@@@@@#########@@@@@@@@@@
@@@@@@@@@@########@@@@@@@@@@#########@@@@@#########@@@@@@@@@
@@@@@@@@@@#######%@@@@##@@@@@@########@@@@@#########@@@@@@@@
@@@@@@@@@@#######@@@@@####@@@@@@#######@@@@########@@@@@@@@@
@@@@@@@@@@@######@@@@@#######@@@#######@@@@#######@@@@@@@@@@
@@@@@@@@@@@@@@@###@@@@@###############@@@@@####@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@###########@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Website:  https://scalextoken.com
Twitter:  https://twitter.com/scalexeth
Telegram: https://t.me/scalexeth
                                                                                                   
****/

// 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 ScalexToken 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("SCALEX", unicode"SCALEX") {
        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 _sellMarketingFee = 5;
        uint256 _buyDevFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 10_000_000 * 1e18;

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

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

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

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

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function GoScalex() 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":[],"name":"GoScalex","outputs":[],"stateMutability":"nonpayable","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":[{"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"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055505f600e5f6101000a81548160ff021916908315150217905550348015610076575f80fd5b506040518060400160405280600681526020017f5343414c455800000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5343414c4558000000000000000000000000000000000000000000000000000081525081600390816100f29190610ca5565b5080600490816101029190610ca5565b50505061012161011661056060201b60201c565b61056760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905061014a81600161062a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101eb9190610dd2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610250573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102749190610dd2565b6040518363ffffffff1660e01b8152600401610291929190610e0c565b6020604051808303815f875af11580156102ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d19190610dd2565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061034260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161062a60201b60201c565b61037460065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161070a60201b60201c565b5f600590505f600590505f805f6a084595161401484a000000905069152d02c7e14af680000060098190555069152d02c7e14af6800000600b819055506127106003826103c19190610e60565b6103cb9190610ece565b600a8190555084601081905550826011819055506011546010546103ef9190610efe565b600f8190555083601381905550816014819055506014546013546104139190610efe565b60128190555061043761042a6107a860201b60201c565b60016107d060201b60201c565b6104483060016107d060201b60201c565b61045b61dead60016107d060201b60201c565b61047961046c6107a860201b60201c565b600161062a60201b60201c565b61048a30600161062a60201b60201c565b61049d61dead600161062a60201b60201c565b73d48fd31566d52fb7654b15d07b687d0e8de4e66460075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d48fd31566d52fb7654b15d07b687d0e8de4e66460085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061055533826108fe60201b60201c565b50505050505061106c565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61063861056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661065c6107a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146106b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a990610f8b565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107de61056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166108026107a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90610f8b565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516108f29190610fc3565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390611026565b60405180910390fd5b61097d5f8383610a6160201b60201c565b8060025f82825461098e9190610efe565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109e09190610efe565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a449190611053565b60405180910390a3610a5d5f8383610a6660201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ae657607f821691505b602082108103610af957610af8610aa2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610b20565b610b658683610b20565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610ba9610ba4610b9f84610b7d565b610b86565b610b7d565b9050919050565b5f819050919050565b610bc283610b8f565b610bd6610bce82610bb0565b848454610b2c565b825550505050565b5f90565b610bea610bde565b610bf5818484610bb9565b505050565b5b81811015610c1857610c0d5f82610be2565b600181019050610bfb565b5050565b601f821115610c5d57610c2e81610aff565b610c3784610b11565b81016020851015610c46578190505b610c5a610c5285610b11565b830182610bfa565b50505b505050565b5f82821c905092915050565b5f610c7d5f1984600802610c62565b1980831691505092915050565b5f610c958383610c6e565b9150826002028217905092915050565b610cae82610a6b565b67ffffffffffffffff811115610cc757610cc6610a75565b5b610cd18254610acf565b610cdc828285610c1c565b5f60209050601f831160018114610d0d575f8415610cfb578287015190505b610d058582610c8a565b865550610d6c565b601f198416610d1b86610aff565b5f5b82811015610d4257848901518255600182019150602085019450602081019050610d1d565b86831015610d5f5784890151610d5b601f891682610c6e565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610da182610d78565b9050919050565b610db181610d97565b8114610dbb575f80fd5b50565b5f81519050610dcc81610da8565b92915050565b5f60208284031215610de757610de6610d74565b5b5f610df484828501610dbe565b91505092915050565b610e0681610d97565b82525050565b5f604082019050610e1f5f830185610dfd565b610e2c6020830184610dfd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e6a82610b7d565b9150610e7583610b7d565b9250828202610e8381610b7d565b91508282048414831517610e9a57610e99610e33565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ed882610b7d565b9150610ee383610b7d565b925082610ef357610ef2610ea1565b5b828204905092915050565b5f610f0882610b7d565b9150610f1383610b7d565b9250828201905080821115610f2b57610f2a610e33565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f75602083610f31565b9150610f8082610f41565b602082019050919050565b5f6020820190508181035f830152610fa281610f69565b9050919050565b5f8115159050919050565b610fbd81610fa9565b82525050565b5f602082019050610fd65f830184610fb4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611010601f83610f31565b915061101b82610fdc565b602082019050919050565b5f6020820190508181035f83015261103d81611004565b9050919050565b61104d81610b7d565b82525050565b5f6020820190506110665f830184611044565b92915050565b608051614efc6110a05f395f8181610df7015281816129fa0152818161349801528181613577015261359e0152614efc5ff3fe60806040526004361061031d575f3560e01c80637bce5a04116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80637bce5a04146107945780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b80633da2b4681161026957806366ca9b831161022257806370a08231116101fc57806370a08231146106ee578063715018a61461072a5780637437681e14610740578063751039fc1461076a57610324565b806366ca9b83146106725780636a486a8e1461069a5780636ddd1713146106c457610324565b80633da2b4681461057a57806349bd5a5e146105905780634a62bb65146105ba5780634fbee193146105e457806361528e2714610620578063644130d81461064a57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b005b34801561059b575f80fd5b506105a46112c6565b6040516105b19190613db1565b60405180910390f35b3480156105c5575f80fd5b506105ce6112eb565b6040516105db9190613c72565b60405180910390f35b3480156105ef575f80fd5b5061060a60048036038101906106059190613dfe565b6112fd565b6040516106179190613c72565b60405180910390f35b34801561062b575f80fd5b5061063461134f565b6040516106419190613d0e565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613e53565b611355565b005b34801561067d575f80fd5b5061069860048036038101906106939190613af2565b611429565b005b3480156106a5575f80fd5b506106ae611513565b6040516106bb9190613d0e565b60405180910390f35b3480156106cf575f80fd5b506106d8611519565b6040516106e59190613c72565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f9190613dfe565b61152c565b6040516107219190613d0e565b60405180910390f35b348015610735575f80fd5b5061073e611571565b005b34801561074b575f80fd5b506107546115f8565b6040516107619190613d0e565b60405180910390f35b348015610775575f80fd5b5061077e6115fe565b60405161078b9190613c72565b60405180910390f35b34801561079f575f80fd5b506107a861169b565b6040516107b59190613d0e565b60405180910390f35b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b61121a6123cc565b73ffffffffffffffffffffffffffffffffffffffff166112386116a1565b73ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b61135d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661137b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114316123cc565b73ffffffffffffffffffffffffffffffffffffffff1661144f6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613fa8565b60405180910390fd5b81601081905550806011819055506011546010546114c39190613ff3565b600f81905550604b600f54111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115796123cc565b73ffffffffffffffffffffffffffffffffffffffff166115976116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490613fa8565b60405180910390fd5b6115f65f61329a565b565b60095481565b5f6116076123cc565b73ffffffffffffffffffffffffffffffffffffffff166116256116a1565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad03061152c565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d8361152c565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df48361152c565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f3061152c565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000000000000000000000000000000000000000000000846123d3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad3061152c565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea26469706673582212203bc92b6156dcc98bd22ef49acf0e36fe51e7086afff55f40f767dba631fda69764736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80637bce5a04116101aa578063b70143c9116100f6578063d85ba06311610094578063e6819ba71161006e578063e6819ba714610ba8578063e884f26014610be4578063f1b9ad6b14610c0e578063f2fde38b14610c3657610324565b8063d85ba06314610b18578063dd62ed3e14610b42578063e2f4560514610b7e57610324565b8063c0246668116100d0578063c024666814610a62578063c6616ba114610a8a578063c876d0b914610ab2578063d257b34f14610adc57610324565b8063b70143c9146109e8578063b819a1a914610a10578063bbc0c74214610a3857610324565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d71461090a578063a72f458614610946578063a9059cbb14610970578063b62496f5146109ac57610324565b80639c3b4fdc1461088c5780639fccce32146108b6578063a0d82dc5146108e057610324565b80637bce5a04146107945780638da5cb5b146107be57806392136913146107e8578063924de9b71461081257806395d89b411461083a5780639a7a23d61461086457610324565b80633da2b4681161026957806366ca9b831161022257806370a08231116101fc57806370a08231146106ee578063715018a61461072a5780637437681e14610740578063751039fc1461076a57610324565b806366ca9b83146106725780636a486a8e1461069a5780636ddd1713146106c457610324565b80633da2b4681461057a57806349bd5a5e146105905780634a62bb65146105ba5780634fbee193146105e457806361528e2714610620578063644130d81461064a57610324565b8063217580a2116102d657806330a136ad116102b057806330a136ad146104c05780633103b39e146104ea578063313ce56714610514578063395093511461053e57610324565b8063217580a21461043257806323b872dd1461045a57806327c8f8351461049657610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e0578063203e727e1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190613af2565b610c5e565b005b34801561035b575f80fd5b50610364610d48565b6040516103719190613ba0565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190613c1a565b610dd8565b6040516103ad9190613c72565b60405180910390f35b3480156103c1575f80fd5b506103ca610df5565b6040516103d79190613ce6565b60405180910390f35b3480156103eb575f80fd5b506103f4610e19565b6040516104019190613d0e565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190613d27565b610e22565b005b34801561043d575f80fd5b5061045860048036038101906104539190613d27565b610f31565b005b348015610465575f80fd5b50610480600480360381019061047b9190613d52565b611040565b60405161048d9190613c72565b60405180910390f35b3480156104a1575f80fd5b506104aa611132565b6040516104b79190613db1565b60405180910390f35b3480156104cb575f80fd5b506104d4611138565b6040516104e19190613d0e565b60405180910390f35b3480156104f5575f80fd5b506104fe61113e565b60405161050b9190613db1565b60405180910390f35b34801561051f575f80fd5b50610528611163565b6040516105359190613de5565b60405180910390f35b348015610549575f80fd5b50610564600480360381019061055f9190613c1a565b61116b565b6040516105719190613c72565b60405180910390f35b348015610585575f80fd5b5061058e611212565b005b34801561059b575f80fd5b506105a46112c6565b6040516105b19190613db1565b60405180910390f35b3480156105c5575f80fd5b506105ce6112eb565b6040516105db9190613c72565b60405180910390f35b3480156105ef575f80fd5b5061060a60048036038101906106059190613dfe565b6112fd565b6040516106179190613c72565b60405180910390f35b34801561062b575f80fd5b5061063461134f565b6040516106419190613d0e565b60405180910390f35b348015610655575f80fd5b50610670600480360381019061066b9190613e53565b611355565b005b34801561067d575f80fd5b5061069860048036038101906106939190613af2565b611429565b005b3480156106a5575f80fd5b506106ae611513565b6040516106bb9190613d0e565b60405180910390f35b3480156106cf575f80fd5b506106d8611519565b6040516106e59190613c72565b60405180910390f35b3480156106f9575f80fd5b50610714600480360381019061070f9190613dfe565b61152c565b6040516107219190613d0e565b60405180910390f35b348015610735575f80fd5b5061073e611571565b005b34801561074b575f80fd5b506107546115f8565b6040516107619190613d0e565b60405180910390f35b348015610775575f80fd5b5061077e6115fe565b60405161078b9190613c72565b60405180910390f35b34801561079f575f80fd5b506107a861169b565b6040516107b59190613d0e565b60405180910390f35b3480156107c9575f80fd5b506107d26116a1565b6040516107df9190613db1565b60405180910390f35b3480156107f3575f80fd5b506107fc6116c9565b6040516108099190613d0e565b60405180910390f35b34801561081d575f80fd5b5061083860048036038101906108339190613e91565b6116cf565b005b348015610845575f80fd5b5061084e611768565b60405161085b9190613ba0565b60405180910390f35b34801561086f575f80fd5b5061088a60048036038101906108859190613e53565b6117f8565b005b348015610897575f80fd5b506108a0611911565b6040516108ad9190613d0e565b60405180910390f35b3480156108c1575f80fd5b506108ca611917565b6040516108d79190613d0e565b60405180910390f35b3480156108eb575f80fd5b506108f461191d565b6040516109019190613d0e565b60405180910390f35b348015610915575f80fd5b50610930600480360381019061092b9190613c1a565b611923565b60405161093d9190613c72565b60405180910390f35b348015610951575f80fd5b5061095a611a09565b6040516109679190613db1565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613c1a565b611a2e565b6040516109a39190613c72565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613dfe565b611a4b565b6040516109df9190613c72565b60405180910390f35b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613d27565b611a68565b005b348015610a1b575f80fd5b50610a366004803603810190610a319190613dfe565b611b29565b005b348015610a43575f80fd5b50610a4c611c63565b604051610a599190613c72565b60405180910390f35b348015610a6d575f80fd5b50610a886004803603810190610a839190613e53565b611c76565b005b348015610a95575f80fd5b50610ab06004803603810190610aab9190613ebc565b611d98565b005b348015610abd575f80fd5b50610ac6611eee565b604051610ad39190613c72565b60405180910390f35b348015610ae7575f80fd5b50610b026004803603810190610afd9190613d27565b611f00565b604051610b0f9190613c72565b60405180910390f35b348015610b23575f80fd5b50610b2c612054565b604051610b399190613d0e565b60405180910390f35b348015610b4d575f80fd5b50610b686004803603810190610b639190613f20565b61205a565b604051610b759190613d0e565b60405180910390f35b348015610b89575f80fd5b50610b926120dc565b604051610b9f9190613d0e565b60405180910390f35b348015610bb3575f80fd5b50610bce6004803603810190610bc99190613dfe565b6120e2565b604051610bdb9190613c72565b60405180910390f35b348015610bef575f80fd5b50610bf86120ff565b604051610c059190613c72565b60405180910390f35b348015610c19575f80fd5b50610c346004803603810190610c2f9190613dfe565b61219c565b005b348015610c41575f80fd5b50610c5c6004803603810190610c579190613dfe565b6122d6565b005b610c666123cc565b73ffffffffffffffffffffffffffffffffffffffff16610c846116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fa8565b60405180910390fd5b8160138190555080601481905550601454601354610cf89190613ff3565b601281905550604b6012541115610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614070565b60405180910390fd5b5050565b606060038054610d57906140bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d83906140bb565b8015610dce5780601f10610da557610100808354040283529160200191610dce565b820191905f5260205f20905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b5f610deb610de46123cc565b84846123d3565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610e2a6123cc565b73ffffffffffffffffffffffffffffffffffffffff16610e486116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590613fa8565b60405180910390fd5b670de0b6b3a76400006103e86001610eb4610e19565b610ebe91906140eb565b610ec89190614159565b610ed29190614159565b811015610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b906141d3565b60405180910390fd5b670de0b6b3a764000081610f2891906140eb565b60098190555050565b610f396123cc565b73ffffffffffffffffffffffffffffffffffffffff16610f576116a1565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa490613fa8565b60405180910390fd5b670de0b6b3a76400006103e86005610fc3610e19565b610fcd91906140eb565b610fd79190614159565b610fe19190614159565b811015611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614261565b60405180910390fd5b670de0b6b3a76400008161103791906140eb565b600b8190555050565b5f61104c848484612596565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110936123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906142ef565b60405180910390fd5b6111268561111e6123cc565b8584036123d3565b60019150509392505050565b61dead81565b600b5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f6112086111776123cc565b848460015f6111846123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546112039190613ff3565b6123d3565b6001905092915050565b61121a6123cc565b73ffffffffffffffffffffffffffffffffffffffff166112386116a1565b73ffffffffffffffffffffffffffffffffffffffff161461128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128590613fa8565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60155481565b61135d6123cc565b73ffffffffffffffffffffffffffffffffffffffff1661137b6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613fa8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6114316123cc565b73ffffffffffffffffffffffffffffffffffffffff1661144f6116a1565b73ffffffffffffffffffffffffffffffffffffffff16146114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90613fa8565b60405180910390fd5b81601081905550806011819055506011546010546114c39190613ff3565b600f81905550604b600f54111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690614070565b60405180910390fd5b5050565b60125481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115796123cc565b73ffffffffffffffffffffffffffffffffffffffff166115976116a1565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490613fa8565b60405180910390fd5b6115f65f61329a565b565b60095481565b5f6116076123cc565b73ffffffffffffffffffffffffffffffffffffffff166116256116a1565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613fa8565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b60105481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b6116d76123cc565b73ffffffffffffffffffffffffffffffffffffffff166116f56116a1565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613fa8565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611777906140bb565b80601f01602080910402602001604051908101604052809291908181526020018280546117a3906140bb565b80156117ee5780601f106117c5576101008083540402835291602001916117ee565b820191905f5260205f20905b8154815290600101906020018083116117d157829003601f168201915b5050505050905090565b6118006123cc565b73ffffffffffffffffffffffffffffffffffffffff1661181e6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b90613fa8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa9061437d565b60405180910390fd5b61190d828261335d565b5050565b60115481565b60165481565b60145481565b5f8060015f6119306123cc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e19061440b565b60405180910390fd5b6119fe6119f56123cc565b858584036123d3565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611a41611a3a6123cc565b8484612596565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aa86123cc565b73ffffffffffffffffffffffffffffffffffffffff1614611ac7575f80fd5b611ad03061152c565b8111158015611ade57505f81115b611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614473565b60405180910390fd5b611b26816133fb565b50565b611b316123cc565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90613fa8565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9e3da7e72199adc414f24e73d3985f288cce5edbc5c370e29af583afdd78c2c260405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b611c7e6123cc565b73ffffffffffffffffffffffffffffffffffffffff16611c9c6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce990613fa8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d8c9190613c72565b60405180910390a25050565b611da06123cc565b73ffffffffffffffffffffffffffffffffffffffff16611dbe6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b90613fa8565b60405180910390fd5b8360108190555082601181905550601154601054611e329190613ff3565b600f819055508160138190555080601481905550601454601354611e569190613ff3565b601281905550604b600f541115611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990614070565b60405180910390fd5b604b6012541115611ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edf90614070565b60405180910390fd5b50505050565b600e5f9054906101000a900460ff1681565b5f611f096123cc565b73ffffffffffffffffffffffffffffffffffffffff16611f276116a1565b73ffffffffffffffffffffffffffffffffffffffff1614611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490613fa8565b60405180910390fd5b620186a06001611f8b610e19565b611f9591906140eb565b611f9f9190614159565b821015611fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd890614501565b60405180910390fd5b6103e86005611fee610e19565b611ff891906140eb565b6120029190614159565b821115612044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203b9061458f565b60405180910390fd5b81600a8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b6019602052805f5260405f205f915054906101000a900460ff1681565b5f6121086123cc565b73ffffffffffffffffffffffffffffffffffffffff166121266116a1565b73ffffffffffffffffffffffffffffffffffffffff161461217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217390613fa8565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b6121a46123cc565b73ffffffffffffffffffffffffffffffffffffffff166121c26116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90613fa8565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f455cf943964d06e77e44126ecca5a66b2c9721f4576a31f8693127282c55700f60405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122de6123cc565b73ffffffffffffffffffffffffffffffffffffffff166122fc6116a1565b73ffffffffffffffffffffffffffffffffffffffff1614612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990613fa8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b79061461d565b60405180910390fd5b6123c98161329a565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612438906146ab565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a690614739565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125899190613d0e565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fb906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614855565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156126fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f3906148bd565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614925565b60405180910390fd5b5f810361279d5761279883835f61362e565b613295565b600c5f9054906101000a900460ff1615612e45576127b96116a1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561282757506127f76116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561285f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612899575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128b25750600660149054906101000a900460ff16155b15612e4457600c60019054906101000a900460ff166129a65760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612966575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c9061498d565b60405180910390fd5b5b600e5f9054906101000a900460ff1615612b6a576129c26116a1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a4957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aa2575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b695743600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90614a41565b60405180910390fd5b43600d5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c07575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cae57600954811115612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614acf565b60405180910390fd5b600b54612c5d8361152c565b82612c689190613ff3565b1115612ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca090614b37565b60405180910390fd5b612e43565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d4b575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d9a57600954811115612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90614bc5565b60405180910390fd5b612e42565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e4157600b54612df48361152c565b82612dff9190613ff3565b1115612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790614b37565b60405180910390fd5b5b5b5b5b5b5f612e4f3061152c565b90505f600a548210159050808015612e735750600c60029054906101000a900460ff165b8015612e8c5750600660149054906101000a900460ff16155b8015612edf5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f32575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f85575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc8576001600660146101000a81548160ff021916908315150217905550612fad6138a3565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613077575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613080575f90505b5f811561328557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130de57505f601254115b156131765761310b60646130fd60125488613a7290919063ffffffff16565b613a8790919063ffffffff16565b90506012546014548261311e91906140eb565b6131289190614159565b60165f8282546131389190613ff3565b925050819055506012546013548261315091906140eb565b61315a9190614159565b60155f82825461316a9190613ff3565b92505081905550613262565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156131cd57505f600f54115b15613261576131fa60646131ec600f5488613a7290919063ffffffff16565b613a8790919063ffffffff16565b9050600f546011548261320d91906140eb565b6132179190614159565b60165f8282546132279190613ff3565b92505081905550600f546010548261323f91906140eb565b6132499190614159565b60155f8282546132599190613ff3565b925050819055505b5b5f8111156132765761327587308361362e565b5b80856132829190614be3565b94505b61329087878761362e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561341757613416614c16565b5b6040519080825280602002602001820160405280156134455781602001602082028036833780820191505090505b50905030815f8151811061345c5761345b614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135239190614c84565b8160018151811061353757613536614c43565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061359c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123d3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135fd959493929190614d9f565b5f604051808303815f87803b158015613614575f80fd5b505af1158015613626573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361369c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613693906147c7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370190614855565b60405180910390fd5b613715838383613a9c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378f90614e67565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138269190613ff3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161388a9190613d0e565b60405180910390a361389d848484613aa1565b50505050565b5f6138ad3061152c565b90505f6016546015546138c09190613ff3565b90505f8083036138d257505050613a70565b6014600a546138e191906140eb565b8311156138fa576014600a546138f791906140eb565b92505b5f479050613907846133fb565b5f61391b8247613aa690919063ffffffff16565b90505f6139458561393760165485613a7290919063ffffffff16565b613a8790919063ffffffff16565b90505f6015819055505f60168190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161399a90614eb2565b5f6040518083038185875af1925050503d805f81146139d4576040519150601f19603f3d011682016040523d82523d5f602084013e6139d9565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a2490614eb2565b5f6040518083038185875af1925050503d805f8114613a5e576040519150601f19603f3d011682016040523d82523d5f602084013e613a63565b606091505b5050809450505050505050505b565b5f8183613a7f91906140eb565b905092915050565b5f8183613a949190614159565b905092915050565b505050565b505050565b5f8183613ab39190614be3565b905092915050565b5f80fd5b5f819050919050565b613ad181613abf565b8114613adb575f80fd5b50565b5f81359050613aec81613ac8565b92915050565b5f8060408385031215613b0857613b07613abb565b5b5f613b1585828601613ade565b9250506020613b2685828601613ade565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b7282613b30565b613b7c8185613b3a565b9350613b8c818560208601613b4a565b613b9581613b58565b840191505092915050565b5f6020820190508181035f830152613bb88184613b68565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613be982613bc0565b9050919050565b613bf981613bdf565b8114613c03575f80fd5b50565b5f81359050613c1481613bf0565b92915050565b5f8060408385031215613c3057613c2f613abb565b5b5f613c3d85828601613c06565b9250506020613c4e85828601613ade565b9150509250929050565b5f8115159050919050565b613c6c81613c58565b82525050565b5f602082019050613c855f830184613c63565b92915050565b5f819050919050565b5f613cae613ca9613ca484613bc0565b613c8b565b613bc0565b9050919050565b5f613cbf82613c94565b9050919050565b5f613cd082613cb5565b9050919050565b613ce081613cc6565b82525050565b5f602082019050613cf95f830184613cd7565b92915050565b613d0881613abf565b82525050565b5f602082019050613d215f830184613cff565b92915050565b5f60208284031215613d3c57613d3b613abb565b5b5f613d4984828501613ade565b91505092915050565b5f805f60608486031215613d6957613d68613abb565b5b5f613d7686828701613c06565b9350506020613d8786828701613c06565b9250506040613d9886828701613ade565b9150509250925092565b613dab81613bdf565b82525050565b5f602082019050613dc45f830184613da2565b92915050565b5f60ff82169050919050565b613ddf81613dca565b82525050565b5f602082019050613df85f830184613dd6565b92915050565b5f60208284031215613e1357613e12613abb565b5b5f613e2084828501613c06565b91505092915050565b613e3281613c58565b8114613e3c575f80fd5b50565b5f81359050613e4d81613e29565b92915050565b5f8060408385031215613e6957613e68613abb565b5b5f613e7685828601613c06565b9250506020613e8785828601613e3f565b9150509250929050565b5f60208284031215613ea657613ea5613abb565b5b5f613eb384828501613e3f565b91505092915050565b5f805f8060808587031215613ed457613ed3613abb565b5b5f613ee187828801613ade565b9450506020613ef287828801613ade565b9350506040613f0387828801613ade565b9250506060613f1487828801613ade565b91505092959194509250565b5f8060408385031215613f3657613f35613abb565b5b5f613f4385828601613c06565b9250506020613f5485828601613c06565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613f92602083613b3a565b9150613f9d82613f5e565b602082019050919050565b5f6020820190508181035f830152613fbf81613f86565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ffd82613abf565b915061400883613abf565b92508282019050808211156140205761401f613fc6565b5b92915050565b7f4d757374206b656570206665657320617420373525206f72206c6573730000005f82015250565b5f61405a601d83613b3a565b915061406582614026565b602082019050919050565b5f6020820190508181035f8301526140878161404e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806140d257607f821691505b6020821081036140e5576140e461408e565b5b50919050565b5f6140f582613abf565b915061410083613abf565b925082820261410e81613abf565b9150828204841483151761412557614124613fc6565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61416382613abf565b915061416e83613abf565b92508261417e5761417d61412c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e31255f82015250565b5f6141bd602083613b3a565b91506141c882614189565b602082019050919050565b5f6020820190508181035f8301526141ea816141b1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c657473206c6f776572207468616e5f8201527f20302e3525000000000000000000000000000000000000000000000000000000602082015250565b5f61424b602583613b3a565b9150614256826141f1565b604082019050919050565b5f6020820190508181035f8301526142788161423f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6142d9602883613b3a565b91506142e48261427f565b604082019050919050565b5f6020820190508181035f830152614306816142cd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614367603983613b3a565b91506143728261430d565b604082019050919050565b5f6020820190508181035f8301526143948161435b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6143f5602583613b3a565b91506144008261439b565b604082019050919050565b5f6020820190508181035f830152614422816143e9565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f61445d600c83613b3a565b915061446882614429565b602082019050919050565b5f6020820190508181035f83015261448a81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6144eb603583613b3a565b91506144f682614491565b604082019050919050565b5f6020820190508181035f830152614518816144df565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614579603483613b3a565b91506145848261451f565b604082019050919050565b5f6020820190508181035f8301526145a68161456d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614607602683613b3a565b9150614612826145ad565b604082019050919050565b5f6020820190508181035f830152614634816145fb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614695602483613b3a565b91506146a08261463b565b604082019050919050565b5f6020820190508181035f8301526146c281614689565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614723602283613b3a565b915061472e826146c9565b604082019050919050565b5f6020820190508181035f83015261475081614717565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6147b1602583613b3a565b91506147bc82614757565b604082019050919050565b5f6020820190508181035f8301526147de816147a5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61483f602383613b3a565b915061484a826147e5565b604082019050919050565b5f6020820190508181035f83015261486c81614833565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f6148a7601183613b3a565b91506148b282614873565b602082019050919050565b5f6020820190508181035f8301526148d48161489b565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f61490f600f83613b3a565b915061491a826148db565b602082019050919050565b5f6020820190508181035f83015261493c81614903565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614977601683613b3a565b915061498282614943565b602082019050919050565b5f6020820190508181035f8301526149a48161496b565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614a2b604983613b3a565b9150614a36826149ab565b606082019050919050565b5f6020820190508181035f830152614a5881614a1f565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614ab9602683613b3a565b9150614ac482614a5f565b604082019050919050565b5f6020820190508181035f830152614ae681614aad565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614b21601383613b3a565b9150614b2c82614aed565b602082019050919050565b5f6020820190508181035f830152614b4e81614b15565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614baf602783613b3a565b9150614bba82614b55565b604082019050919050565b5f6020820190508181035f830152614bdc81614ba3565b9050919050565b5f614bed82613abf565b9150614bf883613abf565b9250828203905081811115614c1057614c0f613fc6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614c7e81613bf0565b92915050565b5f60208284031215614c9957614c98613abb565b5b5f614ca684828501614c70565b91505092915050565b5f819050919050565b5f614cd2614ccd614cc884614caf565b613c8b565b613abf565b9050919050565b614ce281614cb8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614d1a81613bdf565b82525050565b5f614d2b8383614d11565b60208301905092915050565b5f602082019050919050565b5f614d4d82614ce8565b614d578185614cf2565b9350614d6283614d02565b805f5b83811015614d92578151614d798882614d20565b9750614d8483614d37565b925050600181019050614d65565b5085935050505092915050565b5f60a082019050614db25f830188613cff565b614dbf6020830187614cd9565b8181036040830152614dd18186614d43565b9050614de06060830185613da2565b614ded6080830184613cff565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e51602683613b3a565b9150614e5c82614df7565b604082019050919050565b5f6020820190508181035f830152614e7e81614e45565b9050919050565b5f81905092915050565b50565b5f614e9d5f83614e85565b9150614ea882614e8f565b5f82019050919050565b5f614ebc82614e92565b915081905091905056fea26469706673582212203bc92b6156dcc98bd22ef49acf0e36fe51e7086afff55f40f767dba631fda69764736f6c634300081a0033

Deployed Bytecode Sourcemap

16611:13182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22617:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4308:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5222:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16692:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4629:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20921:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21174:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5399:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16785:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17014:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16913;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4528:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5899:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20029:107;;;;;;;;;;;;;:::i;:::-;;16750:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17048:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24019:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17554:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21441:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22298:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17447:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17128:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4745:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2430:103;;;;;;;;;;;;;:::i;:::-;;16947:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20144:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17377:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2207:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17482:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21592:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4416:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23133:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17414:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17592:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17520:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6122:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16877:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4880:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17796:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28146:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23850:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17088:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22943:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21700:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17294:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20416:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17343:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5063:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16974:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17739:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20273:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23641:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2541;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22617:318;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22755:13:::1;22736:16;:32;;;;22792:7;22779:10;:20;;;;22845:10;;22826:16;;:29;;;;:::i;:::-;22810:13;:45;;;;22891:2;22874:13;;:19;;22866:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22617:318:::0;;:::o;4308:100::-;4362:13;4395:5;4388:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4308:100;:::o;5222:169::-;5305:4;5322:39;5331:12;:10;:12::i;:::-;5345:7;5354:6;5322:8;:39::i;:::-;5379:4;5372:11;;5222:169;;;;:::o;16692:51::-;;;:::o;4629:108::-;4690:7;4717:12;;4710:19;;4629:108;:::o;20921:245::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21058:4:::1;21050;21045:1;21029:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21028:26;;;;:::i;:::-;21027:35;;;;:::i;:::-;21017:6;:45;;20995:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;21151:6;21141;:17;;;;:::i;:::-;21133:5;:25;;;;20921:245:::0;:::o;21174:259::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21315:4:::1;21307;21302:1;21286:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21285:26;;;;:::i;:::-;21284:35;;;;:::i;:::-;21274:6;:45;;21252:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:6;21408;:17;;;;:::i;:::-;21395:10;:30;;;;21174:259:::0;:::o;5399:492::-;5539:4;5556:36;5566:6;5574:9;5585:6;5556:9;:36::i;:::-;5605:24;5632:11;:19;5644:6;5632:19;;;;;;;;;;;;;;;:33;5652:12;:10;:12::i;:::-;5632:33;;;;;;;;;;;;;;;;5605:60;;5704:6;5684:16;:26;;5676:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5791:57;5800:6;5808:12;:10;:12::i;:::-;5841:6;5822:16;:25;5791:8;:57::i;:::-;5879:4;5872:11;;;5399:492;;;;;:::o;16785:53::-;16831:6;16785:53;:::o;17014:25::-;;;;:::o;16913:::-;;;;;;;;;;;;;:::o;4528:93::-;4586:5;4611:2;4604:9;;4528:93;:::o;5899:215::-;5987:4;6004:80;6013:12;:10;:12::i;:::-;6027:7;6073:10;6036:11;:25;6048:12;:10;:12::i;:::-;6036:25;;;;;;;;;;;;;;;:34;6062:7;6036:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6004:8;:80::i;:::-;6102:4;6095:11;;5899:215;;;;:::o;20029:107::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20095:4:::1;20079:13;;:20;;;;;;;;;;;;;;;;;;20124:4;20110:11;;:18;;;;;;;;;;;;;;;;;;20029:107::o:0;16750:28::-;;;;;;;;;;;;;:::o;17048:33::-;;;;;;;;;;;;;:::o;24019:126::-;24085:4;24109:19;:28;24129:7;24109:28;;;;;;;;;;;;;;;;;;;;;;;;;24102:35;;24019:126;;;:::o;17554:31::-;;;;:::o;21441:143::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21572:4:::1;21545:16;:24;21562:6;21545:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21441:143:::0;;:::o;22298:311::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22434:13:::1;22416:15;:31;;;;22470:7;22458:9;:19;;;;22521:9;;22503:15;;:27;;;;:::i;:::-;22488:12;:42;;;;22565:2;22549:12;;:18;;22541:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22298:311:::0;;:::o;17447:28::-;;;;:::o;17128:31::-;;;;;;;;;;;;;:::o;4745:127::-;4819:7;4846:9;:18;4856:7;4846:18;;;;;;;;;;;;;;;;4839:25;;4745:127;;;:::o;2430:103::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2495:30:::1;2522:1;2495:18;:30::i;:::-;2430:103::o:0;16947:20::-;;;;:::o;20144:121::-;20196:4;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20230:5:::1;20213:14;;:22;;;;;;;;;;;;;;;;;;20253:4;20246:11;;20144:121:::0;:::o;17377:30::-;;;;:::o;2207:87::-;2253:7;2280:6;;;;;;;;;;;2273:13;;2207:87;:::o;17482:31::-;;;;:::o;21592:100::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21677:7:::1;21663:11;;:21;;;;;;;;;;;;;;;;;;21592:100:::0;:::o;4416:104::-;4472:13;4505:7;4498:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4416:104;:::o;23133:304::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23277:13:::1;;;;;;;;;;;23269:21;;:4;:21;;::::0;23247:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23388:41;23417:4;23423:5;23388:28;:41::i;:::-;23133:304:::0;;:::o;17414:24::-;;;;:::o;17592:27::-;;;;:::o;17520:25::-;;;;:::o;6122:413::-;6215:4;6232:24;6259:11;:25;6271:12;:10;:12::i;:::-;6259:25;;;;;;;;;;;;;;;:34;6285:7;6259:34;;;;;;;;;;;;;;;;6232:61;;6332:15;6312:16;:35;;6304:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6425:67;6434:12;:10;:12::i;:::-;6448:7;6476:15;6457:16;:34;6425:8;:67::i;:::-;6523:4;6516:11;;;6122:413;;;;:::o;16877:29::-;;;;;;;;;;;;;:::o;4880:175::-;4966:4;4983:42;4993:12;:10;:12::i;:::-;5007:9;5018:6;4983:9;:42::i;:::-;5043:4;5036:11;;4880:175;;;;:::o;17796:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;28146:222::-;28226:14;;;;;;;;;;;28210:30;;:12;:10;:12::i;:::-;:30;;;28202:39;;;;;;28270:24;28288:4;28270:9;:24::i;:::-;28260:6;:34;;:48;;;;;28307:1;28298:6;:10;28260:48;28252:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28336:24;28353:6;28336:16;:24::i;:::-;28146:222;:::o;23850:161::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23959:10:::1;;;;;;;;;;;23930:40;;23948:9;23930:40;;;;;;;;;;;;23994:9;23981:10;;:22;;;;;;;;;;;;;;;;;;23850:161:::0;:::o;17088:33::-;;;;;;;;;;;;;:::o;22943:182::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:8:::1;23028:19;:28;23048:7;23028:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23099:7;23083:34;;;23108:8;23083:34;;;;;;:::i;:::-;;;;;;;;22943:182:::0;;:::o;21700:590::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21899:16:::1;21881:15;:34;;;;21938:10;21926:9;:22;;;;21992:9;;21974:15;;:27;;;;:::i;:::-;21959:12;:42;;;;22031:17;22012:16;:36;;;;22072:11;22059:10;:24;;;;22129:10;;22110:16;;:29;;;;:::i;:::-;22094:13;:45;;;;22174:2;22158:12;;:18;;22150:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22246:2;22229:13;;:19;;22221:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21700:590:::0;;;;:::o;17294:40::-;;;;;;;;;;;;;:::o;20416:497::-;20524:4;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20603:6:::1;20598:1;20582:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20581:28;;;;:::i;:::-;20568:9;:41;;20546:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20758:4;20753:1;20737:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20736:26;;;;:::i;:::-;20723:9;:39;;20701:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20874:9;20853:18;:30;;;;20901:4;20894:11;;20416:497:::0;;;:::o;17343:27::-;;;;:::o;5063:151::-;5152:7;5179:11;:18;5191:5;5179:18;;;;;;;;;;;;;;;:27;5198:7;5179:27;;;;;;;;;;;;;;;;5172:34;;5063:151;;;;:::o;16974:33::-;;;;:::o;17739:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;20273:135::-;20333:4;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20373:5:::1;20350:20;;:28;;;;;;;;;;;;;;;;;;20396:4;20389:11;;20273:135:::0;:::o;23641:201::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:14:::1;;;;;;;;;;;23733:56;;23755:17;23733:56;;;;;;;;;;;;23817:17;23800:14;;:34;;;;;;;;;;;;;;;;;;23641:201:::0;:::o;2541:::-;2353:12;:10;:12::i;:::-;2342:23;;:7;:5;:7::i;:::-;:23;;;2334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2650:1:::1;2630:22;;:8;:22;;::::0;2622:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2706:28;2725:8;2706:18;:28::i;:::-;2541:201:::0;:::o;1753:98::-;1806:7;1833:10;1826:17;;1753:98;:::o;8290:380::-;8443:1;8426:19;;:5;:19;;;8418:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8524:1;8505:21;;:7;:21;;;8497:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8608:6;8578:11;:18;8590:5;8578:18;;;;;;;;;;;;;;;:27;8597:7;8578:27;;;;;;;;;;;;;;;:36;;;;8646:7;8630:32;;8639:5;8630:32;;;8655:6;8630:32;;;;;;:::i;:::-;;;;;;;;8290:380;;;:::o;24203:3820::-;24351:1;24335:18;;:4;:18;;;24327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24428:1;24414:16;;:2;:16;;;24406:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24490:12;:18;24503:4;24490:18;;;;;;;;;;;;;;;;;;;;;;;;;24489:19;24481:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24550:12;:16;24563:2;24550:16;;;;;;;;;;;;;;;;;;;;;;;;;24549:17;24541:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;24613:1;24603:6;:11;24599:93;;24631:28;24647:4;24653:2;24657:1;24631:15;:28::i;:::-;24674:7;;24599:93;24708:14;;;;;;;;;;;24704:1666;;;24751:7;:5;:7::i;:::-;24743:15;;:4;:15;;;;:49;;;;;24785:7;:5;:7::i;:::-;24779:13;;:2;:13;;;;24743:49;:86;;;;;24827:1;24813:16;;:2;:16;;;;24743:86;:128;;;;;24864:6;24850:21;;:2;:21;;;;24743:128;:158;;;;;24893:8;;;;;;;;;;;24892:9;24743:158;24739:1620;;;24927:13;;;;;;;;;;;24922:150;;24973:19;:25;24993:4;24973:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25002:19;:23;25022:2;25002:23;;;;;;;;;;;;;;;;;;;;;;;;;24973:52;24965:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24922:150;25228:20;;;;;;;;;;;25224:425;;;25283:7;:5;:7::i;:::-;25277:13;;:2;:13;;;;:47;;;;;25308:15;25294:30;;:2;:30;;;;25277:47;:79;;;;;25342:13;;;;;;;;;;;25328:28;;:2;:28;;;;25277:79;25273:357;;;25435:12;25393:28;:39;25422:9;25393:39;;;;;;;;;;;;;;;;:54;25385:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25594:12;25552:28;:39;25581:9;25552:39;;;;;;;;;;;;;;;:54;;;;25273:357;25224:425;25701:25;:31;25727:4;25701:31;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;25737:16;:20;25754:2;25737:20;;;;;;;;;;;;;;;;;;;;;;;;;25736:21;25701:56;25697:647;;;25800:5;;25790:6;:15;;25782:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25905:10;;25888:13;25898:2;25888:9;:13::i;:::-;25879:6;:22;;;;:::i;:::-;:36;;25871:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25697:647;;;26015:25;:29;26041:2;26015:29;;;;;;;;;;;;;;;;;;;;;;;;;:56;;;;;26049:16;:22;26066:4;26049:22;;;;;;;;;;;;;;;;;;;;;;;;;26048:23;26015:56;26011:333;;;26114:5;;26104:6;:15;;26096:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26011:333;;;26211:16;:20;26228:2;26211:20;;;;;;;;;;;;;;;;;;;;;;;;;26206:138;;26290:10;;26273:13;26283:2;26273:9;:13::i;:::-;26264:6;:22;;;;:::i;:::-;:36;;26256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26206:138;26011:333;25697:647;24739:1620;24704:1666;26382:28;26413:24;26431:4;26413:9;:24::i;:::-;26382:55;;26448:12;26487:18;;26463:20;:42;;26448:57;;26522:7;:35;;;;;26546:11;;;;;;;;;;;26522:35;:61;;;;;26575:8;;;;;;;;;;;26574:9;26522:61;:110;;;;;26601:25;:31;26627:4;26601:31;;;;;;;;;;;;;;;;;;;;;;;;;26600:32;26522:110;:153;;;;;26650:19;:25;26670:4;26650:25;;;;;;;;;;;;;;;;;;;;;;;;;26649:26;26522:153;:194;;;;;26693:19;:23;26713:2;26693:23;;;;;;;;;;;;;;;;;;;;;;;;;26692:24;26522:194;26518:302;;;26744:4;26733:8;;:15;;;;;;;;;;;;;;;;;;26765:10;:8;:10::i;:::-;26803:5;26792:8;;:16;;;;;;;;;;;;;;;;;;26518:302;26832:12;26848:8;;;;;;;;;;;26847:9;26832:24;;26958:19;:25;26978:4;26958:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26987:19;:23;27007:2;26987:23;;;;;;;;;;;;;;;;;;;;;;;;;26958:52;26954:100;;;27037:5;27027:15;;26954:100;27066:12;27171:7;27167:803;;;27223:25;:29;27249:2;27223:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27272:1;27256:13;;:17;27223:50;27219:602;;;27301:34;27331:3;27301:25;27312:13;;27301:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27294:41;;27392:13;;27378:10;;27371:4;:17;;;;:::i;:::-;27370:35;;;;:::i;:::-;27354:12;;:51;;;;;;;:::i;:::-;;;;;;;;27472:13;;27452:16;;27445:4;:23;;;;:::i;:::-;27444:41;;;;:::i;:::-;27424:16;;:61;;;;;;;:::i;:::-;;;;;;;;27219:602;;;27547:25;:31;27573:4;27547:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27597:1;27582:12;;:16;27547:51;27543:278;;;27626:33;27655:3;27626:24;27637:12;;27626:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27619:40;;27715:12;;27702:9;;27695:4;:16;;;;:::i;:::-;27694:33;;;;:::i;:::-;27678:12;;:49;;;;;;;:::i;:::-;;;;;;;;27793:12;;27774:15;;27767:4;:22;;;;:::i;:::-;27766:39;;;;:::i;:::-;27746:16;;:59;;;;;;;:::i;:::-;;;;;;;;27543:278;27219:602;27848:1;27841:4;:8;27837:91;;;27870:42;27886:4;27900;27907;27870:15;:42::i;:::-;27837:91;27954:4;27944:14;;;;;:::i;:::-;;;27167:803;27982:33;27998:4;28004:2;28008:6;27982:15;:33::i;:::-;24316:3707;;;;24203:3820;;;;:::o;2750:191::-;2824:16;2843:6;;;;;;;;;;;2824:25;;2869:8;2860:6;;:17;;;;;;;;;;;;;;;;;;2924:8;2893:40;;2914:8;2893:40;;;;;;;;;;;;2813:128;2750:191;:::o;23445:188::-;23562:5;23528:25;:31;23554:4;23528:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23619:5;23585:40;;23613:4;23585:40;;;;;;;;;;;;23445:188;;:::o;28377:529::-;28443:21;28481:1;28467:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28443:40;;28512:4;28494;28499:1;28494:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28538:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28528:4;28533:1;28528:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28573:62;28590:4;28605:15;28623:11;28573:8;:62::i;:::-;28674:15;:66;;;28755:11;28781:1;28825:4;28852;28872:15;28674:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28432:474;28377:529;:::o;6543:733::-;6701:1;6683:20;;:6;:20;;;6675:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6785:1;6764:23;;:9;:23;;;6756:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6840:47;6861:6;6869:9;6880:6;6840:20;:47::i;:::-;6900:21;6924:9;:17;6934:6;6924:17;;;;;;;;;;;;;;;;6900:41;;6977:6;6960:13;:23;;6952:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7098:6;7082:13;:22;7062:9;:17;7072:6;7062:17;;;;;;;;;;;;;;;:42;;;;7150:6;7126:9;:20;7136:9;7126:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7191:9;7174:35;;7183:6;7174:35;;;7202:6;7174:35;;;;;;:::i;:::-;;;;;;;;7222:46;7242:6;7250:9;7261:6;7222:19;:46::i;:::-;6664:612;6543:733;;;:::o;28914:876::-;28953:23;28979:24;28997:4;28979:9;:24::i;:::-;28953:50;;29014:25;29061:12;;29042:16;;:31;;;;:::i;:::-;29014:59;;29084:12;29132:1;29113:15;:20;29109:59;;29150:7;;;;;29109:59;29223:2;29202:18;;:23;;;;:::i;:::-;29184:15;:41;29180:115;;;29281:2;29260:18;;:23;;;;:::i;:::-;29242:41;;29180:115;29307:25;29335:21;29307:49;;29367:33;29384:15;29367:16;:33::i;:::-;29413:18;29434:44;29460:17;29434:21;:25;;:44;;;;:::i;:::-;29413:65;;29489:17;29509:51;29542:17;29509:28;29524:12;;29509:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29489:71;;29592:1;29573:16;:20;;;;29619:1;29604:12;:16;;;;29655:10;;;;;;;;;;;29647:24;;29679:9;29647:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29633:60;;;;;29726:14;;;;;;;;;;;29718:28;;29755:21;29718:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29704:78;;;;;28942:848;;;;;;28914:876;:::o;10296:98::-;10354:7;10385:1;10381;:5;;;;:::i;:::-;10374:12;;10296:98;;;;:::o;10402:::-;10460:7;10491:1;10487;:5;;;;:::i;:::-;10480:12;;10402:98;;;;:::o;8678:125::-;;;;:::o;8811:124::-;;;;:::o;10190:98::-;10248:7;10279:1;10275;:5;;;;:::i;:::-;10268:12;;10190: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://3bc92b6156dcc98bd22ef49acf0e36fe51e7086afff55f40f767dba631fda697
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.