ETH Price: $3,210.16 (-6.95%)
Gas: 5 Gwei

Token

Grok on Fire (GROF)
 

Overview

Max Total Supply

1,000,000,000 GROF

Holders

56

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.161871605744380038 GROF

Value
$0.00
0xa1b178b52b622324aa8c344d53e2e7548cf087d7
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:
GROKOF

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-14
*/

// SPDX-License-Identifier: MIT
/**
/**
 *Submitted for verification at Etherscan.io on 2023-04-18
*/

/**
https://t.me/GROF_Portal
*/

pragma solidity 0.8.17;

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

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    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, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
  

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

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

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

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

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

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

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

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

    function approve(address 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) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

contract GROKOF is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public  grokBurnFeeOnBuy;
    uint256 public  grokBurnFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    uint256 public  walletToWalletTransferFee;

    address public marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool    private swapping;

    bool    public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 boneBurnFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 boneBurnFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendETH(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Grok on Fire", "GROF") 
    {   
        address router;
        if (block.chainid == 56) {
            router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC Pancake Mainnet Router
        } else if (block.chainid == 97) {
            router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BSC Pancake Testnet Router
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Shibaswap Mainnet
        } 
        else {
            revert();
        }

       

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        grokBurnFeeOnBuy  = 2;
        grokBurnFeeOnSell = 2;

        marketingFeeOnBuy  = 23;
        marketingFeeOnSell = 45;           

        _totalFeesOnBuy    = grokBurnFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = grokBurnFeeOnSell + marketingFeeOnSell;

        marketingWallet = 0x6caD239c8de2E83aD7E2d66D37677bd0154D3F3e;

        maxWalletLimitEnabled = true;
        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0xdead)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;
        
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;

        _mint(owner(), 1e9 * (10 ** decimals()));
        swapTokensAtAmount = (totalSupply() * 200) / 10000; // 2% swap wallet

        maxTransactionAmountBuy     =  (totalSupply() * 200) / 10000; // 2%
        maxTransactionAmountSell    =  (totalSupply() * 200) / 10000; // 2%
        maxWalletAmount             =  (totalSupply() * 200) / 10000; // 2%

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

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

    function updateFees(uint256 _grokBurnFeeOnBuy, uint256 _marketingFeeOnBuy, uint256 _grokBurnFeeOnSell, uint256 _marketingFeeOnSell) external onlyOwner {
        //buy fees
        grokBurnFeeOnBuy = _grokBurnFeeOnBuy;
        marketingFeeOnBuy = _marketingFeeOnBuy;
        _totalFeesOnBuy   = grokBurnFeeOnBuy + marketingFeeOnBuy;
        //sell fees
        grokBurnFeeOnSell = _grokBurnFeeOnSell;
        marketingFeeOnSell = _marketingFeeOnSell;
        _totalFeesOnSell   = grokBurnFeeOnSell + marketingFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 45, "Total Fees cannot exceed the maximum");
        require(_totalFeesOnBuy + _totalFeesOnSell <= 45, "Total Fees cannot exceed the maximum");
        emit UpdateBuyFees(grokBurnFeeOnBuy, marketingFeeOnBuy);
        emit UpdateSellFees(grokBurnFeeOnSell, marketingFeeOnSell);
    }

   

    function updateMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    bool public tradingEnabled;

    function updateTrading(bool enabled) external onlyOwner{
        if(enabled){

            tradingEnabled = true;
            swapEnabled = true;

        }
     
       
    }





    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            swapAndSendETH(swapTokensAtAmount);

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

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

    /////////////////////////////////////// SWAP SYSTEM

    function changeSwapEnabled(bool _enabled) external onlyOwner{
        
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
       
        swapTokensAtAmount = (totalSupply() * newAmount) / 10000; // 10 = 0.1%; 100 = 1%;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndSendETH(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;
        uint256 marketingBalance = newBalance * (marketingFeeOnBuy + marketingFeeOnSell) / (_totalFeesOnBuy + _totalFeesOnSell);
        uint256 grokBalance = newBalance - marketingBalance;

        if (marketingBalance > 0){
            payable(marketingWallet).sendValue(marketingBalance);
        }

        if (grokBalance > 0){
            address[] memory pathTwo = new address[](2);
            pathTwo[0] = uniswapV2Router.WETH();
            pathTwo[1] = address(0x8390a1DA07E376ef7aDd4Be859BA74Fb83aA02D5);

            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: grokBalance}( 
                0,
                pathTwo,
                address(0xdead),
                block.timestamp + 300
            );
        }

        emit SwapAndSendETH(tokenAmount, newBalance);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    
    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }


    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function updateLimits(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell, uint256 _maxWalletAmount) external onlyOwner {
        
        
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());
        
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":false,"internalType":"uint256","name":"boneBurnFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"boneBurnFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"changeSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"grokBurnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"grokBurnFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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":[{"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":"_grokBurnFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_grokBurnFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"},{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletToWalletTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f47726f6b206f6e204669726500000000000000000000000000000000000000008152506040518060400160405280600481526020017f47524f460000000000000000000000000000000000000000000000000000000081525081600390816200008f919062001122565b508060049081620000a1919062001122565b5050506000620000b662000b1060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000603846036200017d577310ed43c718714eb63d5aa57b78b54704e256024e9050620001dd565b60614603620001a35773d99d1c33f9fc3444f8101754abc46c52416550d19050620001dc565b6001461480620001b35750600546145b15620001d657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001db565b600080fd5b5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000256919062001273565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e4919062001273565b6040518363ffffffff1660e01b815260040162000303929190620012b6565b6020604051808303816000875af115801562000323573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000349919062001273565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b1860201b60201c565b60026009819055506002600a819055506017600b81905550602d600c81905550600b5460095462000454919062001312565b600d81905550600c54600a546200046c919062001312565b600e81905550736cad239c8de2e83ad7e2d66d37677bd0154d3f3e601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601460006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506001601660006200051362000ce960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620006a662000ce960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200083962000ce960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a05620009ca62000ce960201b60201c565b620009da62000d1360201b60201c565b600a620009e89190620014ae565b633b9aca00620009f99190620014ff565b62000d1c60201b60201c565b61271060c862000a1a62000e9460201b60201c565b62000a269190620014ff565b62000a32919062001579565b60118190555061271060c862000a4d62000e9460201b60201c565b62000a599190620014ff565b62000a65919062001579565b60188190555061271060c862000a8062000e9460201b60201c565b62000a8c9190620014ff565b62000a98919062001579565b60198190555061271060c862000ab362000e9460201b60201c565b62000abf9190620014ff565b62000acb919062001579565b6015819055506000601260026101000a81548160ff0219169083151502179055506000601260016101000a81548160ff02191690831515021790555050505062001792565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b819062001638565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf390620016d0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000cdc919062001703565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d859062001770565b60405180910390fd5b62000da26000838362000e9e60201b60201c565b806002600082825462000db6919062001312565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e0d919062001312565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e74919062001703565b60405180910390a362000e906000838362000ea360201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f2a57607f821691505b60208210810362000f405762000f3f62000ee2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000faa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f6b565b62000fb6868362000f6b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200100362000ffd62000ff78462000fce565b62000fd8565b62000fce565b9050919050565b6000819050919050565b6200101f8362000fe2565b620010376200102e826200100a565b84845462000f78565b825550505050565b600090565b6200104e6200103f565b6200105b81848462001014565b505050565b5b8181101562001083576200107760008262001044565b60018101905062001061565b5050565b601f821115620010d2576200109c8162000f46565b620010a78462000f5b565b81016020851015620010b7578190505b620010cf620010c68562000f5b565b83018262001060565b50505b505050565b600082821c905092915050565b6000620010f760001984600802620010d7565b1980831691505092915050565b6000620011128383620010e4565b9150826002028217905092915050565b6200112d8262000ea8565b67ffffffffffffffff81111562001149576200114862000eb3565b5b62001155825462000f11565b6200116282828562001087565b600060209050601f8311600181146200119a576000841562001185578287015190505b62001191858262001104565b86555062001201565b601f198416620011aa8662000f46565b60005b82811015620011d457848901518255600182019150602085019450602081019050620011ad565b86831015620011f45784890151620011f0601f891682620010e4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200123b826200120e565b9050919050565b6200124d816200122e565b81146200125957600080fd5b50565b6000815190506200126d8162001242565b92915050565b6000602082840312156200128c576200128b62001209565b5b60006200129c848285016200125c565b91505092915050565b620012b0816200122e565b82525050565b6000604082019050620012cd6000830185620012a5565b620012dc6020830184620012a5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200131f8262000fce565b91506200132c8362000fce565b9250828201905080821115620013475762001346620012e3565b5b92915050565b60008160011c9050919050565b6000808291508390505b6001851115620013ac57808604811115620013845762001383620012e3565b5b6001851615620013945780820291505b8081029050620013a4856200134d565b945062001364565b94509492505050565b600082620013c757600190506200149a565b81620013d757600090506200149a565b8160018114620013f05760028114620013fb5762001431565b60019150506200149a565b60ff84111562001410576200140f620012e3565b5b8360020a9150848211156200142a5762001429620012e3565b5b506200149a565b5060208310610133831016604e8410600b84101617156200146b5782820a905083811115620014655762001464620012e3565b5b6200149a565b6200147a84848460016200135a565b92509050818404811115620014945762001493620012e3565b5b81810290505b9392505050565b600060ff82169050919050565b6000620014bb8262000fce565b9150620014c883620014a1565b9250620014f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013b5565b905092915050565b60006200150c8262000fce565b9150620015198362000fce565b9250828202620015298162000fce565b91508282048414831517620015435762001542620012e3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620015868262000fce565b9150620015938362000fce565b925082620015a657620015a56200154a565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001620602483620015b1565b91506200162d82620015c2565b604082019050919050565b60006020820190508181036000830152620016538162001611565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620016b8602283620015b1565b9150620016c5826200165a565b604082019050919050565b60006020820190508181036000830152620016eb81620016a9565b9050919050565b620016fd8162000fce565b82525050565b60006020820190506200171a6000830184620016f2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001758601f83620015b1565b9150620017658262001720565b602082019050919050565b600060208201905081810360008301526200178b8162001749565b9050919050565b6154d480620017a26000396000f3fe6080604052600436106102765760003560e01c8063702509fd1161014f578063aa4bde28116100c1578063dc4c7dbc1161007a578063dc4c7dbc14610989578063dd62ed3e146109b4578063e2f45605146109f1578063e81ea6a914610a1c578063f2fde38b14610a45578063f9d0831a14610a6e5761027d565b8063aa4bde2814610891578063aacebbe3146108bc578063afa4f3b2146108e5578063c02466681461090e578063c6616ba114610937578063d2fcc001146109605761027d565b8063880bcbc111610113578063880bcbc11461075b5780638da5cb5b1461078457806395d89b41146107af578063a457c2d7146107da578063a8a69b9d14610817578063a9059cbb146108545761027d565b8063702509fd1461068657806370a08231146106b1578063715018a6146106ee57806375f0a874146107055780637c3a88df146107305761027d565b8063313ce567116101e85780634ada218b116101ac5780634ada218b146105745780634fbee1931461059f57806356a6cabf146105dc57806359136fa5146106055780635fc2e596146106305780636ddd17131461065b5761027d565b8063313ce5671461048f57806336a0f8a5146104ba57806339509351146104e357806347f687951461052057806349bd5a5e146105495761027d565b806318d9ceae1161023a57806318d9ceae1461036b57806321a9d82a146103a857806323b872dd146103d35780632a6c7dba146104105780632ba86bf2146104395780632e1ace46146104645761027d565b80630105d0fd1461028257806306fdde03146102ad578063095ea7b3146102d85780631694505e1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b6040516102a49190613c01565b60405180910390f35b3480156102b957600080fd5b506102c2610a9d565b6040516102cf9190613cac565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613d5d565b610b2f565b60405161030c9190613db8565b60405180910390f35b34801561032157600080fd5b5061032a610b4d565b6040516103379190613e32565b60405180910390f35b34801561034c57600080fd5b50610355610b73565b6040516103629190613c01565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613e4d565b610b7d565b60405161039f9190613db8565b60405180910390f35b3480156103b457600080fd5b506103bd610bd3565b6040516103ca9190613db8565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190613e7a565b610be6565b6040516104079190613db8565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613ef9565b610d05565b005b34801561044557600080fd5b5061044e610e54565b60405161045b9190613db8565b60405180910390f35b34801561047057600080fd5b50610479610e67565b6040516104869190613c01565b60405180910390f35b34801561049b57600080fd5b506104a4610e6d565b6040516104b19190613f42565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613f5d565b610e76565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190613d5d565b61111e565b6040516105179190613db8565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613ef9565b6111ca565b005b34801561055557600080fd5b5061055e6112a1565b60405161056b9190613fbf565b60405180910390f35b34801561058057600080fd5b506105896112c7565b6040516105969190613db8565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613e4d565b6112da565b6040516105d39190613db8565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613ef9565b611330565b005b34801561061157600080fd5b5061061a61147f565b6040516106279190613c01565b60405180910390f35b34801561063c57600080fd5b50610645611485565b6040516106529190613c01565b60405180910390f35b34801561066757600080fd5b5061067061148b565b60405161067d9190613db8565b60405180910390f35b34801561069257600080fd5b5061069b61149e565b6040516106a89190613c01565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613e4d565b6114a4565b6040516106e59190613c01565b60405180910390f35b3480156106fa57600080fd5b506107036114ec565b005b34801561071157600080fd5b5061071a611644565b6040516107279190613fbf565b60405180910390f35b34801561073c57600080fd5b5061074561166a565b6040516107529190613c01565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613fda565b611670565b005b34801561079057600080fd5b50610799611842565b6040516107a69190613fbf565b60405180910390f35b3480156107bb57600080fd5b506107c461186c565b6040516107d19190613cac565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613d5d565b6118fe565b60405161080e9190613db8565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613e4d565b6119e9565b60405161084b9190613db8565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190613d5d565b611a3f565b6040516108889190613db8565b60405180910390f35b34801561089d57600080fd5b506108a6611a5d565b6040516108b39190613c01565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190613e4d565b611a63565b005b3480156108f157600080fd5b5061090c6004803603810190610907919061401a565b611c96565b005b34801561091a57600080fd5b5061093560048036038101906109309190613fda565b611d8f565b005b34801561094357600080fd5b5061095e60048036038101906109599190614047565b611f61565b005b34801561096c57600080fd5b5061098760048036038101906109829190613fda565b612166565b005b34801561099557600080fd5b5061099e612338565b6040516109ab9190613c01565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d691906140ae565b61233e565b6040516109e89190613c01565b60405180910390f35b3480156109fd57600080fd5b50610a066123c5565b604051610a139190613c01565b60405180910390f35b348015610a2857600080fd5b50610a436004803603810190610a3e9190613ef9565b6123cb565b005b348015610a5157600080fd5b50610a6c6004803603810190610a679190613e4d565b61247f565b005b348015610a7a57600080fd5b50610a956004803603810190610a909190613e4d565b612645565b005b60185481565b606060038054610aac9061411d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad89061411d565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b6000610b43610b3c6128b4565b84846128bc565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c326128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cee5782811015610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd0906141c0565b60405180910390fd5b610ced85610ce56128b4565b8584036128bc565b5b610cf9858585612a85565b60019150509392505050565b610d0d6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d939061422c565b60405180910390fd5b601460009054906101000a900460ff16151581151503610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906142be565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601460009054906101000a900460ff16604051610e499190613db8565b60405180910390a150565b601760009054906101000a900460ff1681565b600a5481565b60006012905090565b610e7e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061422c565b60405180910390fd5b6103e8610f18610e6d565b600a610f249190614440565b610f2c610b73565b610f3691906144ba565b610f4091906144ba565b8310158015610f8157506103e8610f55610e6d565b600a610f619190614440565b610f69610b73565b610f7391906144ba565b610f7d91906144ba565b8210155b610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061455d565b60405180910390fd5b610fc8610e6d565b600a610fd49190614440565b83610fdf919061457d565b601881905550610fed610e6d565b600a610ff99190614440565b82611004919061457d565b6019819055506064611014610e6d565b600a6110209190614440565b611028610b73565b61103291906144ba565b61103c91906144ba565b81101561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614631565b60405180910390fd5b611086610e6d565b600a6110929190614440565b8161109d919061457d565b6015819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426015546040516110d49190613c01565b60405180910390a17f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601854601954604051611111929190614651565b60405180910390a1505050565b60006111c061112b6128b4565b8484600160006111396128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111bb919061467a565b6128bc565b6001905092915050565b6111d26128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112589061422c565b60405180910390fd5b801561129e576001601260026101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055505b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113386128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061422c565b60405180910390fd5b601760009054906101000a900460ff1615158115150361141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390614720565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601760009054906101000a900460ff166040516114749190613db8565b60405180910390a150565b60195481565b600b5481565b601260019054906101000a900460ff1681565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f46128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061422c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6116786128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061422c565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611790906147b2565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516118369190613db8565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461187b9061411d565b80601f01602080910402602001604051908101604052809291908181526020018280546118a79061411d565b80156118f45780601f106118c9576101008083540402835291602001916118f4565b820191906000526020600020905b8154815290600101906020018083116118d757829003601f168201915b5050505050905090565b6000806001600061190d6128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190614844565b60405180910390fd5b6119de6119d56128b4565b858584036128bc565b600191505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611a53611a4c6128b4565b8484612a85565b6001905092915050565b60155481565b611a6b6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af19061422c565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b81906148d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614968565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611c8b9190613fbf565b60405180910390a150565b611c9e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d249061422c565b60405180910390fd5b61271081611d39610b73565b611d43919061457d565b611d4d91906144ba565b6011819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601154604051611d849190613c01565b60405180910390a150565b611d976128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061422c565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf906149fa565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f559190613db8565b60405180910390a25050565b611f696128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef9061422c565b60405180910390fd5b8360098190555082600b81905550600b54600954612016919061467a565b600d8190555081600a8190555080600c81905550600c54600a5461203a919061467a565b600e81905550602d600e54600d54612052919061467a565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90614a8c565b60405180910390fd5b602d600e54600d546120a5919061467a565b11156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614a8c565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b5460405161211b929190614651565b60405180910390a17f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051612158929190614651565b60405180910390a150505050565b61216e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f49061422c565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906147b2565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161232c9190613db8565b60405180910390a25050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b6123d36128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124599061422c565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6124876128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d9061422c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90614b1e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61264d6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061422c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190614bb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ac576127a7473373ffffffffffffffffffffffffffffffffffffffff1661332690919063ffffffff16565b6128b1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127ec9190613fbf565b602060405180830381865afa158015612809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282d9190614be5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161286a929190614c12565b6020604051808303816000875af1158015612889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ad9190614c50565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614cef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614d81565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a789190613c01565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90614ea5565b60405180910390fd5b601260029054906101000a900460ff1680612bc75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c1b5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190614f11565b60405180910390fd5b60008103612c7357612c6e8383600061341a565b613321565b601760009054906101000a900460ff1615612ec957600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d315750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612d875750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ddd5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e8157601854811115612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7390614fa3565b60405180910390fd5b612ec7565b601954811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614fa3565b60405180910390fd5b5b5b5b6000612ed4306114a4565b905060006011548210159050808015612efa5750601260009054906101000a900460ff16155b8015612f535750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f6e57506000600e54600d54612f6c919061467a565b115b8015612f865750601260019054906101000a900460ff165b15612fcd576001601260006101000a81548160ff021916908315150217905550612fb1601154613699565b6000601260006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130705750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130875750601260009054906101000a900460ff165b15613095576000905061315a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036130f457600d549050613159565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315357600e549050613158565b600090505b5b5b600081111561319a57600060648286613173919061457d565b61317d91906144ba565b9050808561318b9190614fc3565b945061319887308361341a565b505b601460009054906101000a900460ff161561331257601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132535750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132ad5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156133115760006132bd866114a4565b905060155485826132ce919061467a565b111561330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330690615069565b60405180910390fd5b505b5b61331d86868661341a565b5050505b505050565b80471015613369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613360906150d5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161338f90615126565b60006040518083038185875af1925050503d80600081146133cc576040519150601f19603f3d011682016040523d82523d6000602084013e6133d1565b606091505b5050905080613415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340c906151ad565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348090614e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef90614ea5565b60405180910390fd5b613503838383613bde565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135809061523f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461361c919061467a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136809190613c01565b60405180910390a3613693848484613be3565b50505050565b60004790506000600267ffffffffffffffff8111156136bb576136ba61525f565b5b6040519080825280602002602001820160405280156136e95781602001602082028036833780820191505090505b50905030816000815181106137015761370061528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc91906152d2565b816001815181106137e0576137df61528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161387e9594939291906153f8565b600060405180830381600087803b15801561389857600080fd5b505af11580156138ac573d6000803e3d6000fd5b50505050600082476138be9190614fc3565b90506000600e54600d546138d2919061467a565b600c54600b546138e2919061467a565b836138ed919061457d565b6138f791906144ba565b9050600081836139079190614fc3565b9050600082111561395e5761395d82601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661332690919063ffffffff16565b5b6000811115613b9d576000600267ffffffffffffffff8111156139845761398361525f565b5b6040519080825280602002602001820160405280156139b25781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4691906152d2565b81600081518110613a5a57613a5961528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050738390a1da07e376ef7add4be859ba74fb83aa02d581600181518110613abd57613abc61528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead61012c42613b4a919061467a565b6040518663ffffffff1660e01b8152600401613b699493929190615452565b6000604051808303818588803b158015613b8257600080fd5b505af1158015613b96573d6000803e3d6000fd5b5050505050505b7f94b0d5a5b2879507b25bbfd8a3bfed636aeb5ef2386d2c5368585e22e60d3d188684604051613bce929190614651565b60405180910390a1505050505050565b505050565b505050565b6000819050919050565b613bfb81613be8565b82525050565b6000602082019050613c166000830184613bf2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c56578082015181840152602081019050613c3b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7e82613c1c565b613c888185613c27565b9350613c98818560208601613c38565b613ca181613c62565b840191505092915050565b60006020820190508181036000830152613cc68184613c73565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cfe82613cd3565b9050919050565b613d0e81613cf3565b8114613d1957600080fd5b50565b600081359050613d2b81613d05565b92915050565b613d3a81613be8565b8114613d4557600080fd5b50565b600081359050613d5781613d31565b92915050565b60008060408385031215613d7457613d73613cce565b5b6000613d8285828601613d1c565b9250506020613d9385828601613d48565b9150509250929050565b60008115159050919050565b613db281613d9d565b82525050565b6000602082019050613dcd6000830184613da9565b92915050565b6000819050919050565b6000613df8613df3613dee84613cd3565b613dd3565b613cd3565b9050919050565b6000613e0a82613ddd565b9050919050565b6000613e1c82613dff565b9050919050565b613e2c81613e11565b82525050565b6000602082019050613e476000830184613e23565b92915050565b600060208284031215613e6357613e62613cce565b5b6000613e7184828501613d1c565b91505092915050565b600080600060608486031215613e9357613e92613cce565b5b6000613ea186828701613d1c565b9350506020613eb286828701613d1c565b9250506040613ec386828701613d48565b9150509250925092565b613ed681613d9d565b8114613ee157600080fd5b50565b600081359050613ef381613ecd565b92915050565b600060208284031215613f0f57613f0e613cce565b5b6000613f1d84828501613ee4565b91505092915050565b600060ff82169050919050565b613f3c81613f26565b82525050565b6000602082019050613f576000830184613f33565b92915050565b600080600060608486031215613f7657613f75613cce565b5b6000613f8486828701613d48565b9350506020613f9586828701613d48565b9250506040613fa686828701613d48565b9150509250925092565b613fb981613cf3565b82525050565b6000602082019050613fd46000830184613fb0565b92915050565b60008060408385031215613ff157613ff0613cce565b5b6000613fff85828601613d1c565b925050602061401085828601613ee4565b9150509250929050565b6000602082840312156140305761402f613cce565b5b600061403e84828501613d48565b91505092915050565b6000806000806080858703121561406157614060613cce565b5b600061406f87828801613d48565b945050602061408087828801613d48565b935050604061409187828801613d48565b92505060606140a287828801613d48565b91505092959194509250565b600080604083850312156140c5576140c4613cce565b5b60006140d385828601613d1c565b92505060206140e485828601613d1c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061413557607f821691505b602082108103614148576141476140ee565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006141aa602883613c27565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614216602083613c27565b9150614221826141e0565b602082019050919050565b6000602082019050818103600083015261424581614209565b9050919050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b60006142a8602d83613c27565b91506142b38261424c565b604082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614364578086048111156143405761433f6142de565b5b600185161561434f5780820291505b808102905061435d8561430d565b9450614324565b94509492505050565b60008261437d5760019050614439565b8161438b5760009050614439565b81600181146143a157600281146143ab576143da565b6001915050614439565b60ff8411156143bd576143bc6142de565b5b8360020a9150848211156143d4576143d36142de565b5b50614439565b5060208310610133831016604e8410600b841016171561440f5782820a90508381111561440a576144096142de565b5b614439565b61441c848484600161431a565b92509050818404811115614433576144326142de565b5b81810290505b9392505050565b600061444b82613be8565b915061445683613f26565b92506144837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461436d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c582613be8565b91506144d083613be8565b9250826144e0576144df61448b565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614547603f83613c27565b9150614552826144eb565b604082019050919050565b600060208201905081810360008301526145768161453a565b9050919050565b600061458882613be8565b915061459383613be8565b92508282026145a181613be8565b915082820484148315176145b8576145b76142de565b5b5092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061461b602d83613c27565b9150614626826145bf565b604082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b60006040820190506146666000830185613bf2565b6146736020830184613bf2565b9392505050565b600061468582613be8565b915061469083613be8565b92508282019050808211156146a8576146a76142de565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b600061470a603283613c27565b9150614715826146ae565b604082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061479c602483613c27565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061482e602583613c27565b9150614839826147d2565b604082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006148c0602883613c27565b91506148cb82614864565b604082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614952602b83613c27565b915061495d826148f6565b604082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006149e4602a83613c27565b91506149ef82614988565b604082019050919050565b60006020820190508181036000830152614a13816149d7565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614a76602483613c27565b9150614a8182614a1a565b604082019050919050565b60006020820190508181036000830152614aa581614a69565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b08602683613c27565b9150614b1382614aac565b604082019050919050565b60006020820190508181036000830152614b3781614afb565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614b9a603783613c27565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b600081519050614bdf81613d31565b92915050565b600060208284031215614bfb57614bfa613cce565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185613fb0565b614c346020830184613bf2565b9392505050565b600081519050614c4a81613ecd565b92915050565b600060208284031215614c6657614c65613cce565b5b6000614c7484828501614c3b565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cd9602483613c27565b9150614ce482614c7d565b604082019050919050565b60006020820190508181036000830152614d0881614ccc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d6b602283613c27565b9150614d7682614d0f565b604082019050919050565b60006020820190508181036000830152614d9a81614d5e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dfd602583613c27565b9150614e0882614da1565b604082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8f602383613c27565b9150614e9a82614e33565b604082019050919050565b60006020820190508181036000830152614ebe81614e82565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614efb601883613c27565b9150614f0682614ec5565b602082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614f8d603b83613c27565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b6000614fce82613be8565b9150614fd983613be8565b9250828203905081811115614ff157614ff06142de565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000615053603083613c27565b915061505e82614ff7565b604082019050919050565b6000602082019050818103600083015261508281615046565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006150bf601d83613c27565b91506150ca82615089565b602082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b600081905092915050565b50565b60006151106000836150f5565b915061511b82615100565b600082019050919050565b600061513182615103565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615197603a83613c27565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615229602683613c27565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152cc81613d05565b92915050565b6000602082840312156152e8576152e7613cce565b5b60006152f6848285016152bd565b91505092915050565b6000819050919050565b600061532461531f61531a846152ff565b613dd3565b613be8565b9050919050565b61533481615309565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61536f81613cf3565b82525050565b60006153818383615366565b60208301905092915050565b6000602082019050919050565b60006153a58261533a565b6153af8185615345565b93506153ba83615356565b8060005b838110156153eb5781516153d28882615375565b97506153dd8361538d565b9250506001810190506153be565b5085935050505092915050565b600060a08201905061540d6000830188613bf2565b61541a602083018761532b565b818103604083015261542c818661539a565b905061543b6060830185613fb0565b6154486080830184613bf2565b9695505050505050565b6000608082019050615467600083018761532b565b8181036020830152615479818661539a565b90506154886040830185613fb0565b6154956060830184613bf2565b9594505050505056fea2646970667358221220e507729c1fa5abb2d02307991bfe25bae93fe47e7170ad76a958510b6c0a7fc364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063702509fd1161014f578063aa4bde28116100c1578063dc4c7dbc1161007a578063dc4c7dbc14610989578063dd62ed3e146109b4578063e2f45605146109f1578063e81ea6a914610a1c578063f2fde38b14610a45578063f9d0831a14610a6e5761027d565b8063aa4bde2814610891578063aacebbe3146108bc578063afa4f3b2146108e5578063c02466681461090e578063c6616ba114610937578063d2fcc001146109605761027d565b8063880bcbc111610113578063880bcbc11461075b5780638da5cb5b1461078457806395d89b41146107af578063a457c2d7146107da578063a8a69b9d14610817578063a9059cbb146108545761027d565b8063702509fd1461068657806370a08231146106b1578063715018a6146106ee57806375f0a874146107055780637c3a88df146107305761027d565b8063313ce567116101e85780634ada218b116101ac5780634ada218b146105745780634fbee1931461059f57806356a6cabf146105dc57806359136fa5146106055780635fc2e596146106305780636ddd17131461065b5761027d565b8063313ce5671461048f57806336a0f8a5146104ba57806339509351146104e357806347f687951461052057806349bd5a5e146105495761027d565b806318d9ceae1161023a57806318d9ceae1461036b57806321a9d82a146103a857806323b872dd146103d35780632a6c7dba146104105780632ba86bf2146104395780632e1ace46146104645761027d565b80630105d0fd1461028257806306fdde03146102ad578063095ea7b3146102d85780631694505e1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b6040516102a49190613c01565b60405180910390f35b3480156102b957600080fd5b506102c2610a9d565b6040516102cf9190613cac565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190613d5d565b610b2f565b60405161030c9190613db8565b60405180910390f35b34801561032157600080fd5b5061032a610b4d565b6040516103379190613e32565b60405180910390f35b34801561034c57600080fd5b50610355610b73565b6040516103629190613c01565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190613e4d565b610b7d565b60405161039f9190613db8565b60405180910390f35b3480156103b457600080fd5b506103bd610bd3565b6040516103ca9190613db8565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190613e7a565b610be6565b6040516104079190613db8565b60405180910390f35b34801561041c57600080fd5b5061043760048036038101906104329190613ef9565b610d05565b005b34801561044557600080fd5b5061044e610e54565b60405161045b9190613db8565b60405180910390f35b34801561047057600080fd5b50610479610e67565b6040516104869190613c01565b60405180910390f35b34801561049b57600080fd5b506104a4610e6d565b6040516104b19190613f42565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613f5d565b610e76565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190613d5d565b61111e565b6040516105179190613db8565b60405180910390f35b34801561052c57600080fd5b5061054760048036038101906105429190613ef9565b6111ca565b005b34801561055557600080fd5b5061055e6112a1565b60405161056b9190613fbf565b60405180910390f35b34801561058057600080fd5b506105896112c7565b6040516105969190613db8565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613e4d565b6112da565b6040516105d39190613db8565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613ef9565b611330565b005b34801561061157600080fd5b5061061a61147f565b6040516106279190613c01565b60405180910390f35b34801561063c57600080fd5b50610645611485565b6040516106529190613c01565b60405180910390f35b34801561066757600080fd5b5061067061148b565b60405161067d9190613db8565b60405180910390f35b34801561069257600080fd5b5061069b61149e565b6040516106a89190613c01565b60405180910390f35b3480156106bd57600080fd5b506106d860048036038101906106d39190613e4d565b6114a4565b6040516106e59190613c01565b60405180910390f35b3480156106fa57600080fd5b506107036114ec565b005b34801561071157600080fd5b5061071a611644565b6040516107279190613fbf565b60405180910390f35b34801561073c57600080fd5b5061074561166a565b6040516107529190613c01565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613fda565b611670565b005b34801561079057600080fd5b50610799611842565b6040516107a69190613fbf565b60405180910390f35b3480156107bb57600080fd5b506107c461186c565b6040516107d19190613cac565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613d5d565b6118fe565b60405161080e9190613db8565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613e4d565b6119e9565b60405161084b9190613db8565b60405180910390f35b34801561086057600080fd5b5061087b60048036038101906108769190613d5d565b611a3f565b6040516108889190613db8565b60405180910390f35b34801561089d57600080fd5b506108a6611a5d565b6040516108b39190613c01565b60405180910390f35b3480156108c857600080fd5b506108e360048036038101906108de9190613e4d565b611a63565b005b3480156108f157600080fd5b5061090c6004803603810190610907919061401a565b611c96565b005b34801561091a57600080fd5b5061093560048036038101906109309190613fda565b611d8f565b005b34801561094357600080fd5b5061095e60048036038101906109599190614047565b611f61565b005b34801561096c57600080fd5b5061098760048036038101906109829190613fda565b612166565b005b34801561099557600080fd5b5061099e612338565b6040516109ab9190613c01565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d691906140ae565b61233e565b6040516109e89190613c01565b60405180910390f35b3480156109fd57600080fd5b50610a066123c5565b604051610a139190613c01565b60405180910390f35b348015610a2857600080fd5b50610a436004803603810190610a3e9190613ef9565b6123cb565b005b348015610a5157600080fd5b50610a6c6004803603810190610a679190613e4d565b61247f565b005b348015610a7a57600080fd5b50610a956004803603810190610a909190613e4d565b612645565b005b60185481565b606060038054610aac9061411d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad89061411d565b8015610b255780601f10610afa57610100808354040283529160200191610b25565b820191906000526020600020905b815481529060010190602001808311610b0857829003601f168201915b5050505050905090565b6000610b43610b3c6128b4565b84846128bc565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c326128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610cee5782811015610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd0906141c0565b60405180910390fd5b610ced85610ce56128b4565b8584036128bc565b5b610cf9858585612a85565b60019150509392505050565b610d0d6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d939061422c565b60405180910390fd5b601460009054906101000a900460ff16151581151503610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de8906142be565b60405180910390fd5b80601460006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601460009054906101000a900460ff16604051610e499190613db8565b60405180910390a150565b601760009054906101000a900460ff1681565b600a5481565b60006012905090565b610e7e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f049061422c565b60405180910390fd5b6103e8610f18610e6d565b600a610f249190614440565b610f2c610b73565b610f3691906144ba565b610f4091906144ba565b8310158015610f8157506103e8610f55610e6d565b600a610f619190614440565b610f69610b73565b610f7391906144ba565b610f7d91906144ba565b8210155b610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb79061455d565b60405180910390fd5b610fc8610e6d565b600a610fd49190614440565b83610fdf919061457d565b601881905550610fed610e6d565b600a610ff99190614440565b82611004919061457d565b6019819055506064611014610e6d565b600a6110209190614440565b611028610b73565b61103291906144ba565b61103c91906144ba565b81101561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614631565b60405180910390fd5b611086610e6d565b600a6110929190614440565b8161109d919061457d565b6015819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426015546040516110d49190613c01565b60405180910390a17f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601854601954604051611111929190614651565b60405180910390a1505050565b60006111c061112b6128b4565b8484600160006111396128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111bb919061467a565b6128bc565b6001905092915050565b6111d26128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611261576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112589061422c565b60405180910390fd5b801561129e576001601260026101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055505b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260029054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113386128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061422c565b60405180910390fd5b601760009054906101000a900460ff1615158115150361141c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141390614720565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601760009054906101000a900460ff166040516114749190613db8565b60405180910390a150565b60195481565b600b5481565b601260019054906101000a900460ff1681565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114f46128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061422c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6116786128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe9061422c565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611790906147b2565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c10826040516118369190613db8565b60405180910390a25050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461187b9061411d565b80601f01602080910402602001604051908101604052809291908181526020018280546118a79061411d565b80156118f45780601f106118c9576101008083540402835291602001916118f4565b820191906000526020600020905b8154815290600101906020018083116118d757829003601f168201915b5050505050905090565b6000806001600061190d6128b4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190614844565b60405180910390fd5b6119de6119d56128b4565b858584036128bc565b600191505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611a53611a4c6128b4565b8484612a85565b6001905092915050565b60155481565b611a6b6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af19061422c565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b81906148d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614968565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611c8b9190613fbf565b60405180910390a150565b611c9e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d249061422c565b60405180910390fd5b61271081611d39610b73565b611d43919061457d565b611d4d91906144ba565b6011819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601154604051611d849190613c01565b60405180910390a150565b611d976128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061422c565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf906149fa565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f559190613db8565b60405180910390a25050565b611f696128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef9061422c565b60405180910390fd5b8360098190555082600b81905550600b54600954612016919061467a565b600d8190555081600a8190555080600c81905550600c54600a5461203a919061467a565b600e81905550602d600e54600d54612052919061467a565b1115612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90614a8c565b60405180910390fd5b602d600e54600d546120a5919061467a565b11156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614a8c565b60405180910390fd5b7fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50600954600b5460405161211b929190614651565b60405180910390a17f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c6600a54600c54604051612158929190614651565b60405180910390a150505050565b61216e6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f49061422c565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906147b2565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161232c9190613db8565b60405180910390a25050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b6123d36128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612462576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124599061422c565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6124876128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250d9061422c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257c90614b1e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61264d6128b4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061422c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190614bb0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127ac576127a7473373ffffffffffffffffffffffffffffffffffffffff1661332690919063ffffffff16565b6128b1565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016127ec9190613fbf565b602060405180830381865afa158015612809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282d9190614be5565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161286a929190614c12565b6020604051808303816000875af1158015612889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ad9190614c50565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614cef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614d81565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a789190613c01565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90614e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5a90614ea5565b60405180910390fd5b601260029054906101000a900460ff1680612bc75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612c1b5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190614f11565b60405180910390fd5b60008103612c7357612c6e8383600061341a565b613321565b601760009054906101000a900460ff1615612ec957600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612d315750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612d875750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ddd5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e8157601854811115612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7390614fa3565b60405180910390fd5b612ec7565b601954811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614fa3565b60405180910390fd5b5b5b5b6000612ed4306114a4565b905060006011548210159050808015612efa5750601260009054906101000a900460ff16155b8015612f535750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612f6e57506000600e54600d54612f6c919061467a565b115b8015612f865750601260019054906101000a900460ff165b15612fcd576001601260006101000a81548160ff021916908315150217905550612fb1601154613699565b6000601260006101000a81548160ff0219169083151502179055505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130705750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806130875750601260009054906101000a900460ff165b15613095576000905061315a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036130f457600d549050613159565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315357600e549050613158565b600090505b5b5b600081111561319a57600060648286613173919061457d565b61317d91906144ba565b9050808561318b9190614fc3565b945061319887308361341a565b505b601460009054906101000a900460ff161561331257601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132535750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132ad5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156133115760006132bd866114a4565b905060155485826132ce919061467a565b111561330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330690615069565b60405180910390fd5b505b5b61331d86868661341a565b5050505b505050565b80471015613369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613360906150d5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161338f90615126565b60006040518083038185875af1925050503d80600081146133cc576040519150601f19603f3d011682016040523d82523d6000602084013e6133d1565b606091505b5050905080613415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340c906151ad565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613489576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348090614e13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ef90614ea5565b60405180910390fd5b613503838383613bde565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135809061523f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461361c919061467a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136809190613c01565b60405180910390a3613693848484613be3565b50505050565b60004790506000600267ffffffffffffffff8111156136bb576136ba61525f565b5b6040519080825280602002602001820160405280156136e95781602001602082028036833780820191505090505b50905030816000815181106137015761370061528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc91906152d2565b816001815181106137e0576137df61528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b815260040161387e9594939291906153f8565b600060405180830381600087803b15801561389857600080fd5b505af11580156138ac573d6000803e3d6000fd5b50505050600082476138be9190614fc3565b90506000600e54600d546138d2919061467a565b600c54600b546138e2919061467a565b836138ed919061457d565b6138f791906144ba565b9050600081836139079190614fc3565b9050600082111561395e5761395d82601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661332690919063ffffffff16565b5b6000811115613b9d576000600267ffffffffffffffff8111156139845761398361525f565b5b6040519080825280602002602001820160405280156139b25781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4691906152d2565b81600081518110613a5a57613a5961528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050738390a1da07e376ef7add4be859ba74fb83aa02d581600181518110613abd57613abc61528e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead61012c42613b4a919061467a565b6040518663ffffffff1660e01b8152600401613b699493929190615452565b6000604051808303818588803b158015613b8257600080fd5b505af1158015613b96573d6000803e3d6000fd5b5050505050505b7f94b0d5a5b2879507b25bbfd8a3bfed636aeb5ef2386d2c5368585e22e60d3d188684604051613bce929190614651565b60405180910390a1505050505050565b505050565b505050565b6000819050919050565b613bfb81613be8565b82525050565b6000602082019050613c166000830184613bf2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c56578082015181840152602081019050613c3b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7e82613c1c565b613c888185613c27565b9350613c98818560208601613c38565b613ca181613c62565b840191505092915050565b60006020820190508181036000830152613cc68184613c73565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cfe82613cd3565b9050919050565b613d0e81613cf3565b8114613d1957600080fd5b50565b600081359050613d2b81613d05565b92915050565b613d3a81613be8565b8114613d4557600080fd5b50565b600081359050613d5781613d31565b92915050565b60008060408385031215613d7457613d73613cce565b5b6000613d8285828601613d1c565b9250506020613d9385828601613d48565b9150509250929050565b60008115159050919050565b613db281613d9d565b82525050565b6000602082019050613dcd6000830184613da9565b92915050565b6000819050919050565b6000613df8613df3613dee84613cd3565b613dd3565b613cd3565b9050919050565b6000613e0a82613ddd565b9050919050565b6000613e1c82613dff565b9050919050565b613e2c81613e11565b82525050565b6000602082019050613e476000830184613e23565b92915050565b600060208284031215613e6357613e62613cce565b5b6000613e7184828501613d1c565b91505092915050565b600080600060608486031215613e9357613e92613cce565b5b6000613ea186828701613d1c565b9350506020613eb286828701613d1c565b9250506040613ec386828701613d48565b9150509250925092565b613ed681613d9d565b8114613ee157600080fd5b50565b600081359050613ef381613ecd565b92915050565b600060208284031215613f0f57613f0e613cce565b5b6000613f1d84828501613ee4565b91505092915050565b600060ff82169050919050565b613f3c81613f26565b82525050565b6000602082019050613f576000830184613f33565b92915050565b600080600060608486031215613f7657613f75613cce565b5b6000613f8486828701613d48565b9350506020613f9586828701613d48565b9250506040613fa686828701613d48565b9150509250925092565b613fb981613cf3565b82525050565b6000602082019050613fd46000830184613fb0565b92915050565b60008060408385031215613ff157613ff0613cce565b5b6000613fff85828601613d1c565b925050602061401085828601613ee4565b9150509250929050565b6000602082840312156140305761402f613cce565b5b600061403e84828501613d48565b91505092915050565b6000806000806080858703121561406157614060613cce565b5b600061406f87828801613d48565b945050602061408087828801613d48565b935050604061409187828801613d48565b92505060606140a287828801613d48565b91505092959194509250565b600080604083850312156140c5576140c4613cce565b5b60006140d385828601613d1c565b92505060206140e485828601613d1c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061413557607f821691505b602082108103614148576141476140ee565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006141aa602883613c27565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614216602083613c27565b9150614221826141e0565b602082019050919050565b6000602082019050818103600083015261424581614209565b9050919050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b60006142a8602d83613c27565b91506142b38261424c565b604082019050919050565b600060208201905081810360008301526142d78161429b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115614364578086048111156143405761433f6142de565b5b600185161561434f5780820291505b808102905061435d8561430d565b9450614324565b94509492505050565b60008261437d5760019050614439565b8161438b5760009050614439565b81600181146143a157600281146143ab576143da565b6001915050614439565b60ff8411156143bd576143bc6142de565b5b8360020a9150848211156143d4576143d36142de565b5b50614439565b5060208310610133831016604e8410600b841016171561440f5782820a90508381111561440a576144096142de565b5b614439565b61441c848484600161431a565b92509050818404811115614433576144326142de565b5b81810290505b9392505050565b600061444b82613be8565b915061445683613f26565b92506144837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461436d565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c582613be8565b91506144d083613be8565b9250826144e0576144df61448b565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000614547603f83613c27565b9150614552826144eb565b604082019050919050565b600060208201905081810360008301526145768161453a565b9050919050565b600061458882613be8565b915061459383613be8565b92508282026145a181613be8565b915082820484148315176145b8576145b76142de565b5b5092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b600061461b602d83613c27565b9150614626826145bf565b604082019050919050565b6000602082019050818103600083015261464a8161460e565b9050919050565b60006040820190506146666000830185613bf2565b6146736020830184613bf2565b9392505050565b600061468582613be8565b915061469083613be8565b92508282019050808211156146a8576146a76142de565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b600061470a603283613c27565b9150614715826146ae565b604082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b600061479c602483613c27565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061482e602583613c27565b9150614839826147d2565b604082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006148c0602883613c27565b91506148cb82614864565b604082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614952602b83613c27565b915061495d826148f6565b604082019050919050565b6000602082019050818103600083015261498181614945565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006149e4602a83613c27565b91506149ef82614988565b604082019050919050565b60006020820190508181036000830152614a13816149d7565b9050919050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614a76602483613c27565b9150614a8182614a1a565b604082019050919050565b60006020820190508181036000830152614aa581614a69565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b08602683613c27565b9150614b1382614aac565b604082019050919050565b60006020820190508181036000830152614b3781614afb565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b6000614b9a603783613c27565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b600081519050614bdf81613d31565b92915050565b600060208284031215614bfb57614bfa613cce565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185613fb0565b614c346020830184613bf2565b9392505050565b600081519050614c4a81613ecd565b92915050565b600060208284031215614c6657614c65613cce565b5b6000614c7484828501614c3b565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cd9602483613c27565b9150614ce482614c7d565b604082019050919050565b60006020820190508181036000830152614d0881614ccc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d6b602283613c27565b9150614d7682614d0f565b604082019050919050565b60006020820190508181036000830152614d9a81614d5e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614dfd602583613c27565b9150614e0882614da1565b604082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e8f602383613c27565b9150614e9a82614e33565b604082019050919050565b60006020820190508181036000830152614ebe81614e82565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b6000614efb601883613c27565b9150614f0682614ec5565b602082019050919050565b60006020820190508181036000830152614f2a81614eee565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b6000614f8d603b83613c27565b9150614f9882614f31565b604082019050919050565b60006020820190508181036000830152614fbc81614f80565b9050919050565b6000614fce82613be8565b9150614fd983613be8565b9250828203905081811115614ff157614ff06142de565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b6000615053603083613c27565b915061505e82614ff7565b604082019050919050565b6000602082019050818103600083015261508281615046565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006150bf601d83613c27565b91506150ca82615089565b602082019050919050565b600060208201905081810360008301526150ee816150b2565b9050919050565b600081905092915050565b50565b60006151106000836150f5565b915061511b82615100565b600082019050919050565b600061513182615103565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000615197603a83613c27565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615229602683613c27565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152cc81613d05565b92915050565b6000602082840312156152e8576152e7613cce565b5b60006152f6848285016152bd565b91505092915050565b6000819050919050565b600061532461531f61531a846152ff565b613dd3565b613be8565b9050919050565b61533481615309565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61536f81613cf3565b82525050565b60006153818383615366565b60208301905092915050565b6000602082019050919050565b60006153a58261533a565b6153af8185615345565b93506153ba83615356565b8060005b838110156153eb5781516153d28882615375565b97506153dd8361538d565b9250506001810190506153be565b5085935050505092915050565b600060a08201905061540d6000830188613bf2565b61541a602083018761532b565b818103604083015261542c818661539a565b905061543b6060830185613fb0565b6154486080830184613bf2565b9695505050505050565b6000608082019050615467600083018761532b565b8181036020830152615479818661539a565b90506154886040830185613fb0565b6154956060830184613bf2565b9594505050505056fea2646970667358221220e507729c1fa5abb2d02307991bfe25bae93fe47e7170ad76a958510b6c0a7fc364736f6c63430008110033

