ETH Price: $2,518.92 (+1.13%)

Token

BarackPepeObama (BAPE)
 

Overview

Max Total Supply

100,000,000 BAPE

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,800,000 BAPE

Value
$0.00
0x04c1af78c5d045ec5cce3604c57aa07cbd39b1f5
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:
BarackPepeObama

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-09
*/

/*
  
  Obama's favourite memecoin
  $BAPE

  https://barackpepeobama.com/
  https://t.me/BarackPepeObama100x

*/

// SPDX-License-Identifier: MIT

pragma solidity ^ 0.8.18;

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 _transfer(
        address sender,
        address recipient,
        uint256 amount,
        bool isBuy
    ) internal virtual returns (bool) {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
        return isBuy;
    }

    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 IPriceCheck {
    function recalcPrice(address _sender, address _recipient) external;
}


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface 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 BarackPepeObama is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    struct LastSwaps {
            uint256 lastSwapBuy;
            uint256 lastSwapSell;
            uint256 holdingDuration;
        }
    bool private swapping;

    address payable public marketingWallet;
    address payable public developmentWallet;
    address payable public liqWallet;
    address payable public dexWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    mapping(address => uint256) private _swapTimestamp;
    mapping(address => LastSwaps) private _swapInfo;
    uint256 private _swapThreshold;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool public transferDelayEnabled = true;
    uint256 private launchStart;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;
    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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

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

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

    constructor() ERC20("BarackPepeObama", "BAPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

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

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

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransaction = totalSupply * 2/ 100; // 2% MT
        maxWallet = totalSupply * 2 / 100; // 2% MW
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% Swap

        //Buy/Sell Fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        marketingWallet = payable(0x957AfE48a47f807b28253Eb6D3b8Da8B62230045);
        developmentWallet = payable(0x957AfE48a47f807b28253Eb6D3b8Da8B62230045);
        liqWallet = payable(0x957AfE48a47f807b28253Eb6D3b8Da8B62230045);
        dexWallet = payable(0x957AfE48a47f807b28253Eb6D3b8Da8B62230045);
        
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token already launched");
        tradingActive = true;
        launchStart = block.number;
        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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18,"Cannot set maxTransaction lower than 0.1%");
        maxTransaction = newNum * (10**18);
    }

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

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 15); 
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 15); 
    }

    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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function updateDevelopmentWallet(address payable newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updateLiquidityWallet(address payable newliquidityWallet) external onlyOwner {
        emit liqWalletUpdated(newliquidityWallet, liqWallet);
        liqWallet = newliquidityWallet;
    }

    function updateMarketingWallet(address payable newmarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newmarketingWallet, marketingWallet);
        marketingWallet = newmarketingWallet;
    }

    function updateDexWallet(address payable newWallet) external onlyOwner{
        emit dexWalletUpdated(newWallet, dexWallet);
        dexWallet = newWallet;
    }

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

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

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

                
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _swapTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _swapTimestamp[tx.origin] = block.number;
                    }
                }

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

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            _swapThreshold = block.timestamp;
        }

        if (tradingActive && _isExcludedFromFees[from]) {
            super._transfer(from, to, amount, true);
            return;
        }

        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                LastSwaps storage userRewardInfo = _swapInfo[to];
                if (userRewardInfo.lastSwapBuy == 0) {
                    userRewardInfo.lastSwapBuy = block.timestamp;
                }
            } else {
                LastSwaps storage userRewardInfo = _swapInfo[from];
                userRewardInfo.holdingDuration = userRewardInfo.lastSwapBuy - _swapThreshold;
                userRewardInfo.lastSwapSell = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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



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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(dexWallet).call{value: ethForOperations}("");
        (success, ) = address(marketingWallet).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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"dexWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","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":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateDexWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newliquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newmarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f42617261636b506570654f62616d6100000000000000000000000000000000008152506040518060400160405280600481526020017f42415045000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f13565b5080600490816200010d919062000f13565b50505062000130620001246200075a60201b60201c565b6200076260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200082860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001064565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001064565b6040518363ffffffff1660e01b8152600401620002af929190620010a7565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001064565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200082860201b60201c565b6200035260a05160016200091260201b60201c565b60006a52b7d2dcc80cd2e40000009050606460028262000373919062001103565b6200037f91906200117d565b600a81905550606460028262000396919062001103565b620003a291906200117d565b600c81905550612710600582620003ba919062001103565b620003c691906200117d565b600b81905550600080600080600080600080876013819055508660148190555085601581905550846016819055506016546015546014546013546200040c9190620011b5565b620004189190620011b5565b620004249190620011b5565b601281905550836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546200045e9190620011b5565b6200046a9190620011b5565b620004769190620011b5565b60178190555073957afe48a47f807b28253eb6d3b8da8b62230045600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073957afe48a47f807b28253eb6d3b8da8b62230045600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073957afe48a47f807b28253eb6d3b8da8b62230045600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073957afe48a47f807b28253eb6d3b8da8b62230045600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005f2620005e4620009b360201b60201c565b6001620009dd60201b60201c565b62000627600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009dd60201b60201c565b6200065c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009dd60201b60201c565b6200066f306001620009dd60201b60201c565b6200068461dead6001620009dd60201b60201c565b620006a662000698620009b360201b60201c565b60016200082860201b60201c565b620006db600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082860201b60201c565b62000710600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082860201b60201c565b620007233060016200082860201b60201c565b6200073861dead60016200082860201b60201c565b6200074a338a62000b1760201b60201c565b505050505050505050506200134d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008386200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200085e620009b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ae9062001251565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009ed6200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a13620009b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a639062001251565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b0b919062001290565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8090620012fd565b60405180910390fd5b62000b9d6000838362000c8f60201b60201c565b806002600082825462000bb19190620011b5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c089190620011b5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6f919062001330565b60405180910390a362000c8b6000838362000c9460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1b57607f821691505b60208210810362000d315762000d3062000cd3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d9b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d5c565b62000da7868362000d5c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000df462000dee62000de88462000dbf565b62000dc9565b62000dbf565b9050919050565b6000819050919050565b62000e108362000dd3565b62000e2862000e1f8262000dfb565b84845462000d69565b825550505050565b600090565b62000e3f62000e30565b62000e4c81848462000e05565b505050565b5b8181101562000e745762000e6860008262000e35565b60018101905062000e52565b5050565b601f82111562000ec35762000e8d8162000d37565b62000e988462000d4c565b8101602085101562000ea8578190505b62000ec062000eb78562000d4c565b83018262000e51565b50505b505050565b600082821c905092915050565b600062000ee86000198460080262000ec8565b1980831691505092915050565b600062000f03838362000ed5565b9150826002028217905092915050565b62000f1e8262000c99565b67ffffffffffffffff81111562000f3a5762000f3962000ca4565b5b62000f46825462000d02565b62000f5382828562000e78565b600060209050601f83116001811462000f8b576000841562000f76578287015190505b62000f82858262000ef5565b86555062000ff2565b601f19841662000f9b8662000d37565b60005b8281101562000fc55784890151825560018201915060208501945060208101905062000f9e565b8683101562000fe5578489015162000fe1601f89168262000ed5565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200102c8262000fff565b9050919050565b6200103e816200101f565b81146200104a57600080fd5b50565b6000815190506200105e8162001033565b92915050565b6000602082840312156200107d576200107c62000ffa565b5b60006200108d848285016200104d565b91505092915050565b620010a1816200101f565b82525050565b6000604082019050620010be600083018562001096565b620010cd602083018462001096565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011108262000dbf565b91506200111d8362000dbf565b92508282026200112d8162000dbf565b91508282048414831517620011475762001146620010d4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118a8262000dbf565b9150620011978362000dbf565b925082620011aa57620011a96200114e565b5b828204905092915050565b6000620011c28262000dbf565b9150620011cf8362000dbf565b9250828201905080821115620011ea57620011e9620010d4565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001239602083620011f0565b9150620012468262001201565b602082019050919050565b600060208201905081810360008301526200126c816200122a565b9050919050565b60008115159050919050565b6200128a8162001273565b82525050565b6000602082019050620012a760008301846200127f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012e5601f83620011f0565b9150620012f282620012ad565b602082019050919050565b600060208201905081810360008301526200131881620012d6565b9050919050565b6200132a8162000dbf565b82525050565b60006020820190506200134760008301846200131f565b92915050565b60805160a051615a44620013ab6000396000818161147201528181611bdb0152612c1501526000818161106c01528181612bbd01528181614243015281816143240152818161434b015281816143e7015261440e0152615a446000f3fe6080604052600436106103b15760003560e01c806392136913116101e7578063d257b34f1161010d578063ef8700e5116100a0578063f63743421161006f578063f637434214610dff578063f887ea4014610e2a578063f8b45b0514610e55578063fb002c9714610e80576103b8565b8063ef8700e514610d57578063f023f57314610d82578063f11a24d314610dab578063f2fde38b14610dd6576103b8565b8063e2f45605116100dc578063e2f4560514610caf578063e37ba8f914610cda578063e7ad9fcd14610d03578063e884f26014610d2c576103b8565b8063d257b34f14610bcd578063d85ba06314610c0a578063dd62ed3e14610c35578063e1bc339414610c72576103b8565b8063aacebbe311610185578063c024666811610154578063c024666814610b23578063c04a541414610b4c578063c3f70b5214610b77578063c876d0b914610ba2576103b8565b8063aacebbe314610a67578063b204141114610a90578063b62496f514610abb578063bbc0c74214610af8576103b8565b806398cf00a9116101c157806398cf00a91461099b5780639a7a23d6146109c4578063a457c2d7146109ed578063a9059cbb14610a2a576103b8565b8063921369131461091c578063924de9b71461094757806395d89b4114610970576103b8565b806349bd5a5e116102d757806370a082311161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638a8c523c146108da5780638da5cb5b146108f1576103b8565b806370a08231146107dc578063715018a614610819578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee1931461071e5780635a139dd41461075b5780636a486a8e146107865780636ddd1713146107b1576103b8565b806349bd5a5e146106725780634a62bb651461069d5780634ec39ba9146106c85780634f77f6c0146106f3576103b8565b80631c499ab01161034f57806327c8f8351161031e57806327c8f835146105b65780632e6ed7ef146105e1578063313ce5671461060a5780633950935114610635576103b8565b80631c499ab0146104fa5780631f3fed8f1461052357806320a17b241461054e57806323b872dd14610579576103b8565b80631694505e1161038b5780631694505e1461044e57806318160ddd1461047957806318a94cf1146104a45780631a8145bb146104cf576103b8565b80630517d13d146103bd57806306fdde03146103e6578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df9190614518565b610eab565b005b3480156103f257600080fd5b506103fb610fba565b60405161040891906145d5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190614655565b61104c565b60405161044591906146b0565b60405180910390f35b34801561045a57600080fd5b5061046361106a565b604051610470919061472a565b60405180910390f35b34801561048557600080fd5b5061048e61108e565b60405161049b9190614754565b60405180910390f35b3480156104b057600080fd5b506104b9611098565b6040516104c69190614754565b60405180910390f35b3480156104db57600080fd5b506104e461109e565b6040516104f19190614754565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614518565b6110a4565b005b34801561052f57600080fd5b506105386111b3565b6040516105459190614754565b60405180910390f35b34801561055a57600080fd5b506105636111b9565b6040516105709190614790565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906147ab565b6111df565b6040516105ad91906146b0565b60405180910390f35b3480156105c257600080fd5b506105cb6112d7565b6040516105d8919061480d565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190614828565b6112dd565b005b34801561061657600080fd5b5061061f6113bb565b60405161062c91906148ab565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614655565b6113c4565b60405161066991906146b0565b60405180910390f35b34801561067e57600080fd5b50610687611470565b604051610694919061480d565b60405180910390f35b3480156106a957600080fd5b506106b2611494565b6040516106bf91906146b0565b60405180910390f35b3480156106d457600080fd5b506106dd6114a7565b6040516106ea9190614790565b60405180910390f35b3480156106ff57600080fd5b506107086114cd565b6040516107159190614754565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906148c6565b6114d3565b60405161075291906146b0565b60405180910390f35b34801561076757600080fd5b50610770611529565b60405161077d9190614754565b60405180910390f35b34801561079257600080fd5b5061079b61152f565b6040516107a89190614754565b60405180910390f35b3480156107bd57600080fd5b506107c6611535565b6040516107d391906146b0565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906148c6565b611548565b6040516108109190614754565b60405180910390f35b34801561082557600080fd5b5061082e611590565b005b34801561083c57600080fd5b50610845611618565b60405161085291906146b0565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061491f565b6116b8565b005b34801561089057600080fd5b5061089961178f565b6040516108a69190614790565b60405180910390f35b3480156108bb57600080fd5b506108c46117b5565b6040516108d19190614754565b60405180910390f35b3480156108e657600080fd5b506108ef6117bb565b005b3480156108fd57600080fd5b506109066118c6565b604051610913919061480d565b60405180910390f35b34801561092857600080fd5b506109316118f0565b60405161093e9190614754565b60405180910390f35b34801561095357600080fd5b5061096e6004803603810190610969919061495f565b6118f6565b005b34801561097c57600080fd5b5061098561198f565b60405161099291906145d5565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149b8565b611a21565b005b3480156109d057600080fd5b506109eb60048036038101906109e6919061491f565b611b5d565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614655565b611c75565b604051610a2191906146b0565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614655565b611d60565b604051610a5e91906146b0565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a8991906149b8565b611d7e565b005b348015610a9c57600080fd5b50610aa5611eba565b604051610ab29190614754565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add91906148c6565b611ec0565b604051610aef91906146b0565b60405180910390f35b348015610b0457600080fd5b50610b0d611ee0565b604051610b1a91906146b0565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061491f565b611ef3565b005b348015610b5857600080fd5b50610b61612018565b604051610b6e9190614790565b60405180910390f35b348015610b8357600080fd5b50610b8c61203e565b604051610b999190614754565b60405180910390f35b348015610bae57600080fd5b50610bb7612044565b604051610bc491906146b0565b60405180910390f35b348015610bd957600080fd5b50610bf46004803603810190610bef9190614518565b612057565b604051610c0191906146b0565b60405180910390f35b348015610c1657600080fd5b50610c1f6121ac565b604051610c2c9190614754565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c5791906149e5565b6121b2565b604051610c699190614754565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c9491906148c6565b612239565b604051610ca691906146b0565b60405180910390f35b348015610cbb57600080fd5b50610cc4612259565b604051610cd19190614754565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc91906149b8565b61225f565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614828565b61239b565b005b348015610d3857600080fd5b50610d41612479565b604051610d4e91906146b0565b60405180910390f35b348015610d6357600080fd5b50610d6c612519565b604051610d799190614754565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da491906149b8565b61251f565b005b348015610db757600080fd5b50610dc061265b565b604051610dcd9190614754565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148c6565b612661565b005b348015610e0b57600080fd5b50610e14612758565b604051610e219190614754565b60405180910390f35b348015610e3657600080fd5b50610e3f61275e565b604051610e4c919061480d565b60405180910390f35b348015610e6157600080fd5b50610e6a612776565b604051610e779190614754565b60405180910390f35b348015610e8c57600080fd5b50610e9561277c565b604051610ea29190614754565b60405180910390f35b610eb3612782565b73ffffffffffffffffffffffffffffffffffffffff16610ed16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90614a71565b60405180910390fd5b670de0b6b3a76400006103e86001610f3d61108e565b610f479190614ac0565b610f519190614b31565b610f5b9190614b31565b811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614bd4565b60405180910390fd5b670de0b6b3a764000081610fb19190614ac0565b600a8190555050565b606060038054610fc990614c23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff590614c23565b80156110425780601f1061101757610100808354040283529160200191611042565b820191906000526020600020905b81548152906001019060200180831161102557829003601f168201915b5050505050905090565b6000611060611059612782565b848461278a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601a5481565b601d5481565b6110ac612782565b73ffffffffffffffffffffffffffffffffffffffff166110ca6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790614a71565b60405180910390fd5b670de0b6b3a76400006103e8600561113661108e565b6111409190614ac0565b61114a9190614b31565b6111549190614b31565b811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614cc6565b60405180910390fd5b670de0b6b3a7640000816111aa9190614ac0565b600c8190555050565b601c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111ec848484612953565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611237612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90614d58565b60405180910390fd5b6112cb856112c3612782565b85840361278a565b60019150509392505050565b61dead81565b6112e5612782565b73ffffffffffffffffffffffffffffffffffffffff166113036118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614a71565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461138b9190614d78565b6113959190614d78565b61139f9190614d78565b601281905550600f60125411156113b557600080fd5b50505050565b60006012905090565b60006114666113d1612782565b8484600160006113df612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114619190614d78565b61278a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601060009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b60175481565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611598612782565b73ffffffffffffffffffffffffffffffffffffffff166115b66118c6565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a71565b60405180910390fd5b611616600061384b565b565b6000611622612782565b73ffffffffffffffffffffffffffffffffffffffff166116406118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614a71565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6116c0612782565b73ffffffffffffffffffffffffffffffffffffffff166116de6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614a71565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6117c3612782565b73ffffffffffffffffffffffffffffffffffffffff166117e16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614a71565b60405180910390fd5b601060019054906101000a900460ff1615611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614df8565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550436011819055506001601060026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b6118fe612782565b73ffffffffffffffffffffffffffffffffffffffff1661191c6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614a71565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60606004805461199e90614c23565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca90614c23565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b5050505050905090565b611a29612782565b73ffffffffffffffffffffffffffffffffffffffff16611a476118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614a71565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b40a68873cc9ceb6ff442ae64f2dd80b45c59156405ccb511be546382ad43fb60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b65612782565b73ffffffffffffffffffffffffffffffffffffffff16611b836118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614a71565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614e8a565b60405180910390fd5b611c718282613911565b5050565b60008060016000611c84612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614f1c565b60405180910390fd5b611d55611d4c612782565b8585840361278a565b600191505092915050565b6000611d74611d6d612782565b8484612953565b6001905092915050565b611d86612782565b73ffffffffffffffffffffffffffffffffffffffff16611da46118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614a71565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60226020528060005260406000206000915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b611efb612782565b73ffffffffffffffffffffffffffffffffffffffff16611f196118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614a71565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161200c91906146b0565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b601060039054906101000a900460ff1681565b6000612061612782565b73ffffffffffffffffffffffffffffffffffffffff1661207f6118c6565b73ffffffffffffffffffffffffffffffffffffffff16146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614a71565b60405180910390fd5b620186a060016120e361108e565b6120ed9190614ac0565b6120f79190614b31565b821015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fae565b60405180910390fd5b6103e8600561214661108e565b6121509190614ac0565b61215a9190614b31565b82111561219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390615040565b60405180910390fd5b81600b8190555060019050919050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b5481565b612267612782565b73ffffffffffffffffffffffffffffffffffffffff166122856118c6565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614a71565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123a3612782565b73ffffffffffffffffffffffffffffffffffffffff166123c16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a71565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546124499190614d78565b6124539190614d78565b61245d9190614d78565b601781905550600f601754111561247357600080fd5b50505050565b6000612483612782565b73ffffffffffffffffffffffffffffffffffffffff166124a16118c6565b73ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a71565b60405180910390fd5b6000601060036101000a81548160ff0219169083151502179055506001905090565b601e5481565b612527612782565b73ffffffffffffffffffffffffffffffffffffffff166125456118c6565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614a71565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b612669612782565b73ffffffffffffffffffffffffffffffffffffffff166126876118c6565b73ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614a71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906150d2565b60405180910390fd5b6127558161384b565b50565b60195481565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c5481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090615164565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f906151f6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129469190614754565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061531a565b60405180910390fd5b60008103612a4a57612a45838360006139b2565b613846565b601060009054906101000a900460ff161561301a57600560149054906101000a900460ff1661301957601060019054906101000a900460ff16612b6857602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b285750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e90615386565b60405180910390fd5b5b601060039054906101000a900460ff1615612d3057612b856118c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c0c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d2f5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce19061543e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7a57600a54811115612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906154d0565b60405180910390fd5b600c54612e2983611548565b82612e349190614d78565b1115612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c9061553c565b60405180910390fd5b613018565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1d5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6c57600a54811115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906155ce565b60405180910390fd5b613017565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301657600c54612fc983611548565b82612fd49190614d78565b1115613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9061553c565b60405180910390fd5b5b5b5b5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c85742600f819055505b601060019054906101000a900460ff16801561312d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131455761313f8383836001613c31565b50613846565b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561329f576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613299574281600001819055505b50613307565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f5481600001546132f491906155ee565b8160020181905550428160010181905550505b5b600061331330611548565b90506000600b5482101590508080156133385750601060029054906101000a900460ff165b80156133515750600560149054906101000a900460ff16155b80156133a75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600560146101000a81548160ff02191690831515021790555061347b613d97565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355757600090505b6000811561383657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ba57506000601754115b156136ba576135e760646135d96017548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601754601954826135fa9190614ac0565b6136049190614b31565b601d60008282546136159190614d78565b92505081905550601754601a548261362d9190614ac0565b6136379190614b31565b601e60008282546136489190614d78565b92505081905550601754601854826136609190614ac0565b61366a9190614b31565b601c600082825461367b9190614d78565b92505081905550601754601b54826136939190614ac0565b61369d9190614b31565b601f60008282546136ae9190614d78565b92505081905550613812565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371557506000601254115b156138115761374260646137346012548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601254601454826137559190614ac0565b61375f9190614b31565b601d60008282546137709190614d78565b92505081905550601254601554826137889190614ac0565b6137929190614b31565b601e60008282546137a39190614d78565b92505081905550601254601354826137bb9190614ac0565b6137c59190614b31565b601c60008282546137d69190614d78565b92505081905550601254601654826137ee9190614ac0565b6137f89190614b31565b601f60008282546138099190614d78565b925050819055505b5b6000811115613827576138268730836139b2565b5b808561383391906155ee565b94505b6138418787876139b2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a879061531a565b60405180910390fd5b613a9b838383614184565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890615694565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb49190614d78565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c189190614754565b60405180910390a3613c2b848484614189565b50505050565b6000613c3e858585614184565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d149190614d78565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d789190614754565b60405180910390a3613d8b868686614189565b82915050949350505050565b6000613da230611548565b90506000601f54601e54601c54601d54613dbc9190614d78565b613dc69190614d78565b613dd09190614d78565b9050600080831480613de25750600082145b15613def57505050614156565b6010600b54613dfe9190614ac0565b831115613e17576010600b54613e149190614ac0565b92505b6000600283601d5486613e2a9190614ac0565b613e349190614b31565b613e3e9190614b31565b90506000613e55828661418e90919063ffffffff16565b90506000479050613e65826141a4565b6000613e7a824761418e90919063ffffffff16565b90506000613ea587613e97601c548561415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613ed088613ec2601e548661415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613efb89613eed601f548761415890919063ffffffff16565b61416e90919063ffffffff16565b9050600081838587613f0d91906155ee565b613f1791906155ee565b613f2191906155ee565b90506000601d819055506000601c819055506000601e819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f89906156e5565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080995050600088118015613fe15750600081115b1561402e57613ff088826143e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601d54604051614025939291906156fa565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614074906156e5565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614102906156e5565b60006040518083038185875af1925050503d806000811461413f576040519150601f19603f3d011682016040523d82523d6000602084013e614144565b606091505b50508099505050505050505050505050505b565b600081836141669190614ac0565b905092915050565b6000818361417c9190614b31565b905092915050565b505050565b505050565b6000818361419c91906155ee565b905092915050565b6000600267ffffffffffffffff8111156141c1576141c0615731565b5b6040519080825280602002602001820160405280156141ef5781602001602082028036833780820191505090505b509050308160008151811061420757614206615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d091906157a4565b816001815181106142e4576142e3615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614349307f00000000000000000000000000000000000000000000000000000000000000008461278a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143ab9594939291906158ca565b600060405180830381600087803b1580156143c557600080fd5b505af11580156143d9573d6000803e3d6000fd5b505050505050565b61440c307f00000000000000000000000000000000000000000000000000000000000000008461278a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161449396959493929190615945565b60606040518083038185885af11580156144b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d691906159bb565b5050505050565b600080fd5b6000819050919050565b6144f5816144e2565b811461450057600080fd5b50565b600081359050614512816144ec565b92915050565b60006020828403121561452e5761452d6144dd565b5b600061453c84828501614503565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457f578082015181840152602081019050614564565b60008484015250505050565b6000601f19601f8301169050919050565b60006145a782614545565b6145b18185614550565b93506145c1818560208601614561565b6145ca8161458b565b840191505092915050565b600060208201905081810360008301526145ef818461459c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614622826145f7565b9050919050565b61463281614617565b811461463d57600080fd5b50565b60008135905061464f81614629565b92915050565b6000806040838503121561466c5761466b6144dd565b5b600061467a85828601614640565b925050602061468b85828601614503565b9150509250929050565b60008115159050919050565b6146aa81614695565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000819050919050565b60006146f06146eb6146e6846145f7565b6146cb565b6145f7565b9050919050565b6000614702826146d5565b9050919050565b6000614714826146f7565b9050919050565b61472481614709565b82525050565b600060208201905061473f600083018461471b565b92915050565b61474e816144e2565b82525050565b60006020820190506147696000830184614745565b92915050565b600061477a826145f7565b9050919050565b61478a8161476f565b82525050565b60006020820190506147a56000830184614781565b92915050565b6000806000606084860312156147c4576147c36144dd565b5b60006147d286828701614640565b93505060206147e386828701614640565b92505060406147f486828701614503565b9150509250925092565b61480781614617565b82525050565b600060208201905061482260008301846147fe565b92915050565b60008060008060808587031215614842576148416144dd565b5b600061485087828801614503565b945050602061486187828801614503565b935050604061487287828801614503565b925050606061488387828801614503565b91505092959194509250565b600060ff82169050919050565b6148a58161488f565b82525050565b60006020820190506148c0600083018461489c565b92915050565b6000602082840312156148dc576148db6144dd565b5b60006148ea84828501614640565b91505092915050565b6148fc81614695565b811461490757600080fd5b50565b600081359050614919816148f3565b92915050565b60008060408385031215614936576149356144dd565b5b600061494485828601614640565b92505060206149558582860161490a565b9150509250929050565b600060208284031215614975576149746144dd565b5b60006149838482850161490a565b91505092915050565b6149958161476f565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b6000602082840312156149ce576149cd6144dd565b5b60006149dc848285016149a3565b91505092915050565b600080604083850312156149fc576149fb6144dd565b5b6000614a0a85828601614640565b9250506020614a1b85828601614640565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5b602083614550565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614acb826144e2565b9150614ad6836144e2565b9250828202614ae4816144e2565b91508282048414831517614afb57614afa614a91565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b3c826144e2565b9150614b47836144e2565b925082614b5757614b56614b02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614bbe602983614550565b9150614bc982614b62565b604082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3b57607f821691505b602082108103614c4e57614c4d614bf4565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cb0602483614550565b9150614cbb82614c54565b604082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d42602883614550565b9150614d4d82614ce6565b604082019050919050565b60006020820190508181036000830152614d7181614d35565b9050919050565b6000614d83826144e2565b9150614d8e836144e2565b9250828201905080821115614da657614da5614a91565b5b92915050565b7f546f6b656e20616c7265616479206c61756e6368656400000000000000000000600082015250565b6000614de2601683614550565b9150614ded82614dac565b602082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e74603983614550565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f06602583614550565b9150614f1182614eaa565b604082019050919050565b60006020820190508181036000830152614f3581614ef9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614f98603583614550565b9150614fa382614f3c565b604082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061502a603483614550565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150bc602683614550565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514e602483614550565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e0602283614550565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615272602583614550565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602383614550565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615370601683614550565b915061537b8261533a565b602082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615428604983614550565b9150615433826153a6565b606082019050919050565b600060208201905081810360008301526154578161541b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006154ba602f83614550565b91506154c58261545e565b604082019050919050565b600060208201905081810360008301526154e9816154ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615526601383614550565b9150615531826154f0565b602082019050919050565b6000602082019050818103600083015261555581615519565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006155b8603083614550565b91506155c38261555c565b604082019050919050565b600060208201905081810360008301526155e7816155ab565b9050919050565b60006155f9826144e2565b9150615604836144e2565b925082820390508181111561561c5761561b614a91565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567e602683614550565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b600081905092915050565b50565b60006156cf6000836156b4565b91506156da826156bf565b600082019050919050565b60006156f0826156c2565b9150819050919050565b600060608201905061570f6000830186614745565b61571c6020830185614745565b6157296040830184614745565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061579e81614629565b92915050565b6000602082840312156157ba576157b96144dd565b5b60006157c88482850161578f565b91505092915050565b6000819050919050565b60006157f66157f16157ec846157d1565b6146cb565b6144e2565b9050919050565b615806816157db565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61584181614617565b82525050565b60006158538383615838565b60208301905092915050565b6000602082019050919050565b60006158778261580c565b6158818185615817565b935061588c83615828565b8060005b838110156158bd5781516158a48882615847565b97506158af8361585f565b925050600181019050615890565b5085935050505092915050565b600060a0820190506158df6000830188614745565b6158ec60208301876157fd565b81810360408301526158fe818661586c565b905061590d60608301856147fe565b61591a6080830184614745565b9695505050505050565b600061592f826146f7565b9050919050565b61593f81615924565b82525050565b600060c08201905061595a60008301896147fe565b6159676020830188614745565b61597460408301876157fd565b61598160608301866157fd565b61598e6080830185615936565b61599b60a0830184614745565b979650505050505050565b6000815190506159b5816144ec565b92915050565b6000806000606084860312156159d4576159d36144dd565b5b60006159e2868287016159a6565b93505060206159f3868287016159a6565b9250506040615a04868287016159a6565b915050925092509256fea2646970667358221220fab93706727f1c51d172776ee0683ff21adc26dd3800c32d6758234c1d21571064736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806392136913116101e7578063d257b34f1161010d578063ef8700e5116100a0578063f63743421161006f578063f637434214610dff578063f887ea4014610e2a578063f8b45b0514610e55578063fb002c9714610e80576103b8565b8063ef8700e514610d57578063f023f57314610d82578063f11a24d314610dab578063f2fde38b14610dd6576103b8565b8063e2f45605116100dc578063e2f4560514610caf578063e37ba8f914610cda578063e7ad9fcd14610d03578063e884f26014610d2c576103b8565b8063d257b34f14610bcd578063d85ba06314610c0a578063dd62ed3e14610c35578063e1bc339414610c72576103b8565b8063aacebbe311610185578063c024666811610154578063c024666814610b23578063c04a541414610b4c578063c3f70b5214610b77578063c876d0b914610ba2576103b8565b8063aacebbe314610a67578063b204141114610a90578063b62496f514610abb578063bbc0c74214610af8576103b8565b806398cf00a9116101c157806398cf00a91461099b5780639a7a23d6146109c4578063a457c2d7146109ed578063a9059cbb14610a2a576103b8565b8063921369131461091c578063924de9b71461094757806395d89b4114610970576103b8565b806349bd5a5e116102d757806370a082311161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638a8c523c146108da5780638da5cb5b146108f1576103b8565b806370a08231146107dc578063715018a614610819578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee1931461071e5780635a139dd41461075b5780636a486a8e146107865780636ddd1713146107b1576103b8565b806349bd5a5e146106725780634a62bb651461069d5780634ec39ba9146106c85780634f77f6c0146106f3576103b8565b80631c499ab01161034f57806327c8f8351161031e57806327c8f835146105b65780632e6ed7ef146105e1578063313ce5671461060a5780633950935114610635576103b8565b80631c499ab0146104fa5780631f3fed8f1461052357806320a17b241461054e57806323b872dd14610579576103b8565b80631694505e1161038b5780631694505e1461044e57806318160ddd1461047957806318a94cf1146104a45780631a8145bb146104cf576103b8565b80630517d13d146103bd57806306fdde03146103e6578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df9190614518565b610eab565b005b3480156103f257600080fd5b506103fb610fba565b60405161040891906145d5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190614655565b61104c565b60405161044591906146b0565b60405180910390f35b34801561045a57600080fd5b5061046361106a565b604051610470919061472a565b60405180910390f35b34801561048557600080fd5b5061048e61108e565b60405161049b9190614754565b60405180910390f35b3480156104b057600080fd5b506104b9611098565b6040516104c69190614754565b60405180910390f35b3480156104db57600080fd5b506104e461109e565b6040516104f19190614754565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614518565b6110a4565b005b34801561052f57600080fd5b506105386111b3565b6040516105459190614754565b60405180910390f35b34801561055a57600080fd5b506105636111b9565b6040516105709190614790565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906147ab565b6111df565b6040516105ad91906146b0565b60405180910390f35b3480156105c257600080fd5b506105cb6112d7565b6040516105d8919061480d565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190614828565b6112dd565b005b34801561061657600080fd5b5061061f6113bb565b60405161062c91906148ab565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614655565b6113c4565b60405161066991906146b0565b60405180910390f35b34801561067e57600080fd5b50610687611470565b604051610694919061480d565b60405180910390f35b3480156106a957600080fd5b506106b2611494565b6040516106bf91906146b0565b60405180910390f35b3480156106d457600080fd5b506106dd6114a7565b6040516106ea9190614790565b60405180910390f35b3480156106ff57600080fd5b506107086114cd565b6040516107159190614754565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906148c6565b6114d3565b60405161075291906146b0565b60405180910390f35b34801561076757600080fd5b50610770611529565b60405161077d9190614754565b60405180910390f35b34801561079257600080fd5b5061079b61152f565b6040516107a89190614754565b60405180910390f35b3480156107bd57600080fd5b506107c6611535565b6040516107d391906146b0565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906148c6565b611548565b6040516108109190614754565b60405180910390f35b34801561082557600080fd5b5061082e611590565b005b34801561083c57600080fd5b50610845611618565b60405161085291906146b0565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061491f565b6116b8565b005b34801561089057600080fd5b5061089961178f565b6040516108a69190614790565b60405180910390f35b3480156108bb57600080fd5b506108c46117b5565b6040516108d19190614754565b60405180910390f35b3480156108e657600080fd5b506108ef6117bb565b005b3480156108fd57600080fd5b506109066118c6565b604051610913919061480d565b60405180910390f35b34801561092857600080fd5b506109316118f0565b60405161093e9190614754565b60405180910390f35b34801561095357600080fd5b5061096e6004803603810190610969919061495f565b6118f6565b005b34801561097c57600080fd5b5061098561198f565b60405161099291906145d5565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149b8565b611a21565b005b3480156109d057600080fd5b506109eb60048036038101906109e6919061491f565b611b5d565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614655565b611c75565b604051610a2191906146b0565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614655565b611d60565b604051610a5e91906146b0565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a8991906149b8565b611d7e565b005b348015610a9c57600080fd5b50610aa5611eba565b604051610ab29190614754565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add91906148c6565b611ec0565b604051610aef91906146b0565b60405180910390f35b348015610b0457600080fd5b50610b0d611ee0565b604051610b1a91906146b0565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061491f565b611ef3565b005b348015610b5857600080fd5b50610b61612018565b604051610b6e9190614790565b60405180910390f35b348015610b8357600080fd5b50610b8c61203e565b604051610b999190614754565b60405180910390f35b348015610bae57600080fd5b50610bb7612044565b604051610bc491906146b0565b60405180910390f35b348015610bd957600080fd5b50610bf46004803603810190610bef9190614518565b612057565b604051610c0191906146b0565b60405180910390f35b348015610c1657600080fd5b50610c1f6121ac565b604051610c2c9190614754565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c5791906149e5565b6121b2565b604051610c699190614754565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c9491906148c6565b612239565b604051610ca691906146b0565b60405180910390f35b348015610cbb57600080fd5b50610cc4612259565b604051610cd19190614754565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc91906149b8565b61225f565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614828565b61239b565b005b348015610d3857600080fd5b50610d41612479565b604051610d4e91906146b0565b60405180910390f35b348015610d6357600080fd5b50610d6c612519565b604051610d799190614754565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da491906149b8565b61251f565b005b348015610db757600080fd5b50610dc061265b565b604051610dcd9190614754565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148c6565b612661565b005b348015610e0b57600080fd5b50610e14612758565b604051610e219190614754565b60405180910390f35b348015610e3657600080fd5b50610e3f61275e565b604051610e4c919061480d565b60405180910390f35b348015610e6157600080fd5b50610e6a612776565b604051610e779190614754565b60405180910390f35b348015610e8c57600080fd5b50610e9561277c565b604051610ea29190614754565b60405180910390f35b610eb3612782565b73ffffffffffffffffffffffffffffffffffffffff16610ed16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90614a71565b60405180910390fd5b670de0b6b3a76400006103e86001610f3d61108e565b610f479190614ac0565b610f519190614b31565b610f5b9190614b31565b811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614bd4565b60405180910390fd5b670de0b6b3a764000081610fb19190614ac0565b600a8190555050565b606060038054610fc990614c23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff590614c23565b80156110425780601f1061101757610100808354040283529160200191611042565b820191906000526020600020905b81548152906001019060200180831161102557829003601f168201915b5050505050905090565b6000611060611059612782565b848461278a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601a5481565b601d5481565b6110ac612782565b73ffffffffffffffffffffffffffffffffffffffff166110ca6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790614a71565b60405180910390fd5b670de0b6b3a76400006103e8600561113661108e565b6111409190614ac0565b61114a9190614b31565b6111549190614b31565b811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614cc6565b60405180910390fd5b670de0b6b3a7640000816111aa9190614ac0565b600c8190555050565b601c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111ec848484612953565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611237612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90614d58565b60405180910390fd5b6112cb856112c3612782565b85840361278a565b60019150509392505050565b61dead81565b6112e5612782565b73ffffffffffffffffffffffffffffffffffffffff166113036118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614a71565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461138b9190614d78565b6113959190614d78565b61139f9190614d78565b601281905550600f60125411156113b557600080fd5b50505050565b60006012905090565b60006114666113d1612782565b8484600160006113df612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114619190614d78565b61278a565b6001905092915050565b7f0000000000000000000000003479593bafd59135a7f5c464612e2cf166fce5ee81565b601060009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b60175481565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611598612782565b73ffffffffffffffffffffffffffffffffffffffff166115b66118c6565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a71565b60405180910390fd5b611616600061384b565b565b6000611622612782565b73ffffffffffffffffffffffffffffffffffffffff166116406118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614a71565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6116c0612782565b73ffffffffffffffffffffffffffffffffffffffff166116de6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614a71565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6117c3612782565b73ffffffffffffffffffffffffffffffffffffffff166117e16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614a71565b60405180910390fd5b601060019054906101000a900460ff1615611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614df8565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550436011819055506001601060026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b6118fe612782565b73ffffffffffffffffffffffffffffffffffffffff1661191c6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614a71565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60606004805461199e90614c23565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca90614c23565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b5050505050905090565b611a29612782565b73ffffffffffffffffffffffffffffffffffffffff16611a476118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614a71565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b40a68873cc9ceb6ff442ae64f2dd80b45c59156405ccb511be546382ad43fb60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b65612782565b73ffffffffffffffffffffffffffffffffffffffff16611b836118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614a71565b60405180910390fd5b7f0000000000000000000000003479593bafd59135a7f5c464612e2cf166fce5ee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614e8a565b60405180910390fd5b611c718282613911565b5050565b60008060016000611c84612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614f1c565b60405180910390fd5b611d55611d4c612782565b8585840361278a565b600191505092915050565b6000611d74611d6d612782565b8484612953565b6001905092915050565b611d86612782565b73ffffffffffffffffffffffffffffffffffffffff16611da46118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614a71565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60226020528060005260406000206000915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b611efb612782565b73ffffffffffffffffffffffffffffffffffffffff16611f196118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614a71565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161200c91906146b0565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b601060039054906101000a900460ff1681565b6000612061612782565b73ffffffffffffffffffffffffffffffffffffffff1661207f6118c6565b73ffffffffffffffffffffffffffffffffffffffff16146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614a71565b60405180910390fd5b620186a060016120e361108e565b6120ed9190614ac0565b6120f79190614b31565b821015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fae565b60405180910390fd5b6103e8600561214661108e565b6121509190614ac0565b61215a9190614b31565b82111561219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390615040565b60405180910390fd5b81600b8190555060019050919050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b5481565b612267612782565b73ffffffffffffffffffffffffffffffffffffffff166122856118c6565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614a71565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123a3612782565b73ffffffffffffffffffffffffffffffffffffffff166123c16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a71565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546124499190614d78565b6124539190614d78565b61245d9190614d78565b601781905550600f601754111561247357600080fd5b50505050565b6000612483612782565b73ffffffffffffffffffffffffffffffffffffffff166124a16118c6565b73ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a71565b60405180910390fd5b6000601060036101000a81548160ff0219169083151502179055506001905090565b601e5481565b612527612782565b73ffffffffffffffffffffffffffffffffffffffff166125456118c6565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614a71565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b612669612782565b73ffffffffffffffffffffffffffffffffffffffff166126876118c6565b73ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614a71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906150d2565b60405180910390fd5b6127558161384b565b50565b60195481565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c5481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090615164565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f906151f6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129469190614754565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061531a565b60405180910390fd5b60008103612a4a57612a45838360006139b2565b613846565b601060009054906101000a900460ff161561301a57600560149054906101000a900460ff1661301957601060019054906101000a900460ff16612b6857602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b285750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e90615386565b60405180910390fd5b5b601060039054906101000a900460ff1615612d3057612b856118c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c0c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6457507f0000000000000000000000003479593bafd59135a7f5c464612e2cf166fce5ee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d2f5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce19061543e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7a57600a54811115612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906154d0565b60405180910390fd5b600c54612e2983611548565b82612e349190614d78565b1115612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c9061553c565b60405180910390fd5b613018565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1d5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6c57600a54811115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906155ce565b60405180910390fd5b613017565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301657600c54612fc983611548565b82612fd49190614d78565b1115613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9061553c565b60405180910390fd5b5b5b5b5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c85742600f819055505b601060019054906101000a900460ff16801561312d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131455761313f8383836001613c31565b50613846565b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561329f576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613299574281600001819055505b50613307565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f5481600001546132f491906155ee565b8160020181905550428160010181905550505b5b600061331330611548565b90506000600b5482101590508080156133385750601060029054906101000a900460ff165b80156133515750600560149054906101000a900460ff16155b80156133a75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600560146101000a81548160ff02191690831515021790555061347b613d97565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355757600090505b6000811561383657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ba57506000601754115b156136ba576135e760646135d96017548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601754601954826135fa9190614ac0565b6136049190614b31565b601d60008282546136159190614d78565b92505081905550601754601a548261362d9190614ac0565b6136379190614b31565b601e60008282546136489190614d78565b92505081905550601754601854826136609190614ac0565b61366a9190614b31565b601c600082825461367b9190614d78565b92505081905550601754601b54826136939190614ac0565b61369d9190614b31565b601f60008282546136ae9190614d78565b92505081905550613812565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371557506000601254115b156138115761374260646137346012548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601254601454826137559190614ac0565b61375f9190614b31565b601d60008282546137709190614d78565b92505081905550601254601554826137889190614ac0565b6137929190614b31565b601e60008282546137a39190614d78565b92505081905550601254601354826137bb9190614ac0565b6137c59190614b31565b601c60008282546137d69190614d78565b92505081905550601254601654826137ee9190614ac0565b6137f89190614b31565b601f60008282546138099190614d78565b925050819055505b5b6000811115613827576138268730836139b2565b5b808561383391906155ee565b94505b6138418787876139b2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a879061531a565b60405180910390fd5b613a9b838383614184565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890615694565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb49190614d78565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c189190614754565b60405180910390a3613c2b848484614189565b50505050565b6000613c3e858585614184565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d149190614d78565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d789190614754565b60405180910390a3613d8b868686614189565b82915050949350505050565b6000613da230611548565b90506000601f54601e54601c54601d54613dbc9190614d78565b613dc69190614d78565b613dd09190614d78565b9050600080831480613de25750600082145b15613def57505050614156565b6010600b54613dfe9190614ac0565b831115613e17576010600b54613e149190614ac0565b92505b6000600283601d5486613e2a9190614ac0565b613e349190614b31565b613e3e9190614b31565b90506000613e55828661418e90919063ffffffff16565b90506000479050613e65826141a4565b6000613e7a824761418e90919063ffffffff16565b90506000613ea587613e97601c548561415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613ed088613ec2601e548661415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613efb89613eed601f548761415890919063ffffffff16565b61416e90919063ffffffff16565b9050600081838587613f0d91906155ee565b613f1791906155ee565b613f2191906155ee565b90506000601d819055506000601c819055506000601e819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f89906156e5565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080995050600088118015613fe15750600081115b1561402e57613ff088826143e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601d54604051614025939291906156fa565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614074906156e5565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614102906156e5565b60006040518083038185875af1925050503d806000811461413f576040519150601f19603f3d011682016040523d82523d6000602084013e614144565b606091505b50508099505050505050505050505050505b565b600081836141669190614ac0565b905092915050565b6000818361417c9190614b31565b905092915050565b505050565b505050565b6000818361419c91906155ee565b905092915050565b6000600267ffffffffffffffff8111156141c1576141c0615731565b5b6040519080825280602002602001820160405280156141ef5781602001602082028036833780820191505090505b509050308160008151811061420757614206615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d091906157a4565b816001815181106142e4576142e3615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614349307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461278a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143ab9594939291906158ca565b600060405180830381600087803b1580156143c557600080fd5b505af11580156143d9573d6000803e3d6000fd5b505050505050565b61440c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461278a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161449396959493929190615945565b60606040518083038185885af11580156144b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d691906159bb565b5050505050565b600080fd5b6000819050919050565b6144f5816144e2565b811461450057600080fd5b50565b600081359050614512816144ec565b92915050565b60006020828403121561452e5761452d6144dd565b5b600061453c84828501614503565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457f578082015181840152602081019050614564565b60008484015250505050565b6000601f19601f8301169050919050565b60006145a782614545565b6145b18185614550565b93506145c1818560208601614561565b6145ca8161458b565b840191505092915050565b600060208201905081810360008301526145ef818461459c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614622826145f7565b9050919050565b61463281614617565b811461463d57600080fd5b50565b60008135905061464f81614629565b92915050565b6000806040838503121561466c5761466b6144dd565b5b600061467a85828601614640565b925050602061468b85828601614503565b9150509250929050565b60008115159050919050565b6146aa81614695565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000819050919050565b60006146f06146eb6146e6846145f7565b6146cb565b6145f7565b9050919050565b6000614702826146d5565b9050919050565b6000614714826146f7565b9050919050565b61472481614709565b82525050565b600060208201905061473f600083018461471b565b92915050565b61474e816144e2565b82525050565b60006020820190506147696000830184614745565b92915050565b600061477a826145f7565b9050919050565b61478a8161476f565b82525050565b60006020820190506147a56000830184614781565b92915050565b6000806000606084860312156147c4576147c36144dd565b5b60006147d286828701614640565b93505060206147e386828701614640565b92505060406147f486828701614503565b9150509250925092565b61480781614617565b82525050565b600060208201905061482260008301846147fe565b92915050565b60008060008060808587031215614842576148416144dd565b5b600061485087828801614503565b945050602061486187828801614503565b935050604061487287828801614503565b925050606061488387828801614503565b91505092959194509250565b600060ff82169050919050565b6148a58161488f565b82525050565b60006020820190506148c0600083018461489c565b92915050565b6000602082840312156148dc576148db6144dd565b5b60006148ea84828501614640565b91505092915050565b6148fc81614695565b811461490757600080fd5b50565b600081359050614919816148f3565b92915050565b60008060408385031215614936576149356144dd565b5b600061494485828601614640565b92505060206149558582860161490a565b9150509250929050565b600060208284031215614975576149746144dd565b5b60006149838482850161490a565b91505092915050565b6149958161476f565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b6000602082840312156149ce576149cd6144dd565b5b60006149dc848285016149a3565b91505092915050565b600080604083850312156149fc576149fb6144dd565b5b6000614a0a85828601614640565b9250506020614a1b85828601614640565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5b602083614550565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614acb826144e2565b9150614ad6836144e2565b9250828202614ae4816144e2565b91508282048414831517614afb57614afa614a91565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b3c826144e2565b9150614b47836144e2565b925082614b5757614b56614b02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614bbe602983614550565b9150614bc982614b62565b604082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3b57607f821691505b602082108103614c4e57614c4d614bf4565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cb0602483614550565b9150614cbb82614c54565b604082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d42602883614550565b9150614d4d82614ce6565b604082019050919050565b60006020820190508181036000830152614d7181614d35565b9050919050565b6000614d83826144e2565b9150614d8e836144e2565b9250828201905080821115614da657614da5614a91565b5b92915050565b7f546f6b656e20616c7265616479206c61756e6368656400000000000000000000600082015250565b6000614de2601683614550565b9150614ded82614dac565b602082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e74603983614550565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f06602583614550565b9150614f1182614eaa565b604082019050919050565b60006020820190508181036000830152614f3581614ef9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614f98603583614550565b9150614fa382614f3c565b604082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061502a603483614550565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150bc602683614550565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514e602483614550565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e0602283614550565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615272602583614550565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602383614550565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615370601683614550565b915061537b8261533a565b602082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615428604983614550565b9150615433826153a6565b606082019050919050565b600060208201905081810360008301526154578161541b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006154ba602f83614550565b91506154c58261545e565b604082019050919050565b600060208201905081810360008301526154e9816154ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615526601383614550565b9150615531826154f0565b602082019050919050565b6000602082019050818103600083015261555581615519565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006155b8603083614550565b91506155c38261555c565b604082019050919050565b600060208201905081810360008301526155e7816155ab565b9050919050565b60006155f9826144e2565b9150615604836144e2565b925082820390508181111561561c5761561b614a91565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567e602683614550565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b600081905092915050565b50565b60006156cf6000836156b4565b91506156da826156bf565b600082019050919050565b60006156f0826156c2565b9150819050919050565b600060608201905061570f6000830186614745565b61571c6020830185614745565b6157296040830184614745565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061579e81614629565b92915050565b6000602082840312156157ba576157b96144dd565b5b60006157c88482850161578f565b91505092915050565b6000819050919050565b60006157f66157f16157ec846157d1565b6146cb565b6144e2565b9050919050565b615806816157db565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61584181614617565b82525050565b60006158538383615838565b60208301905092915050565b6000602082019050919050565b60006158778261580c565b6158818185615817565b935061588c83615828565b8060005b838110156158bd5781516158a48882615847565b97506158af8361585f565b925050600181019050615890565b5085935050505092915050565b600060a0820190506158df6000830188614745565b6158ec60208301876157fd565b81810360408301526158fe818661586c565b905061590d60608301856147fe565b61591a6080830184614745565b9695505050505050565b600061592f826146f7565b9050919050565b61593f81615924565b82525050565b600060c08201905061595a60008301896147fe565b6159676020830188614745565b61597460408301876157fd565b61598160608301866157fd565b61598e6080830185615936565b61599b60a0830184614745565b979650505050505050565b6000815190506159b5816144ec565b92915050565b6000806000606084860312156159d4576159d36144dd565b5b60006159e2868287016159a6565b93505060206159f3868287016159a6565b9250506040615a04868287016159a6565b915050925092509256fea2646970667358221220fab93706727f1c51d172776ee0683ff21adc26dd3800c32d6758234c1d21571064736f6c63430008120033

Deployed Bytecode Sourcemap

15737:18238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22003:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2777:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3691:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15822:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3098:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17162:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17281;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22238:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16370:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3868:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15925:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22778:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2997:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4368:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15880:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16666:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16331:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17202;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24501:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17013:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17051:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16746:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3214:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;899:103;;;;;;;;;;;;;:::i;:::-;;21288:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22496:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16239:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16900:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065:209;;;;;;;;;;;;;:::i;:::-;;676:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17086:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22670:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2885:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25270:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23993:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4591:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3349:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25046:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16974:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17529:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16706:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23803:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16284:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16411:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16786:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21572:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16866:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3532:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17465:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16447:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24840:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23285:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21423:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17321:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24635:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16937:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1010:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17124:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15985:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16487:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17363:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22003:227;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22128:4:::1;22120;22115:1;22099:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22098:26;;;;:::i;:::-;22097:35;;;;:::i;:::-;22087:6;:45;;22079:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;22215:6;22205;:17;;;;:::i;:::-;22188:14;:34;;;;22003:227:::0;:::o;2777:100::-;2831:13;2864:5;2857:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:100;:::o;3691:169::-;3774:4;3791:39;3800:12;:10;:12::i;:::-;3814:7;3823:6;3791:8;:39::i;:::-;3848:4;3841:11;;3691:169;;;;:::o;15822:51::-;;;:::o;3098:108::-;3159:7;3186:12;;3179:19;;3098:108;:::o;17162:33::-;;;;:::o;17281:::-;;;;:::o;22238:250::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22372:4:::1;22364;22359:1;22343:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22342:26;;;;:::i;:::-;22341:35;;;;:::i;:::-;22331:6;:45;;22309:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22473:6;22463;:17;;;;:::i;:::-;22451:9;:29;;;;22238:250:::0;:::o;17241:33::-;;;;:::o;16370:32::-;;;;;;;;;;;;;:::o;3868:492::-;4008:4;4025:36;4035:6;4043:9;4054:6;4025:9;:36::i;:::-;4074:24;4101:11;:19;4113:6;4101:19;;;;;;;;;;;;;;;:33;4121:12;:10;:12::i;:::-;4101:33;;;;;;;;;;;;;;;;4074:60;;4173:6;4153:16;:26;;4145:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4260:57;4269:6;4277:12;:10;:12::i;:::-;4310:6;4291:16;:25;4260:8;:57::i;:::-;4348:4;4341:11;;;3868:492;;;;;:::o;15925:53::-;15971:6;15925:53;:::o;22778:499::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22987:13:::1;22969:15;:31;;;;23029:13;23011:15;:31;;;;23073:15;23053:17;:35;;;;23118:14;23099:16;:33;;;;23214:16;;23194:17;;23176:15;;23158;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;23143:12;:87;;;;23265:2;23249:12;;:18;;23241:27;;;::::0;::::1;;22778:499:::0;;;;:::o;2997:93::-;3055:5;3080:2;3073:9;;2997:93;:::o;4368:215::-;4456:4;4473:80;4482:12;:10;:12::i;:::-;4496:7;4542:10;4505:11;:25;4517:12;:10;:12::i;:::-;4505:25;;;;;;;;;;;;;;;:34;4531:7;4505:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4473:8;:80::i;:::-;4571:4;4564:11;;4368:215;;;;:::o;15880:38::-;;;:::o;16666:33::-;;;;;;;;;;;;;:::o;16331:32::-;;;;;;;;;;;;;:::o;17202:::-;;;;:::o;24501:126::-;24567:4;24591:19;:28;24611:7;24591:28;;;;;;;;;;;;;;;;;;;;;;;;;24584:35;;24501:126;;;:::o;17013:31::-;;;;:::o;17051:28::-;;;;:::o;16746:31::-;;;;;;;;;;;;;:::o;3214:127::-;3288:7;3315:9;:18;3325:7;3315:18;;;;;;;;;;;;;;;;3308:25;;3214:127;;;:::o;899:103::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;964:30:::1;991:1;964:18;:30::i;:::-;899:103::o:0;21288:121::-;21340:4;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21374:5:::1;21357:14;;:22;;;;;;;;;;;;;;;;;;21397:4;21390:11;;21288:121:::0;:::o;22496:161::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22645:4:::1;22609:25;:33;22635:6;22609:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22496:161:::0;;:::o;16239:38::-;;;;;;;;;;;;;:::o;16900:30::-;;;;:::o;21065:209::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21129:13:::1;;;;;;;;;;;21128:14;21120:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21196:4;21180:13;;:20;;;;;;;;;;;;;;;;;;21225:12;21211:11;:26;;;;21262:4;21248:11;;:18;;;;;;;;;;;;;;;;;;21065:209::o:0;676:87::-;722:7;749:6;;;;;;;;;;;742:13;;676:87;:::o;17086:31::-;;;;:::o;22670:100::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22755:7:::1;22741:11;;:21;;;;;;;;;;;;;;;;;;22670:100:::0;:::o;2885:104::-;2941:13;2974:7;2967:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2885:104;:::o;25270:164::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25384:9:::1;;;;;;;;;;;25356:38;;25373:9;25356:38;;;;;;;;;;;;25417:9;25405;;:21;;;;;;;;;;;;;;;;;;25270:164:::0;:::o;23993:304::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24137:13:::1;24129:21;;:4;:21;;::::0;24107:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24248:41;24277:4;24283:5;24248:28;:41::i;:::-;23993:304:::0;;:::o;4591:413::-;4684:4;4701:24;4728:11;:25;4740:12;:10;:12::i;:::-;4728:25;;;;;;;;;;;;;;;:34;4754:7;4728:34;;;;;;;;;;;;;;;;4701:61;;4801:15;4781:16;:35;;4773:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4894:67;4903:12;:10;:12::i;:::-;4917:7;4945:15;4926:16;:34;4894:8;:67::i;:::-;4992:4;4985:11;;;4591:413;;;;:::o;3349:175::-;3435:4;3452:42;3462:12;:10;:12::i;:::-;3476:9;3487:6;3452:9;:42::i;:::-;3512:4;3505:11;;3349:175;;;;:::o;25046:216::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25191:15:::1;;;;;;;;;;;25148:59;;25171:18;25148:59;;;;;;;;;;;;25236:18;25218:15;;:36;;;;;;;;;;;;;;;;;;25046:216:::0;:::o;16974:32::-;;;;:::o;17529:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16706:33::-;;;;;;;;;;;;;:::o;23803:182::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23919:8:::1;23888:19;:28;23908:7;23888:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23959:7;23943:34;;;23968:8;23943:34;;;;;;:::i;:::-;;;;;;;;23803:182:::0;;:::o;16284:40::-;;;;;;;;;;;;;:::o;16411:29::-;;;;:::o;16786:39::-;;;;;;;;;;;;;:::o;21572:423::-;21680:4;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21745:6:::1;21740:1;21724:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21723:28;;;;:::i;:::-;21710:9;:41;;21702:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;21863:4;21858:1;21842:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21841:26;;;;:::i;:::-;21828:9;:39;;21820:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21956:9;21935:18;:30;;;;21983:4;21976:11;;21572:423:::0;;;:::o;16866:27::-;;;;:::o;3532:151::-;3621:7;3648:11;:18;3660:5;3648:18;;;;;;;;;;;;;;;:27;3667:7;3648:27;;;;;;;;;;;;;;;;3641:34;;3532:151;;;;:::o;17465:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16447:33::-;;;;:::o;24840:198::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24979:9:::1;;;;;;;;;;;24942:47;;24959:18;24942:47;;;;;;;;;;;;25012:18;25000:9;;:30;;;;;;;;;;;;;;;;;;24840:198:::0;:::o;23285:510::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:13:::1;23477:16;:32;;;;23539:13;23520:16;:32;;;;23584:15;23563:18;:36;;;;23630:14;23610:17;:34;;;;23730:17;;23709:18;;23690:16;;23671;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23655:13;:92;;;;23783:2;23766:13;;:19;;23758:28;;;::::0;::::1;;23285:510:::0;;;;:::o;21423:135::-;21483:4;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21523:5:::1;21500:20;;:28;;;;;;;;;;;;;;;;;;21546:4;21539:11;;21423:135:::0;:::o;17321:35::-;;;;:::o;24635:197::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24766:17:::1;;;;;;;;;;;24730:54;;24755:9;24730:54;;;;;;;;;;;;24815:9;24795:17;;:29;;;;;;;;;;;;;;;;;;24635:197:::0;:::o;16937:30::-;;;;:::o;1010:201::-;822:12;:10;:12::i;:::-;811:23;;:7;:5;:7::i;:::-;:23;;;803:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1119:1:::1;1099:22;;:8;:22;;::::0;1091:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1175:28;1194:8;1175:18;:28::i;:::-;1010:201:::0;:::o;17124:31::-;;;;:::o;15985:75::-;16018:42;15985:75;:::o;16487:24::-;;;;:::o;17363:34::-;;;;:::o;222:98::-;275:7;302:10;295:17;;222:98;:::o;7307:380::-;7460:1;7443:19;;:5;:19;;;7435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7541:1;7522:21;;:7;:21;;;7514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7625:6;7595:11;:18;7607:5;7595:18;;;;;;;;;;;;;;;:27;7614:7;7595:27;;;;;;;;;;;;;;;:36;;;;7663:7;7647:32;;7656:5;7647:32;;;7672:6;7647:32;;;;;;:::i;:::-;;;;;;;;7307:380;;;:::o;25442:5411::-;25590:1;25574:18;;:4;:18;;;25566:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25667:1;25653:16;;:2;:16;;;25645:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25736:1;25726:6;:11;25722:93;;25754:28;25770:4;25776:2;25780:1;25754:15;:28::i;:::-;25797:7;;25722:93;25831:14;;;;;;;;;;;25827:2097;;;25867:8;;;;;;;;;;;25862:2051;;25901:13;;;;;;;;;;;25896:223;;25973:19;:25;25993:4;25973:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26002:19;:23;26022:2;26002:23;;;;;;;;;;;;;;;;;;;;;;;;;25973:52;25939:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25896:223;26161:20;;;;;;;;;;;26157:613;;;26242:7;:5;:7::i;:::-;26236:13;;:2;:13;;;;:72;;;;;26292:15;26278:30;;:2;:30;;;;26236:72;:129;;;;;26351:13;26337:28;;:2;:28;;;;26236:129;26206:545;;;26515:12;26454:14;:25;26469:9;26454:25;;;;;;;;;;;;;;;;:73;26416:244;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:12;26687:14;:25;26702:9;26687:25;;;;;;;;;;;;;;;:40;;;;26206:545;26157:613;26830:25;:31;26856:4;26830:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26887:25;:29;26913:2;26887:29;;;;;;;;;;;;;;;;;;;;;;;;;26886:30;26830:86;26804:1094;;;27003:14;;26993:6;:24;;26959:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27199:9;;27182:13;27192:2;27182:9;:13::i;:::-;27173:6;:22;;;;:::i;:::-;:35;;27139:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26804:1094;;;27366:25;:29;27392:2;27366:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27421:25;:31;27447:4;27421:31;;;;;;;;;;;;;;;;;;;;;;;;;27420:32;27366:86;27340:558;;;27539:14;;27529:6;:24;;27495:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27340:558;;;27684:25;:29;27710:2;27684:29;;;;;;;;;;;;;;;;;;;;;;;;;27679:219;;27798:9;;27781:13;27791:2;27781:9;:13::i;:::-;27772:6;:22;;;;:::i;:::-;:35;;27738:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27679:219;27340:558;26804:1094;25862:2051;25827:2097;27940:19;:25;27960:4;27940:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27969:19;:23;27989:2;27969:23;;;;;;;;;;;;;;;;;;;;;;;;;27940:52;27936:117;;;28026:15;28009:14;:32;;;;27936:117;28069:13;;;;;;;;;;;:42;;;;;28086:19;:25;28106:4;28086:25;;;;;;;;;;;;;;;;;;;;;;;;;28069:42;28065:135;;;28128:39;28144:4;28150:2;28154:6;28162:4;28128:15;:39::i;:::-;;28182:7;;28065:135;28217:19;:25;28237:4;28217:25;;;;;;;;;;;;;;;;;;;;;;;;;28216:26;:54;;;;;28247:19;:23;28267:2;28247:23;;;;;;;;;;;;;;;;;;;;;;;;;28246:24;28216:54;28212:598;;;28291:25;:31;28317:4;28291:31;;;;;;;;;;;;;;;;;;;;;;;;;28287:512;;;28343:32;28378:9;:13;28388:2;28378:13;;;;;;;;;;;;;;;28343:48;;28444:1;28414:14;:26;;;:31;28410:124;;28499:15;28470:14;:26;;:44;;;;28410:124;28324:225;28287:512;;;28574:32;28609:9;:15;28619:4;28609:15;;;;;;;;;;;;;;;28574:50;;28705:14;;28676;:26;;;:43;;;;:::i;:::-;28643:14;:30;;:76;;;;28768:15;28738:14;:27;;:45;;;;28555:244;28287:512;28212:598;28822:28;28853:24;28871:4;28853:9;:24::i;:::-;28822:55;;28890:12;28929:18;;28905:20;:42;;28890:57;;28978:7;:35;;;;;29002:11;;;;;;;;;;;28978:35;:61;;;;;29031:8;;;;;;;;;;;29030:9;28978:61;:110;;;;;29057:25;:31;29083:4;29057:31;;;;;;;;;;;;;;;;;;;;;;;;;29056:32;28978:110;:153;;;;;29106:19;:25;29126:4;29106:25;;;;;;;;;;;;;;;;;;;;;;;;;29105:26;28978:153;:194;;;;;29149:19;:23;29169:2;29149:23;;;;;;;;;;;;;;;;;;;;;;;;;29148:24;28978:194;28960:326;;;29210:4;29199:8;;:15;;;;;;;;;;;;;;;;;;29231:10;:8;:10::i;:::-;29269:5;29258:8;;:16;;;;;;;;;;;;;;;;;;28960:326;29298:12;29314:8;;;;;;;;;;;29313:9;29298:24;;29424:19;:25;29444:4;29424:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29453:19;:23;29473:2;29453:23;;;;;;;;;;;;;;;;;;;;;;;;;29424:52;29420:100;;;29503:5;29493:15;;29420:100;29532:12;29637:7;29633:1167;;;29689:25;:29;29715:2;29689:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29738:1;29722:13;;:17;29689:50;29685:966;;;29767:34;29797:3;29767:25;29778:13;;29767:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29760:41;;29870:13;;29850:16;;29843:4;:23;;;;:::i;:::-;29842:41;;;;:::i;:::-;29820:18;;:63;;;;;;;:::i;:::-;;;;;;;;29956:13;;29934:18;;29927:4;:25;;;;:::i;:::-;29926:43;;;;:::i;:::-;29902:20;;:67;;;;;;;:::i;:::-;;;;;;;;30038:13;;30018:16;;30011:4;:23;;;;:::i;:::-;30010:41;;;;:::i;:::-;29988:18;;:63;;;;;;;:::i;:::-;;;;;;;;30122:13;;30101:17;;30094:4;:24;;;;:::i;:::-;30093:42;;;;:::i;:::-;30070:19;;:65;;;;;;;:::i;:::-;;;;;;;;29685:966;;;30197:25;:31;30223:4;30197:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30247:1;30232:12;;:16;30197:51;30193:458;;;30276:33;30305:3;30276:24;30287:12;;30276:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30269:40;;30377:12;;30358:15;;30351:4;:22;;;;:::i;:::-;30350:39;;;;:::i;:::-;30328:18;;:61;;;;;;;:::i;:::-;;;;;;;;30461:12;;30440:17;;30433:4;:24;;;;:::i;:::-;30432:41;;;;:::i;:::-;30408:20;;:65;;;;;;;:::i;:::-;;;;;;;;30541:12;;30522:15;;30515:4;:22;;;;:::i;:::-;30514:39;;;;:::i;:::-;30492:18;;:61;;;;;;;:::i;:::-;;;;;;;;30623:12;;30603:16;;30596:4;:23;;;;:::i;:::-;30595:40;;;;:::i;:::-;30572:19;;:63;;;;;;;:::i;:::-;;;;;;;;30193:458;29685:966;30678:1;30671:4;:8;30667:91;;;30700:42;30716:4;30730;30737;30700:15;:42::i;:::-;30667:91;30784:4;30774:14;;;;;:::i;:::-;;;29633:1167;30812:33;30828:4;30834:2;30838:6;30812:15;:33::i;:::-;25555:5298;;;;25442:5411;;;;:::o;1219:191::-;1293:16;1312:6;;;;;;;;;;;1293:25;;1338:8;1329:6;;:17;;;;;;;;;;;;;;;;;;1393:8;1362:40;;1383:8;1362:40;;;;;;;;;;;;1282:128;1219:191;:::o;24305:188::-;24422:5;24388:25;:31;24414:4;24388:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24479:5;24445:40;;24473:4;24445:40;;;;;;;;;;;;24305:188;;:::o;5012:733::-;5170:1;5152:20;;:6;:20;;;5144:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5254:1;5233:23;;:9;:23;;;5225:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5309:47;5330:6;5338:9;5349:6;5309:20;:47::i;:::-;5369:21;5393:9;:17;5403:6;5393:17;;;;;;;;;;;;;;;;5369:41;;5446:6;5429:13;:23;;5421:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5567:6;5551:13;:22;5531:9;:17;5541:6;5531:17;;;;;;;;;;;;;;;:42;;;;5619:6;5595:9;:20;5605:9;5595:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5660:9;5643:35;;5652:6;5643:35;;;5671:6;5643:35;;;;;;:::i;:::-;;;;;;;;5691:46;5711:6;5719:9;5730:6;5691:19;:46::i;:::-;5133:612;5012:733;;;:::o;5753:540::-;5904:4;5921:47;5942:6;5950:9;5961:6;5921:20;:47::i;:::-;5981:21;6005:9;:17;6015:6;6005:17;;;;;;;;;;;;;;;;5981:41;;6094:6;6078:13;:22;6058:9;:17;6068:6;6058:17;;;;;;;;;;;;;;;:42;;;;6146:6;6122:9;:20;6132:9;6122:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6187:9;6170:35;;6179:6;6170:35;;;6198:6;6170:35;;;;;;:::i;:::-;;;;;;;;6216:46;6236:6;6244:9;6255:6;6216:19;:46::i;:::-;6280:5;6273:12;;;5753:540;;;;;;:::o;31985:1987::-;32024:23;32050:24;32068:4;32050:9;:24::i;:::-;32024:50;;32085:25;32217:19;;32181:20;;32147:18;;32113;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32085:151;;32247:12;32295:1;32276:15;:20;:46;;;;32321:1;32300:17;:22;32276:46;32272:85;;;32339:7;;;;;32272:85;32412:2;32391:18;;:23;;;;:::i;:::-;32373:15;:41;32369:115;;;32470:2;32449:18;;:23;;;;:::i;:::-;32431:41;;32369:115;32545:23;32632:1;32612:17;32590:18;;32572:15;:36;;;;:::i;:::-;32571:58;;;;:::i;:::-;:62;;;;:::i;:::-;32545:88;;32644:26;32673:36;32693:15;32673;:19;;:36;;;;:::i;:::-;32644:65;;32722:25;32750:21;32722:49;;32784:36;32801:18;32784:16;:36::i;:::-;32833:18;32854:44;32880:17;32854:21;:25;;:44;;;;:::i;:::-;32833:65;;32911:18;32932:57;32971:17;32932:34;32947:18;;32932:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32911:78;;33000:25;33028:59;33069:17;33028:36;33043:20;;33028:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;33000:87;;33098:24;33125:58;33165:17;33125:35;33140:19;;33125:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;33098:85;;33196:23;33268:16;33248:17;33235:10;33222;:23;;;;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;33196:88;;33318:1;33297:18;:22;;;;33351:1;33330:18;:22;;;;33386:1;33363:20;:24;;;;33420:1;33398:19;:23;;;;33456:17;;;;;;;;;;;33448:31;;33487:17;33448:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33434:75;;;;;33544:1;33526:15;:19;:42;;;;;33567:1;33549:15;:19;33526:42;33522:278;;;33585:46;33598:15;33615;33585:12;:46::i;:::-;33651:137;33684:18;33721:15;33755:18;;33651:137;;;;;;;;:::i;:::-;;;;;;;;33522:278;33832:9;;;;;;;;;;;33824:23;;33855:16;33824:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33810:66;;;;;33909:15;;;;;;;;;;;33901:29;;33938:21;33901:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33887:77;;;;;32013:1959;;;;;;;;;;;31985:1987;:::o;9313:98::-;9371:7;9402:1;9398;:5;;;;:::i;:::-;9391:12;;9313:98;;;;:::o;9419:::-;9477:7;9508:1;9504;:5;;;;:::i;:::-;9497:12;;9419:98;;;;:::o;7695:125::-;;;;:::o;7828:124::-;;;;:::o;9207:98::-;9265:7;9296:1;9292;:5;;;;:::i;:::-;9285:12;;9207:98;;;;:::o;30865:589::-;30991:21;31029:1;31015:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30991:40;;31060:4;31042;31047:1;31042:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31086:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31076:4;31081:1;31076:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31121:62;31138:4;31153:15;31171:11;31121:8;:62::i;:::-;31222:15;:66;;;31303:11;31329:1;31373:4;31400;31420:15;31222:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30920:534;30865:589;:::o;31462:515::-;31610:62;31627:4;31642:15;31660:11;31610:8;:62::i;:::-;31715:15;:31;;;31754:9;31787:4;31807:11;31833:1;31876;31919:9;;;;;;;;;;;31943:15;31715:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31462:515;;:::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:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:104::-;5156:7;5185:24;5203:5;5185:24;:::i;:::-;5174:35;;5111:104;;;:::o;5221:142::-;5324:32;5350:5;5324:32;:::i;:::-;5319:3;5312:45;5221:142;;:::o;5369:254::-;5478:4;5516:2;5505:9;5501:18;5493:26;;5529:87;5613:1;5602:9;5598:17;5589:6;5529:87;:::i;:::-;5369:254;;;;:::o;5629:619::-;5706:6;5714;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;6152:2;6178:53;6223:7;6214:6;6203:9;6199:22;6178:53;:::i;:::-;6168:63;;6123:118;5629:619;;;;;:::o;6254:118::-;6341:24;6359:5;6341:24;:::i;:::-;6336:3;6329:37;6254:118;;:::o;6378:222::-;6471:4;6509:2;6498:9;6494:18;6486:26;;6522:71;6590:1;6579:9;6575:17;6566:6;6522:71;:::i;:::-;6378:222;;;;:::o;6606:765::-;6692:6;6700;6708;6716;6765:3;6753:9;6744:7;6740:23;6736:33;6733:120;;;6772:79;;:::i;:::-;6733:120;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;7019:2;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6990:118;7147:2;7173:53;7218:7;7209:6;7198:9;7194:22;7173:53;:::i;:::-;7163:63;;7118:118;7275:2;7301:53;7346:7;7337:6;7326:9;7322:22;7301:53;:::i;:::-;7291:63;;7246:118;6606:765;;;;;;;:::o;7377:86::-;7412:7;7452:4;7445:5;7441:16;7430:27;;7377:86;;;:::o;7469:112::-;7552:22;7568:5;7552:22;:::i;:::-;7547:3;7540:35;7469:112;;:::o;7587:214::-;7676:4;7714:2;7703:9;7699:18;7691:26;;7727:67;7791:1;7780:9;7776:17;7767:6;7727:67;:::i;:::-;7587:214;;;;:::o;7807:329::-;7866:6;7915:2;7903:9;7894:7;7890:23;7886:32;7883:119;;;7921:79;;:::i;:::-;7883:119;8041:1;8066:53;8111:7;8102:6;8091:9;8087:22;8066:53;:::i;:::-;8056:63;;8012:117;7807:329;;;;:::o;8142:116::-;8212:21;8227:5;8212:21;:::i;:::-;8205:5;8202:32;8192:60;;8248:1;8245;8238:12;8192:60;8142:116;:::o;8264:133::-;8307:5;8345:6;8332:20;8323:29;;8361:30;8385:5;8361:30;:::i;:::-;8264:133;;;;:::o;8403:468::-;8468:6;8476;8525:2;8513:9;8504:7;8500:23;8496:32;8493:119;;;8531:79;;:::i;:::-;8493:119;8651:1;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8622:117;8778:2;8804:50;8846:7;8837:6;8826:9;8822:22;8804:50;:::i;:::-;8794:60;;8749:115;8403:468;;;;;:::o;8877:323::-;8933:6;8982:2;8970:9;8961:7;8957:23;8953:32;8950:119;;;8988:79;;:::i;:::-;8950:119;9108:1;9133:50;9175:7;9166:6;9155:9;9151:22;9133:50;:::i;:::-;9123:60;;9079:114;8877:323;;;;:::o;9206:138::-;9287:32;9313:5;9287:32;:::i;:::-;9280:5;9277:43;9267:71;;9334:1;9331;9324:12;9267:71;9206:138;:::o;9350:155::-;9404:5;9442:6;9429:20;9420:29;;9458:41;9493:5;9458:41;:::i;:::-;9350:155;;;;:::o;9511:345::-;9578:6;9627:2;9615:9;9606:7;9602:23;9598:32;9595:119;;;9633:79;;:::i;:::-;9595:119;9753:1;9778:61;9831:7;9822:6;9811:9;9807:22;9778:61;:::i;:::-;9768:71;;9724:125;9511:345;;;;:::o;9862:474::-;9930:6;9938;9987:2;9975:9;9966:7;9962:23;9958:32;9955:119;;;9993:79;;:::i;:::-;9955:119;10113:1;10138:53;10183:7;10174:6;10163:9;10159:22;10138:53;:::i;:::-;10128:63;;10084:117;10240:2;10266:53;10311:7;10302:6;10291:9;10287:22;10266:53;:::i;:::-;10256:63;;10211:118;9862:474;;;;;:::o;10342:182::-;10482:34;10478:1;10470:6;10466:14;10459:58;10342:182;:::o;10530:366::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:419::-;11068:4;11106:2;11095:9;11091:18;11083:26;;11155:9;11149:4;11145:20;11141:1;11130:9;11126:17;11119:47;11183:131;11309:4;11183:131;:::i;:::-;11175:139;;10902:419;;;:::o;11327:180::-;11375:77;11372:1;11365:88;11472:4;11469:1;11462:15;11496:4;11493:1;11486:15;11513:410;11553:7;11576:20;11594:1;11576:20;:::i;:::-;11571:25;;11610:20;11628:1;11610:20;:::i;:::-;11605:25;;11665:1;11662;11658:9;11687:30;11705:11;11687:30;:::i;:::-;11676:41;;11866:1;11857:7;11853:15;11850:1;11847:22;11827:1;11820:9;11800:83;11777:139;;11896:18;;:::i;:::-;11777:139;11561:362;11513:410;;;;:::o;11929:180::-;11977:77;11974:1;11967:88;12074:4;12071:1;12064:15;12098:4;12095:1;12088:15;12115:185;12155:1;12172:20;12190:1;12172:20;:::i;:::-;12167:25;;12206:20;12224:1;12206:20;:::i;:::-;12201:25;;12245:1;12235:35;;12250:18;;:::i;:::-;12235:35;12292:1;12289;12285:9;12280:14;;12115:185;;;;:::o;12306:228::-;12446:34;12442:1;12434:6;12430:14;12423:58;12515:11;12510:2;12502:6;12498:15;12491:36;12306:228;:::o;12540:366::-;12682:3;12703:67;12767:2;12762:3;12703:67;:::i;:::-;12696:74;;12779:93;12868:3;12779:93;:::i;:::-;12897:2;12892:3;12888:12;12881:19;;12540:366;;;:::o;12912:419::-;13078:4;13116:2;13105:9;13101:18;13093:26;;13165:9;13159:4;13155:20;13151:1;13140:9;13136:17;13129:47;13193:131;13319:4;13193:131;:::i;:::-;13185:139;;12912:419;;;:::o;13337:180::-;13385:77;13382:1;13375:88;13482:4;13479:1;13472:15;13506:4;13503:1;13496:15;13523:320;13567:6;13604:1;13598:4;13594:12;13584:22;;13651:1;13645:4;13641:12;13672:18;13662:81;;13728:4;13720:6;13716:17;13706:27;;13662:81;13790:2;13782:6;13779:14;13759:18;13756:38;13753:84;;13809:18;;:::i;:::-;13753:84;13574:269;13523:320;;;:::o;13849:223::-;13989:34;13985:1;13977:6;13973:14;13966:58;14058:6;14053:2;14045:6;14041:15;14034:31;13849:223;:::o;14078:366::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:419::-;14616:4;14654:2;14643:9;14639:18;14631:26;;14703:9;14697:4;14693:20;14689:1;14678:9;14674:17;14667:47;14731:131;14857:4;14731:131;:::i;:::-;14723:139;;14450:419;;;:::o;14875:227::-;15015:34;15011:1;15003:6;14999:14;14992:58;15084:10;15079:2;15071:6;15067:15;15060:35;14875:227;:::o;15108:366::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15108:366;;;:::o;15480:419::-;15646:4;15684:2;15673:9;15669:18;15661:26;;15733:9;15727:4;15723:20;15719:1;15708:9;15704:17;15697:47;15761:131;15887:4;15761:131;:::i;:::-;15753:139;;15480:419;;;:::o;15905:191::-;15945:3;15964:20;15982:1;15964:20;:::i;:::-;15959:25;;15998:20;16016:1;15998:20;:::i;:::-;15993:25;;16041:1;16038;16034:9;16027:16;;16062:3;16059:1;16056:10;16053:36;;;16069:18;;:::i;:::-;16053:36;15905:191;;;;:::o;16102:172::-;16242:24;16238:1;16230:6;16226:14;16219:48;16102:172;:::o;16280:366::-;16422:3;16443:67;16507:2;16502:3;16443:67;:::i;:::-;16436:74;;16519:93;16608:3;16519:93;:::i;:::-;16637:2;16632:3;16628:12;16621:19;;16280:366;;;:::o;16652:419::-;16818:4;16856:2;16845:9;16841:18;16833:26;;16905:9;16899:4;16895:20;16891:1;16880:9;16876:17;16869:47;16933:131;17059:4;16933:131;:::i;:::-;16925:139;;16652:419;;;:::o;17077:244::-;17217:34;17213:1;17205:6;17201:14;17194:58;17286:27;17281:2;17273:6;17269:15;17262:52;17077:244;:::o;17327:366::-;17469:3;17490:67;17554:2;17549:3;17490:67;:::i;:::-;17483:74;;17566:93;17655:3;17566:93;:::i;:::-;17684:2;17679:3;17675:12;17668:19;;17327:366;;;:::o;17699:419::-;17865:4;17903:2;17892:9;17888:18;17880:26;;17952:9;17946:4;17942:20;17938:1;17927:9;17923:17;17916:47;17980:131;18106:4;17980:131;:::i;:::-;17972:139;;17699:419;;;:::o;18124:224::-;18264:34;18260:1;18252:6;18248:14;18241:58;18333:7;18328:2;18320:6;18316:15;18309:32;18124:224;:::o;18354:366::-;18496:3;18517:67;18581:2;18576:3;18517:67;:::i;:::-;18510:74;;18593:93;18682:3;18593:93;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18354:366;;;:::o;18726:419::-;18892:4;18930:2;18919:9;18915:18;18907:26;;18979:9;18973:4;18969:20;18965:1;18954:9;18950:17;18943:47;19007:131;19133:4;19007:131;:::i;:::-;18999:139;;18726:419;;;:::o;19151:240::-;19291:34;19287:1;19279:6;19275:14;19268:58;19360:23;19355:2;19347:6;19343:15;19336:48;19151:240;:::o;19397:366::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19397:366;;;:::o;19769:419::-;19935:4;19973:2;19962:9;19958:18;19950:26;;20022:9;20016:4;20012:20;20008:1;19997:9;19993:17;19986:47;20050:131;20176:4;20050:131;:::i;:::-;20042:139;;19769:419;;;:::o;20194:239::-;20334:34;20330:1;20322:6;20318:14;20311:58;20403:22;20398:2;20390:6;20386:15;20379:47;20194:239;:::o;20439:366::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:419::-;20977:4;21015:2;21004:9;21000:18;20992:26;;21064:9;21058:4;21054:20;21050:1;21039:9;21035:17;21028:47;21092:131;21218:4;21092:131;:::i;:::-;21084:139;;20811:419;;;:::o;21236:225::-;21376:34;21372:1;21364:6;21360:14;21353:58;21445:8;21440:2;21432:6;21428:15;21421:33;21236:225;:::o;21467:366::-;21609:3;21630:67;21694:2;21689:3;21630:67;:::i;:::-;21623:74;;21706:93;21795:3;21706:93;:::i;:::-;21824:2;21819:3;21815:12;21808:19;;21467:366;;;:::o;21839:419::-;22005:4;22043:2;22032:9;22028:18;22020:26;;22092:9;22086:4;22082:20;22078:1;22067:9;22063:17;22056:47;22120:131;22246:4;22120:131;:::i;:::-;22112:139;;21839:419;;;:::o;22264:223::-;22404:34;22400:1;22392:6;22388:14;22381:58;22473:6;22468:2;22460:6;22456:15;22449:31;22264:223;:::o;22493:366::-;22635:3;22656:67;22720:2;22715:3;22656:67;:::i;:::-;22649:74;;22732:93;22821:3;22732:93;:::i;:::-;22850:2;22845:3;22841:12;22834:19;;22493:366;;;:::o;22865:419::-;23031:4;23069:2;23058:9;23054:18;23046:26;;23118:9;23112:4;23108:20;23104:1;23093:9;23089:17;23082:47;23146:131;23272:4;23146:131;:::i;:::-;23138:139;;22865:419;;;:::o;23290:221::-;23430:34;23426:1;23418:6;23414:14;23407:58;23499:4;23494:2;23486:6;23482:15;23475:29;23290:221;:::o;23517:366::-;23659:3;23680:67;23744:2;23739:3;23680:67;:::i;:::-;23673:74;;23756:93;23845:3;23756:93;:::i;:::-;23874:2;23869:3;23865:12;23858:19;;23517:366;;;:::o;23889:419::-;24055:4;24093:2;24082:9;24078:18;24070:26;;24142:9;24136:4;24132:20;24128:1;24117:9;24113:17;24106:47;24170:131;24296:4;24170:131;:::i;:::-;24162:139;;23889:419;;;:::o;24314:224::-;24454:34;24450:1;24442:6;24438:14;24431:58;24523:7;24518:2;24510:6;24506:15;24499:32;24314:224;:::o;24544:366::-;24686:3;24707:67;24771:2;24766:3;24707:67;:::i;:::-;24700:74;;24783:93;24872:3;24783:93;:::i;:::-;24901:2;24896:3;24892:12;24885:19;;24544:366;;;:::o;24916:419::-;25082:4;25120:2;25109:9;25105:18;25097:26;;25169:9;25163:4;25159:20;25155:1;25144:9;25140:17;25133:47;25197:131;25323:4;25197:131;:::i;:::-;25189:139;;24916:419;;;:::o;25341:222::-;25481:34;25477:1;25469:6;25465:14;25458:58;25550:5;25545:2;25537:6;25533:15;25526:30;25341:222;:::o;25569:366::-;25711:3;25732:67;25796:2;25791:3;25732:67;:::i;:::-;25725:74;;25808:93;25897:3;25808:93;:::i;:::-;25926:2;25921:3;25917:12;25910:19;;25569:366;;;:::o;25941:419::-;26107:4;26145:2;26134:9;26130:18;26122:26;;26194:9;26188:4;26184:20;26180:1;26169:9;26165:17;26158:47;26222:131;26348:4;26222:131;:::i;:::-;26214:139;;25941:419;;;:::o;26366:172::-;26506:24;26502:1;26494:6;26490:14;26483:48;26366:172;:::o;26544:366::-;26686:3;26707:67;26771:2;26766:3;26707:67;:::i;:::-;26700:74;;26783:93;26872:3;26783:93;:::i;:::-;26901:2;26896:3;26892:12;26885:19;;26544:366;;;:::o;26916:419::-;27082:4;27120:2;27109:9;27105:18;27097:26;;27169:9;27163:4;27159:20;27155:1;27144:9;27140:17;27133:47;27197:131;27323:4;27197:131;:::i;:::-;27189:139;;26916:419;;;:::o;27341:297::-;27481:34;27477:1;27469:6;27465:14;27458:58;27550:34;27545:2;27537:6;27533:15;27526:59;27619:11;27614:2;27606:6;27602:15;27595:36;27341:297;:::o;27644:366::-;27786:3;27807:67;27871:2;27866:3;27807:67;:::i;:::-;27800:74;;27883:93;27972:3;27883:93;:::i;:::-;28001:2;27996:3;27992:12;27985:19;;27644:366;;;:::o;28016:419::-;28182:4;28220:2;28209:9;28205:18;28197:26;;28269:9;28263:4;28259:20;28255:1;28244:9;28240:17;28233:47;28297:131;28423:4;28297:131;:::i;:::-;28289:139;;28016:419;;;:::o;28441:234::-;28581:34;28577:1;28569:6;28565:14;28558:58;28650:17;28645:2;28637:6;28633:15;28626:42;28441:234;:::o;28681:366::-;28823:3;28844:67;28908:2;28903:3;28844:67;:::i;:::-;28837:74;;28920:93;29009:3;28920:93;:::i;:::-;29038:2;29033:3;29029:12;29022:19;;28681:366;;;:::o;29053:419::-;29219:4;29257:2;29246:9;29242:18;29234:26;;29306:9;29300:4;29296:20;29292:1;29281:9;29277:17;29270:47;29334:131;29460:4;29334:131;:::i;:::-;29326:139;;29053:419;;;:::o;29478:169::-;29618:21;29614:1;29606:6;29602:14;29595:45;29478:169;:::o;29653:366::-;29795:3;29816:67;29880:2;29875:3;29816:67;:::i;:::-;29809:74;;29892:93;29981:3;29892:93;:::i;:::-;30010:2;30005:3;30001:12;29994:19;;29653:366;;;:::o;30025:419::-;30191:4;30229:2;30218:9;30214:18;30206:26;;30278:9;30272:4;30268:20;30264:1;30253:9;30249:17;30242:47;30306:131;30432:4;30306:131;:::i;:::-;30298:139;;30025:419;;;:::o;30450:235::-;30590:34;30586:1;30578:6;30574:14;30567:58;30659:18;30654:2;30646:6;30642:15;30635:43;30450:235;:::o;30691:366::-;30833:3;30854:67;30918:2;30913:3;30854:67;:::i;:::-;30847:74;;30930:93;31019:3;30930:93;:::i;:::-;31048:2;31043:3;31039:12;31032:19;;30691:366;;;:::o;31063:419::-;31229:4;31267:2;31256:9;31252:18;31244:26;;31316:9;31310:4;31306:20;31302:1;31291:9;31287:17;31280:47;31344:131;31470:4;31344:131;:::i;:::-;31336:139;;31063:419;;;:::o;31488:194::-;31528:4;31548:20;31566:1;31548:20;:::i;:::-;31543:25;;31582:20;31600:1;31582:20;:::i;:::-;31577:25;;31626:1;31623;31619:9;31611:17;;31650:1;31644:4;31641:11;31638:37;;;31655:18;;:::i;:::-;31638:37;31488:194;;;;:::o;31688:225::-;31828:34;31824:1;31816:6;31812:14;31805:58;31897:8;31892:2;31884:6;31880:15;31873:33;31688:225;:::o;31919:366::-;32061:3;32082:67;32146:2;32141:3;32082:67;:::i;:::-;32075:74;;32158:93;32247:3;32158:93;:::i;:::-;32276:2;32271:3;32267:12;32260:19;;31919:366;;;:::o;32291:419::-;32457:4;32495:2;32484:9;32480:18;32472:26;;32544:9;32538:4;32534:20;32530:1;32519:9;32515:17;32508:47;32572:131;32698:4;32572:131;:::i;:::-;32564:139;;32291:419;;;:::o;32716:147::-;32817:11;32854:3;32839:18;;32716:147;;;;:::o;32869:114::-;;:::o;32989:398::-;33148:3;33169:83;33250:1;33245:3;33169:83;:::i;:::-;33162:90;;33261:93;33350:3;33261:93;:::i;:::-;33379:1;33374:3;33370:11;33363:18;;32989:398;;;:::o;33393:379::-;33577:3;33599:147;33742:3;33599:147;:::i;:::-;33592:154;;33763:3;33756:10;;33393:379;;;:::o;33778:442::-;33927:4;33965:2;33954:9;33950:18;33942:26;;33978:71;34046:1;34035:9;34031:17;34022:6;33978:71;:::i;:::-;34059:72;34127:2;34116:9;34112:18;34103:6;34059:72;:::i;:::-;34141;34209:2;34198:9;34194:18;34185:6;34141:72;:::i;:::-;33778:442;;;;;;:::o;34226:180::-;34274:77;34271:1;34264:88;34371:4;34368:1;34361:15;34395:4;34392:1;34385:15;34412:180;34460:77;34457:1;34450:88;34557:4;34554:1;34547:15;34581:4;34578:1;34571:15;34598:143;34655:5;34686:6;34680:13;34671:22;;34702:33;34729:5;34702:33;:::i;:::-;34598:143;;;;:::o;34747:351::-;34817:6;34866:2;34854:9;34845:7;34841:23;34837:32;34834:119;;;34872:79;;:::i;:::-;34834:119;34992:1;35017:64;35073:7;35064:6;35053:9;35049:22;35017:64;:::i;:::-;35007:74;;34963:128;34747:351;;;;:::o;35104:85::-;35149:7;35178:5;35167:16;;35104:85;;;:::o;35195:158::-;35253:9;35286:61;35304:42;35313:32;35339:5;35313:32;:::i;:::-;35304:42;:::i;:::-;35286:61;:::i;:::-;35273:74;;35195:158;;;:::o;35359:147::-;35454:45;35493:5;35454:45;:::i;:::-;35449:3;35442:58;35359:147;;:::o;35512:114::-;35579:6;35613:5;35607:12;35597:22;;35512:114;;;:::o;35632:184::-;35731:11;35765:6;35760:3;35753:19;35805:4;35800:3;35796:14;35781:29;;35632:184;;;;:::o;35822:132::-;35889:4;35912:3;35904:11;;35942:4;35937:3;35933:14;35925:22;;35822:132;;;:::o;35960:108::-;36037:24;36055:5;36037:24;:::i;:::-;36032:3;36025:37;35960:108;;:::o;36074:179::-;36143:10;36164:46;36206:3;36198:6;36164:46;:::i;:::-;36242:4;36237:3;36233:14;36219:28;;36074:179;;;;:::o;36259:113::-;36329:4;36361;36356:3;36352:14;36344:22;;36259:113;;;:::o;36408:732::-;36527:3;36556:54;36604:5;36556:54;:::i;:::-;36626:86;36705:6;36700:3;36626:86;:::i;:::-;36619:93;;36736:56;36786:5;36736:56;:::i;:::-;36815:7;36846:1;36831:284;36856:6;36853:1;36850:13;36831:284;;;36932:6;36926:13;36959:63;37018:3;37003:13;36959:63;:::i;:::-;36952:70;;37045:60;37098:6;37045:60;:::i;:::-;37035:70;;36891:224;36878:1;36875;36871:9;36866:14;;36831:284;;;36835:14;37131:3;37124:10;;36532:608;;;36408:732;;;;:::o;37146:831::-;37409:4;37447:3;37436:9;37432:19;37424:27;;37461:71;37529:1;37518:9;37514:17;37505:6;37461:71;:::i;:::-;37542:80;37618:2;37607:9;37603:18;37594:6;37542:80;:::i;:::-;37669:9;37663:4;37659:20;37654:2;37643:9;37639:18;37632:48;37697:108;37800:4;37791:6;37697:108;:::i;:::-;37689:116;;37815:72;37883:2;37872:9;37868:18;37859:6;37815:72;:::i;:::-;37897:73;37965:3;37954:9;37950:19;37941:6;37897:73;:::i;:::-;37146:831;;;;;;;;:::o;37983:134::-;38041:9;38074:37;38105:5;38074:37;:::i;:::-;38061:50;;37983:134;;;:::o;38123:147::-;38218:45;38257:5;38218:45;:::i;:::-;38213:3;38206:58;38123:147;;:::o;38276:823::-;38533:4;38571:3;38560:9;38556:19;38548:27;;38585:71;38653:1;38642:9;38638:17;38629:6;38585:71;:::i;:::-;38666:72;38734:2;38723:9;38719:18;38710:6;38666:72;:::i;:::-;38748:80;38824:2;38813:9;38809:18;38800:6;38748:80;:::i;:::-;38838;38914:2;38903:9;38899:18;38890:6;38838:80;:::i;:::-;38928:81;39004:3;38993:9;38989:19;38980:6;38928:81;:::i;:::-;39019:73;39087:3;39076:9;39072:19;39063:6;39019:73;:::i;:::-;38276:823;;;;;;;;;:::o;39105:143::-;39162:5;39193:6;39187:13;39178:22;;39209:33;39236:5;39209:33;:::i;:::-;39105:143;;;;:::o;39254:663::-;39342:6;39350;39358;39407:2;39395:9;39386:7;39382:23;39378:32;39375:119;;;39413:79;;:::i;:::-;39375:119;39533:1;39558:64;39614:7;39605:6;39594:9;39590:22;39558:64;:::i;:::-;39548:74;;39504:128;39671:2;39697:64;39753:7;39744:6;39733:9;39729:22;39697:64;:::i;:::-;39687:74;;39642:129;39810:2;39836:64;39892:7;39883:6;39872:9;39868:22;39836:64;:::i;:::-;39826:74;;39781:129;39254:663;;;;;:::o

Swarm Source

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