ETH Price: $2,531.15 (-0.01%)
Gas: 1.2 Gwei

Token

LARRY V2 (LARRY.V2)
 

Overview

Max Total Supply

44,000,000,000 LARRY.V2

Holders

240

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
56,381,674.962541125 LARRY.V2

Value
$0.00
0x85c55a2a719674e99e6d9645f60f905cb931aac7
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:
LARRYV2

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-20
*/

/**

Web: https://larryv2.com/

Socials: 
https://twitter.com/Larry_ether
https://t.me/LARRY_Entry

Medium:
https://medium.com/@LARRYV2/larry-v2-c69619e2465



*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

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

  /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */

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 IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint
    );

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */

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

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) {
                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 {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
    // solhint-disable-next-line func-name-mixedcase
    
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

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

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 to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            _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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

contract LARRYV2 is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public maxWalletLimit;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateMaxWalletLimit(uint256 maxWalletLimit);
      event UpdateExcludeFromMaxWalletLimit(
        address indexed account,
        bool isExcluded
    );
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("LARRY V2", "LARRY.V2") {
        _mint(owner(), 44_000_000_000 * (10 ** 18));

        liquidityTaxBuy = 0;
        liquidityTaxSell = 0;

        marketingTaxBuy = 200;
        marketingTaxSell = 1000;

        denominator = 10_000;

        marketingWallet = 0xc02E77eCe604d5c8D882AEf51023934e25Ef7241;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

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

        maxWalletLimit = 200;

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[address(owner())] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Pair)] = true;

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

    receive() external payable {}

    fallback() external payable {}

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

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 4_000,
            "Buy Tax cannot be more than 10%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 4_000,
            "Sell Tax cannot be more than 10%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

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

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setMaxWalletLimit(uint256 amount) external onlyOwner {
        require(
            maxWalletLimit != amount,
            "maxWalletLimit already on that amount"
        );
        require(
            amount >= 10 && amount <= 10_000,
            "maxWalletLimit cannot be below 0.1% of totalSupply (10) or more than 100% of totalSupply (10000)"
        );

        maxWalletLimit = amount;

        emit UpdateMaxWalletLimit(amount);
    }


    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

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

        emit UpdateExcludeFromFees(account, excluded);
    }

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

    function setExcludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            account != address(this),
            "State of this contract address cannot be modified"
        );
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        require(account != address(uniswapV2Pair), "Cannot set this pair");

        _isExcludedFromMaxWalletLimit[account] = excluded;

        emit UpdateExcludeFromMaxWalletLimit(account, excluded);
    }

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityTokenAmount + marketingTokenAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

         if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    balanceOf(to) + amount <=
                        (totalSupply() * maxWalletLimit) / denominator,
                    "Balance of to user cannot more than wallet limit"
                );
            }
        

        if (takeFee) {
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempLiquidityAmount + tempMarketingAmount;

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

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

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = liquidityTokenAmount + marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax;
        uint256 liquifyBNB = newBalance - marketingBNB;

        if (liquifyToken > 0 && liquifyBNB > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyBNB}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }

        if (marketingBNB > 0) {
            sendBNB(marketingWallet, marketingBNB);
        }

        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"UpdateMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":"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":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","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":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040518060400160405280600881526020017f4c415252592056320000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4c415252592e56320000000000000000000000000000000000000000000000008152506200009e620000926200077b60201b60201c565b6200078360201b60201c565b600180819055508160059081620000b6919062000efe565b508060069081620000c8919062000efe565b505050620000f8620000df6200084760201b60201c565b6b8e2bf26b77d60a77e00000006200087060201b60201c565b6000600781905550600060088190555060c86009819055506103e8600a819055506127106080818152505073c02e77ece604d5c8d882aef51023934e25ef7241600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a06200018c620009de60201b60201c565b62000198919062001043565b600e819055506001600f60006101000a81548160ff0219169083151502179055506000620001cb620009e860201b60201c565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002759190620010e5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003059190620010e5565b6040518363ffffffff1660e01b81526004016200032492919062001128565b6020604051808303816000875af115801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a9190620010e5565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d23060a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000aa960201b60201c565b60c860108190555060016011600060c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160136000620004a46200084760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016013600060c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000620006716200084760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001409565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d990620011b6565b60405180910390fd5b620008f66000838362000c7a60201b60201c565b80600460008282546200090a9190620011d8565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009be919062001224565b60405180910390a3620009da6000838362000c7f60201b60201c565b5050565b6000600454905090565b60006038460362000a10577310ed43c718714eb63d5aa57b78b54704e256024e905062000aa6565b6061460362000a365773d99d1c33f9fc3444f8101754abc46c52416550d1905062000aa6565b600146148062000a465750600546145b1562000a6957737a250d5630b4cf539739df2c5dacb4c659f2488d905062000aa6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9d90620012b7565b60405180910390fd5b90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b12906200134f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8490620013e7565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c6d919062001224565b60405180910390a3505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d0657607f821691505b60208210810362000d1c5762000d1b62000cbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d47565b62000d92868362000d47565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ddf62000dd962000dd38462000daa565b62000db4565b62000daa565b9050919050565b6000819050919050565b62000dfb8362000dbe565b62000e1362000e0a8262000de6565b84845462000d54565b825550505050565b600090565b62000e2a62000e1b565b62000e3781848462000df0565b505050565b5b8181101562000e5f5762000e5360008262000e20565b60018101905062000e3d565b5050565b601f82111562000eae5762000e788162000d22565b62000e838462000d37565b8101602085101562000e93578190505b62000eab62000ea28562000d37565b83018262000e3c565b50505b505050565b600082821c905092915050565b600062000ed36000198460080262000eb3565b1980831691505092915050565b600062000eee838362000ec0565b9150826002028217905092915050565b62000f098262000c84565b67ffffffffffffffff81111562000f255762000f2462000c8f565b5b62000f31825462000ced565b62000f3e82828562000e63565b600060209050601f83116001811462000f76576000841562000f61578287015190505b62000f6d858262000ee0565b86555062000fdd565b601f19841662000f868662000d22565b60005b8281101562000fb05784890151825560018201915060208501945060208101905062000f89565b8683101562000fd0578489015162000fcc601f89168262000ec0565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010508262000daa565b91506200105d8362000daa565b92508262001070576200106f62000fe5565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010ad8262001080565b9050919050565b620010bf81620010a0565b8114620010cb57600080fd5b50565b600081519050620010df81620010b4565b92915050565b600060208284031215620010fe57620010fd6200107b565b5b60006200110e84828501620010ce565b91505092915050565b6200112281620010a0565b82525050565b60006040820190506200113f600083018562001117565b6200114e602083018462001117565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200119e601f8362001155565b9150620011ab8262001166565b602082019050919050565b60006020820190508181036000830152620011d1816200118f565b9050919050565b6000620011e58262000daa565b9150620011f28362000daa565b92508282019050808211156200120d576200120c62001014565b5b92915050565b6200121e8162000daa565b82525050565b60006020820190506200123b600083018462001213565b92915050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b60006200129f60238362001155565b9150620012ac8262001241565b604082019050919050565b60006020820190508181036000830152620012d28162001290565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200133760248362001155565b91506200134482620012d9565b604082019050919050565b600060208201905081810360008301526200136a8162001328565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620013cf60228362001155565b9150620013dc8262001371565b604082019050919050565b600060208201905081810360008301526200140281620013c0565b9050919050565b60805160a05160c051614d6e6200147f60003960008181610de30152818161137a015261162a015260008181610b940152818161272c0152818161287f015261296101526000818161156c0152818161239e0152818161248f015281816124ca0152818161255c01526125970152614d6e6000f3fe6080604052600436106102555760003560e01c806371afc713116101395780639a7a23d6116100b6578063d54f7d5e1161007a578063d54f7d5e146108d4578063d63cad22146108ff578063dd62ed3e14610928578063e2f4560514610965578063f2fde38b14610990578063f9d0831a146109b95761025c565b80639a7a23d6146107cb578063a457c2d7146107f4578063a8a69b9d14610831578063a9059cbb1461086e578063afa4f3b2146108ab5761025c565b80638123bdc8116100fd5780638123bdc8146106f65780638a96082e146107215780638da5cb5b1461074a57806395d89b411461077557806396ce0795146107a05761025c565b806371afc7131461060f578063721e62331461063a578063728d41c91461066557806375f0a8741461068e5780637949a403146106b95761025c565b8063313ce567116101d257806352dfc8d01161019657806352dfc8d0146105255780635d098b381461055057806366a88d961461057957806366eb3785146105a457806370a08231146105bb578063715018a6146105f85761025c565b8063313ce5671461042a578063395093511461045557806342d0b0bc1461049257806349bd5a5e146104bd5780634fbee193146104e85761025c565b806318160ddd1161021957806318160ddd146103455780631f88a23e1461037057806323b872dd14610399578063247b912d146103d6578063248ba7ed146103ff5761025c565b806305a1f36d1461025e57806306fdde0314610287578063095ea7b3146102b25780630abc8e7b146102ef5780631694505e1461031a5761025c565b3661025c57005b005b34801561026a57600080fd5b5061028560048036038101906102809190613208565b6109e2565b005b34801561029357600080fd5b5061029c610ad7565b6040516102a991906132d8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613358565b610b69565b6040516102e691906133b3565b60405180910390f35b3480156102fb57600080fd5b50610304610b8c565b60405161031191906133dd565b60405180910390f35b34801561032657600080fd5b5061032f610b92565b60405161033c9190613457565b60405180910390f35b34801561035157600080fd5b5061035a610bb6565b60405161036791906133dd565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061349e565b610bc0565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906134cb565b610c71565b6040516103cd91906133b3565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613208565b610ca0565b005b34801561040b57600080fd5b50610414610d95565b60405161042191906133dd565b60405180910390f35b34801561043657600080fd5b5061043f610d9b565b60405161044c919061353a565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613358565b610da4565b60405161048991906133b3565b60405180910390f35b34801561049e57600080fd5b506104a7610ddb565b6040516104b491906133dd565b60405180910390f35b3480156104c957600080fd5b506104d2610de1565b6040516104df9190613564565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061357f565b610e05565b60405161051c91906133b3565b60405180910390f35b34801561053157600080fd5b5061053a610e5b565b60405161054791906133b3565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061357f565b610e6e565b005b34801561058557600080fd5b5061058e611045565b60405161059b91906133dd565b60405180910390f35b3480156105b057600080fd5b506105b961104b565b005b3480156105c757600080fd5b506105e260048036038101906105dd919061357f565b6110a6565b6040516105ef91906133dd565b60405180910390f35b34801561060457600080fd5b5061060d6110ef565b005b34801561061b57600080fd5b50610624611103565b60405161063191906133dd565b60405180910390f35b34801561064657600080fd5b5061064f611109565b60405161065c91906133dd565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906135ac565b61110f565b005b34801561069a57600080fd5b506106a36111ee565b6040516106b09190613564565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061357f565b611214565b6040516106ed91906133b3565b60405180910390f35b34801561070257600080fd5b5061070b61126a565b60405161071891906133dd565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906135d9565b611270565b005b34801561075657600080fd5b5061075f6114af565b60405161076c9190613564565b60405180910390f35b34801561078157600080fd5b5061078a6114d8565b60405161079791906132d8565b60405180910390f35b3480156107ac57600080fd5b506107b561156a565b6040516107c291906133dd565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906135d9565b61158e565b005b34801561080057600080fd5b5061081b60048036038101906108169190613358565b61175f565b60405161082891906133b3565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061357f565b6117d6565b60405161086591906133b3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613358565b61182c565b6040516108a291906133b3565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906135ac565b61184f565b005b3480156108e057600080fd5b506108e9611934565b6040516108f69190613564565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906135d9565b6119ec565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613619565b611b2f565b60405161095c91906133dd565b60405180910390f35b34801561097157600080fd5b5061097a611bb6565b60405161098791906133dd565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b2919061357f565b611bbc565b005b3480156109c557600080fd5b506109e060048036038101906109db919061357f565b611c3f565b005b6109ea611de9565b816007541415806109fd57508060095414155b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136a5565b60405180910390fd5b610fa08183610a4b91906136f4565b1115610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613774565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610acb929190613794565b60405180910390a15050565b606060058054610ae6906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610b12906137ec565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b600080610b74611e67565b9050610b81818585611e6f565b600191505092915050565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600454905090565b610bc8611de9565b801515600f60009054906101000a900460ff16151503610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613869565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c6691906133b3565b60405180910390a150565b600080610c7c611e67565b9050610c89858285612038565b610c948585856120c4565b60019150509392505050565b610ca8611de9565b81600854141580610cbb575080600a5414155b610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906138d5565b60405180910390fd5b610fa08183610d0991906136f4565b1115610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613941565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d89929190613794565b60405180910390a15050565b60085481565b60006012905090565b600080610daf611e67565b9050610dd0818585610dc18589611b2f565b610dcb91906136f4565b611e6f565b600191505092915050565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610e76611de9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906139d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a65565b60405180910390fd5b610f7e8161264f565b15610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613af7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b60105481565b6000611056306110a6565b90506000811161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613b63565b60405180910390fd5b6110a3612672565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110f7611de9565b6111016000612a79565b565b600c5481565b60095481565b611117611de9565b806010540361115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613bf5565b60405180910390fd5b600a811015801561116e57506127108111155b6111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613cad565b60405180910390fd5b806010819055507f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8816040516111e391906133dd565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b611278611de9565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613d3f565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613dd1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e3d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e58826040516114a391906133b3565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114e7906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906137ec565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b611596611de9565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613ecf565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613e3d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332058260405161175391906133b3565b60405180910390a25050565b60008061176a611e67565b905060006117788286611b2f565b9050838110156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613f61565b60405180910390fd5b6117ca8286868403611e6f565b60019250505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080611837611e67565b90506118448185856120c4565b600191505092915050565b611857611de9565b80600e540361189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613ff3565b60405180910390fd5b620f42406118a7610bb6565b6118b19190614042565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906140e5565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161192991906133dd565b60405180910390a150565b60006038460361195a577310ed43c718714eb63d5aa57b78b54704e256024e90506119e9565b6061460361197e5773d99d1c33f9fc3444f8101754abc46c52416550d190506119e9565b600146148061198d5750600546145b156119ae57737a250d5630b4cf539739df2c5dacb4c659f2488d90506119e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614177565b60405180910390fd5b90565b6119f4611de9565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613dd1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe182604051611b2391906133b3565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611bc4611de9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614209565b60405180910390fd5b611c3c81612a79565b50565b611c47611de9565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d2f573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d759190613564565b602060405180830381865afa158015611d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db691906142aa565b9050611de333828473ffffffffffffffffffffffffffffffffffffffff16612b3d9092919063ffffffff16565b50505b50565b611df1611e67565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6114af565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614323565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614447565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202b91906133dd565b60405180910390a3505050565b60006120448484611b2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120be57818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906144b3565b60405180910390fd5b6120bd8484848403611e6f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906145d7565b60405180910390fd5b600081036121bb576121b683836000612bc3565b61264a565b60006121c6306110a6565b90506000600e5482101590508080156121ec5750600d60149054906101000a900460ff16155b80156122425750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225a5750600f60009054906101000a900460ff165b801561227557506000600c54600b5461227391906136f4565b115b1561228357612282612672565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061232a5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123415750600d60149054906101000a900460ff165b1561234b57600090505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612432577f00000000000000000000000000000000000000000000000000000000000000006010546123c8610bb6565b6123d291906145f7565b6123dc9190614042565b846123e6876110a6565b6123f091906136f4565b1115612431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612428906146ab565b60405180910390fd5b5b801561263b57600080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612508577f0000000000000000000000000000000000000000000000000000000000000000600754876124bc91906145f7565b6124c69190614042565b91507f0000000000000000000000000000000000000000000000000000000000000000600954876124f791906145f7565b6125019190614042565b90506125d2565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125d1577f00000000000000000000000000000000000000000000000000000000000000006008548761258991906145f7565b6125939190614042565b91507f0000000000000000000000000000000000000000000000000000000000000000600a54876125c491906145f7565b6125ce9190614042565b90505b5b81600b60008282546125e491906136f4565b9250508190555080600c60008282546125fd91906136f4565b925050819055506000818361261291906136f4565b9050600081111561263757808761262991906146cb565b9650612636893083612bc3565b5b5050505b612646868686612bc3565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126aa576126a96146ff565b5b6040519080825280602002602001820160405280156126d85781602001602082028036833780820191505090505b50905030816000815181106126f0576126ef61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190614772565b816001815181106127cd576127cc61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000612812306110a6565b90506000600c54600b5461282691906136f4565b90506000816002600b5461283a9190614042565b8461284591906145f7565b61284f9190614042565b90506000818461285f91906146cb565b90506002600b546128709190614042565b8361287b91906146cb565b92507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016128df959493929190614898565b600060405180830381600087803b1580156128f957600080fd5b505af192505050801561290a575060015b612918575050505050612a5c565b6000479050600084600c548361292e91906145f7565b6129389190614042565b90506000818361294891906146cb565b905060008511801561295a5750600081115b15612a0c577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b81526004016129c6969594939291906148f2565b60606040518083038185885af193505050508015612a0257506040513d601f19601f820116820180604052508101906129ff9190614953565b60015b15612a0b575050505b5b6000821115612a4357612a41600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e3c565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bbe8363a9059cbb60e01b8484604051602401612b5c9291906149a6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ed6565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906145d7565b60405180910390fd5b612cac838383612f9e565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614a41565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e2391906133dd565b60405180910390a3612e36848484612fa3565b50505050565b6000612e46612fa8565b81471015612e575760009050612ec8565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612e7d90614a92565b60006040518083038185875af1925050503d8060008114612eba576040519150601f19603f3d011682016040523d82523d6000602084013e612ebf565b606091505b50509050809150505b612ed0612ff7565b92915050565b6000612f38826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130009092919063ffffffff16565b9050600081511480612f5a575080806020019051810190612f599190614abc565b5b612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614b5b565b60405180910390fd5b505050565b505050565b505050565b600260015403612fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe490614bc7565b60405180910390fd5b6002600181905550565b60018081905550565b606061300f8484600085613018565b90509392505050565b60608247101561305d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305490614c59565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130869190614cb5565b60006040518083038185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50915091506130d9878383876130e5565b92505050949350505050565b6060831561314757600083510361313f576130ff8561315a565b61313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614d18565b60405180910390fd5b5b829050613152565b613151838361317d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156131905781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c491906132d8565b60405180910390fd5b600080fd5b6000819050919050565b6131e5816131d2565b81146131f057600080fd5b50565b600081359050613202816131dc565b92915050565b6000806040838503121561321f5761321e6131cd565b5b600061322d858286016131f3565b925050602061323e858286016131f3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613282578082015181840152602081019050613267565b60008484015250505050565b6000601f19601f8301169050919050565b60006132aa82613248565b6132b48185613253565b93506132c4818560208601613264565b6132cd8161328e565b840191505092915050565b600060208201905081810360008301526132f2818461329f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613325826132fa565b9050919050565b6133358161331a565b811461334057600080fd5b50565b6000813590506133528161332c565b92915050565b6000806040838503121561336f5761336e6131cd565b5b600061337d85828601613343565b925050602061338e858286016131f3565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6133d7816131d2565b82525050565b60006020820190506133f260008301846133ce565b92915050565b6000819050919050565b600061341d613418613413846132fa565b6133f8565b6132fa565b9050919050565b600061342f82613402565b9050919050565b600061344182613424565b9050919050565b61345181613436565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b81613398565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36131cd565b5b60006134c284828501613489565b91505092915050565b6000806000606084860312156134e4576134e36131cd565b5b60006134f286828701613343565b935050602061350386828701613343565b9250506040613514868287016131f3565b9150509250925092565b600060ff82169050919050565b6135348161351e565b82525050565b600060208201905061354f600083018461352b565b92915050565b61355e8161331a565b82525050565b60006020820190506135796000830184613555565b92915050565b600060208284031215613595576135946131cd565b5b60006135a384828501613343565b91505092915050565b6000602082840312156135c2576135c16131cd565b5b60006135d0848285016131f3565b91505092915050565b600080604083850312156135f0576135ef6131cd565b5b60006135fe85828601613343565b925050602061360f85828601613489565b9150509250929050565b600080604083850312156136305761362f6131cd565b5b600061363e85828601613343565b925050602061364f85828601613343565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b600061368f601e83613253565b915061369a82613659565b602082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136ff826131d2565b915061370a836131d2565b9250828201905080821115613722576137216136c5565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b600061375e601f83613253565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b60006040820190506137a960008301856133ce565b6137b660208301846133ce565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380457607f821691505b602082108103613817576138166137bd565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b6000613853601a83613253565b915061385e8261381d565b602082019050919050565b6000602082019050818103600083015261388281613846565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b60006138bf601f83613253565b91506138ca82613889565b602082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061392b602083613253565b9150613936826138f5565b602082019050919050565b6000602082019050818103600083015261395a8161391e565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139bd602883613253565b91506139c882613961565b604082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a4f602b83613253565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b6000613ae1602583613253565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613b4d601783613253565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f6d617857616c6c65744c696d697420616c7265616479206f6e2074686174206160008201527f6d6f756e74000000000000000000000000000000000000000000000000000000602082015250565b6000613bdf602583613253565b9150613bea82613b83565b604082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b7f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060008201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060208201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029604082015250565b6000613c97606083613253565b9150613ca282613c15565b606082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f5374617465206f66207468697320636f6e74726163742061646472657373206360008201527f616e6e6f74206265206d6f646966696564000000000000000000000000000000602082015250565b6000613d29603183613253565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613dbb602a83613253565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613e27601483613253565b9150613e3282613df1565b602082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613eb9602d83613253565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f4b602583613253565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613fdd602983613253565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404d826131d2565b9150614058836131d2565b92508261406857614067614013565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b60006140cf603e83613253565b91506140da82614073565b604082019050919050565b600060208201905081810360008301526140fe816140c2565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614161602383613253565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f3602683613253565b91506141fe82614197565b604082019050919050565b60006020820190508181036000830152614222816141e6565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b600061425f602083613253565b915061426a82614229565b602082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b6000815190506142a4816131dc565b92915050565b6000602082840312156142c0576142bf6131cd565b5b60006142ce84828501614295565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061430d602083613253565b9150614318826142d7565b602082019050919050565b6000602082019050818103600083015261433c81614300565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439f602483613253565b91506143aa82614343565b604082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614431602283613253565b915061443c826143d5565b604082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061449d601d83613253565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452f602583613253565b915061453a826144d3565b604082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c1602383613253565b91506145cc82614565565b604082019050919050565b600060208201905081810360008301526145f0816145b4565b9050919050565b6000614602826131d2565b915061460d836131d2565b925082820261461b816131d2565b91508282048414831517614632576146316136c5565b5b5092915050565b7f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460008201527f68616e2077616c6c6574206c696d697400000000000000000000000000000000602082015250565b6000614695603083613253565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b60006146d6826131d2565b91506146e1836131d2565b92508282039050818111156146f9576146f86136c5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061476c8161332c565b92915050565b600060208284031215614788576147876131cd565b5b60006147968482850161475d565b91505092915050565b6000819050919050565b60006147c46147bf6147ba8461479f565b6133f8565b6131d2565b9050919050565b6147d4816147a9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480f8161331a565b82525050565b60006148218383614806565b60208301905092915050565b6000602082019050919050565b6000614845826147da565b61484f81856147e5565b935061485a836147f6565b8060005b8381101561488b5781516148728882614815565b975061487d8361482d565b92505060018101905061485e565b5085935050505092915050565b600060a0820190506148ad60008301886133ce565b6148ba60208301876147cb565b81810360408301526148cc818661483a565b90506148db6060830185613555565b6148e860808301846133ce565b9695505050505050565b600060c0820190506149076000830189613555565b61491460208301886133ce565b61492160408301876147cb565b61492e60608301866147cb565b61493b6080830185613555565b61494860a08301846133ce565b979650505050505050565b60008060006060848603121561496c5761496b6131cd565b5b600061497a86828701614295565b935050602061498b86828701614295565b925050604061499c86828701614295565b9150509250925092565b60006040820190506149bb6000830185613555565b6149c860208301846133ce565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613253565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b600081905092915050565b50565b6000614a7c600083614a61565b9150614a8782614a6c565b600082019050919050565b6000614a9d82614a6f565b9150819050919050565b600081519050614ab681613472565b92915050565b600060208284031215614ad257614ad16131cd565b5b6000614ae084828501614aa7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b45602a83613253565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614bb1601f83613253565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c43602683613253565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b600081519050919050565b6000614c8f82614c79565b614c998185614a61565b9350614ca9818560208601613264565b80840191505092915050565b6000614cc18284614c84565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d02601d83613253565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b905091905056fea2646970667358221220e2e2c594456bd55b199fe79d3ef67e3a6cea98453471e82faf6fa71f848521fe64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102555760003560e01c806371afc713116101395780639a7a23d6116100b6578063d54f7d5e1161007a578063d54f7d5e146108d4578063d63cad22146108ff578063dd62ed3e14610928578063e2f4560514610965578063f2fde38b14610990578063f9d0831a146109b95761025c565b80639a7a23d6146107cb578063a457c2d7146107f4578063a8a69b9d14610831578063a9059cbb1461086e578063afa4f3b2146108ab5761025c565b80638123bdc8116100fd5780638123bdc8146106f65780638a96082e146107215780638da5cb5b1461074a57806395d89b411461077557806396ce0795146107a05761025c565b806371afc7131461060f578063721e62331461063a578063728d41c91461066557806375f0a8741461068e5780637949a403146106b95761025c565b8063313ce567116101d257806352dfc8d01161019657806352dfc8d0146105255780635d098b381461055057806366a88d961461057957806366eb3785146105a457806370a08231146105bb578063715018a6146105f85761025c565b8063313ce5671461042a578063395093511461045557806342d0b0bc1461049257806349bd5a5e146104bd5780634fbee193146104e85761025c565b806318160ddd1161021957806318160ddd146103455780631f88a23e1461037057806323b872dd14610399578063247b912d146103d6578063248ba7ed146103ff5761025c565b806305a1f36d1461025e57806306fdde0314610287578063095ea7b3146102b25780630abc8e7b146102ef5780631694505e1461031a5761025c565b3661025c57005b005b34801561026a57600080fd5b5061028560048036038101906102809190613208565b6109e2565b005b34801561029357600080fd5b5061029c610ad7565b6040516102a991906132d8565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613358565b610b69565b6040516102e691906133b3565b60405180910390f35b3480156102fb57600080fd5b50610304610b8c565b60405161031191906133dd565b60405180910390f35b34801561032657600080fd5b5061032f610b92565b60405161033c9190613457565b60405180910390f35b34801561035157600080fd5b5061035a610bb6565b60405161036791906133dd565b60405180910390f35b34801561037c57600080fd5b506103976004803603810190610392919061349e565b610bc0565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906134cb565b610c71565b6040516103cd91906133b3565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613208565b610ca0565b005b34801561040b57600080fd5b50610414610d95565b60405161042191906133dd565b60405180910390f35b34801561043657600080fd5b5061043f610d9b565b60405161044c919061353a565b60405180910390f35b34801561046157600080fd5b5061047c60048036038101906104779190613358565b610da4565b60405161048991906133b3565b60405180910390f35b34801561049e57600080fd5b506104a7610ddb565b6040516104b491906133dd565b60405180910390f35b3480156104c957600080fd5b506104d2610de1565b6040516104df9190613564565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061357f565b610e05565b60405161051c91906133b3565b60405180910390f35b34801561053157600080fd5b5061053a610e5b565b60405161054791906133b3565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061357f565b610e6e565b005b34801561058557600080fd5b5061058e611045565b60405161059b91906133dd565b60405180910390f35b3480156105b057600080fd5b506105b961104b565b005b3480156105c757600080fd5b506105e260048036038101906105dd919061357f565b6110a6565b6040516105ef91906133dd565b60405180910390f35b34801561060457600080fd5b5061060d6110ef565b005b34801561061b57600080fd5b50610624611103565b60405161063191906133dd565b60405180910390f35b34801561064657600080fd5b5061064f611109565b60405161065c91906133dd565b60405180910390f35b34801561067157600080fd5b5061068c600480360381019061068791906135ac565b61110f565b005b34801561069a57600080fd5b506106a36111ee565b6040516106b09190613564565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db919061357f565b611214565b6040516106ed91906133b3565b60405180910390f35b34801561070257600080fd5b5061070b61126a565b60405161071891906133dd565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906135d9565b611270565b005b34801561075657600080fd5b5061075f6114af565b60405161076c9190613564565b60405180910390f35b34801561078157600080fd5b5061078a6114d8565b60405161079791906132d8565b60405180910390f35b3480156107ac57600080fd5b506107b561156a565b6040516107c291906133dd565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed91906135d9565b61158e565b005b34801561080057600080fd5b5061081b60048036038101906108169190613358565b61175f565b60405161082891906133b3565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061357f565b6117d6565b60405161086591906133b3565b60405180910390f35b34801561087a57600080fd5b5061089560048036038101906108909190613358565b61182c565b6040516108a291906133b3565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd91906135ac565b61184f565b005b3480156108e057600080fd5b506108e9611934565b6040516108f69190613564565b60405180910390f35b34801561090b57600080fd5b50610926600480360381019061092191906135d9565b6119ec565b005b34801561093457600080fd5b5061094f600480360381019061094a9190613619565b611b2f565b60405161095c91906133dd565b60405180910390f35b34801561097157600080fd5b5061097a611bb6565b60405161098791906133dd565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b2919061357f565b611bbc565b005b3480156109c557600080fd5b506109e060048036038101906109db919061357f565b611c3f565b005b6109ea611de9565b816007541415806109fd57508060095414155b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136a5565b60405180910390fd5b610fa08183610a4b91906136f4565b1115610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613774565b60405180910390fd5b81600781905550806009819055507f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec8282604051610acb929190613794565b60405180910390a15050565b606060058054610ae6906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610b12906137ec565b8015610b5f5780601f10610b3457610100808354040283529160200191610b5f565b820191906000526020600020905b815481529060010190602001808311610b4257829003601f168201915b5050505050905090565b600080610b74611e67565b9050610b81818585611e6f565b600191505092915050565b60075481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b610bc8611de9565b801515600f60009054906101000a900460ff16151503610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1490613869565b60405180910390fd5b80600f60006101000a81548160ff0219169083151502179055507fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b781604051610c6691906133b3565b60405180910390a150565b600080610c7c611e67565b9050610c89858285612038565b610c948585856120c4565b60019150509392505050565b610ca8611de9565b81600854141580610cbb575080600a5414155b610cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf1906138d5565b60405180910390fd5b610fa08183610d0991906136f4565b1115610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190613941565b60405180910390fd5b8160088190555080600a819055507fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e8282604051610d89929190613794565b60405180910390a15050565b60085481565b60006012905090565b600080610daf611e67565b9050610dd0818585610dc18589611b2f565b610dcb91906136f4565b611e6f565b600191505092915050565b600a5481565b7f00000000000000000000000069d716f3514127a62ec527989d707f81824eb60a81565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900460ff1681565b610e76611de9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906139d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a65565b60405180910390fd5b610f7e8161264f565b15610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613af7565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f060405160405180910390a250565b60105481565b6000611056306110a6565b90506000811161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613b63565b60405180910390fd5b6110a3612672565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110f7611de9565b6111016000612a79565b565b600c5481565b60095481565b611117611de9565b806010540361115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290613bf5565b60405180910390fd5b600a811015801561116e57506127108111155b6111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a490613cad565b60405180910390fd5b806010819055507f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e8816040516111e391906133dd565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b611278611de9565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90613d3f565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613dd1565b60405180910390fd5b7f00000000000000000000000069d716f3514127a62ec527989d707f81824eb60a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613e3d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e58826040516114a391906133b3565b60405180910390a25050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600680546114e7906137ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611513906137ec565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000271081565b611596611de9565b801515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613ecf565b60405180910390fd5b7f00000000000000000000000069d716f3514127a62ec527989d707f81824eb60a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613e3d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332058260405161175391906133b3565b60405180910390a25050565b60008061176a611e67565b905060006117788286611b2f565b9050838110156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490613f61565b60405180910390fd5b6117ca8286868403611e6f565b60019250505092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080611837611e67565b90506118448185856120c4565b600191505092915050565b611857611de9565b80600e540361189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290613ff3565b60405180910390fd5b620f42406118a7610bb6565b6118b19190614042565b8110156118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906140e5565b60405180910390fd5b80600e819055507fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e488160405161192991906133dd565b60405180910390a150565b60006038460361195a577310ed43c718714eb63d5aa57b78b54704e256024e90506119e9565b6061460361197e5773d99d1c33f9fc3444f8101754abc46c52416550d190506119e9565b600146148061198d5750600546145b156119ae57737a250d5630b4cf539739df2c5dacb4c659f2488d90506119e9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e090614177565b60405180910390fd5b90565b6119f4611de9565b801515601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613dd1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe182604051611b2391906133b3565b60405180910390a25050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e5481565b611bc4611de9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90614209565b60405180910390fd5b611c3c81612a79565b50565b611c47611de9565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614275565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d35573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d2f573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d759190613564565b602060405180830381865afa158015611d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db691906142aa565b9050611de333828473ffffffffffffffffffffffffffffffffffffffff16612b3d9092919063ffffffff16565b50505b50565b611df1611e67565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6114af565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90614323565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed5906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4490614447565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202b91906133dd565b60405180910390a3505050565b60006120448484611b2f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146120be57818110156120b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a7906144b3565b60405180910390fd5b6120bd8484848403611e6f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212a90614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906145d7565b60405180910390fd5b600081036121bb576121b683836000612bc3565b61264a565b60006121c6306110a6565b90506000600e5482101590508080156121ec5750600d60149054906101000a900460ff16155b80156122425750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225a5750600f60009054906101000a900460ff165b801561227557506000600c54600b5461227391906136f4565b115b1561228357612282612672565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061232a5750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123415750600d60149054906101000a900460ff165b1561234b57600090505b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612432577f00000000000000000000000000000000000000000000000000000000000027106010546123c8610bb6565b6123d291906145f7565b6123dc9190614042565b846123e6876110a6565b6123f091906136f4565b1115612431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612428906146ab565b60405180910390fd5b5b801561263b57600080601160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612508577f0000000000000000000000000000000000000000000000000000000000002710600754876124bc91906145f7565b6124c69190614042565b91507f0000000000000000000000000000000000000000000000000000000000002710600954876124f791906145f7565b6125019190614042565b90506125d2565b601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125d1577f00000000000000000000000000000000000000000000000000000000000027106008548761258991906145f7565b6125939190614042565b91507f0000000000000000000000000000000000000000000000000000000000002710600a54876125c491906145f7565b6125ce9190614042565b90505b5b81600b60008282546125e491906136f4565b9250508190555080600c60008282546125fd91906136f4565b925050819055506000818361261291906136f4565b9050600081111561263757808761262991906146cb565b9650612636893083612bc3565b5b5050505b612646868686612bc3565b5050505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156126aa576126a96146ff565b5b6040519080825280602002602001820160405280156126d85781602001602082028036833780820191505090505b50905030816000815181106126f0576126ef61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b99190614772565b816001815181106127cd576127cc61472e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000612812306110a6565b90506000600c54600b5461282691906136f4565b90506000816002600b5461283a9190614042565b8461284591906145f7565b61284f9190614042565b90506000818461285f91906146cb565b90506002600b546128709190614042565b8361287b91906146cb565b92507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478260008830426040518663ffffffff1660e01b81526004016128df959493929190614898565b600060405180830381600087803b1580156128f957600080fd5b505af192505050801561290a575060015b612918575050505050612a5c565b6000479050600084600c548361292e91906145f7565b6129389190614042565b90506000818361294891906146cb565b905060008511801561295a5750600081115b15612a0c577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308860008061dead426040518863ffffffff1660e01b81526004016129c6969594939291906148f2565b60606040518083038185885af193505050508015612a0257506040513d601f19601f820116820180604052508101906129ff9190614953565b60015b15612a0b575050505b5b6000821115612a4357612a41600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e3c565b505b6000600b819055506000600c8190555050505050505050505b6000600d60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612bbe8363a9059cbb60e01b8484604051602401612b5c9291906149a6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ed6565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906145d7565b60405180910390fd5b612cac838383612f9e565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614a41565b60405180910390fd5b818103600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e2391906133dd565b60405180910390a3612e36848484612fa3565b50505050565b6000612e46612fa8565b81471015612e575760009050612ec8565b60008373ffffffffffffffffffffffffffffffffffffffff1683604051612e7d90614a92565b60006040518083038185875af1925050503d8060008114612eba576040519150601f19603f3d011682016040523d82523d6000602084013e612ebf565b606091505b50509050809150505b612ed0612ff7565b92915050565b6000612f38826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166130009092919063ffffffff16565b9050600081511480612f5a575080806020019051810190612f599190614abc565b5b612f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9090614b5b565b60405180910390fd5b505050565b505050565b505050565b600260015403612fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe490614bc7565b60405180910390fd5b6002600181905550565b60018081905550565b606061300f8484600085613018565b90509392505050565b60608247101561305d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305490614c59565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130869190614cb5565b60006040518083038185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50915091506130d9878383876130e5565b92505050949350505050565b6060831561314757600083510361313f576130ff8561315a565b61313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313590614d18565b60405180910390fd5b5b829050613152565b613151838361317d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156131905781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c491906132d8565b60405180910390fd5b600080fd5b6000819050919050565b6131e5816131d2565b81146131f057600080fd5b50565b600081359050613202816131dc565b92915050565b6000806040838503121561321f5761321e6131cd565b5b600061322d858286016131f3565b925050602061323e858286016131f3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613282578082015181840152602081019050613267565b60008484015250505050565b6000601f19601f8301169050919050565b60006132aa82613248565b6132b48185613253565b93506132c4818560208601613264565b6132cd8161328e565b840191505092915050565b600060208201905081810360008301526132f2818461329f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613325826132fa565b9050919050565b6133358161331a565b811461334057600080fd5b50565b6000813590506133528161332c565b92915050565b6000806040838503121561336f5761336e6131cd565b5b600061337d85828601613343565b925050602061338e858286016131f3565b9150509250929050565b60008115159050919050565b6133ad81613398565b82525050565b60006020820190506133c860008301846133a4565b92915050565b6133d7816131d2565b82525050565b60006020820190506133f260008301846133ce565b92915050565b6000819050919050565b600061341d613418613413846132fa565b6133f8565b6132fa565b9050919050565b600061342f82613402565b9050919050565b600061344182613424565b9050919050565b61345181613436565b82525050565b600060208201905061346c6000830184613448565b92915050565b61347b81613398565b811461348657600080fd5b50565b60008135905061349881613472565b92915050565b6000602082840312156134b4576134b36131cd565b5b60006134c284828501613489565b91505092915050565b6000806000606084860312156134e4576134e36131cd565b5b60006134f286828701613343565b935050602061350386828701613343565b9250506040613514868287016131f3565b9150509250925092565b600060ff82169050919050565b6135348161351e565b82525050565b600060208201905061354f600083018461352b565b92915050565b61355e8161331a565b82525050565b60006020820190506135796000830184613555565b92915050565b600060208284031215613595576135946131cd565b5b60006135a384828501613343565b91505092915050565b6000602082840312156135c2576135c16131cd565b5b60006135d0848285016131f3565b91505092915050565b600080604083850312156135f0576135ef6131cd565b5b60006135fe85828601613343565b925050602061360f85828601613489565b9150509250929050565b600080604083850312156136305761362f6131cd565b5b600061363e85828601613343565b925050602061364f85828601613343565b9150509250929050565b7f4275792054617820616c7265616479206f6e207468617420616d6f756e740000600082015250565b600061368f601e83613253565b915061369a82613659565b602082019050919050565b600060208201905081810360008301526136be81613682565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136ff826131d2565b915061370a836131d2565b9250828201905080821115613722576137216136c5565b5b92915050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b600061375e601f83613253565b915061376982613728565b602082019050919050565b6000602082019050818103600083015261378d81613751565b9050919050565b60006040820190506137a960008301856133ce565b6137b660208301846133ce565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061380457607f821691505b602082108103613817576138166137bd565b5b50919050565b7f537761704261636b20616c7265616479206f6e20737461747573000000000000600082015250565b6000613853601a83613253565b915061385e8261381d565b602082019050919050565b6000602082019050818103600083015261388281613846565b9050919050565b7f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e7400600082015250565b60006138bf601f83613253565b91506138ca82613889565b602082019050919050565b600060208201905081810360008301526138ee816138b2565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061392b602083613253565b9150613936826138f5565b602082019050919050565b6000602082019050818103600083015261395a8161391e565b9050919050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b60006139bd602883613253565b91506139c882613961565b604082019050919050565b600060208201905081810360008301526139ec816139b0565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a4f602b83613253565b9150613a5a826139f3565b604082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b6000613ae1602583613253565b9150613aec82613a85565b604082019050919050565b60006020820190508181036000830152613b1081613ad4565b9050919050565b7f43616e742053776170204261636b203020546f6b656e21000000000000000000600082015250565b6000613b4d601783613253565b9150613b5882613b17565b602082019050919050565b60006020820190508181036000830152613b7c81613b40565b9050919050565b7f6d617857616c6c65744c696d697420616c7265616479206f6e2074686174206160008201527f6d6f756e74000000000000000000000000000000000000000000000000000000602082015250565b6000613bdf602583613253565b9150613bea82613b83565b604082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b7f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060008201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060208201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029604082015250565b6000613c97606083613253565b9150613ca282613c15565b606082019050919050565b60006020820190508181036000830152613cc681613c8a565b9050919050565b7f5374617465206f66207468697320636f6e74726163742061646472657373206360008201527f616e6e6f74206265206d6f646966696564000000000000000000000000000000602082015250565b6000613d29603183613253565b9150613d3482613ccd565b604082019050919050565b60006020820190508181036000830152613d5881613d1c565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000613dbb602a83613253565b9150613dc682613d5f565b604082019050919050565b60006020820190508181036000830152613dea81613dae565b9050919050565b7f43616e6e6f742073657420746869732070616972000000000000000000000000600082015250565b6000613e27601483613253565b9150613e3282613df1565b602082019050919050565b60006020820190508181036000830152613e5681613e1a565b9050919050565b7f50616972206164647265737320697320616c7265616479207468652076616c7560008201527f65206f6620277374617475732700000000000000000000000000000000000000602082015250565b6000613eb9602d83613253565b9150613ec482613e5d565b604082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f4b602583613253565b9150613f5682613eef565b604082019050919050565b60006020820190508181036000830152613f7a81613f3e565b9050919050565b7f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e20746860008201527f617420616d6f756e740000000000000000000000000000000000000000000000602082015250565b6000613fdd602983613253565b9150613fe882613f81565b604082019050919050565b6000602082019050818103600083015261400c81613fd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061404d826131d2565b9150614058836131d2565b92508261406857614067614013565b5b828204905092915050565b7f416d6f756e74206d75737420626520657175616c206f7220677265617465722060008201527f7468616e20302e30303030303125206f6620546f74616c20537570706c790000602082015250565b60006140cf603e83613253565b91506140da82614073565b604082019050919050565b600060208201905081810360008301526140fe816140c2565b9050919050565b7f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e65747760008201527f6f726b0000000000000000000000000000000000000000000000000000000000602082015250565b6000614161602383613253565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141f3602683613253565b91506141fe82614197565b604082019050919050565b60006020820190508181036000830152614222816141e6565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b600061425f602083613253565b915061426a82614229565b602082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b6000815190506142a4816131dc565b92915050565b6000602082840312156142c0576142bf6131cd565b5b60006142ce84828501614295565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061430d602083613253565b9150614318826142d7565b602082019050919050565b6000602082019050818103600083015261433c81614300565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061439f602483613253565b91506143aa82614343565b604082019050919050565b600060208201905081810360008301526143ce81614392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614431602283613253565b915061443c826143d5565b604082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061449d601d83613253565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061452f602583613253565b915061453a826144d3565b604082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c1602383613253565b91506145cc82614565565b604082019050919050565b600060208201905081810360008301526145f0816145b4565b9050919050565b6000614602826131d2565b915061460d836131d2565b925082820261461b816131d2565b91508282048414831517614632576146316136c5565b5b5092915050565b7f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460008201527f68616e2077616c6c6574206c696d697400000000000000000000000000000000602082015250565b6000614695603083613253565b91506146a082614639565b604082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b60006146d6826131d2565b91506146e1836131d2565b92508282039050818111156146f9576146f86136c5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061476c8161332c565b92915050565b600060208284031215614788576147876131cd565b5b60006147968482850161475d565b91505092915050565b6000819050919050565b60006147c46147bf6147ba8461479f565b6133f8565b6131d2565b9050919050565b6147d4816147a9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61480f8161331a565b82525050565b60006148218383614806565b60208301905092915050565b6000602082019050919050565b6000614845826147da565b61484f81856147e5565b935061485a836147f6565b8060005b8381101561488b5781516148728882614815565b975061487d8361482d565b92505060018101905061485e565b5085935050505092915050565b600060a0820190506148ad60008301886133ce565b6148ba60208301876147cb565b81810360408301526148cc818661483a565b90506148db6060830185613555565b6148e860808301846133ce565b9695505050505050565b600060c0820190506149076000830189613555565b61491460208301886133ce565b61492160408301876147cb565b61492e60608301866147cb565b61493b6080830185613555565b61494860a08301846133ce565b979650505050505050565b60008060006060848603121561496c5761496b6131cd565b5b600061497a86828701614295565b935050602061498b86828701614295565b925050604061499c86828701614295565b9150509250925092565b60006040820190506149bb6000830185613555565b6149c860208301846133ce565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613253565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b600081905092915050565b50565b6000614a7c600083614a61565b9150614a8782614a6c565b600082019050919050565b6000614a9d82614a6f565b9150819050919050565b600081519050614ab681613472565b92915050565b600060208284031215614ad257614ad16131cd565b5b6000614ae084828501614aa7565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b45602a83613253565b9150614b5082614ae9565b604082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614bb1601f83613253565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c43602683613253565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b600081519050919050565b6000614c8f82614c79565b614c998185614a61565b9350614ca9818560208601613264565b80840191505092915050565b6000614cc18284614c84565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d02601d83613253565b9150614d0d82614ccc565b602082019050919050565b60006020820190508181036000830152614d3181614cf5565b905091905056fea2646970667358221220e2e2c594456bd55b199fe79d3ef67e3a6cea98453471e82faf6fa71f848521fe64736f6c63430008120033