Deployed Bytecode Sourcemap

19777:14251:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31868:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15062:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15976:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19860:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15383:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33884:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30689:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16153:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30979:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31819:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20047:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15282:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32552:990;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16734:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25866:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19908:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25831:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24426:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32233:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31914:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20089:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20414:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20251:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15499:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14245:148;;;;;;;;;;;;;:::i;:::-;;20301:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20008:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33550:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14031:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15170:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16957:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31599:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15634:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30732:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25444:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29011:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24128:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24559:870;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31273:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20129:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15817:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20340:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28892:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14401:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23655:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31868:39;;;;:::o;15062:100::-;15116:13;15149:5;15142:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15062:100;:::o;15976:169::-;16059:4;16076:39;16085:12;:10;:12::i;:::-;16099:7;16108:6;16076:8;:39::i;:::-;16133:4;16126:11;;15976:169;;;;:::o;19860:41::-;;;;;;;;;;;;;:::o;15383:108::-;15444:7;15471:12;;15464:19;;15383:108;:::o;33884:141::-;33959:4;33983:25;:34;34009:7;33983:34;;;;;;;;;;;;;;;;;;;;;;;;;33976:41;;33884:141;;;:::o;30689:36::-;;;;;;;;;;;;;:::o;16153:573::-;16293:4;16310:24;16337:11;:19;16349:6;16337:19;;;;;;;;;;;;;;;:33;16357:12;:10;:12::i;:::-;16337:33;;;;;;;;;;;;;;;;16310:60;;16405:17;16385:16;:37;16381:265;;16467:6;16447:16;:26;;16439:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16562:57;16571:6;16579:12;:10;:12::i;:::-;16612:6;16593:16;:25;16562:8;:57::i;:::-;16381:265;16658:36;16668:6;16676:9;16687:6;16658:9;:36::i;:::-;16714:4;16707:11;;;16153:573;;;;;:::o;30979:280::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31073:21:::1;;;;;;;;;;;31063:31;;:6;:31;;::::0;31055:88:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31178:6;31154:21;;:30;;;;;;;;;;;;;;;;;;31202:49;31229:21;;;;;;;;;;;31202:49;;;;;;:::i;:::-;;;;;;;;30979:280:::0;:::o;31819:42::-;;;;;;;;;;;;;:::o;20047:33::-;;;;:::o;15282:93::-;15340:5;15365:2;15358:9;;15282:93;:::o;32552:990::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32809:5:::1;32794:10;:8;:10::i;:::-;32788:2;:16;;;;:::i;:::-;32771:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32770:44;;;;:::i;:::-;32741:24;:73;;:164;;;;;32900:5;32885:10;:8;:10::i;:::-;32879:2;:16;;;;:::i;:::-;32862:13;:11;:13::i;:::-;:34;;;;:::i;:::-;32861:44;;;;:::i;:::-;32832:25;:73;;32741:164;32719:278;;;;;;;;;;;;:::i;:::-;;;;;;;;;33071:10;:8;:10::i;:::-;33065:2;:16;;;;:::i;:::-;33036:24;:46;;;;:::i;:::-;33009:23;:73;;;;33155:10;:8;:10::i;:::-;33149:2;:16;;;;:::i;:::-;33120:25;:46;;;;:::i;:::-;33093:24;:73;;;;33254:3;33239:10;:8;:10::i;:::-;33233:2;:16;;;;:::i;:::-;33216:13;:11;:13::i;:::-;:34;;;;:::i;:::-;33215:42;;;;:::i;:::-;33195:16;:62;;33187:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;33362:10;:8;:10::i;:::-;33356:2;:16;;;;:::i;:::-;33336;:37;;;;:::i;:::-;33318:15;:55;;;;33391:44;33419:15;;33391:44;;;;;;:::i;:::-;;;;;;;;33451:83;33484:23;;33509:24;;33451:83;;;;;;;:::i;:::-;;;;;;;;32552:990:::0;;;:::o;16734:215::-;16822:4;16839:80;16848:12;:10;:12::i;:::-;16862:7;16908:10;16871:11;:25;16883:12;:10;:12::i;:::-;16871:25;;;;;;;;;;;;;;;:34;16897:7;16871:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16839:8;:80::i;:::-;16937:4;16930:11;;16734:215;;;;:::o;25866:185::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25935:7:::1;25932:96;;;25977:4;25960:14;;:21;;;;;;;;;;;;;;;;;;26010:4;25996:11;;:18;;;;;;;;;;;;;;;;;;25932:96;25866:185:::0;:::o;19908:29::-;;;;;;;;;;;;;:::o;25831:26::-;;;;;;;;;;;;;:::o;24426:125::-;24491:4;24515:19;:28;24535:7;24515:28;;;;;;;;;;;;;;;;;;;;;;;;;24508:35;;24426:125;;;:::o;32233:311::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32332:26:::1;;;;;;;;;;;32322:36;;:6;:36;;::::0;32314:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32453:6;32424:26;;:35;;;;;;;;;;;;;;;;;;32477:59;32509:26;;;;;;;;;;;32477:59;;;;;;:::i;:::-;;;;;;;;32233:311:::0;:::o;31914:40::-;;;;:::o;20089:33::-;;;;:::o;20414:26::-;;;;;;;;;;;;;:::o;20251:41::-;;;;:::o;15499:127::-;15573:7;15600:9;:18;15610:7;15600:18;;;;;;;;;;;;;;;;15593:25;;15499:127;;;:::o;14245:148::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14352:1:::1;14315:40;;14336:6;;;;;;;;;;;14315:40;;;;;;;;;;;;14383:1;14366:6;;:19;;;;;;;;;;;;;;;;;;14245:148::o:0;20301:30::-;;;;;;;;;;;;;:::o;20008:32::-;;;;:::o;33550:326::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:7:::1;33660:45;;:25;:34;33686:7;33660:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;33651:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33794:7;33757:25;:34;33783:7;33757:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33851:7;33819:49;;;33860:7;33819:49;;;;;;:::i;:::-;;;;;;;;33550:326:::0;;:::o;14031:79::-;14069:7;14096:6;;;;;;;;;;;14089:13;;14031:79;:::o;15170:104::-;15226:13;15259:7;15252:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15170:104;:::o;16957:413::-;17050:4;17067:24;17094:11;:25;17106:12;:10;:12::i;:::-;17094:25;;;;;;;;;;;;;;;:34;17120:7;17094:34;;;;;;;;;;;;;;;;17067:61;;17167:15;17147:16;:35;;17139:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17260:67;17269:12;:10;:12::i;:::-;17283:7;17311:15;17292:16;:34;17260:8;:67::i;:::-;17358:4;17351:11;;;16957:413;;;;:::o;31599:145::-;31674:4;31698:29;:38;31728:7;31698:38;;;;;;;;;;;;;;;;;;;;;;;;;31691:45;;31599:145;;;:::o;15634:175::-;15720:4;15737:42;15747:12;:10;:12::i;:::-;15761:9;15772:6;15737:9;:42::i;:::-;15797:4;15790:11;;15634:175;;;;:::o;30732:30::-;;;;:::o;25444:379::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25558:15:::1;;;;;;;;;;;25538:35;;:16;:35;;::::0;25530:87:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25664:1;25636:30;;:16;:30;;::::0;25628:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25742:16;25724:15;;:34;;;;;;;;;;;;;;;;;;25776:39;25799:15;;;;;;;;;;;25776:39;;;;;;:::i;:::-;;;;;;;;25444:379:::0;:::o;29011:239::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29150:5:::1;29137:9;29121:13;:11;:13::i;:::-;:25;;;;:::i;:::-;29120:35;;;;:::i;:::-;29099:18;:56;;;;29197:45;29223:18;;29197:45;;;;;;:::i;:::-;;;;;;;;29011:239:::0;:::o;24128:290::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24254:8:::1;24222:40;;:19;:28;24242:7;24222:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;24214:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24350:8;24319:19;:28;24339:7;24319:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24392:7;24376:34;;;24401:8;24376:34;;;;;;:::i;:::-;;;;;;;;24128:290:::0;;:::o;24559:870::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24760:17:::1;24741:16;:36;;;;24808:18;24788:17;:38;;;;24876:17;;24857:16;;:36;;;;:::i;:::-;24837:15;:56;;;;24945:18;24925:17;:38;;;;24995:19;24974:18;:40;;;;25066:18;;25046:17;;:38;;;;:::i;:::-;25025:16;:59;;;;25143:2;25123:16;;25105:15;;:34;;;;:::i;:::-;:40;;25097:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25243:2;25223:16;;25205:15;;:34;;;;:::i;:::-;:40;;25197:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:50;25316:16;;25334:17;;25302:50;;;;;;;:::i;:::-;;;;;;;;25368:53;25383:17;;25402:18;;25368:53;;;;;;;:::i;:::-;;;;;;;;24559:870:::0;;;;:::o;31273:318::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31415:7:::1;31373:49;;:29;:38;31403:7;31373:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;31364:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:7;31473:29;:38;31503:7;31473:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;31566:7;31539:44;;;31575:7;31539:44;;;;;;:::i;:::-;;;;;;;;31273:318:::0;;:::o;20129:34::-;;;;:::o;15817:151::-;15906:7;15933:11;:18;15945:5;15933:18;;;;;;;;;;;;;;;:27;15952:7;15933:27;;;;;;;;;;;;;;;;15926:34;;15817:151;;;;:::o;20340:34::-;;;;:::o;28892:111::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28987:8:::1;28973:11;;:22;;;;;;;;;;;;;;;;;;28892:111:::0;:::o;14401:244::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14510:1:::1;14490:22;;:8;:22;;::::0;14482:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14600:8;14571:38;;14592:6;;;;;;;;;;;14571:38;;;;;;;;;;;;14629:8;14620:6;;:17;;;;;;;;;;;;;;;;;;14401:244:::0;:::o;23655:465::-;14168:12;:10;:12::i;:::-;14158:22;;:6;;;;;;;;;;;:22;;;14150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23751:4:::1;23734:22;;:5;:22;;::::0;23726:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23848:3;23831:21;;:5;:21;;::::0;23827:127:::1;;23869:52;23899:21;23877:10;23869:29;;;;:52;;;;:::i;:::-;23936:7;;23827:127;23964:17;23991:5;23964:33;;24008:15;24026:10;:20;;;24055:4;24026:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24008:53;;24072:10;:19;;;24092:10;24104:7;24072:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23715:405;;14228:1;23655:465:::0;:::o;13354:98::-;13407:7;13434:10;13427:17;;13354:98;:::o;19125:380::-;19278:1;19261:19;;:5;:19;;;19253:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19359:1;19340:21;;:7;:21;;;19332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19443:6;19413:11;:18;19425:5;19413:18;;;;;;;;;;;;;;;:27;19432:7;19413:27;;;;;;;;;;;;;;;:36;;;;19481:7;19465:32;;19474:5;19465:32;;;19490:6;19465:32;;;;;;:::i;:::-;;;;;;;;19125:380;;;:::o;26067:2758::-;26180:1;26164:18;;:4;:18;;;26156:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26257:1;26243:16;;:2;:16;;;26235:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26318:14;;;;;;;;;;;:43;;;;26336:19;:25;26356:4;26336:25;;;;;;;;;;;;;;;;;;;;;;;;;26318:43;:70;;;;26365:19;:23;26385:2;26365:23;;;;;;;;;;;;;;;;;;;;;;;;;26318:70;26310:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;26451:1;26441:6;:11;26437:93;;26469:28;26485:4;26491:2;26495:1;26469:15;:28::i;:::-;26512:7;;26437:93;26546:26;;;;;;;;;;;26542:752;;;26612:13;;;;;;;;;;;26604:21;;:4;:21;;;:44;;;;26635:13;;;;;;;;;;;26629:19;;:2;:19;;;26604:44;26603:99;;;;;26671:25;:31;26697:4;26671:31;;;;;;;;;;;;;;;;;;;;;;;;;26670:32;26603:99;:151;;;;;26725:25;:29;26751:2;26725:29;;;;;;;;;;;;;;;;;;;;;;;;;26724:30;26603:151;26599:684;;;26801:13;;;;;;;;;;;26793:21;;:4;:21;;;26789:479;;26883:23;;26873:6;:33;;26839:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26789:479;;;27112:24;;27102:6;:34;;27068:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;26789:479;26599:684;26542:752;27300:28;27331:24;27349:4;27331:9;:24::i;:::-;27300:55;;27368:12;27407:18;;27383:20;:42;;27368:57;;27442:7;:33;;;;;27467:8;;;;;;;;;;;27466:9;27442:33;:69;;;;;27498:13;;;;;;;;;;;27492:19;;:2;:19;;;27442:69;:124;;;;;27565:1;27546:16;;27528:15;;:34;;;;:::i;:::-;:38;27442:124;:152;;;;;27583:11;;;;;;;;;;;27442:152;27438:294;;;27632:4;27621:8;;:15;;;;;;;;;;;;;;;;;;27653:34;27668:18;;27653:14;:34::i;:::-;27715:5;27704:8;;:16;;;;;;;;;;;;;;;;;;27438:294;27744:18;27777:19;:25;27797:4;27777:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27806:19;:23;27826:2;27806:23;;;;;;;;;;;;;;;;;;;;;;;;;27777:52;:64;;;;27833:8;;;;;;;;;;;27777:64;27773:333;;;27871:1;27858:14;;27773:333;;;27902:13;;;;;;;;;;;27894:21;;:4;:21;;;27890:216;;27945:15;;27932:28;;27890:216;;;27988:13;;;;;;;;;;;27982:19;;:2;:19;;;27978:128;;28031:16;;28018:29;;27978:128;;;28093:1;28080:14;;27978:128;27890:216;27773:333;28135:1;28122:10;:14;28118:183;;;28153:12;28192:3;28178:10;28169:6;:19;;;;:::i;:::-;28168:27;;;;:::i;:::-;28153:42;;28228:4;28219:6;:13;;;;:::i;:::-;28210:22;;28247:42;28263:4;28277;28284;28247:15;:42::i;:::-;28138:163;28118:183;28317:21;;;;;;;;;;;28313:459;;;28370:29;:35;28400:4;28370:35;;;;;;;;;;;;;;;;;;;;;;;;;28369:36;:92;;;;;28428:29;:33;28458:2;28428:33;;;;;;;;;;;;;;;;;;;;;;;;;28427:34;28369:92;:132;;;;;28488:13;;;;;;;;;;;28482:19;;:2;:19;;;;28369:132;28365:396;;;28536:15;28555:13;28565:2;28555:9;:13::i;:::-;28536:32;;28637:15;;28627:6;28617:7;:16;;;;:::i;:::-;:35;;28587:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:244;28365:396;28313:459;28784:33;28800:4;28806:2;28810:6;28784:15;:33::i;:::-;26145:2680;;;26067:2758;;;;:::o;9213:317::-;9328:6;9303:21;:31;;9295:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9382:12;9400:9;:14;;9422:6;9400:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9381:52;;;9452:7;9444:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;9284:246;9213:317;;:::o;17378:733::-;17536:1;17518:20;;:6;:20;;;17510:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17620:1;17599:23;;:9;:23;;;17591:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17675:47;17696:6;17704:9;17715:6;17675:20;:47::i;:::-;17735:21;17759:9;:17;17769:6;17759:17;;;;;;;;;;;;;;;;17735:41;;17812:6;17795:13;:23;;17787:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;17933:6;17917:13;:22;17897:9;:17;17907:6;17897:17;;;;;;;;;;;;;;;:42;;;;17985:6;17961:9;:20;17971:9;17961:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18026:9;18009:35;;18018:6;18009:35;;;18037:6;18009:35;;;;;;:::i;:::-;;;;;;;;18057:46;18077:6;18085:9;18096:6;18057:19;:46::i;:::-;17499:612;17378:733;;;:::o;29258:1354::-;29322:22;29347:21;29322:46;;29381:21;29419:1;29405:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29381:40;;29450:4;29432;29437:1;29432:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29476:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29466:4;29471:1;29466:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29511:15;;;;;;;;;;;:66;;;29592:11;29618:1;29634:4;29661;29681:15;29511:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29710:18;29755:14;29731:21;:38;;;;:::i;:::-;29710:59;;29780:24;29882:16;;29864:15;;:34;;;;:::i;:::-;29841:18;;29821:17;;:38;;;;:::i;:::-;29807:10;:53;;;;:::i;:::-;:92;;;;:::i;:::-;29780:119;;29910:19;29945:16;29932:10;:29;;;;:::i;:::-;29910:51;;29997:1;29978:16;:20;29974:104;;;30014:52;30049:16;30022:15;;;;;;;;;;;30014:34;;;;:52;;;;:::i;:::-;29974:104;30108:1;30094:11;:15;30090:458;;;30125:24;30166:1;30152:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30125:43;;30196:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30183:7;30191:1;30183:10;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;30254:42;30233:7;30241:1;30233:10;;;;;;;;:::i;:::-;;;;;;;:64;;;;;;;;;;;30314:15;;;;;;;;;;;:66;;;30388:11;30420:1;30440:7;30474:6;30518:3;30500:15;:21;;;;:::i;:::-;30314:222;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30110:438;30090:458;30565:39;30580:11;30593:10;30565:39;;;;;;;:::i;:::-;;;;;;;;29311:1301;;;;;29258:1354;:::o;19513:125::-;;;;:::o;19646:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:329::-;4830:6;4879:2;4867:9;4858:7;4854:23;4850:32;4847:119;;;4885:79;;:::i;:::-;4847:119;5005:1;5030:53;5075:7;5066:6;5055:9;5051:22;5030:53;:::i;:::-;5020:63;;4976:117;4771:329;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:116::-;5801:21;5816:5;5801:21;:::i;:::-;5794:5;5791:32;5781:60;;5837:1;5834;5827:12;5781:60;5731:116;:::o;5853:133::-;5896:5;5934:6;5921:20;5912:29;;5950:30;5974:5;5950:30;:::i;:::-;5853:133;;;;:::o;5992:323::-;6048:6;6097:2;6085:9;6076:7;6072:23;6068:32;6065:119;;;6103:79;;:::i;:::-;6065:119;6223:1;6248:50;6290:7;6281:6;6270:9;6266:22;6248:50;:::i;:::-;6238:60;;6194:114;5992:323;;;;:::o;6321:86::-;6356:7;6396:4;6389:5;6385:16;6374:27;;6321:86;;;:::o;6413:112::-;6496:22;6512:5;6496:22;:::i;:::-;6491:3;6484:35;6413:112;;:::o;6531:214::-;6620:4;6658:2;6647:9;6643:18;6635:26;;6671:67;6735:1;6724:9;6720:17;6711:6;6671:67;:::i;:::-;6531:214;;;;:::o;6751:619::-;6828:6;6836;6844;6893:2;6881:9;6872:7;6868:23;6864:32;6861:119;;;6899:79;;:::i;:::-;6861:119;7019:1;7044:53;7089:7;7080:6;7069:9;7065:22;7044:53;:::i;:::-;7034:63;;6990:117;7146:2;7172:53;7217:7;7208:6;7197:9;7193:22;7172:53;:::i;:::-;7162:63;;7117:118;7274:2;7300:53;7345:7;7336:6;7325:9;7321:22;7300:53;:::i;:::-;7290:63;;7245:118;6751:619;;;;;:::o;7376:118::-;7463:24;7481:5;7463:24;:::i;:::-;7458:3;7451:37;7376:118;;:::o;7500:222::-;7593:4;7631:2;7620:9;7616:18;7608:26;;7644:71;7712:1;7701:9;7697:17;7688:6;7644:71;:::i;:::-;7500:222;;;;:::o;7728:468::-;7793:6;7801;7850:2;7838:9;7829:7;7825:23;7821:32;7818:119;;;7856:79;;:::i;:::-;7818:119;7976:1;8001:53;8046:7;8037:6;8026:9;8022:22;8001:53;:::i;:::-;7991:63;;7947:117;8103:2;8129:50;8171:7;8162:6;8151:9;8147:22;8129:50;:::i;:::-;8119:60;;8074:115;7728:468;;;;;:::o;8202:329::-;8261:6;8310:2;8298:9;8289:7;8285:23;8281:32;8278:119;;;8316:79;;:::i;:::-;8278:119;8436:1;8461:53;8506:7;8497:6;8486:9;8482:22;8461:53;:::i;:::-;8451:63;;8407:117;8202:329;;;;:::o;8537:765::-;8623:6;8631;8639;8647;8696:3;8684:9;8675:7;8671:23;8667:33;8664:120;;;8703:79;;:::i;:::-;8664:120;8823:1;8848:53;8893:7;8884:6;8873:9;8869:22;8848:53;:::i;:::-;8838:63;;8794:117;8950:2;8976:53;9021:7;9012:6;9001:9;8997:22;8976:53;:::i;:::-;8966:63;;8921:118;9078:2;9104:53;9149:7;9140:6;9129:9;9125:22;9104:53;:::i;:::-;9094:63;;9049:118;9206:2;9232:53;9277:7;9268:6;9257:9;9253:22;9232:53;:::i;:::-;9222:63;;9177:118;8537:765;;;;;;;:::o;9308:474::-;9376:6;9384;9433:2;9421:9;9412:7;9408:23;9404:32;9401:119;;;9439:79;;:::i;:::-;9401:119;9559:1;9584:53;9629:7;9620:6;9609:9;9605:22;9584:53;:::i;:::-;9574:63;;9530:117;9686:2;9712:53;9757:7;9748:6;9737:9;9733:22;9712:53;:::i;:::-;9702:63;;9657:118;9308:474;;;;;:::o;9788:180::-;9836:77;9833:1;9826:88;9933:4;9930:1;9923:15;9957:4;9954:1;9947:15;9974:320;10018:6;10055:1;10049:4;10045:12;10035:22;;10102:1;10096:4;10092:12;10123:18;10113:81;;10179:4;10171:6;10167:17;10157:27;;10113:81;10241:2;10233:6;10230:14;10210:18;10207:38;10204:84;;10260:18;;:::i;:::-;10204:84;10025:269;9974:320;;;:::o;10300:227::-;10440:34;10436:1;10428:6;10424:14;10417:58;10509:10;10504:2;10496:6;10492:15;10485:35;10300:227;:::o;10533:366::-;10675:3;10696:67;10760:2;10755:3;10696:67;:::i;:::-;10689:74;;10772:93;10861:3;10772:93;:::i;:::-;10890:2;10885:3;10881:12;10874:19;;10533:366;;;:::o;10905:419::-;11071:4;11109:2;11098:9;11094:18;11086:26;;11158:9;11152:4;11148:20;11144:1;11133:9;11129:17;11122:47;11186:131;11312:4;11186:131;:::i;:::-;11178:139;;10905:419;;;:::o;11330:182::-;11470:34;11466:1;11458:6;11454:14;11447:58;11330:182;:::o;11518:366::-;11660:3;11681:67;11745:2;11740:3;11681:67;:::i;:::-;11674:74;;11757:93;11846:3;11757:93;:::i;:::-;11875:2;11870:3;11866:12;11859:19;;11518:366;;;:::o;11890:419::-;12056:4;12094:2;12083:9;12079:18;12071:26;;12143:9;12137:4;12133:20;12129:1;12118:9;12114:17;12107:47;12171:131;12297:4;12171:131;:::i;:::-;12163:139;;11890:419;;;:::o;12315:232::-;12455:34;12451:1;12443:6;12439:14;12432:58;12524:15;12519:2;12511:6;12507:15;12500:40;12315:232;:::o;12553:366::-;12695:3;12716:67;12780:2;12775:3;12716:67;:::i;:::-;12709:74;;12792:93;12881:3;12792:93;:::i;:::-;12910:2;12905:3;12901:12;12894:19;;12553:366;;;:::o;12925:419::-;13091:4;13129:2;13118:9;13114:18;13106:26;;13178:9;13172:4;13168:20;13164:1;13153:9;13149:17;13142:47;13206:131;13332:4;13206:131;:::i;:::-;13198:139;;12925:419;;;:::o;13350:180::-;13398:77;13395:1;13388:88;13495:4;13492:1;13485:15;13519:4;13516:1;13509:15;13536:102;13578:8;13625:5;13622:1;13618:13;13597:34;;13536:102;;;:::o;13644:848::-;13705:5;13712:4;13736:6;13727:15;;13760:5;13751:14;;13774:712;13795:1;13785:8;13782:15;13774:712;;;13890:4;13885:3;13881:14;13875:4;13872:24;13869:50;;;13899:18;;:::i;:::-;13869:50;13949:1;13939:8;13935:16;13932:451;;;14364:4;14357:5;14353:16;14344:25;;13932:451;14414:4;14408;14404:15;14396:23;;14444:32;14467:8;14444:32;:::i;:::-;14432:44;;13774:712;;;13644:848;;;;;;;:::o;14498:1073::-;14552:5;14743:8;14733:40;;14764:1;14755:10;;14766:5;;14733:40;14792:4;14782:36;;14809:1;14800:10;;14811:5;;14782:36;14878:4;14926:1;14921:27;;;;14962:1;14957:191;;;;14871:277;;14921:27;14939:1;14930:10;;14941:5;;;14957:191;15002:3;14992:8;14989:17;14986:43;;;15009:18;;:::i;:::-;14986:43;15058:8;15055:1;15051:16;15042:25;;15093:3;15086:5;15083:14;15080:40;;;15100:18;;:::i;:::-;15080:40;15133:5;;;14871:277;;15257:2;15247:8;15244:16;15238:3;15232:4;15229:13;15225:36;15207:2;15197:8;15194:16;15189:2;15183:4;15180:12;15176:35;15160:111;15157:246;;;15313:8;15307:4;15303:19;15294:28;;15348:3;15341:5;15338:14;15335:40;;;15355:18;;:::i;:::-;15335:40;15388:5;;15157:246;15428:42;15466:3;15456:8;15450:4;15447:1;15428:42;:::i;:::-;15413:57;;;;15502:4;15497:3;15493:14;15486:5;15483:25;15480:51;;;15511:18;;:::i;:::-;15480:51;15560:4;15553:5;15549:16;15540:25;;14498:1073;;;;;;:::o;15577:281::-;15635:5;15659:23;15677:4;15659:23;:::i;:::-;15651:31;;15703:25;15719:8;15703:25;:::i;:::-;15691:37;;15747:104;15784:66;15774:8;15768:4;15747:104;:::i;:::-;15738:113;;15577:281;;;;:::o;15864:180::-;15912:77;15909:1;15902:88;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16050:185;16090:1;16107:20;16125:1;16107:20;:::i;:::-;16102:25;;16141:20;16159:1;16141:20;:::i;:::-;16136:25;;16180:1;16170:35;;16185:18;;:::i;:::-;16170:35;16227:1;16224;16220:9;16215:14;;16050:185;;;;:::o;16241:250::-;16381:34;16377:1;16369:6;16365:14;16358:58;16450:33;16445:2;16437:6;16433:15;16426:58;16241:250;:::o;16497:366::-;16639:3;16660:67;16724:2;16719:3;16660:67;:::i;:::-;16653:74;;16736:93;16825:3;16736:93;:::i;:::-;16854:2;16849:3;16845:12;16838:19;;16497:366;;;:::o;16869:419::-;17035:4;17073:2;17062:9;17058:18;17050:26;;17122:9;17116:4;17112:20;17108:1;17097:9;17093:17;17086:47;17150:131;17276:4;17150:131;:::i;:::-;17142:139;;16869:419;;;:::o;17294:410::-;17334:7;17357:20;17375:1;17357:20;:::i;:::-;17352:25;;17391:20;17409:1;17391:20;:::i;:::-;17386:25;;17446:1;17443;17439:9;17468:30;17486:11;17468:30;:::i;:::-;17457:41;;17647:1;17638:7;17634:15;17631:1;17628:22;17608:1;17601:9;17581:83;17558:139;;17677:18;;:::i;:::-;17558:139;17342:362;17294:410;;;;:::o;17710:232::-;17850:34;17846:1;17838:6;17834:14;17827:58;17919:15;17914:2;17906:6;17902:15;17895:40;17710:232;:::o;17948:366::-;18090:3;18111:67;18175:2;18170:3;18111:67;:::i;:::-;18104:74;;18187:93;18276:3;18187:93;:::i;:::-;18305:2;18300:3;18296:12;18289:19;;17948:366;;;:::o;18320:419::-;18486:4;18524:2;18513:9;18509:18;18501:26;;18573:9;18567:4;18563:20;18559:1;18548:9;18544:17;18537:47;18601:131;18727:4;18601:131;:::i;:::-;18593:139;;18320:419;;;:::o;18745:332::-;18866:4;18904:2;18893:9;18889:18;18881:26;;18917:71;18985:1;18974:9;18970:17;18961:6;18917:71;:::i;:::-;18998:72;19066:2;19055:9;19051:18;19042:6;18998:72;:::i;:::-;18745:332;;;;;:::o;19083:191::-;19123:3;19142:20;19160:1;19142:20;:::i;:::-;19137:25;;19176:20;19194:1;19176:20;:::i;:::-;19171:25;;19219:1;19216;19212:9;19205:16;;19240:3;19237:1;19234:10;19231:36;;;19247:18;;:::i;:::-;19231:36;19083:191;;;;:::o;19280:237::-;19420:34;19416:1;19408:6;19404:14;19397:58;19489:20;19484:2;19476:6;19472:15;19465:45;19280:237;:::o;19523:366::-;19665:3;19686:67;19750:2;19745:3;19686:67;:::i;:::-;19679:74;;19762:93;19851:3;19762:93;:::i;:::-;19880:2;19875:3;19871:12;19864:19;;19523:366;;;:::o;19895:419::-;20061:4;20099:2;20088:9;20084:18;20076:26;;20148:9;20142:4;20138:20;20134:1;20123:9;20119:17;20112:47;20176:131;20302:4;20176:131;:::i;:::-;20168:139;;19895:419;;;:::o;20320:223::-;20460:34;20456:1;20448:6;20444:14;20437:58;20529:6;20524:2;20516:6;20512:15;20505:31;20320:223;:::o;20549:366::-;20691:3;20712:67;20776:2;20771:3;20712:67;:::i;:::-;20705:74;;20788:93;20877:3;20788:93;:::i;:::-;20906:2;20901:3;20897:12;20890:19;;20549:366;;;:::o;20921:419::-;21087:4;21125:2;21114:9;21110:18;21102:26;;21174:9;21168:4;21164:20;21160:1;21149:9;21145:17;21138:47;21202:131;21328:4;21202:131;:::i;:::-;21194:139;;20921:419;;;:::o;21346:224::-;21486:34;21482:1;21474:6;21470:14;21463:58;21555:7;21550:2;21542:6;21538:15;21531:32;21346:224;:::o;21576:366::-;21718:3;21739:67;21803:2;21798:3;21739:67;:::i;:::-;21732:74;;21815:93;21904:3;21815:93;:::i;:::-;21933:2;21928:3;21924:12;21917:19;;21576:366;;;:::o;21948:419::-;22114:4;22152:2;22141:9;22137:18;22129:26;;22201:9;22195:4;22191:20;22187:1;22176:9;22172:17;22165:47;22229:131;22355:4;22229:131;:::i;:::-;22221:139;;21948:419;;;:::o;22373:227::-;22513:34;22509:1;22501:6;22497:14;22490:58;22582:10;22577:2;22569:6;22565:15;22558:35;22373:227;:::o;22606:366::-;22748:3;22769:67;22833:2;22828:3;22769:67;:::i;:::-;22762:74;;22845:93;22934:3;22845:93;:::i;:::-;22963:2;22958:3;22954:12;22947:19;;22606:366;;;:::o;22978:419::-;23144:4;23182:2;23171:9;23167:18;23159:26;;23231:9;23225:4;23221:20;23217:1;23206:9;23202:17;23195:47;23259:131;23385:4;23259:131;:::i;:::-;23251:139;;22978:419;;;:::o;23403:230::-;23543:34;23539:1;23531:6;23527:14;23520:58;23612:13;23607:2;23599:6;23595:15;23588:38;23403:230;:::o;23639:366::-;23781:3;23802:67;23866:2;23861:3;23802:67;:::i;:::-;23795:74;;23878:93;23967:3;23878:93;:::i;:::-;23996:2;23991:3;23987:12;23980:19;;23639:366;;;:::o;24011:419::-;24177:4;24215:2;24204:9;24200:18;24192:26;;24264:9;24258:4;24254:20;24250:1;24239:9;24235:17;24228:47;24292:131;24418:4;24292:131;:::i;:::-;24284:139;;24011:419;;;:::o;24436:229::-;24576:34;24572:1;24564:6;24560:14;24553:58;24645:12;24640:2;24632:6;24628:15;24621:37;24436:229;:::o;24671:366::-;24813:3;24834:67;24898:2;24893:3;24834:67;:::i;:::-;24827:74;;24910:93;24999:3;24910:93;:::i;:::-;25028:2;25023:3;25019:12;25012:19;;24671:366;;;:::o;25043:419::-;25209:4;25247:2;25236:9;25232:18;25224:26;;25296:9;25290:4;25286:20;25282:1;25271:9;25267:17;25260:47;25324:131;25450:4;25324:131;:::i;:::-;25316:139;;25043:419;;;:::o;25468:223::-;25608:34;25604:1;25596:6;25592:14;25585:58;25677:6;25672:2;25664:6;25660:15;25653:31;25468:223;:::o;25697:366::-;25839:3;25860:67;25924:2;25919:3;25860:67;:::i;:::-;25853:74;;25936:93;26025:3;25936:93;:::i;:::-;26054:2;26049:3;26045:12;26038:19;;25697:366;;;:::o;26069:419::-;26235:4;26273:2;26262:9;26258:18;26250:26;;26322:9;26316:4;26312:20;26308:1;26297:9;26293:17;26286:47;26350:131;26476:4;26350:131;:::i;:::-;26342:139;;26069:419;;;:::o;26494:225::-;26634:34;26630:1;26622:6;26618:14;26611:58;26703:8;26698:2;26690:6;26686:15;26679:33;26494:225;:::o;26725:366::-;26867:3;26888:67;26952:2;26947:3;26888:67;:::i;:::-;26881:74;;26964:93;27053:3;26964:93;:::i;:::-;27082:2;27077:3;27073:12;27066:19;;26725:366;;;:::o;27097:419::-;27263:4;27301:2;27290:9;27286:18;27278:26;;27350:9;27344:4;27340:20;27336:1;27325:9;27321:17;27314:47;27378:131;27504:4;27378:131;:::i;:::-;27370:139;;27097:419;;;:::o;27522:242::-;27662:34;27658:1;27650:6;27646:14;27639:58;27731:25;27726:2;27718:6;27714:15;27707:50;27522:242;:::o;27770:366::-;27912:3;27933:67;27997:2;27992:3;27933:67;:::i;:::-;27926:74;;28009:93;28098:3;28009:93;:::i;:::-;28127:2;28122:3;28118:12;28111:19;;27770:366;;;:::o;28142:419::-;28308:4;28346:2;28335:9;28331:18;28323:26;;28395:9;28389:4;28385:20;28381:1;28370:9;28366:17;28359:47;28423:131;28549:4;28423:131;:::i;:::-;28415:139;;28142:419;;;:::o;28567:143::-;28624:5;28655:6;28649:13;28640:22;;28671:33;28698:5;28671:33;:::i;:::-;28567:143;;;;:::o;28716:351::-;28786:6;28835:2;28823:9;28814:7;28810:23;28806:32;28803:119;;;28841:79;;:::i;:::-;28803:119;28961:1;28986:64;29042:7;29033:6;29022:9;29018:22;28986:64;:::i;:::-;28976:74;;28932:128;28716:351;;;;:::o;29073:332::-;29194:4;29232:2;29221:9;29217:18;29209:26;;29245:71;29313:1;29302:9;29298:17;29289:6;29245:71;:::i;:::-;29326:72;29394:2;29383:9;29379:18;29370:6;29326:72;:::i;:::-;29073:332;;;;;:::o;29411:137::-;29465:5;29496:6;29490:13;29481:22;;29512:30;29536:5;29512:30;:::i;:::-;29411:137;;;;:::o;29554:345::-;29621:6;29670:2;29658:9;29649:7;29645:23;29641:32;29638:119;;;29676:79;;:::i;:::-;29638:119;29796:1;29821:61;29874:7;29865:6;29854:9;29850:22;29821:61;:::i;:::-;29811:71;;29767:125;29554:345;;;;:::o;29905:223::-;30045:34;30041:1;30033:6;30029:14;30022:58;30114:6;30109:2;30101:6;30097:15;30090:31;29905:223;:::o;30134:366::-;30276:3;30297:67;30361:2;30356:3;30297:67;:::i;:::-;30290:74;;30373:93;30462:3;30373:93;:::i;:::-;30491:2;30486:3;30482:12;30475:19;;30134:366;;;:::o;30506:419::-;30672:4;30710:2;30699:9;30695:18;30687:26;;30759:9;30753:4;30749:20;30745:1;30734:9;30730:17;30723:47;30787:131;30913:4;30787:131;:::i;:::-;30779:139;;30506:419;;;:::o;30931:221::-;31071:34;31067:1;31059:6;31055:14;31048:58;31140:4;31135:2;31127:6;31123:15;31116:29;30931:221;:::o;31158:366::-;31300:3;31321:67;31385:2;31380:3;31321:67;:::i;:::-;31314:74;;31397:93;31486:3;31397:93;:::i;:::-;31515:2;31510:3;31506:12;31499:19;;31158:366;;;:::o;31530:419::-;31696:4;31734:2;31723:9;31719:18;31711:26;;31783:9;31777:4;31773:20;31769:1;31758:9;31754:17;31747:47;31811:131;31937:4;31811:131;:::i;:::-;31803:139;;31530:419;;;:::o;31955:224::-;32095:34;32091:1;32083:6;32079:14;32072:58;32164:7;32159:2;32151:6;32147:15;32140:32;31955:224;:::o;32185:366::-;32327:3;32348:67;32412:2;32407:3;32348:67;:::i;:::-;32341:74;;32424:93;32513:3;32424:93;:::i;:::-;32542:2;32537:3;32533:12;32526:19;;32185:366;;;:::o;32557:419::-;32723:4;32761:2;32750:9;32746:18;32738:26;;32810:9;32804:4;32800:20;32796:1;32785:9;32781:17;32774:47;32838:131;32964:4;32838:131;:::i;:::-;32830:139;;32557:419;;;:::o;32982:222::-;33122:34;33118:1;33110:6;33106:14;33099:58;33191:5;33186:2;33178:6;33174:15;33167:30;32982:222;:::o;33210:366::-;33352:3;33373:67;33437:2;33432:3;33373:67;:::i;:::-;33366:74;;33449:93;33538:3;33449:93;:::i;:::-;33567:2;33562:3;33558:12;33551:19;;33210:366;;;:::o;33582:419::-;33748:4;33786:2;33775:9;33771:18;33763:26;;33835:9;33829:4;33825:20;33821:1;33810:9;33806:17;33799:47;33863:131;33989:4;33863:131;:::i;:::-;33855:139;;33582:419;;;:::o;34007:174::-;34147:26;34143:1;34135:6;34131:14;34124:50;34007:174;:::o;34187:366::-;34329:3;34350:67;34414:2;34409:3;34350:67;:::i;:::-;34343:74;;34426:93;34515:3;34426:93;:::i;:::-;34544:2;34539:3;34535:12;34528:19;;34187:366;;;:::o;34559:419::-;34725:4;34763:2;34752:9;34748:18;34740:26;;34812:9;34806:4;34802:20;34798:1;34787:9;34783:17;34776:47;34840:131;34966:4;34840:131;:::i;:::-;34832:139;;34559:419;;;:::o;34984:246::-;35124:34;35120:1;35112:6;35108:14;35101:58;35193:29;35188:2;35180:6;35176:15;35169:54;34984:246;:::o;35236:366::-;35378:3;35399:67;35463:2;35458:3;35399:67;:::i;:::-;35392:74;;35475:93;35564:3;35475:93;:::i;:::-;35593:2;35588:3;35584:12;35577:19;;35236:366;;;:::o;35608:419::-;35774:4;35812:2;35801:9;35797:18;35789:26;;35861:9;35855:4;35851:20;35847:1;35836:9;35832:17;35825:47;35889:131;36015:4;35889:131;:::i;:::-;35881:139;;35608:419;;;:::o;36033:194::-;36073:4;36093:20;36111:1;36093:20;:::i;:::-;36088:25;;36127:20;36145:1;36127:20;:::i;:::-;36122:25;;36171:1;36168;36164:9;36156:17;;36195:1;36189:4;36186:11;36183:37;;;36200:18;;:::i;:::-;36183:37;36033:194;;;;:::o;36233:235::-;36373:34;36369:1;36361:6;36357:14;36350:58;36442:18;36437:2;36429:6;36425:15;36418:43;36233:235;:::o;36474:366::-;36616:3;36637:67;36701:2;36696:3;36637:67;:::i;:::-;36630:74;;36713:93;36802:3;36713:93;:::i;:::-;36831:2;36826:3;36822:12;36815:19;;36474:366;;;:::o;36846:419::-;37012:4;37050:2;37039:9;37035:18;37027:26;;37099:9;37093:4;37089:20;37085:1;37074:9;37070:17;37063:47;37127:131;37253:4;37127:131;:::i;:::-;37119:139;;36846:419;;;:::o;37271:179::-;37411:31;37407:1;37399:6;37395:14;37388:55;37271:179;:::o;37456:366::-;37598:3;37619:67;37683:2;37678:3;37619:67;:::i;:::-;37612:74;;37695:93;37784:3;37695:93;:::i;:::-;37813:2;37808:3;37804:12;37797:19;;37456:366;;;:::o;37828:419::-;37994:4;38032:2;38021:9;38017:18;38009:26;;38081:9;38075:4;38071:20;38067:1;38056:9;38052:17;38045:47;38109:131;38235:4;38109:131;:::i;:::-;38101:139;;37828:419;;;:::o;38253:147::-;38354:11;38391:3;38376:18;;38253:147;;;;:::o;38406:114::-;;:::o;38526:398::-;38685:3;38706:83;38787:1;38782:3;38706:83;:::i;:::-;38699:90;;38798:93;38887:3;38798:93;:::i;:::-;38916:1;38911:3;38907:11;38900:18;;38526:398;;;:::o;38930:379::-;39114:3;39136:147;39279:3;39136:147;:::i;:::-;39129:154;;39300:3;39293:10;;38930:379;;;:::o;39315:245::-;39455:34;39451:1;39443:6;39439:14;39432:58;39524:28;39519:2;39511:6;39507:15;39500:53;39315:245;:::o;39566:366::-;39708:3;39729:67;39793:2;39788:3;39729:67;:::i;:::-;39722:74;;39805:93;39894:3;39805:93;:::i;:::-;39923:2;39918:3;39914:12;39907:19;;39566:366;;;:::o;39938:419::-;40104:4;40142:2;40131:9;40127:18;40119:26;;40191:9;40185:4;40181:20;40177:1;40166:9;40162:17;40155:47;40219:131;40345:4;40219:131;:::i;:::-;40211:139;;39938:419;;;:::o;40363:225::-;40503:34;40499:1;40491:6;40487:14;40480:58;40572:8;40567:2;40559:6;40555:15;40548:33;40363:225;:::o;40594:366::-;40736:3;40757:67;40821:2;40816:3;40757:67;:::i;:::-;40750:74;;40833:93;40922:3;40833:93;:::i;:::-;40951:2;40946:3;40942:12;40935:19;;40594:366;;;:::o;40966:419::-;41132:4;41170:2;41159:9;41155:18;41147:26;;41219:9;41213:4;41209:20;41205:1;41194:9;41190:17;41183:47;41247:131;41373:4;41247:131;:::i;:::-;41239:139;;40966:419;;;:::o;41391:180::-;41439:77;41436:1;41429:88;41536:4;41533:1;41526:15;41560:4;41557:1;41550:15;41577:180;41625:77;41622:1;41615:88;41722:4;41719:1;41712:15;41746:4;41743:1;41736:15;41763:143;41820:5;41851:6;41845:13;41836:22;;41867:33;41894:5;41867:33;:::i;:::-;41763:143;;;;:::o;41912:351::-;41982:6;42031:2;42019:9;42010:7;42006:23;42002:32;41999:119;;;42037:79;;:::i;:::-;41999:119;42157:1;42182:64;42238:7;42229:6;42218:9;42214:22;42182:64;:::i;:::-;42172:74;;42128:128;41912:351;;;;:::o;42269:85::-;42314:7;42343:5;42332:16;;42269:85;;;:::o;42360:158::-;42418:9;42451:61;42469:42;42478:32;42504:5;42478:32;:::i;:::-;42469:42;:::i;:::-;42451:61;:::i;:::-;42438:74;;42360:158;;;:::o;42524:147::-;42619:45;42658:5;42619:45;:::i;:::-;42614:3;42607:58;42524:147;;:::o;42677:114::-;42744:6;42778:5;42772:12;42762:22;;42677:114;;;:::o;42797:184::-;42896:11;42930:6;42925:3;42918:19;42970:4;42965:3;42961:14;42946:29;;42797:184;;;;:::o;42987:132::-;43054:4;43077:3;43069:11;;43107:4;43102:3;43098:14;43090:22;;42987:132;;;:::o;43125:108::-;43202:24;43220:5;43202:24;:::i;:::-;43197:3;43190:37;43125:108;;:::o;43239:179::-;43308:10;43329:46;43371:3;43363:6;43329:46;:::i;:::-;43407:4;43402:3;43398:14;43384:28;;43239:179;;;;:::o;43424:113::-;43494:4;43526;43521:3;43517:14;43509:22;;43424:113;;;:::o;43573:732::-;43692:3;43721:54;43769:5;43721:54;:::i;:::-;43791:86;43870:6;43865:3;43791:86;:::i;:::-;43784:93;;43901:56;43951:5;43901:56;:::i;:::-;43980:7;44011:1;43996:284;44021:6;44018:1;44015:13;43996:284;;;44097:6;44091:13;44124:63;44183:3;44168:13;44124:63;:::i;:::-;44117:70;;44210:60;44263:6;44210:60;:::i;:::-;44200:70;;44056:224;44043:1;44040;44036:9;44031:14;;43996:284;;;44000:14;44296:3;44289:10;;43697:608;;;43573:732;;;;:::o;44311:831::-;44574:4;44612:3;44601:9;44597:19;44589:27;;44626:71;44694:1;44683:9;44679:17;44670:6;44626:71;:::i;:::-;44707:80;44783:2;44772:9;44768:18;44759:6;44707:80;:::i;:::-;44834:9;44828:4;44824:20;44819:2;44808:9;44804:18;44797:48;44862:108;44965:4;44956:6;44862:108;:::i;:::-;44854:116;;44980:72;45048:2;45037:9;45033:18;45024:6;44980:72;:::i;:::-;45062:73;45130:3;45119:9;45115:19;45106:6;45062:73;:::i;:::-;44311:831;;;;;;;;:::o;45148:720::-;45383:4;45421:3;45410:9;45406:19;45398:27;;45435:79;45511:1;45500:9;45496:17;45487:6;45435:79;:::i;:::-;45561:9;45555:4;45551:20;45546:2;45535:9;45531:18;45524:48;45589:108;45692:4;45683:6;45589:108;:::i;:::-;45581:116;;45707:72;45775:2;45764:9;45760:18;45751:6;45707:72;:::i;:::-;45789;45857:2;45846:9;45842:18;45833:6;45789:72;:::i;:::-;45148:720;;;;;;;:::o

Swarm Source

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