Deployed Bytecode Sourcemap

25468:13452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29691:599;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19096:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20094:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25562:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25992:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19417:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31971:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20328:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30298:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25599:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19316:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20631:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25676:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26050:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33673:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25954:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30923:580;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26097:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38712:205;;;;;;;;;;;;;:::i;:::-;;19533:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24913:103;;;;;;;;;;;;;:::i;:::-;;25803:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25639:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32203:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25847:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33140:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25761:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33809:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24678:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19204:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25716:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32676:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20902:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34433:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19684:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31511:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28738:490;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33302:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19910:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25914:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25024:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29236:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29691:599;24637:13;:11;:13::i;:::-;29858:16:::1;29839:15;;:35;;:91;;;;29914:16;29895:15;;:35;;29839:91;29817:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;30060:5;30040:16;30021;:35;;;;:::i;:::-;:44;;29999:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;30155:16;30137:15;:34;;;;30200:16;30182:15;:34;;;;30234:48;30247:16;30265;30234:48;;;;;;;:::i;:::-;;;;;;;;29691:599:::0;;:::o;19096:100::-;19150:13;19183:5;19176:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19096:100;:::o;20094:226::-;20202:4;20219:13;20235:12;:10;:12::i;:::-;20219:28;;20258:32;20267:5;20274:7;20283:6;20258:8;:32::i;:::-;20308:4;20301:11;;;20094:226;;;;:::o;25562:30::-;;;;:::o;25992:51::-;;;:::o;19417:108::-;19478:7;19505:12;;19498:19;;19417:108;:::o;31971:224::-;24637:13;:11;:13::i;:::-;32067:6:::1;32046:27;;:17;;;;;;;;;;;:27;;::::0;32038:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32137:6;32117:17;;:26;;;;;;;;;;;;;;;;;;32159:28;32180:6;32159:28;;;;;;:::i;:::-;;;;;;;;31971:224:::0;:::o;20328:295::-;20459:4;20476:15;20494:12;:10;:12::i;:::-;20476:30;;20517:38;20533:4;20539:7;20548:6;20517:15;:38::i;:::-;20566:27;20576:4;20582:2;20586:6;20566:9;:27::i;:::-;20611:4;20604:11;;;20328:295;;;;;:::o;30298:617::-;24637:13;:11;:13::i;:::-;30469:17:::1;30449:16;;:37;;:95;;;;30527:17;30507:16;;:37;;30449:95;30427:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;30677:5;30656:17;30636;:37;;;;:::i;:::-;:46;;30614:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30774:17;30755:16;:36;;;;30821:17;30802:16;:36;;;;30856:51;30870:17;30889;30856:51;;;;;;;:::i;:::-;;;;;;;;30298:617:::0;;:::o;25599:31::-;;;;:::o;19316:93::-;19374:5;19399:2;19392:9;;19316:93;:::o;20631:263::-;20744:4;20761:13;20777:12;:10;:12::i;:::-;20761:28;;20800:64;20809:5;20816:7;20853:10;20825:25;20835:5;20842:7;20825:9;:25::i;:::-;:38;;;;:::i;:::-;20800:8;:64::i;:::-;20882:4;20875:11;;;20631:263;;;;:::o;25676:31::-;;;;:::o;26050:38::-;;;:::o;33673:128::-;33741:4;33765:19;:28;33785:7;33765:28;;;;;;;;;;;;;;;;;;;;;;;;;33758:35;;33673:128;;;:::o;25954:29::-;;;;;;;;;;;;;:::o;30923:580::-;24637:13;:11;:13::i;:::-;31049:15:::1;;;;;;;;;;;31029:35;;:16;:35;;::::0;31007:125:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31193:1;31165:30;;:16;:30;;::::0;31143:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31300:28;31311:16;31300:10;:28::i;:::-;31299:29;31277:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;31424:16;31406:15;;:34;;;;;;;;;;;;;;;;;;31478:16;31456:39;;;;;;;;;;;;30923:580:::0;:::o;26097:29::-;;;;:::o;38712:205::-;38758:28;38789:24;38807:4;38789:9;:24::i;:::-;38758:55;;38857:1;38834:20;:24;38826:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38899:10;:8;:10::i;:::-;38747:170;38712:205::o;19533:143::-;19623:7;19650:9;:18;19660:7;19650:18;;;;;;;;;;;;;;;;19643:25;;19533:143;;;:::o;24913:103::-;24637:13;:11;:13::i;:::-;24978:30:::1;25005:1;24978:18;:30::i;:::-;24913:103::o:0;25803:35::-;;;;:::o;25639:30::-;;;;:::o;32203:463::-;24637:13;:11;:13::i;:::-;32316:6:::1;32298:14;;:24:::0;32276:111:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32430:2;32420:6;:12;;:32;;;;;32446:6;32436;:16;;32420:32;32398:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;32606:6;32589:14;:23;;;;32630:28;32651:6;32630:28;;;;;;:::i;:::-;;;;;;;;32203:463:::0;:::o;25847:30::-;;;;;;;;;;;;;:::o;33140:154::-;33229:4;33253:27;:33;33281:4;33253:33;;;;;;;;;;;;;;;;;;;;;;;;;33246:40;;33140:154;;;:::o;25761:35::-;;;;:::o;33809:616::-;24637:13;:11;:13::i;:::-;33975:4:::1;33956:24;;:7;:24;;::::0;33934:123:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34132:8;34090:50;;:29;:38;34120:7;34090:38;;;;;;;;;;;;;;;;;;;;;;;;;:50;;::::0;34068:142:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34248:13;34229:33;;:7;:33;;::::0;34221:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34341:8;34300:29;:38;34330:7;34300:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;34399:7;34367:50;;;34408:8;34367:50;;;;;;:::i;:::-;;;;;;;;33809:616:::0;;:::o;24678:87::-;24724:7;24751:6;;;;;;;;;;;24744:13;;24678:87;:::o;19204:104::-;19260:13;19293:7;19286:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19204:104;:::o;25716:36::-;;;:::o;32676:456::-;24637:13;:11;:13::i;:::-;32854:6:::1;32817:43;;:27;:33;32845:4;32817:33;;;;;;;;;;;;;;;;;;;;;;;;;:43;;::::0;32795:138:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32968:13;32952:30;;:4;:30;;::::0;32944:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33056:6;33020:27;:33;33048:4;33020:33;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;33111:4;33080:44;;;33117:6;33080:44;;;;;;:::i;:::-;;;;;;;;32676:456:::0;;:::o;20902:498::-;21020:4;21037:13;21053:12;:10;:12::i;:::-;21037:28;;21076:24;21103:25;21113:5;21120:7;21103:9;:25::i;:::-;21076:52;;21181:15;21161:16;:35;;21139:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21297:60;21306:5;21313:7;21341:15;21322:16;:34;21297:8;:60::i;:::-;21388:4;21381:11;;;;20902:498;;;;:::o;34433:164::-;34527:4;34551:29;:38;34581:7;34551:38;;;;;;;;;;;;;;;;;;;;;;;;;34544:45;;34433:164;;;:::o;19684:218::-;19788:4;19805:13;19821:12;:10;:12::i;:::-;19805:28;;19844;19854:5;19861:2;19865:6;19844:9;:28::i;:::-;19890:4;19883:11;;;19684:218;;;;:::o;31511:452::-;24637:13;:11;:13::i;:::-;31632:6:::1;31610:18;;:28:::0;31588:119:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31766:9;31750:13;:11;:13::i;:::-;:25;;;;:::i;:::-;31740:6;:35;;31718:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;31899:6;31878:18;:27;;;;31923:32;31948:6;31923:32;;;;;;:::i;:::-;;;;;;;;31511:452:::0;:::o;28738:490::-;28787:7;28828:2;28811:13;:19;28807:414;;28854:42;28847:49;;;;28807:414;28935:2;28918:13;:19;28914:307;;28961:42;28954:49;;;;28914:307;29042:1;29025:13;:18;:40;;;;29064:1;29047:13;:18;29025:40;29021:200;;;29089:42;29082:49;;;;29021:200;29164:45;;;;;;;;;;:::i;:::-;;;;;;;;28738:490;;:::o;33302:363::-;24637:13;:11;:13::i;:::-;33471:8:::1;33439:40;;:19;:28;33459:7;33439:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;33417:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33591:8;33560:19;:28;33580:7;33560:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33639:7;33617:40;;;33648:8;33617:40;;;;;;:::i;:::-;;;;;;;;33302:363:::0;;:::o;19910:176::-;20024:7;20051:11;:18;20063:5;20051:18;;;;;;;;;;;;;;;:27;20070:7;20051:27;;;;;;;;;;;;;;;;20044:34;;19910:176;;;;:::o;25914:33::-;;;;:::o;25024:238::-;24637:13;:11;:13::i;:::-;25147:1:::1;25127:22;;:8;:22;;::::0;25105:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25226:28;25245:8;25226:18;:28::i;:::-;25024:238:::0;:::o;29236:447::-;24637:13;:11;:13::i;:::-;29332:4:::1;29315:22;;:5;:22;;::::0;29307:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29408:3;29391:21;;:5;:21;;::::0;29387:126:::1;;29437:10;29429:28;;:51;29458:21;29429:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29495:7;;29387:126;29523:17;29550:5;29523:33;;29567:15;29585:10;:20;;;29614:4;29585:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29567:53;;29631:44;29655:10;29667:7;29631:10;:23;;;;:44;;;;;:::i;:::-;29296:387;;24661:1;29236:447:::0;:::o;24773:132::-;24848:12;:10;:12::i;:::-;24837:23;;:7;:5;:7::i;:::-;:23;;;24829:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24773:132::o;18476:98::-;18529:7;18556:10;18549:17;;18476:98;:::o;23178:380::-;23331:1;23314:19;;:5;:19;;;23306:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23412:1;23393:21;;:7;:21;;;23385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23496:6;23466:11;:18;23478:5;23466:18;;;;;;;;;;;;;;;:27;23485:7;23466:27;;;;;;;;;;;;;;;:36;;;;23534:7;23518:32;;23527:5;23518:32;;;23543:6;23518:32;;;;;;:::i;:::-;;;;;;;;23178:380;;;:::o;23566:502::-;23701:24;23728:25;23738:5;23745:7;23728:9;:25::i;:::-;23701:52;;23788:17;23768:16;:37;23764:297;;23868:6;23848:16;:26;;23822:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;23983:51;23992:5;23999:7;24027:6;24008:16;:25;23983:8;:51::i;:::-;23764:297;23690:378;23566:502;;;:::o;34605:2206::-;34753:1;34737:18;;:4;:18;;;34729:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34830:1;34816:16;;:2;:16;;;34808:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34899:1;34889:6;:11;34885:93;;34917:28;34933:4;34939:2;34943:1;34917:15;:28::i;:::-;34960:7;;34885:93;34990:28;35021:24;35039:4;35021:9;:24::i;:::-;34990:55;;35058:12;35097:18;;35073:20;:42;;35058:57;;35146:7;:33;;;;;35171:8;;;;;;;;;;;35170:9;35146:33;:84;;;;;35197:27;:33;35225:4;35197:33;;;;;;;;;;;;;;;;;;;;;;;;;35196:34;35146:84;:118;;;;;35247:17;;;;;;;;;;;35146:118;:182;;;;;35327:1;35304:20;;35281;;:43;;;;:::i;:::-;:47;35146:182;35128:249;;;35355:10;:8;:10::i;:::-;35128:249;35389:12;35404:4;35389:19;;35425;:25;35445:4;35425:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35454:19;:23;35474:2;35454:23;;;;;;;;;;;;;;;;;;;;;;;;;35425:52;:64;;;;35481:8;;;;;;;;;;;35425:64;35421:112;;;35516:5;35506:15;;35421:112;35551:29;:33;35581:2;35551:33;;;;;;;;;;;;;;;;;;;;;;;;;35546:294;;35721:11;35703:14;;35687:13;:11;:13::i;:::-;:30;;;;:::i;:::-;35686:46;;;;:::i;:::-;35651:6;35635:13;35645:2;35635:9;:13::i;:::-;:22;;;;:::i;:::-;:97;;35605:219;;;;;;;;;;;;:::i;:::-;;;;;;;;;35546:294;35866:7;35862:896;;;35890:27;35932;35980;:33;36008:4;35980:33;;;;;;;;;;;;;;;;;;;;;;;;;35976:440;;;36085:11;36066:15;;36057:6;:24;;;;:::i;:::-;36056:40;;;;:::i;:::-;36034:62;;36166:11;36147:15;;36138:6;:24;;;;:::i;:::-;36137:40;;;;:::i;:::-;36115:62;;35976:440;;;36203:27;:31;36231:2;36203:31;;;;;;;;;;;;;;;;;;;;;;;;;36199:217;;;36307:11;36287:16;;36278:6;:25;;;;:::i;:::-;36277:41;;;;:::i;:::-;36255:63;;36389:11;36369:16;;36360:6;:25;;;;:::i;:::-;36359:41;;;;:::i;:::-;36337:63;;36199:217;35976:440;36456:19;36432:20;;:43;;;;;;;:::i;:::-;;;;;;;;36514:19;36490:20;;:43;;;;;;;:::i;:::-;;;;;;;;36550:12;36587:19;36565;:41;;;;:::i;:::-;36550:56;;36634:1;36627:4;:8;36623:124;;;36666:4;36656:14;;;;;:::i;:::-;;;36689:42;36705:4;36719;36726;36689:15;:42::i;:::-;36623:124;35875:883;;;35862:896;36770:33;36786:4;36792:2;36796:6;36770:15;:33::i;:::-;34718:2093;;;34605:2206;;;;:::o;28615:115::-;28675:4;28721:1;28699:7;:19;;;:23;28692:30;;28615:115;;;:::o;36819:1607::-;26372:4;26361:8;;:15;;;;;;;;;;;;;;;;;;36866:21:::1;36904:1;36890:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36866:40;;36935:4;36917;36922:1;36917:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;36961:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36951:4;36956:1;36951:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;36996:28;37027:24;37045:4;37027:9;:24::i;:::-;36996:55;;37064:16;37106:20;;37083;;:43;;;;:::i;:::-;37064:62;;37139:20;37229:8;37223:1;37200:20;;:24;;;;:::i;:::-;37163:20;:62;;;;:::i;:::-;37162:75;;;;:::i;:::-;37139:98;;37250:22;37298:12;37275:20;:35;;;;:::i;:::-;37250:60;;37360:1;37336:20;;37335:26;;;;:::i;:::-;37323:38;;;;;:::i;:::-;;;37391:15;:66;;;37476:14;37509:1;37529:4;37560;37584:15;37391:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;37374:292;;37648:7;;;;;;;37374:292;37678:18;37699:21;37678:42;;37733:20;37794:8;37770:20;;37757:10;:33;;;;:::i;:::-;37756:46;;;;:::i;:::-;37733:69;;37813:18;37847:12;37834:10;:25;;;;:::i;:::-;37813:46;;37891:1;37876:12;:16;:34;;;;;37909:1;37896:10;:14;37876:34;37872:376;;;37948:15;:31;;;37987:10;38029:4;38057:12;38092:1;38116::::0;38148:6:::1;38178:15;37948:264;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37927:310:::0;::::1;;;;;;37872:376;38279:1;38264:12;:16;38260:87;;;38297:38;38305:15;;;;;;;;;;;38322:12;38297:7;:38::i;:::-;;38260:87;38382:1;38359:20;:24;;;;38417:1;38394:20;:24;;;;36855:1571;;;;;;;;26387:1;26410:5:::0;26399:8;;:16;;;;;;;;;;;;;;;;;;36819:1607::o;25270:191::-;25344:16;25363:6;;;;;;;;;;;25344:25;;25389:8;25380:6;;:17;;;;;;;;;;;;;;;;;;25444:8;25413:40;;25434:8;25413:40;;;;;;;;;;;;25333:128;25270:191;:::o;13643:214::-;13726:123;13760:5;13803:23;;;13828:2;13832:5;13780:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13726:19;:123::i;:::-;13643:214;;;:::o;21408:714::-;21555:1;21539:18;;:4;:18;;;21531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21632:1;21618:16;;:2;:16;;;21610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21687:38;21708:4;21714:2;21718:6;21687:20;:38::i;:::-;21738:19;21760:9;:15;21770:4;21760:15;;;;;;;;;;;;;;;;21738:37;;21823:6;21808:11;:21;;21786:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;21963:6;21949:11;:20;21931:9;:15;21941:4;21931:15;;;;;;;;;;;;;;;:38;;;;22003:6;21986:9;:13;21996:2;21986:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22053:2;22038:26;;22047:4;22038:26;;;22057:6;22038:26;;;;;;:::i;:::-;;;;;;;;22077:37;22097:4;22103:2;22107:6;22077:19;:37::i;:::-;21520:602;21408:714;;;:::o;38434:270::-;38536:4;18000:21;:19;:21::i;:::-;38581:6:::1;38557:21;:30;38553:48;;;38596:5;38589:12;;;;38553:48;38615:12;38641:3;38633:17;;38658:6;38633:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38614:55;;;38689:7;38682:14;;;18032:1;18044:20:::0;:18;:20::i;:::-;38434:270;;;;:::o;16751:380::-;16832:23;16858:106;16900:4;16858:106;;;;;;;;;;;;;;;;;16866:5;16858:27;;;;:106;;;;;:::i;:::-;16832:132;;17018:1;16997:10;:17;:22;:56;;;;17034:10;17023:30;;;;;;;;;;;;:::i;:::-;16997:56;16975:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;16821:310;16751:380;;:::o;24076:125::-;;;;:::o;24209:124::-;;;;:::o;18080:152::-;17860:1;18138:7;;:19;18130:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;17860:1;18206:7;:18;;;;18080:152::o;18240:79::-;17816:1;18289:7;:22;;;;18240:79::o;7934:229::-;8071:12;8103:52;8125:6;8133:4;8139:1;8142:12;8103:21;:52::i;:::-;8096:59;;7934:229;;;;;:::o;8535:612::-;8705:12;8777:5;8752:21;:30;;8730:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;8860:12;8874:23;8901:6;:11;;8920:5;8941:4;8901:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8859:97;;;;8987:152;9032:6;9057:7;9083:10;9112:12;8987:26;:152::i;:::-;8967:172;;;;8535:612;;;;;;:::o;10651:477::-;10836:12;10865:7;10861:260;;;10914:1;10893:10;:17;:22;10889:123;;10944:18;10955:6;10944:10;:18::i;:::-;10936:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10889:123;11033:10;11026:17;;;;10861:260;11076:33;11084:10;11096:12;11076:7;:33::i;:::-;10651:477;;;;;;;:::o;7096:115::-;7156:4;7202:1;7180:7;:19;;;:23;7173:30;;7096:115;;;:::o;11449:425::-;11592:1;11572:10;:17;:21;11568:299;;;11715:10;11709:17;11772:15;11759:10;11755:2;11751:19;11744:44;11568:299;11842:12;11835:20;;;;;;;;;;;:::i;:::-;;;;;;;;88:117:1;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:152::-;4700:9;4733:37;4764:5;4733:37;:::i;:::-;4720:50;;4624:152;;;:::o;4782:183::-;4895:63;4952:5;4895:63;:::i;:::-;4890:3;4883:76;4782:183;;:::o;4971:274::-;5090:4;5128:2;5117:9;5113:18;5105:26;;5141:97;5235:1;5224:9;5220:17;5211:6;5141:97;:::i;:::-;4971:274;;;;:::o;5251:116::-;5321:21;5336:5;5321:21;:::i;:::-;5314:5;5311:32;5301:60;;5357:1;5354;5347:12;5301:60;5251:116;:::o;5373:133::-;5416:5;5454:6;5441:20;5432:29;;5470:30;5494:5;5470:30;:::i;:::-;5373:133;;;;:::o;5512:323::-;5568:6;5617:2;5605:9;5596:7;5592:23;5588:32;5585:119;;;5623:79;;:::i;:::-;5585:119;5743:1;5768:50;5810:7;5801:6;5790:9;5786:22;5768:50;:::i;:::-;5758:60;;5714:114;5512:323;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:118::-;6983:24;7001:5;6983:24;:::i;:::-;6978:3;6971:37;6896:118;;:::o;7020:222::-;7113:4;7151:2;7140:9;7136:18;7128:26;;7164:71;7232:1;7221:9;7217:17;7208:6;7164:71;:::i;:::-;7020:222;;;;:::o;7248:329::-;7307:6;7356:2;7344:9;7335:7;7331:23;7327:32;7324:119;;;7362:79;;:::i;:::-;7324:119;7482:1;7507:53;7552:7;7543:6;7532:9;7528:22;7507:53;:::i;:::-;7497:63;;7453:117;7248:329;;;;:::o;7583:::-;7642:6;7691:2;7679:9;7670:7;7666:23;7662:32;7659:119;;;7697:79;;:::i;:::-;7659:119;7817:1;7842:53;7887:7;7878:6;7867:9;7863:22;7842:53;:::i;:::-;7832:63;;7788:117;7583:329;;;;:::o;7918:468::-;7983:6;7991;8040:2;8028:9;8019:7;8015:23;8011:32;8008:119;;;8046:79;;:::i;:::-;8008:119;8166:1;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8137:117;8293:2;8319:50;8361:7;8352:6;8341:9;8337:22;8319:50;:::i;:::-;8309:60;;8264:115;7918:468;;;;;:::o;8392:474::-;8460:6;8468;8517:2;8505:9;8496:7;8492:23;8488:32;8485:119;;;8523:79;;:::i;:::-;8485:119;8643:1;8668:53;8713:7;8704:6;8693:9;8689:22;8668:53;:::i;:::-;8658:63;;8614:117;8770:2;8796:53;8841:7;8832:6;8821:9;8817:22;8796:53;:::i;:::-;8786:63;;8741:118;8392:474;;;;;:::o;8872:180::-;9012:32;9008:1;9000:6;8996:14;8989:56;8872:180;:::o;9058:366::-;9200:3;9221:67;9285:2;9280:3;9221:67;:::i;:::-;9214:74;;9297:93;9386:3;9297:93;:::i;:::-;9415:2;9410:3;9406:12;9399:19;;9058:366;;;:::o;9430:419::-;9596:4;9634:2;9623:9;9619:18;9611:26;;9683:9;9677:4;9673:20;9669:1;9658:9;9654:17;9647:47;9711:131;9837:4;9711:131;:::i;:::-;9703:139;;9430:419;;;:::o;9855:180::-;9903:77;9900:1;9893:88;10000:4;9997:1;9990:15;10024:4;10021:1;10014:15;10041:191;10081:3;10100:20;10118:1;10100:20;:::i;:::-;10095:25;;10134:20;10152:1;10134:20;:::i;:::-;10129:25;;10177:1;10174;10170:9;10163:16;;10198:3;10195:1;10192:10;10189:36;;;10205:18;;:::i;:::-;10189:36;10041:191;;;;:::o;10238:181::-;10378:33;10374:1;10366:6;10362:14;10355:57;10238:181;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10425:366;;;:::o;10797:419::-;10963:4;11001:2;10990:9;10986:18;10978:26;;11050:9;11044:4;11040:20;11036:1;11025:9;11021:17;11014:47;11078:131;11204:4;11078:131;:::i;:::-;11070:139;;10797:419;;;:::o;11222:332::-;11343:4;11381:2;11370:9;11366:18;11358:26;;11394:71;11462:1;11451:9;11447:17;11438:6;11394:71;:::i;:::-;11475:72;11543:2;11532:9;11528:18;11519:6;11475:72;:::i;:::-;11222:332;;;;;:::o;11560:180::-;11608:77;11605:1;11598:88;11705:4;11702:1;11695:15;11729:4;11726:1;11719:15;11746:320;11790:6;11827:1;11821:4;11817:12;11807:22;;11874:1;11868:4;11864:12;11895:18;11885:81;;11951:4;11943:6;11939:17;11929:27;;11885:81;12013:2;12005:6;12002:14;11982:18;11979:38;11976:84;;12032:18;;:::i;:::-;11976:84;11797:269;11746:320;;;:::o;12072:176::-;12212:28;12208:1;12200:6;12196:14;12189:52;12072:176;:::o;12254:366::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:419::-;12792:4;12830:2;12819:9;12815:18;12807:26;;12879:9;12873:4;12869:20;12865:1;12854:9;12850:17;12843:47;12907:131;13033:4;12907:131;:::i;:::-;12899:139;;12626:419;;;:::o;13051:181::-;13191:33;13187:1;13179:6;13175:14;13168:57;13051:181;:::o;13238:366::-;13380:3;13401:67;13465:2;13460:3;13401:67;:::i;:::-;13394:74;;13477:93;13566:3;13477:93;:::i;:::-;13595:2;13590:3;13586:12;13579:19;;13238:366;;;:::o;13610:419::-;13776:4;13814:2;13803:9;13799:18;13791:26;;13863:9;13857:4;13853:20;13849:1;13838:9;13834:17;13827:47;13891:131;14017:4;13891:131;:::i;:::-;13883:139;;13610:419;;;:::o;14035:182::-;14175:34;14171:1;14163:6;14159:14;14152:58;14035:182;:::o;14223:366::-;14365:3;14386:67;14450:2;14445:3;14386:67;:::i;:::-;14379:74;;14462:93;14551:3;14462:93;:::i;:::-;14580:2;14575:3;14571:12;14564:19;;14223:366;;;:::o;14595:419::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14848:9;14842:4;14838:20;14834:1;14823:9;14819:17;14812:47;14876:131;15002:4;14876:131;:::i;:::-;14868:139;;14595:419;;;:::o;15020:227::-;15160:34;15156:1;15148:6;15144:14;15137:58;15229:10;15224:2;15216:6;15212:15;15205:35;15020:227;:::o;15253:366::-;15395:3;15416:67;15480:2;15475:3;15416:67;:::i;:::-;15409:74;;15492:93;15581:3;15492:93;:::i;:::-;15610:2;15605:3;15601:12;15594:19;;15253:366;;;:::o;15625:419::-;15791:4;15829:2;15818:9;15814:18;15806:26;;15878:9;15872:4;15868:20;15864:1;15853:9;15849:17;15842:47;15906:131;16032:4;15906:131;:::i;:::-;15898:139;;15625:419;;;:::o;16050:230::-;16190:34;16186:1;16178:6;16174:14;16167:58;16259:13;16254:2;16246:6;16242:15;16235:38;16050:230;:::o;16286:366::-;16428:3;16449:67;16513:2;16508:3;16449:67;:::i;:::-;16442:74;;16525:93;16614:3;16525:93;:::i;:::-;16643:2;16638:3;16634:12;16627:19;;16286:366;;;:::o;16658:419::-;16824:4;16862:2;16851:9;16847:18;16839:26;;16911:9;16905:4;16901:20;16897:1;16886:9;16882:17;16875:47;16939:131;17065:4;16939:131;:::i;:::-;16931:139;;16658:419;;;:::o;17083:224::-;17223:34;17219:1;17211:6;17207:14;17200:58;17292:7;17287:2;17279:6;17275:15;17268:32;17083:224;:::o;17313:366::-;17455:3;17476:67;17540:2;17535:3;17476:67;:::i;:::-;17469:74;;17552:93;17641:3;17552:93;:::i;:::-;17670:2;17665:3;17661:12;17654:19;;17313:366;;;:::o;17685:419::-;17851:4;17889:2;17878:9;17874:18;17866:26;;17938:9;17932:4;17928:20;17924:1;17913:9;17909:17;17902:47;17966:131;18092:4;17966:131;:::i;:::-;17958:139;;17685:419;;;:::o;18110:173::-;18250:25;18246:1;18238:6;18234:14;18227:49;18110:173;:::o;18289:366::-;18431:3;18452:67;18516:2;18511:3;18452:67;:::i;:::-;18445:74;;18528:93;18617:3;18528:93;:::i;:::-;18646:2;18641:3;18637:12;18630:19;;18289:366;;;:::o;18661:419::-;18827:4;18865:2;18854:9;18850:18;18842:26;;18914:9;18908:4;18904:20;18900:1;18889:9;18885:17;18878:47;18942:131;19068:4;18942:131;:::i;:::-;18934:139;;18661:419;;;:::o;19086:224::-;19226:34;19222:1;19214:6;19210:14;19203:58;19295:7;19290:2;19282:6;19278:15;19271:32;19086:224;:::o;19316:366::-;19458:3;19479:67;19543:2;19538:3;19479:67;:::i;:::-;19472:74;;19555:93;19644:3;19555:93;:::i;:::-;19673:2;19668:3;19664:12;19657:19;;19316:366;;;:::o;19688:419::-;19854:4;19892:2;19881:9;19877:18;19869:26;;19941:9;19935:4;19931:20;19927:1;19916:9;19912:17;19905:47;19969:131;20095:4;19969:131;:::i;:::-;19961:139;;19688:419;;;:::o;20113:320::-;20253:34;20249:1;20241:6;20237:14;20230:58;20322:34;20317:2;20309:6;20305:15;20298:59;20391:34;20386:2;20378:6;20374:15;20367:59;20113:320;:::o;20439:366::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:419::-;20977:4;21015:2;21004:9;21000:18;20992:26;;21064:9;21058:4;21054:20;21050:1;21039:9;21035:17;21028:47;21092:131;21218:4;21092:131;:::i;:::-;21084:139;;20811:419;;;:::o;21236:236::-;21376:34;21372:1;21364:6;21360:14;21353:58;21445:19;21440:2;21432:6;21428:15;21421:44;21236:236;:::o;21478:366::-;21620:3;21641:67;21705:2;21700:3;21641:67;:::i;:::-;21634:74;;21717:93;21806:3;21717:93;:::i;:::-;21835:2;21830:3;21826:12;21819:19;;21478:366;;;:::o;21850:419::-;22016:4;22054:2;22043:9;22039:18;22031:26;;22103:9;22097:4;22093:20;22089:1;22078:9;22074:17;22067:47;22131:131;22257:4;22131:131;:::i;:::-;22123:139;;21850:419;;;:::o;22275:229::-;22415:34;22411:1;22403:6;22399:14;22392:58;22484:12;22479:2;22471:6;22467:15;22460:37;22275:229;:::o;22510:366::-;22652:3;22673:67;22737:2;22732:3;22673:67;:::i;:::-;22666:74;;22749:93;22838:3;22749:93;:::i;:::-;22867:2;22862:3;22858:12;22851:19;;22510:366;;;:::o;22882:419::-;23048:4;23086:2;23075:9;23071:18;23063:26;;23135:9;23129:4;23125:20;23121:1;23110:9;23106:17;23099:47;23163:131;23289:4;23163:131;:::i;:::-;23155:139;;22882:419;;;:::o;23307:170::-;23447:22;23443:1;23435:6;23431:14;23424:46;23307:170;:::o;23483:366::-;23625:3;23646:67;23710:2;23705:3;23646:67;:::i;:::-;23639:74;;23722:93;23811:3;23722:93;:::i;:::-;23840:2;23835:3;23831:12;23824:19;;23483:366;;;:::o;23855:419::-;24021:4;24059:2;24048:9;24044:18;24036:26;;24108:9;24102:4;24098:20;24094:1;24083:9;24079:17;24072:47;24136:131;24262:4;24136:131;:::i;:::-;24128:139;;23855:419;;;:::o;24280:232::-;24420:34;24416:1;24408:6;24404:14;24397:58;24489:15;24484:2;24476:6;24472:15;24465:40;24280:232;:::o;24518:366::-;24660:3;24681:67;24745:2;24740:3;24681:67;:::i;:::-;24674:74;;24757:93;24846:3;24757:93;:::i;:::-;24875:2;24870:3;24866:12;24859:19;;24518:366;;;:::o;24890:419::-;25056:4;25094:2;25083:9;25079:18;25071:26;;25143:9;25137:4;25133:20;25129:1;25118:9;25114:17;25107:47;25171:131;25297:4;25171:131;:::i;:::-;25163:139;;24890:419;;;:::o;25315:224::-;25455:34;25451:1;25443:6;25439:14;25432:58;25524:7;25519:2;25511:6;25507:15;25500:32;25315:224;:::o;25545:366::-;25687:3;25708:67;25772:2;25767:3;25708:67;:::i;:::-;25701:74;;25784:93;25873:3;25784:93;:::i;:::-;25902:2;25897:3;25893:12;25886:19;;25545:366;;;:::o;25917:419::-;26083:4;26121:2;26110:9;26106:18;26098:26;;26170:9;26164:4;26160:20;26156:1;26145:9;26141:17;26134:47;26198:131;26324:4;26198:131;:::i;:::-;26190:139;;25917:419;;;:::o;26342:228::-;26482:34;26478:1;26470:6;26466:14;26459:58;26551:11;26546:2;26538:6;26534:15;26527:36;26342:228;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:180::-;27421:77;27418:1;27411:88;27518:4;27515:1;27508:15;27542:4;27539:1;27532:15;27559:185;27599:1;27616:20;27634:1;27616:20;:::i;:::-;27611:25;;27650:20;27668:1;27650:20;:::i;:::-;27645:25;;27689:1;27679:35;;27694:18;;:::i;:::-;27679:35;27736:1;27733;27729:9;27724:14;;27559:185;;;;:::o;27750:249::-;27890:34;27886:1;27878:6;27874:14;27867:58;27959:32;27954:2;27946:6;27942:15;27935:57;27750:249;:::o;28005:366::-;28147:3;28168:67;28232:2;28227:3;28168:67;:::i;:::-;28161:74;;28244:93;28333:3;28244:93;:::i;:::-;28362:2;28357:3;28353:12;28346:19;;28005:366;;;:::o;28377:419::-;28543:4;28581:2;28570:9;28566:18;28558:26;;28630:9;28624:4;28620:20;28616:1;28605:9;28601:17;28594:47;28658:131;28784:4;28658:131;:::i;:::-;28650:139;;28377:419;;;:::o;28802:222::-;28942:34;28938:1;28930:6;28926:14;28919:58;29011:5;29006:2;28998:6;28994:15;28987:30;28802:222;:::o;29030:366::-;29172:3;29193:67;29257:2;29252:3;29193:67;:::i;:::-;29186:74;;29269:93;29358:3;29269:93;:::i;:::-;29387:2;29382:3;29378:12;29371:19;;29030:366;;;:::o;29402:419::-;29568:4;29606:2;29595:9;29591:18;29583:26;;29655:9;29649:4;29645:20;29641:1;29630:9;29626:17;29619:47;29683:131;29809:4;29683:131;:::i;:::-;29675:139;;29402:419;;;:::o;29827:225::-;29967:34;29963:1;29955:6;29951:14;29944:58;30036:8;30031:2;30023:6;30019:15;30012:33;29827:225;:::o;30058:366::-;30200:3;30221:67;30285:2;30280:3;30221:67;:::i;:::-;30214:74;;30297:93;30386:3;30297:93;:::i;:::-;30415:2;30410:3;30406:12;30399:19;;30058:366;;;:::o;30430:419::-;30596:4;30634:2;30623:9;30619:18;30611:26;;30683:9;30677:4;30673:20;30669:1;30658:9;30654:17;30647:47;30711:131;30837:4;30711:131;:::i;:::-;30703:139;;30430:419;;;:::o;30855:182::-;30995:34;30991:1;30983:6;30979:14;30972:58;30855:182;:::o;31043:366::-;31185:3;31206:67;31270:2;31265:3;31206:67;:::i;:::-;31199:74;;31282:93;31371:3;31282:93;:::i;:::-;31400:2;31395:3;31391:12;31384:19;;31043:366;;;:::o;31415:419::-;31581:4;31619:2;31608:9;31604:18;31596:26;;31668:9;31662:4;31658:20;31654:1;31643:9;31639:17;31632:47;31696:131;31822:4;31696:131;:::i;:::-;31688:139;;31415:419;;;:::o;31840:143::-;31897:5;31928:6;31922:13;31913:22;;31944:33;31971:5;31944:33;:::i;:::-;31840:143;;;;:::o;31989:351::-;32059:6;32108:2;32096:9;32087:7;32083:23;32079:32;32076:119;;;32114:79;;:::i;:::-;32076:119;32234:1;32259:64;32315:7;32306:6;32295:9;32291:22;32259:64;:::i;:::-;32249:74;;32205:128;31989:351;;;;:::o;32346:182::-;32486:34;32482:1;32474:6;32470:14;32463:58;32346:182;:::o;32534:366::-;32676:3;32697:67;32761:2;32756:3;32697:67;:::i;:::-;32690:74;;32773:93;32862:3;32773:93;:::i;:::-;32891:2;32886:3;32882:12;32875:19;;32534:366;;;:::o;32906:419::-;33072:4;33110:2;33099:9;33095:18;33087:26;;33159:9;33153:4;33149:20;33145:1;33134:9;33130:17;33123:47;33187:131;33313:4;33187:131;:::i;:::-;33179:139;;32906:419;;;:::o;33331:223::-;33471:34;33467:1;33459:6;33455:14;33448:58;33540:6;33535:2;33527:6;33523:15;33516:31;33331:223;:::o;33560:366::-;33702:3;33723:67;33787:2;33782:3;33723:67;:::i;:::-;33716:74;;33799:93;33888:3;33799:93;:::i;:::-;33917:2;33912:3;33908:12;33901:19;;33560:366;;;:::o;33932:419::-;34098:4;34136:2;34125:9;34121:18;34113:26;;34185:9;34179:4;34175:20;34171:1;34160:9;34156:17;34149:47;34213:131;34339:4;34213:131;:::i;:::-;34205:139;;33932:419;;;:::o;34357:221::-;34497:34;34493:1;34485:6;34481:14;34474:58;34566:4;34561:2;34553:6;34549:15;34542:29;34357:221;:::o;34584:366::-;34726:3;34747:67;34811:2;34806:3;34747:67;:::i;:::-;34740:74;;34823:93;34912:3;34823:93;:::i;:::-;34941:2;34936:3;34932:12;34925:19;;34584:366;;;:::o;34956:419::-;35122:4;35160:2;35149:9;35145:18;35137:26;;35209:9;35203:4;35199:20;35195:1;35184:9;35180:17;35173:47;35237:131;35363:4;35237:131;:::i;:::-;35229:139;;34956:419;;;:::o;35381:179::-;35521:31;35517:1;35509:6;35505:14;35498:55;35381:179;:::o;35566:366::-;35708:3;35729:67;35793:2;35788:3;35729:67;:::i;:::-;35722:74;;35805:93;35894:3;35805:93;:::i;:::-;35923:2;35918:3;35914:12;35907:19;;35566:366;;;:::o;35938:419::-;36104:4;36142:2;36131:9;36127:18;36119:26;;36191:9;36185:4;36181:20;36177:1;36166:9;36162:17;36155:47;36219:131;36345:4;36219:131;:::i;:::-;36211:139;;35938:419;;;:::o;36363:224::-;36503:34;36499:1;36491:6;36487:14;36480:58;36572:7;36567:2;36559:6;36555:15;36548:32;36363:224;:::o;36593:366::-;36735:3;36756:67;36820:2;36815:3;36756:67;:::i;:::-;36749:74;;36832:93;36921:3;36832:93;:::i;:::-;36950:2;36945:3;36941:12;36934:19;;36593:366;;;:::o;36965:419::-;37131:4;37169:2;37158:9;37154:18;37146:26;;37218:9;37212:4;37208:20;37204:1;37193:9;37189:17;37182:47;37246:131;37372:4;37246:131;:::i;:::-;37238:139;;36965:419;;;:::o;37390:222::-;37530:34;37526:1;37518:6;37514:14;37507:58;37599:5;37594:2;37586:6;37582:15;37575:30;37390:222;:::o;37618:366::-;37760:3;37781:67;37845:2;37840:3;37781:67;:::i;:::-;37774:74;;37857:93;37946:3;37857:93;:::i;:::-;37975:2;37970:3;37966:12;37959:19;;37618:366;;;:::o;37990:419::-;38156:4;38194:2;38183:9;38179:18;38171:26;;38243:9;38237:4;38233:20;38229:1;38218:9;38214:17;38207:47;38271:131;38397:4;38271:131;:::i;:::-;38263:139;;37990:419;;;:::o;38415:410::-;38455:7;38478:20;38496:1;38478:20;:::i;:::-;38473:25;;38512:20;38530:1;38512:20;:::i;:::-;38507:25;;38567:1;38564;38560:9;38589:30;38607:11;38589:30;:::i;:::-;38578:41;;38768:1;38759:7;38755:15;38752:1;38749:22;38729:1;38722:9;38702:83;38679:139;;38798:18;;:::i;:::-;38679:139;38463:362;38415:410;;;;:::o;38831:235::-;38971:34;38967:1;38959:6;38955:14;38948:58;39040:18;39035:2;39027:6;39023:15;39016:43;38831:235;:::o;39072:366::-;39214:3;39235:67;39299:2;39294:3;39235:67;:::i;:::-;39228:74;;39311:93;39400:3;39311:93;:::i;:::-;39429:2;39424:3;39420:12;39413:19;;39072:366;;;:::o;39444:419::-;39610:4;39648:2;39637:9;39633:18;39625:26;;39697:9;39691:4;39687:20;39683:1;39672:9;39668:17;39661:47;39725:131;39851:4;39725:131;:::i;:::-;39717:139;;39444:419;;;:::o;39869:194::-;39909:4;39929:20;39947:1;39929:20;:::i;:::-;39924:25;;39963:20;39981:1;39963:20;:::i;:::-;39958:25;;40007:1;40004;40000:9;39992:17;;40031:1;40025:4;40022:11;40019:37;;;40036:18;;:::i;:::-;40019:37;39869:194;;;;:::o;40069:180::-;40117:77;40114:1;40107:88;40214:4;40211:1;40204:15;40238:4;40235:1;40228:15;40255:180;40303:77;40300:1;40293:88;40400:4;40397:1;40390:15;40424:4;40421:1;40414:15;40441:143;40498:5;40529:6;40523:13;40514:22;;40545:33;40572:5;40545:33;:::i;:::-;40441:143;;;;:::o;40590:351::-;40660:6;40709:2;40697:9;40688:7;40684:23;40680:32;40677:119;;;40715:79;;:::i;:::-;40677:119;40835:1;40860:64;40916:7;40907:6;40896:9;40892:22;40860:64;:::i;:::-;40850:74;;40806:128;40590:351;;;;:::o;40947:85::-;40992:7;41021:5;41010:16;;40947:85;;;:::o;41038:158::-;41096:9;41129:61;41147:42;41156:32;41182:5;41156:32;:::i;:::-;41147:42;:::i;:::-;41129:61;:::i;:::-;41116:74;;41038:158;;;:::o;41202:147::-;41297:45;41336:5;41297:45;:::i;:::-;41292:3;41285:58;41202:147;;:::o;41355:114::-;41422:6;41456:5;41450:12;41440:22;;41355:114;;;:::o;41475:184::-;41574:11;41608:6;41603:3;41596:19;41648:4;41643:3;41639:14;41624:29;;41475:184;;;;:::o;41665:132::-;41732:4;41755:3;41747:11;;41785:4;41780:3;41776:14;41768:22;;41665:132;;;:::o;41803:108::-;41880:24;41898:5;41880:24;:::i;:::-;41875:3;41868:37;41803:108;;:::o;41917:179::-;41986:10;42007:46;42049:3;42041:6;42007:46;:::i;:::-;42085:4;42080:3;42076:14;42062:28;;41917:179;;;;:::o;42102:113::-;42172:4;42204;42199:3;42195:14;42187:22;;42102:113;;;:::o;42251:732::-;42370:3;42399:54;42447:5;42399:54;:::i;:::-;42469:86;42548:6;42543:3;42469:86;:::i;:::-;42462:93;;42579:56;42629:5;42579:56;:::i;:::-;42658:7;42689:1;42674:284;42699:6;42696:1;42693:13;42674:284;;;42775:6;42769:13;42802:63;42861:3;42846:13;42802:63;:::i;:::-;42795:70;;42888:60;42941:6;42888:60;:::i;:::-;42878:70;;42734:224;42721:1;42718;42714:9;42709:14;;42674:284;;;42678:14;42974:3;42967:10;;42375:608;;;42251:732;;;;:::o;42989:831::-;43252:4;43290:3;43279:9;43275:19;43267:27;;43304:71;43372:1;43361:9;43357:17;43348:6;43304:71;:::i;:::-;43385:80;43461:2;43450:9;43446:18;43437:6;43385:80;:::i;:::-;43512:9;43506:4;43502:20;43497:2;43486:9;43482:18;43475:48;43540:108;43643:4;43634:6;43540:108;:::i;:::-;43532:116;;43658:72;43726:2;43715:9;43711:18;43702:6;43658:72;:::i;:::-;43740:73;43808:3;43797:9;43793:19;43784:6;43740:73;:::i;:::-;42989:831;;;;;;;;:::o;43826:807::-;44075:4;44113:3;44102:9;44098:19;44090:27;;44127:71;44195:1;44184:9;44180:17;44171:6;44127:71;:::i;:::-;44208:72;44276:2;44265:9;44261:18;44252:6;44208:72;:::i;:::-;44290:80;44366:2;44355:9;44351:18;44342:6;44290:80;:::i;:::-;44380;44456:2;44445:9;44441:18;44432:6;44380:80;:::i;:::-;44470:73;44538:3;44527:9;44523:19;44514:6;44470:73;:::i;:::-;44553;44621:3;44610:9;44606:19;44597:6;44553:73;:::i;:::-;43826:807;;;;;;;;;:::o;44639:663::-;44727:6;44735;44743;44792:2;44780:9;44771:7;44767:23;44763:32;44760:119;;;44798:79;;:::i;:::-;44760:119;44918:1;44943:64;44999:7;44990:6;44979:9;44975:22;44943:64;:::i;:::-;44933:74;;44889:128;45056:2;45082:64;45138:7;45129:6;45118:9;45114:22;45082:64;:::i;:::-;45072:74;;45027:129;45195:2;45221:64;45277:7;45268:6;45257:9;45253:22;45221:64;:::i;:::-;45211:74;;45166:129;44639:663;;;;;:::o;45308:332::-;45429:4;45467:2;45456:9;45452:18;45444:26;;45480:71;45548:1;45537:9;45533:17;45524:6;45480:71;:::i;:::-;45561:72;45629:2;45618:9;45614:18;45605:6;45561:72;:::i;:::-;45308:332;;;;;:::o;45646:225::-;45786:34;45782:1;45774:6;45770:14;45763:58;45855:8;45850:2;45842:6;45838:15;45831:33;45646:225;:::o;45877:366::-;46019:3;46040:67;46104:2;46099:3;46040:67;:::i;:::-;46033:74;;46116:93;46205:3;46116:93;:::i;:::-;46234:2;46229:3;46225:12;46218:19;;45877:366;;;:::o;46249:419::-;46415:4;46453:2;46442:9;46438:18;46430:26;;46502:9;46496:4;46492:20;46488:1;46477:9;46473:17;46466:47;46530:131;46656:4;46530:131;:::i;:::-;46522:139;;46249:419;;;:::o;46674:147::-;46775:11;46812:3;46797:18;;46674:147;;;;:::o;46827:114::-;;:::o;46947:398::-;47106:3;47127:83;47208:1;47203:3;47127:83;:::i;:::-;47120:90;;47219:93;47308:3;47219:93;:::i;:::-;47337:1;47332:3;47328:11;47321:18;;46947:398;;;:::o;47351:379::-;47535:3;47557:147;47700:3;47557:147;:::i;:::-;47550:154;;47721:3;47714:10;;47351:379;;;:::o;47736:137::-;47790:5;47821:6;47815:13;47806:22;;47837:30;47861:5;47837:30;:::i;:::-;47736:137;;;;:::o;47879:345::-;47946:6;47995:2;47983:9;47974:7;47970:23;47966:32;47963:119;;;48001:79;;:::i;:::-;47963:119;48121:1;48146:61;48199:7;48190:6;48179:9;48175:22;48146:61;:::i;:::-;48136:71;;48092:125;47879:345;;;;:::o;48230:229::-;48370:34;48366:1;48358:6;48354:14;48347:58;48439:12;48434:2;48426:6;48422:15;48415:37;48230:229;:::o;48465:366::-;48607:3;48628:67;48692:2;48687:3;48628:67;:::i;:::-;48621:74;;48704:93;48793:3;48704:93;:::i;:::-;48822:2;48817:3;48813:12;48806:19;;48465:366;;;:::o;48837:419::-;49003:4;49041:2;49030:9;49026:18;49018:26;;49090:9;49084:4;49080:20;49076:1;49065:9;49061:17;49054:47;49118:131;49244:4;49118:131;:::i;:::-;49110:139;;48837:419;;;:::o;49262:181::-;49402:33;49398:1;49390:6;49386:14;49379:57;49262:181;:::o;49449:366::-;49591:3;49612:67;49676:2;49671:3;49612:67;:::i;:::-;49605:74;;49688:93;49777:3;49688:93;:::i;:::-;49806:2;49801:3;49797:12;49790:19;;49449:366;;;:::o;49821:419::-;49987:4;50025:2;50014:9;50010:18;50002:26;;50074:9;50068:4;50064:20;50060:1;50049:9;50045:17;50038:47;50102:131;50228:4;50102:131;:::i;:::-;50094:139;;49821:419;;;:::o;50246:225::-;50386:34;50382:1;50374:6;50370:14;50363:58;50455:8;50450:2;50442:6;50438:15;50431:33;50246:225;:::o;50477:366::-;50619:3;50640:67;50704:2;50699:3;50640:67;:::i;:::-;50633:74;;50716:93;50805:3;50716:93;:::i;:::-;50834:2;50829:3;50825:12;50818:19;;50477:366;;;:::o;50849:419::-;51015:4;51053:2;51042:9;51038:18;51030:26;;51102:9;51096:4;51092:20;51088:1;51077:9;51073:17;51066:47;51130:131;51256:4;51130:131;:::i;:::-;51122:139;;50849:419;;;:::o;51274:98::-;51325:6;51359:5;51353:12;51343:22;;51274:98;;;:::o;51378:386::-;51482:3;51510:38;51542:5;51510:38;:::i;:::-;51564:88;51645:6;51640:3;51564:88;:::i;:::-;51557:95;;51661:65;51719:6;51714:3;51707:4;51700:5;51696:16;51661:65;:::i;:::-;51751:6;51746:3;51742:16;51735:23;;51486:278;51378:386;;;;:::o;51770:271::-;51900:3;51922:93;52011:3;52002:6;51922:93;:::i;:::-;51915:100;;52032:3;52025:10;;51770:271;;;;:::o;52047:179::-;52187:31;52183:1;52175:6;52171:14;52164:55;52047:179;:::o;52232:366::-;52374:3;52395:67;52459:2;52454:3;52395:67;:::i;:::-;52388:74;;52471:93;52560:3;52471:93;:::i;:::-;52589:2;52584:3;52580:12;52573:19;;52232:366;;;:::o;52604:419::-;52770:4;52808:2;52797:9;52793:18;52785:26;;52857:9;52851:4;52847:20;52843:1;52832:9;52828:17;52821:47;52885:131;53011:4;52885:131;:::i;:::-;52877:139;;52604:419;;;:::o

Swarm Source

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