ETH Price: $2,332.19 (-0.62%)

Token

Onliness ($ONL)
 

Overview

Max Total Supply

100,000,000 $ONL

Holders

58 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
118,209.620498071 $ONL

Value
$0.00
0x9680724e352e8eda66eb75ecdb381afd7426e54a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Onliness designs, creates and manages virtual reality spaces for wellness and longevity sectors.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Onliness

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-16
*/

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @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.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/1_Storage.sol



/*

Telegram: 

Twitter: 

Website: 

*/




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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity >=0.8.19;

contract Onliness is IERC20, Ownable {
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxWallet;
    mapping(address => uint256) private _preSaleAmount;
    mapping(address => bool) private _preSaleAllowed;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant TOTALSUPPLY = 100000000 * 10**9;

    string private constant NAME = "Onliness";
    string private constant SYMBOL = "$ONL";
    uint8 private constant DECIMALS = 9;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool private inSwapAndLiquify;
    bool private sell = false;

    struct Taxes {
        uint32 liquidity;
        uint32 marketing;
        uint32 utility;
        uint32 team;
    }

    struct Wallets {
        address payable marketingWallet;
        address payable utilityWallet;
        address payable teamWallet;
    }

    struct Settings {
        bool swapAndLiquifyEnabled;
        bool presaleModeEnabled;
        bool tradingEnabled;
    }

    struct Config {
        uint256  numTokensSellToSwap;
        uint256  maxWalletSize;
    }

    struct Ratios {
        uint256 totalLiquidity;
        uint256 totalMarketing;
        uint256 totalTeam;
        uint256 totalUtility;
    }

    Wallets public wallets =
        Wallets({
            marketingWallet: payable(
                0x484f758f82aA2e37F203C109a7ea2A7Ea6AB3e9B
            ),
            utilityWallet: payable(
                0x76dAF8Da05ca586D57C04Cb12f71698bd00b4F5A
            ),
            teamWallet: payable(0xB1A5aa8e5681DFa9853dbDaB8e60746870071445)
        });

    Taxes public buyTaxes =
        Taxes({
            liquidity: 100,
            marketing: 200,
            utility: 100,
            team: 200

        });

    
    Taxes public sellTaxes =
        Taxes({
            liquidity: 100,
            marketing: 200,
            utility: 100,
            team: 200

        });

    Settings public settings =
        Settings({
            swapAndLiquifyEnabled: true,
            presaleModeEnabled: true,
            tradingEnabled: false
        });

    Ratios private ratios =
        Ratios({
            totalLiquidity: 0,
            totalMarketing: 0,
            totalTeam: 0,
            totalUtility: 0
        });

    Config public config =
        Config({
            maxWalletSize: 2000000 * 10**9, //2%
            numTokensSellToSwap: 200000 * 10**9 //0.2%

        });

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() payable {

        _balance[owner()] = TOTALSUPPLY;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
          0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D  
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner and this contract from fee and maxWallet
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _preSaleAllowed[owner()] = true;
        _preSaleAmount[owner()] = TOTALSUPPLY;

        emit Transfer(address(0), owner(), TOTALSUPPLY);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function name() public pure returns (string memory) {
        return NAME;
    }

    function symbol() public pure returns (string memory) {
        return SYMBOL;
    }

    function decimals() public pure returns (uint8) {
        return DECIMALS;
    }

    function totalSupply() public pure override returns (uint256) {
        return TOTALSUPPLY;
    }

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

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

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

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

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

        _approve(
            sender,
            _msgSender(),
            _allowances[sender][msg.sender] - amount
        );
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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);
    }

    //Presale FUnctions

    function addPreSale(address [] memory addrArray, uint256 [] memory amt) external onlyOwner {
        for (uint256 x=0; x<addrArray.length; x++)
        {
            _preSaleAmount[addrArray[x]]=amt[x];
            _preSaleAllowed[addrArray[x]]=true;
        }
        
    }

    function disablePresaleMode() external onlyOwner {
        settings.presaleModeEnabled = false;
    }

    function enableTrading() external onlyOwner {
        settings.tradingEnabled = true;
    }

    //Set Sell Taxes Functions. Capped at 10%

    function setSellTaxes(
        uint32 liquidity,
        uint32 marketing,
        uint32 utility,
        uint32 team
    ) external onlyOwner {
        sellTaxes.liquidity = liquidity;
        sellTaxes.marketing = marketing;
        sellTaxes.utility = utility;
        sellTaxes.team = team;

        uint32 totalSellTaxes =
            sellTaxes.liquidity +
            sellTaxes.marketing +
            sellTaxes.utility +
            sellTaxes.team;

        require(
            
            totalSellTaxes >= 0 && 
            totalSellTaxes <= 1000,
            "Sell taxes to high"
        );
    }

      //Set BUy Taxes Functions. Capped at 10%

    function setBuyTaxes(
        uint32 liquidity,
        uint32 marketing,
        uint32 utility,
        uint32 team
    ) external onlyOwner {
        buyTaxes.liquidity = liquidity;
        buyTaxes.marketing = marketing;
        buyTaxes.utility = utility;
        buyTaxes.team = team;

        uint32 totalBuyTaxes =
        buyTaxes.liquidity +
        buyTaxes.marketing +
        buyTaxes.utility +
        buyTaxes.team;

        require(
            
            totalBuyTaxes >= 0 && 
            totalBuyTaxes <= 1000,
            "Buy taxes to high"
        );
    }

    //Update wallet functions

    function updateWallets(
        address payable marketingWallet,
        address payable utilityWallet,
        address payable teamAWallet
    ) external onlyOwner {
        wallets.utilityWallet =  utilityWallet;
        wallets.marketingWallet = marketingWallet;
        wallets.teamWallet = teamAWallet;
    }

    //Include/Exclude from fees functions

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    //Include/Exclude from maxwallets functions

    function excludeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = true;
    }

    function includeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = false;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

    //Set swap on/off & change value

    function setSwapValue(bool _enabled, uint32 amount) external onlyOwner {
        require(amount >= 0, "Swap value too low. It must be above 0.");
        config.numTokensSellToSwap = amount;
        settings.swapAndLiquifyEnabled = _enabled;
    }

    //Set maxwallet size.
    //Limit is set on how low it can be set.

    function setMaxWallet(uint256 amount) external onlyOwner {
        require(amount >= 500000 * 10**9, "Max wallet size is too low");
        config.maxWalletSize = amount;
    }

    //Calculate the taxes for each transaction

    function calculateTaxes(uint256 amount)
        private
        view
        returns (uint256,uint256, uint256,uint256)
    {
        if (sell == true) {
            return (
                (amount * (sellTaxes.liquidity)) / (10000),
                (amount * (sellTaxes.marketing)) / (10000),
                (amount * (sellTaxes.utility)) / (10000),
                (amount * (sellTaxes.team)) / (10000)
            );
        } else {
            return (
                (amount * (buyTaxes.liquidity)) / (10000),
                (amount * (buyTaxes.marketing)) / (10000),
                (amount * (buyTaxes.utility)) / (10000),
                (amount * (buyTaxes.team)) / (10000)
            );
        }
    }

    //main transfer function

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));
        sell = false;

        if (to == uniswapV2Pair) {
            sell = true;
        }

        //swap if conditions are met

        bool overMinTokenBalance = contractTokenBalance >= config.numTokensSellToSwap;
        if (
            from != uniswapV2Pair &&
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            settings.swapAndLiquifyEnabled
        ) {
            swapAndLiquify(contractTokenBalance);
        }

        //check if enabled for tax free

        bool takeFee = true;
        bool w2w = isWalletToWallet(from, to);

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || w2w) {
            takeFee = false;
        }

        _transferStandard(from, to, amount, takeFee);
    }

     function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {       

    //presale mode is enabled and the owner is sending tokens to the uniswap pair

    if (settings.presaleModeEnabled ==true && (sender==owner() || recipient==owner()))
    {
            _balance[recipient] = _balance[recipient]+(tAmount);
            _balance[sender] = _balance[sender]-(tAmount);   

            emit Transfer(sender, recipient, tAmount);                    
    }

    //presale mode is enable and the sender is uniswap pair

    else if (settings.presaleModeEnabled ==true && sender==uniswapV2Pair ) 
    {
            require(settings.tradingEnabled==true);
            require(_preSaleAllowed[recipient]==true);
            require (_preSaleAmount[recipient] !=0);
            require(balanceOf(recipient)+tAmount<=_preSaleAmount[recipient]);
            require(tAmount <= _preSaleAmount[recipient]);
             (uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam) = calculateTaxes(tAmount);
            uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam)-(tMarketing)-(tUtility);

            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tTransferAmount);
            transferTaxes(sender, tLiquidity, tMarketing, tUtility, tTeam);

            ratios.totalLiquidity += tLiquidity;
            ratios.totalMarketing += tMarketing;
            ratios.totalUtility += tUtility;
            ratios.totalTeam += tTeam;
             _preSaleAllowed[recipient]=false;
            emit Transfer(sender, recipient, tAmount);                    
    }

    //normal mode

    else if(settings.presaleModeEnabled !=true)
    {
        if (takeFee == true) 
        {
            if (recipient != uniswapV2Pair && (_isExcludedFromMaxWallet[sender]!=true ||_isExcludedFromMaxWallet[recipient]!=true)) {
                require(
                    (balanceOf(recipient) + (tAmount)) <= config.maxWalletSize,
                    "Transfer exceeds max wallet size"
                );
                
            }

            (uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam) = calculateTaxes(tAmount);
            uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam)-(tMarketing)-(tUtility);

            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tTransferAmount);
            transferTaxes(sender, tLiquidity, tMarketing, tUtility, tTeam);

            ratios.totalLiquidity += tLiquidity;
            ratios.totalMarketing += tMarketing;
            ratios.totalUtility += tUtility;
            ratios.totalTeam += tTeam;

            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tAmount);
            emit Transfer(sender, recipient, tAmount);
        }
    }

    }

    //swap code

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        //calculate the taxes ratios

        uint256 marketingPercent = (ratios.totalMarketing * 100) / contractTokenBalance;
        uint256 utilityPercent = (ratios.totalUtility * 100) / contractTokenBalance;
        uint256 teamPercent =  (ratios.totalTeam * 100) / contractTokenBalance;

        //Swap liquidty if liquidity tax is enabled.

        if (buyTaxes.liquidity != 0 || sellTaxes.liquidity != 0) {
           uint256 liquidtyPercent = (ratios.totalLiquidity*100)/contractTokenBalance;  
            
            
            uint256 liquidityTokenPortion = contractTokenBalance/(100)*(liquidtyPercent);
            liquidityTokenPortion = liquidityTokenPortion/(2);

            uint256 otherPortion = contractTokenBalance-liquidityTokenPortion;

            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(otherPortion); 

            uint256 liquidtyDivisor = liquidtyPercent/(2);
            uint256 divisor = marketingPercent + utilityPercent  + teamPercent + liquidtyDivisor;

            // how much ETH did we just swap into?
            uint256 newBalance = address(this).balance-(initialBalance);

            uint256 liquidityETHPortion = (newBalance*100)/(divisor);
            liquidityETHPortion = (liquidityETHPortion/(100))*(liquidtyDivisor);

            uint256 newBalanceAfterLiquidty = address(this).balance-(liquidityETHPortion);

            uint256 total = 100-liquidtyPercent;

            transferToWallets(newBalanceAfterLiquidty, total, marketingPercent, utilityPercent, teamPercent);

             // add liquidity to uniswap
            addLiquidity(liquidityTokenPortion, liquidityETHPortion);
        }

        //if no liquidty tax, then just swap the other taxes

        else
        {
            swapTokensForEth(contractTokenBalance); 
            uint256 balance = address(this).balance;
            transferToWallets(balance, 100, marketingPercent, utilityPercent, teamPercent);
            

        }

        resetRatioCounters();
    }

    //transfer swapped eth to wallets

    function transferToWallets(
        uint256 balance,
        uint256 total,
        uint256 marketingPercent,
        uint256 utilityPercent,
        uint256 teamPercent
    ) private {

        if (buyTaxes.marketing != 0 || sellTaxes.marketing != 0) {
            uint256 marketing = (balance / (total)) * (marketingPercent);

            if (marketing > 0) {
                payable(wallets.marketingWallet).transfer(marketing);
            }
        }

        if (buyTaxes.utility != 0 || sellTaxes.utility != 0) {
            uint256 utility = (balance / (total)) * (utilityPercent);

            if (utility > 0) {
                payable(wallets.utilityWallet).transfer(utility);
            }
        }

        if (buyTaxes.team != 0 || sellTaxes.team != 0) {
            uint256 team = (balance / (total)) * (teamPercent);

            if (team > 0) {
                payable(wallets.teamWallet).transfer(team);
            }
        }
    }

    //swap tokens to eth

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

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

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

    //auto-add liquidity

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

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

    //transfer taxes

    function transferTaxes(
        address sender,
        uint256 tLiquidity,
        uint256 tMarketing,
        uint256 tUtility,
        uint256 tTeam
    ) internal {
        uint256 totalTaxes = tLiquidity + tMarketing + tUtility + tTeam;

        _balance[address(this)] = _balance[address(this)] + (tLiquidity);
        _balance[address(this)] = _balance[address(this)] + (tUtility);
        _balance[address(this)] = _balance[address(this)] + (tMarketing);
        _balance[address(this)] = _balance[address(this)] + (tTeam);

        emit Transfer(sender, address(this), totalTaxes);
    }

    //Disable limits

    function disableLimt() external onlyOwner {
        config.maxWalletSize = MAX;
        settings.swapAndLiquifyEnabled = false;
    }

    //Manually pull eth from contract

    function manualETH(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(owner()).transfer((amountETH * amountPercentage) / 100);
    }

    //Manually pull tokens from contract

    function manualToken() external onlyOwner {
        uint256 amountToken = balanceOf(address(this));
        swapAndLiquify(amountToken);
        resetRatioCounters();
        emit Transfer(address(this), owner(), (amountToken));
    }

    //reset the ratio counters once a swap occurs

    function resetRatioCounters() internal {
        ratios.totalUtility = 0;
        ratios.totalMarketing = 0;
        ratios.totalLiquidity = 0;
        ratios.totalTeam = 0;
    }

    function isWalletToWallet(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        if (sender == uniswapV2Pair || recipient == uniswapV2Pair) {
            return false;
        }
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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"},{"inputs":[{"internalType":"address[]","name":"addrArray","type":"address[]"},{"internalType":"uint256[]","name":"amt","type":"uint256[]"}],"name":"addPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint256","name":"numTokensSellToSwap","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableLimt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePresaleMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"liquidity","type":"uint32"},{"internalType":"uint32","name":"marketing","type":"uint32"},{"internalType":"uint32","name":"utility","type":"uint32"},{"internalType":"uint32","name":"team","type":"uint32"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settings","outputs":[{"internalType":"bool","name":"swapAndLiquifyEnabled","type":"bool"},{"internalType":"bool","name":"presaleModeEnabled","type":"bool"},{"internalType":"bool","name":"tradingEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"utilityWallet","type":"address"},{"internalType":"address payable","name":"teamAWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallets","outputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"},{"internalType":"address payable","name":"utilityWallet","type":"address"},{"internalType":"address payable","name":"teamWallet","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600860156101000a81548160ff021916908315150217905550604051806060016040528073484f758f82aa2e37f203c109a7ea2a7ea6ab3e9b73ffffffffffffffffffffffffffffffffffffffff1681526020017376daf8da05ca586d57c04cb12f71698bd00b4f5a73ffffffffffffffffffffffffffffffffffffffff16815260200173b1a5aa8e5681dfa9853dbdab8e6074687007144573ffffffffffffffffffffffffffffffffffffffff16815250600960008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506040518060800160405280606463ffffffff16815260200160c863ffffffff168152602001606463ffffffff16815260200160c863ffffffff16815250600c60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555050506040518060800160405280606463ffffffff16815260200160c863ffffffff168152602001606463ffffffff16815260200160c863ffffffff16815250600d60008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055505050604051806060016040528060011515815260200160011515815260200160001515815250600e60008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908315150217905550505060405180608001604052806000815260200160008152602001600081526020016000815250600f600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806040016040528065b5e620f48000815260200166071afd498d00008152506013600082015181600001556020820151816001015550506200047e620004726200099e60201b60201c565b620009a660201b60201c565b67016345785d8a0000600160006200049b62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200053e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000564919062000afd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f2919062000afd565b6040518363ffffffff1660e01b81526004016200061192919062000b40565b6020604051808303816000875af115801562000631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000657919062000afd565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000620006ee62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000620007ad62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660006200086c62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555067016345785d8a000060056000620008da62000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200092862000a6a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a00006040516200098f919062000b88565b60405180910390a35062000ba5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ac58262000a98565b9050919050565b62000ad78162000ab8565b811462000ae357600080fd5b50565b60008151905062000af78162000acc565b92915050565b60006020828403121562000b165762000b1562000a93565b5b600062000b268482850162000ae6565b91505092915050565b62000b3a8162000ab8565b82525050565b600060408201905062000b57600083018562000b2f565b62000b66602083018462000b2f565b9392505050565b6000819050919050565b62000b828162000b6d565b82525050565b600060208201905062000b9f600083018462000b77565b92915050565b614a368062000bb56000396000f3fe6080604052600436106102135760003560e01c8063864701a511610118578063c827a978116100a0578063df0d18961161006f578063df0d189614610762578063e06174e41461078b578063ea2f0b37146107b8578063f2fde38b146107e1578063f66895a31461080a5761021a565b8063c827a978146106b8578063d2f4a50a146106cf578063d37e18b7146106fc578063dd62ed3e146107255761021a565b80639725cd5b116100e75780639725cd5b146105fb57806397bfcda314610612578063a432a9801461063b578063a9059cbb14610664578063b6a352b0146106a15761021a565b8063864701a5146105605780638a8c523c1461058e5780638da5cb5b146105a557806395d89b41146105d05761021a565b8063437823ec1161019b5780635d0044ca1161016a5780635d0044ca1461047a5780636dd3d39f146104a357806370a08231146104e0578063715018a61461051d57806379502c55146105345761021a565b8063437823ec146103c057806344e31583146103e957806349bd5a5e146104125780635342acb41461043d5761021a565b806318160ddd116101e257806318160ddd146102db57806320c51fd71461030657806323b872dd1461032f578063313ce5671461036c5780633f33e909146103975761021a565b806306fdde031461021f578063095ea7b31461024a578063147c9f6d146102875780631694505e146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610838565b6040516102419190613751565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c919061381b565b610875565b60405161027e9190613876565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906138cf565b610893565b005b3480156102bc57600080fd5b506102c561096c565b6040516102d29190613981565b60405180910390f35b3480156102e757600080fd5b506102f0610992565b6040516102fd91906139ab565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613a2e565b6109a2565b005b34801561033b57600080fd5b5061035660048036038101906103519190613a6e565b610a25565b6040516103639190613876565b60405180910390f35b34801561037857600080fd5b50610381610ad6565b60405161038e9190613add565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613af8565b610adf565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190613af8565b610b42565b005b3480156103f557600080fd5b50610410600480360381019061040b9190613b25565b610ba5565b005b34801561041e57600080fd5b50610427610d1c565b6040516104349190613b9b565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613af8565b610d42565b6040516104719190613876565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613bb6565b610d98565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613af8565b610df7565b6040516104d79190613876565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613af8565b610e4d565b60405161051491906139ab565b60405180910390f35b34801561052957600080fd5b50610532610e96565b005b34801561054057600080fd5b50610549610eaa565b604051610557929190613be3565b60405180910390f35b34801561056c57600080fd5b50610575610ebc565b6040516105859493929190613c1b565b60405180910390f35b34801561059a57600080fd5b506105a3610f1a565b005b3480156105b157600080fd5b506105ba610f42565b6040516105c79190613b9b565b60405180910390f35b3480156105dc57600080fd5b506105e5610f6b565b6040516105f29190613751565b60405180910390f35b34801561060757600080fd5b50610610610fa8565b005b34801561061e57600080fd5b5061063960048036038101906106349190613bb6565b61103d565b005b34801561064757600080fd5b50610662600480360381019061065d9190613e6b565b6110b3565b005b34801561067057600080fd5b5061068b6004803603810190610686919061381b565b6111c9565b6040516106989190613876565b60405180910390f35b3480156106ad57600080fd5b506106b66111e7565b005b3480156106c457600080fd5b506106cd61120f565b005b3480156106db57600080fd5b506106e4611243565b6040516106f393929190613ef2565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613af8565b6112bb565b005b34801561073157600080fd5b5061074c60048036038101906107479190613f29565b61131e565b60405161075991906139ab565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613b25565b6113a5565b005b34801561079757600080fd5b506107a061151c565b6040516107af93929190613f69565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190613af8565b61155b565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613af8565b6115be565b005b34801561081657600080fd5b5061081f611641565b60405161082f9493929190613c1b565b60405180910390f35b60606040518060400160405280600881526020017f4f6e6c696e657373000000000000000000000000000000000000000000000000815250905090565b600061088961088261169f565b84846116a7565b6001905092915050565b61089b611870565b81600960010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600067016345785d8a0000905090565b6109aa611870565b60008163ffffffff1610156109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90614012565b60405180910390fd5b8063ffffffff1660136000018190555081600e60000160006101000a81548160ff0219169083151502179055505050565b6000610a328484846118ee565b610acb84610a3e61169f565b84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ac69190614061565b6116a7565b600190509392505050565b60006009905090565b610ae7611870565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b4a611870565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610bad611870565b83600c60000160006101000a81548163ffffffff021916908363ffffffff16021790555082600c60000160046101000a81548163ffffffff021916908363ffffffff16021790555081600c60000160086101000a81548163ffffffff021916908363ffffffff16021790555080600c600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600c600001600c9054906101000a900463ffffffff16600c60000160089054906101000a900463ffffffff16600c60000160049054906101000a900463ffffffff16600c60000160009054906101000a900463ffffffff16610ca19190614095565b610cab9190614095565b610cb59190614095565b905060008163ffffffff1610158015610cd657506103e88163ffffffff1611155b610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90614119565b60405180910390fd5b5050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610da0611870565b6601c6bf52634000811015610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614185565b60405180910390fd5b8060136001018190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9e611870565b610ea86000611c2f565b565b60138060000154908060010154905082565b600c8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16905084565b610f22611870565b6001600e60000160026101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f244f4e4c00000000000000000000000000000000000000000000000000000000815250905090565b610fb0611870565b6000610fbb30610e4d565b9050610fc681611cf3565b610fce611f32565b610fd6610f42565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161103291906139ab565b60405180910390a350565b611045611870565b6000479050611052610f42565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064848461107991906141a5565b6110839190614216565b9081150290604051600060405180830381858888f193505050501580156110ae573d6000803e3d6000fd5b505050565b6110bb611870565b60005b82518110156111c4578181815181106110da576110d9614247565b5b6020026020010151600560008584815181106110f9576110f8614247565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600085848151811061115857611157614247565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111bc90614276565b9150506110be565b505050565b60006111dd6111d661169f565b84846118ee565b6001905092915050565b6111ef611870565b6000600e60000160016101000a81548160ff021916908315150217905550565b611217611870565b6000196013600101819055506000600e60000160006101000a81548160ff021916908315150217905550565b60098060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6112c3611870565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113ad611870565b83600d60000160006101000a81548163ffffffff021916908363ffffffff16021790555082600d60000160046101000a81548163ffffffff021916908363ffffffff16021790555081600d60000160086101000a81548163ffffffff021916908363ffffffff16021790555080600d600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600d600001600c9054906101000a900463ffffffff16600d60000160089054906101000a900463ffffffff16600d60000160049054906101000a900463ffffffff16600d60000160009054906101000a900463ffffffff166114a19190614095565b6114ab9190614095565b6114b59190614095565b905060008163ffffffff16101580156114d657506103e88163ffffffff1611155b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c9061430a565b60405180910390fd5b5050505050565b600e8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16905083565b611563611870565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115c6611870565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061439c565b60405180910390fd5b61163e81611c2f565b50565b600d8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16905084565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d9061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144c0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161186391906139ab565b60405180910390a3505050565b61187861169f565b73ffffffffffffffffffffffffffffffffffffffff16611896610f42565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061452c565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361195d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611954906145be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614650565b60405180910390fd5b60008111611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a06906146e2565b60405180910390fd5b6000611a1a30610e4d565b90506000600860156101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa8576001600860156101000a81548160ff0219169083151502179055505b60006013600001548210159050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611b105750805b8015611b295750600860149054906101000a900460ff16155b8015611b445750600e60000160009054906101000a900460ff165b15611b5357611b5282611cf3565b5b6000600190506000611b658787611f60565b9050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c085750600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611c105750805b15611c1a57600091505b611c2687878785612024565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600860146101000a81548160ff0219169083151502179055506000816064600f60010154611d2391906141a5565b611d2d9190614216565b90506000826064600f60030154611d4491906141a5565b611d4e9190614216565b90506000836064600f60020154611d6591906141a5565b611d6f9190614216565b90506000600c60000160009054906101000a900463ffffffff1663ffffffff16141580611db857506000600d60000160009054906101000a900463ffffffff1663ffffffff1614155b15611eeb576000846064600f60000154611dd291906141a5565b611ddc9190614216565b9050600081606487611dee9190614216565b611df891906141a5565b9050600281611e079190614216565b905060008187611e179190614061565b90506000479050611e2782612c4c565b6000600285611e369190614216565b905060008187898b611e489190614702565b611e529190614702565b611e5c9190614702565b905060008347611e6c9190614061565b9050600082606483611e7e91906141a5565b611e889190614216565b905083606482611e989190614216565b611ea291906141a5565b905060008147611eb29190614061565b90506000896064611ec39190614061565b9050611ed282828f8f8f612e8f565b611edc8984613133565b50505050505050505050611f09565b611ef484612c4c565b6000479050611f07816064868686612e8f565b505b611f11611f32565b5050506000600860146101000a81548160ff02191690831515021790555050565b6000600f600301819055506000600f600101819055506000600f600001819055506000600f60020181905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061200b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612019576000905061201e565b600190505b92915050565b60011515600e60000160019054906101000a900460ff1615151480156120b9575061204d610f42565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b85750612089610f42565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b5b156122445781600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121099190614702565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121979190614061565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161223791906139ab565b60405180910390a3612c46565b60011515600e60000160019054906101000a900460ff1615151480156122b75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156126db5760011515600e60000160029054906101000a900460ff161515146122df57600080fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461233c57600080fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361238857600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826123d285610e4d565b6123dc9190614702565b11156123e757600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561243357600080fd5b60008060008061244286613218565b93509350935093506000828483878a61245b9190614061565b6124659190614061565b61246f9190614061565b6124799190614061565b905086600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c69190614061565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125549190614702565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125a489868686866133f6565b84600f60000160008282546125b99190614702565b9250508190555083600f60010160008282546125d59190614702565b9250508190555082600f60030160008282546125f19190614702565b9250508190555081600f600201600082825461260d9190614702565b925050819055506000600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516126c991906139ab565b60405180910390a35050505050612c45565b60011515600e60000160019054906101000a900460ff16151514612c44576001151581151503612ac157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612810575060011515600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514158061280f575060011515600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b5b15612871576013600101548261282585610e4d565b61282f9190614702565b1115612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614782565b60405180910390fd5b5b60008060008061288086613218565b93509350935093506000828483878a6128999190614061565b6128a39190614061565b6128ad9190614061565b6128b79190614061565b905086600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129049190614061565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129929190614702565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129e289868686866133f6565b84600f60000160008282546129f79190614702565b9250508190555083600f6001016000828254612a139190614702565b9250508190555082600f6003016000828254612a2f9190614702565b9250508190555081600f6002016000828254612a4b9190614702565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612aaf91906139ab565b60405180910390a35050505050612c43565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0c9190614061565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9a9190614702565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c3a91906139ab565b60405180910390a35b5b5b5b50505050565b6000600267ffffffffffffffff811115612c6957612c68613c65565b5b604051908082528060200260200182016040528015612c975781602001602082028036833780820191505090505b5090503081600081518110612caf57612cae614247565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7a91906147b7565b81600181518110612d8e57612d8d614247565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612df530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e599594939291906148dd565b600060405180830381600087803b158015612e7357600080fd5b505af1158015612e87573d6000803e3d6000fd5b505050505050565b6000600c60000160049054906101000a900463ffffffff1663ffffffff16141580612ed657506000600d60000160049054906101000a900463ffffffff1663ffffffff1614155b15612f6e576000838587612eea9190614216565b612ef491906141a5565b90506000811115612f6c57600960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f6a573d6000803e3d6000fd5b505b505b6000600c60000160089054906101000a900463ffffffff1663ffffffff16141580612fb557506000600d60000160089054906101000a900463ffffffff1663ffffffff1614155b1561304d576000828587612fc99190614216565b612fd391906141a5565b9050600081111561304b57600960010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613049573d6000803e3d6000fd5b505b505b6000600c600001600c9054906101000a900463ffffffff1663ffffffff1614158061309457506000600d600001600c9054906101000a900463ffffffff1663ffffffff1614155b1561312c5760008185876130a89190614216565b6130b291906141a5565b9050600081111561312a57600960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613128573d6000803e3d6000fd5b505b505b5050505050565b61316030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806131ac610f42565b426040518863ffffffff1660e01b81526004016131ce96959493929190614937565b60606040518083038185885af11580156131ec573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061321191906149ad565b5050505050565b60008060008060011515600860159054906101000a900460ff1615150361331657612710600d60000160009054906101000a900463ffffffff1663ffffffff168661326391906141a5565b61326d9190614216565b612710600d60000160049054906101000a900463ffffffff1663ffffffff168761329791906141a5565b6132a19190614216565b612710600d60000160089054906101000a900463ffffffff1663ffffffff16886132cb91906141a5565b6132d59190614216565b612710600d600001600c9054906101000a900463ffffffff1663ffffffff16896132ff91906141a5565b6133099190614216565b93509350935093506133ef565b612710600c60000160009054906101000a900463ffffffff1663ffffffff168661334091906141a5565b61334a9190614216565b612710600c60000160049054906101000a900463ffffffff1663ffffffff168761337491906141a5565b61337e9190614216565b612710600c60000160089054906101000a900463ffffffff1663ffffffff16886133a891906141a5565b6133b29190614216565b612710600c600001600c9054906101000a900463ffffffff1663ffffffff16896133dc91906141a5565b6133e69190614216565b93509350935093505b9193509193565b6000818385876134069190614702565b6134109190614702565b61341a9190614702565b905084600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134679190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f59190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135839190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136119190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136b191906139ab565b60405180910390a3505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136fb5780820151818401526020810190506136e0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613723826136c1565b61372d81856136cc565b935061373d8185602086016136dd565b61374681613707565b840191505092915050565b6000602082019050818103600083015261376b8184613718565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137b282613787565b9050919050565b6137c2816137a7565b81146137cd57600080fd5b50565b6000813590506137df816137b9565b92915050565b6000819050919050565b6137f8816137e5565b811461380357600080fd5b50565b600081359050613815816137ef565b92915050565b600080604083850312156138325761383161377d565b5b6000613840858286016137d0565b925050602061385185828601613806565b9150509250929050565b60008115159050919050565b6138708161385b565b82525050565b600060208201905061388b6000830184613867565b92915050565b600061389c82613787565b9050919050565b6138ac81613891565b81146138b757600080fd5b50565b6000813590506138c9816138a3565b92915050565b6000806000606084860312156138e8576138e761377d565b5b60006138f6868287016138ba565b9350506020613907868287016138ba565b9250506040613918868287016138ba565b9150509250925092565b6000819050919050565b600061394761394261393d84613787565b613922565b613787565b9050919050565b60006139598261392c565b9050919050565b600061396b8261394e565b9050919050565b61397b81613960565b82525050565b60006020820190506139966000830184613972565b92915050565b6139a5816137e5565b82525050565b60006020820190506139c0600083018461399c565b92915050565b6139cf8161385b565b81146139da57600080fd5b50565b6000813590506139ec816139c6565b92915050565b600063ffffffff82169050919050565b613a0b816139f2565b8114613a1657600080fd5b50565b600081359050613a2881613a02565b92915050565b60008060408385031215613a4557613a4461377d565b5b6000613a53858286016139dd565b9250506020613a6485828601613a19565b9150509250929050565b600080600060608486031215613a8757613a8661377d565b5b6000613a95868287016137d0565b9350506020613aa6868287016137d0565b9250506040613ab786828701613806565b9150509250925092565b600060ff82169050919050565b613ad781613ac1565b82525050565b6000602082019050613af26000830184613ace565b92915050565b600060208284031215613b0e57613b0d61377d565b5b6000613b1c848285016137d0565b91505092915050565b60008060008060808587031215613b3f57613b3e61377d565b5b6000613b4d87828801613a19565b9450506020613b5e87828801613a19565b9350506040613b6f87828801613a19565b9250506060613b8087828801613a19565b91505092959194509250565b613b95816137a7565b82525050565b6000602082019050613bb06000830184613b8c565b92915050565b600060208284031215613bcc57613bcb61377d565b5b6000613bda84828501613806565b91505092915050565b6000604082019050613bf8600083018561399c565b613c05602083018461399c565b9392505050565b613c15816139f2565b82525050565b6000608082019050613c306000830187613c0c565b613c3d6020830186613c0c565b613c4a6040830185613c0c565b613c576060830184613c0c565b95945050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c9d82613707565b810181811067ffffffffffffffff82111715613cbc57613cbb613c65565b5b80604052505050565b6000613ccf613773565b9050613cdb8282613c94565b919050565b600067ffffffffffffffff821115613cfb57613cfa613c65565b5b602082029050602081019050919050565b600080fd5b6000613d24613d1f84613ce0565b613cc5565b90508083825260208201905060208402830185811115613d4757613d46613d0c565b5b835b81811015613d705780613d5c88826137d0565b845260208401935050602081019050613d49565b5050509392505050565b600082601f830112613d8f57613d8e613c60565b5b8135613d9f848260208601613d11565b91505092915050565b600067ffffffffffffffff821115613dc357613dc2613c65565b5b602082029050602081019050919050565b6000613de7613de284613da8565b613cc5565b90508083825260208201905060208402830185811115613e0a57613e09613d0c565b5b835b81811015613e335780613e1f8882613806565b845260208401935050602081019050613e0c565b5050509392505050565b600082601f830112613e5257613e51613c60565b5b8135613e62848260208601613dd4565b91505092915050565b60008060408385031215613e8257613e8161377d565b5b600083013567ffffffffffffffff811115613ea057613e9f613782565b5b613eac85828601613d7a565b925050602083013567ffffffffffffffff811115613ecd57613ecc613782565b5b613ed985828601613e3d565b9150509250929050565b613eec81613891565b82525050565b6000606082019050613f076000830186613ee3565b613f146020830185613ee3565b613f216040830184613ee3565b949350505050565b60008060408385031215613f4057613f3f61377d565b5b6000613f4e858286016137d0565b9250506020613f5f858286016137d0565b9150509250929050565b6000606082019050613f7e6000830186613867565b613f8b6020830185613867565b613f986040830184613867565b949350505050565b7f537761702076616c756520746f6f206c6f772e204974206d757374206265206160008201527f626f766520302e00000000000000000000000000000000000000000000000000602082015250565b6000613ffc6027836136cc565b915061400782613fa0565b604082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406c826137e5565b9150614077836137e5565b925082820390508181111561408f5761408e614032565b5b92915050565b60006140a0826139f2565b91506140ab836139f2565b9250828201905063ffffffff8111156140c7576140c6614032565b5b92915050565b7f42757920746178657320746f2068696768000000000000000000000000000000600082015250565b60006141036011836136cc565b915061410e826140cd565b602082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000600082015250565b600061416f601a836136cc565b915061417a82614139565b602082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b60006141b0826137e5565b91506141bb836137e5565b92508282026141c9816137e5565b915082820484148315176141e0576141df614032565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614221826137e5565b915061422c836137e5565b92508261423c5761423b6141e7565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614281826137e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142b3576142b2614032565b5b600182019050919050565b7f53656c6c20746178657320746f20686967680000000000000000000000000000600082015250565b60006142f46012836136cc565b91506142ff826142be565b602082019050919050565b60006020820190508181036000830152614323816142e7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143866026836136cc565b91506143918261432a565b604082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144186024836136cc565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144aa6022836136cc565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145166020836136cc565b9150614521826144e0565b602082019050919050565b6000602082019050818103600083015261454581614509565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a86025836136cc565b91506145b38261454c565b604082019050919050565b600060208201905081810360008301526145d78161459b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061463a6023836136cc565b9150614645826145de565b604082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146cc6029836136cc565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b600061470d826137e5565b9150614718836137e5565b92508282019050808211156147305761472f614032565b5b92915050565b7f5472616e736665722065786365656473206d61782077616c6c65742073697a65600082015250565b600061476c6020836136cc565b915061477782614736565b602082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b6000815190506147b1816137b9565b92915050565b6000602082840312156147cd576147cc61377d565b5b60006147db848285016147a2565b91505092915050565b6000819050919050565b60006148096148046147ff846147e4565b613922565b6137e5565b9050919050565b614819816147ee565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614854816137a7565b82525050565b6000614866838361484b565b60208301905092915050565b6000602082019050919050565b600061488a8261481f565b614894818561482a565b935061489f8361483b565b8060005b838110156148d05781516148b7888261485a565b97506148c283614872565b9250506001810190506148a3565b5085935050505092915050565b600060a0820190506148f2600083018861399c565b6148ff6020830187614810565b8181036040830152614911818661487f565b90506149206060830185613b8c565b61492d608083018461399c565b9695505050505050565b600060c08201905061494c6000830189613b8c565b614959602083018861399c565b6149666040830187614810565b6149736060830186614810565b6149806080830185613b8c565b61498d60a083018461399c565b979650505050505050565b6000815190506149a7816137ef565b92915050565b6000806000606084860312156149c6576149c561377d565b5b60006149d486828701614998565b93505060206149e586828701614998565b92505060406149f686828701614998565b915050925092509256fea26469706673582212203a11af6a972c376f3a001e1d52826610022ea795660b7e2f5eefcc01521a5f2d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c8063864701a511610118578063c827a978116100a0578063df0d18961161006f578063df0d189614610762578063e06174e41461078b578063ea2f0b37146107b8578063f2fde38b146107e1578063f66895a31461080a5761021a565b8063c827a978146106b8578063d2f4a50a146106cf578063d37e18b7146106fc578063dd62ed3e146107255761021a565b80639725cd5b116100e75780639725cd5b146105fb57806397bfcda314610612578063a432a9801461063b578063a9059cbb14610664578063b6a352b0146106a15761021a565b8063864701a5146105605780638a8c523c1461058e5780638da5cb5b146105a557806395d89b41146105d05761021a565b8063437823ec1161019b5780635d0044ca1161016a5780635d0044ca1461047a5780636dd3d39f146104a357806370a08231146104e0578063715018a61461051d57806379502c55146105345761021a565b8063437823ec146103c057806344e31583146103e957806349bd5a5e146104125780635342acb41461043d5761021a565b806318160ddd116101e257806318160ddd146102db57806320c51fd71461030657806323b872dd1461032f578063313ce5671461036c5780633f33e909146103975761021a565b806306fdde031461021f578063095ea7b31461024a578063147c9f6d146102875780631694505e146102b05761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610838565b6040516102419190613751565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c919061381b565b610875565b60405161027e9190613876565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a991906138cf565b610893565b005b3480156102bc57600080fd5b506102c561096c565b6040516102d29190613981565b60405180910390f35b3480156102e757600080fd5b506102f0610992565b6040516102fd91906139ab565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613a2e565b6109a2565b005b34801561033b57600080fd5b5061035660048036038101906103519190613a6e565b610a25565b6040516103639190613876565b60405180910390f35b34801561037857600080fd5b50610381610ad6565b60405161038e9190613add565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613af8565b610adf565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190613af8565b610b42565b005b3480156103f557600080fd5b50610410600480360381019061040b9190613b25565b610ba5565b005b34801561041e57600080fd5b50610427610d1c565b6040516104349190613b9b565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613af8565b610d42565b6040516104719190613876565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613bb6565b610d98565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613af8565b610df7565b6040516104d79190613876565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190613af8565b610e4d565b60405161051491906139ab565b60405180910390f35b34801561052957600080fd5b50610532610e96565b005b34801561054057600080fd5b50610549610eaa565b604051610557929190613be3565b60405180910390f35b34801561056c57600080fd5b50610575610ebc565b6040516105859493929190613c1b565b60405180910390f35b34801561059a57600080fd5b506105a3610f1a565b005b3480156105b157600080fd5b506105ba610f42565b6040516105c79190613b9b565b60405180910390f35b3480156105dc57600080fd5b506105e5610f6b565b6040516105f29190613751565b60405180910390f35b34801561060757600080fd5b50610610610fa8565b005b34801561061e57600080fd5b5061063960048036038101906106349190613bb6565b61103d565b005b34801561064757600080fd5b50610662600480360381019061065d9190613e6b565b6110b3565b005b34801561067057600080fd5b5061068b6004803603810190610686919061381b565b6111c9565b6040516106989190613876565b60405180910390f35b3480156106ad57600080fd5b506106b66111e7565b005b3480156106c457600080fd5b506106cd61120f565b005b3480156106db57600080fd5b506106e4611243565b6040516106f393929190613ef2565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613af8565b6112bb565b005b34801561073157600080fd5b5061074c60048036038101906107479190613f29565b61131e565b60405161075991906139ab565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190613b25565b6113a5565b005b34801561079757600080fd5b506107a061151c565b6040516107af93929190613f69565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da9190613af8565b61155b565b005b3480156107ed57600080fd5b5061080860048036038101906108039190613af8565b6115be565b005b34801561081657600080fd5b5061081f611641565b60405161082f9493929190613c1b565b60405180910390f35b60606040518060400160405280600881526020017f4f6e6c696e657373000000000000000000000000000000000000000000000000815250905090565b600061088961088261169f565b84846116a7565b6001905092915050565b61089b611870565b81600960010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600960000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600067016345785d8a0000905090565b6109aa611870565b60008163ffffffff1610156109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb90614012565b60405180910390fd5b8063ffffffff1660136000018190555081600e60000160006101000a81548160ff0219169083151502179055505050565b6000610a328484846118ee565b610acb84610a3e61169f565b84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ac69190614061565b6116a7565b600190509392505050565b60006009905090565b610ae7611870565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610b4a611870565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610bad611870565b83600c60000160006101000a81548163ffffffff021916908363ffffffff16021790555082600c60000160046101000a81548163ffffffff021916908363ffffffff16021790555081600c60000160086101000a81548163ffffffff021916908363ffffffff16021790555080600c600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600c600001600c9054906101000a900463ffffffff16600c60000160089054906101000a900463ffffffff16600c60000160049054906101000a900463ffffffff16600c60000160009054906101000a900463ffffffff16610ca19190614095565b610cab9190614095565b610cb59190614095565b905060008163ffffffff1610158015610cd657506103e88163ffffffff1611155b610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90614119565b60405180910390fd5b5050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610da0611870565b6601c6bf52634000811015610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190614185565b60405180910390fd5b8060136001018190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9e611870565b610ea86000611c2f565b565b60138060000154908060010154905082565b600c8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16905084565b610f22611870565b6001600e60000160026101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f244f4e4c00000000000000000000000000000000000000000000000000000000815250905090565b610fb0611870565b6000610fbb30610e4d565b9050610fc681611cf3565b610fce611f32565b610fd6610f42565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161103291906139ab565b60405180910390a350565b611045611870565b6000479050611052610f42565b73ffffffffffffffffffffffffffffffffffffffff166108fc6064848461107991906141a5565b6110839190614216565b9081150290604051600060405180830381858888f193505050501580156110ae573d6000803e3d6000fd5b505050565b6110bb611870565b60005b82518110156111c4578181815181106110da576110d9614247565b5b6020026020010151600560008584815181106110f9576110f8614247565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600085848151811061115857611157614247565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111bc90614276565b9150506110be565b505050565b60006111dd6111d661169f565b84846118ee565b6001905092915050565b6111ef611870565b6000600e60000160016101000a81548160ff021916908315150217905550565b611217611870565b6000196013600101819055506000600e60000160006101000a81548160ff021916908315150217905550565b60098060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6112c3611870565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113ad611870565b83600d60000160006101000a81548163ffffffff021916908363ffffffff16021790555082600d60000160046101000a81548163ffffffff021916908363ffffffff16021790555081600d60000160086101000a81548163ffffffff021916908363ffffffff16021790555080600d600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506000600d600001600c9054906101000a900463ffffffff16600d60000160089054906101000a900463ffffffff16600d60000160049054906101000a900463ffffffff16600d60000160009054906101000a900463ffffffff166114a19190614095565b6114ab9190614095565b6114b59190614095565b905060008163ffffffff16101580156114d657506103e88163ffffffff1611155b611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c9061430a565b60405180910390fd5b5050505050565b600e8060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16905083565b611563611870565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115c6611870565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061439c565b60405180910390fd5b61163e81611c2f565b50565b600d8060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900463ffffffff16905084565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d9061442e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144c0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161186391906139ab565b60405180910390a3505050565b61187861169f565b73ffffffffffffffffffffffffffffffffffffffff16611896610f42565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e39061452c565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361195d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611954906145be565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390614650565b60405180910390fd5b60008111611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a06906146e2565b60405180910390fd5b6000611a1a30610e4d565b90506000600860156101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611aa8576001600860156101000a81548160ff0219169083151502179055505b60006013600001548210159050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611b105750805b8015611b295750600860149054906101000a900460ff16155b8015611b445750600e60000160009054906101000a900460ff165b15611b5357611b5282611cf3565b5b6000600190506000611b658787611f60565b9050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c085750600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611c105750805b15611c1a57600091505b611c2687878785612024565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600860146101000a81548160ff0219169083151502179055506000816064600f60010154611d2391906141a5565b611d2d9190614216565b90506000826064600f60030154611d4491906141a5565b611d4e9190614216565b90506000836064600f60020154611d6591906141a5565b611d6f9190614216565b90506000600c60000160009054906101000a900463ffffffff1663ffffffff16141580611db857506000600d60000160009054906101000a900463ffffffff1663ffffffff1614155b15611eeb576000846064600f60000154611dd291906141a5565b611ddc9190614216565b9050600081606487611dee9190614216565b611df891906141a5565b9050600281611e079190614216565b905060008187611e179190614061565b90506000479050611e2782612c4c565b6000600285611e369190614216565b905060008187898b611e489190614702565b611e529190614702565b611e5c9190614702565b905060008347611e6c9190614061565b9050600082606483611e7e91906141a5565b611e889190614216565b905083606482611e989190614216565b611ea291906141a5565b905060008147611eb29190614061565b90506000896064611ec39190614061565b9050611ed282828f8f8f612e8f565b611edc8984613133565b50505050505050505050611f09565b611ef484612c4c565b6000479050611f07816064868686612e8f565b505b611f11611f32565b5050506000600860146101000a81548160ff02191690831515021790555050565b6000600f600301819055506000600f600101819055506000600f600001819055506000600f60020181905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061200b5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612019576000905061201e565b600190505b92915050565b60011515600e60000160019054906101000a900460ff1615151480156120b9575061204d610f42565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b85750612089610f42565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b5b156122445781600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121099190614702565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121979190614061565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161223791906139ab565b60405180910390a3612c46565b60011515600e60000160019054906101000a900460ff1615151480156122b75750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156126db5760011515600e60000160029054906101000a900460ff161515146122df57600080fd5b60011515600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461233c57600080fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361238857600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826123d285610e4d565b6123dc9190614702565b11156123e757600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561243357600080fd5b60008060008061244286613218565b93509350935093506000828483878a61245b9190614061565b6124659190614061565b61246f9190614061565b6124799190614061565b905086600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124c69190614061565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125549190614702565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125a489868686866133f6565b84600f60000160008282546125b99190614702565b9250508190555083600f60010160008282546125d59190614702565b9250508190555082600f60030160008282546125f19190614702565b9250508190555081600f600201600082825461260d9190614702565b925050819055506000600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516126c991906139ab565b60405180910390a35050505050612c45565b60011515600e60000160019054906101000a900460ff16151514612c44576001151581151503612ac157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612810575060011515600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514158061280f575060011515600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514155b5b15612871576013600101548261282585610e4d565b61282f9190614702565b1115612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790614782565b60405180910390fd5b5b60008060008061288086613218565b93509350935093506000828483878a6128999190614061565b6128a39190614061565b6128ad9190614061565b6128b79190614061565b905086600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129049190614061565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129929190614702565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129e289868686866133f6565b84600f60000160008282546129f79190614702565b9250508190555083600f6001016000828254612a139190614702565b9250508190555082600f6003016000828254612a2f9190614702565b9250508190555081600f6002016000828254612a4b9190614702565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612aaf91906139ab565b60405180910390a35050505050612c43565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b0c9190614061565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9a9190614702565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c3a91906139ab565b60405180910390a35b5b5b5b50505050565b6000600267ffffffffffffffff811115612c6957612c68613c65565b5b604051908082528060200260200182016040528015612c975781602001602082028036833780820191505090505b5090503081600081518110612caf57612cae614247565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7a91906147b7565b81600181518110612d8e57612d8d614247565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612df530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e599594939291906148dd565b600060405180830381600087803b158015612e7357600080fd5b505af1158015612e87573d6000803e3d6000fd5b505050505050565b6000600c60000160049054906101000a900463ffffffff1663ffffffff16141580612ed657506000600d60000160049054906101000a900463ffffffff1663ffffffff1614155b15612f6e576000838587612eea9190614216565b612ef491906141a5565b90506000811115612f6c57600960000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612f6a573d6000803e3d6000fd5b505b505b6000600c60000160089054906101000a900463ffffffff1663ffffffff16141580612fb557506000600d60000160089054906101000a900463ffffffff1663ffffffff1614155b1561304d576000828587612fc99190614216565b612fd391906141a5565b9050600081111561304b57600960010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613049573d6000803e3d6000fd5b505b505b6000600c600001600c9054906101000a900463ffffffff1663ffffffff1614158061309457506000600d600001600c9054906101000a900463ffffffff1663ffffffff1614155b1561312c5760008185876130a89190614216565b6130b291906141a5565b9050600081111561312a57600960020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613128573d6000803e3d6000fd5b505b505b5050505050565b61316030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846116a7565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806131ac610f42565b426040518863ffffffff1660e01b81526004016131ce96959493929190614937565b60606040518083038185885af11580156131ec573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061321191906149ad565b5050505050565b60008060008060011515600860159054906101000a900460ff1615150361331657612710600d60000160009054906101000a900463ffffffff1663ffffffff168661326391906141a5565b61326d9190614216565b612710600d60000160049054906101000a900463ffffffff1663ffffffff168761329791906141a5565b6132a19190614216565b612710600d60000160089054906101000a900463ffffffff1663ffffffff16886132cb91906141a5565b6132d59190614216565b612710600d600001600c9054906101000a900463ffffffff1663ffffffff16896132ff91906141a5565b6133099190614216565b93509350935093506133ef565b612710600c60000160009054906101000a900463ffffffff1663ffffffff168661334091906141a5565b61334a9190614216565b612710600c60000160049054906101000a900463ffffffff1663ffffffff168761337491906141a5565b61337e9190614216565b612710600c60000160089054906101000a900463ffffffff1663ffffffff16886133a891906141a5565b6133b29190614216565b612710600c600001600c9054906101000a900463ffffffff1663ffffffff16896133dc91906141a5565b6133e69190614216565b93509350935093505b9193509193565b6000818385876134069190614702565b6134109190614702565b61341a9190614702565b905084600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134679190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f59190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135839190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136119190614702565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136b191906139ab565b60405180910390a3505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136fb5780820151818401526020810190506136e0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613723826136c1565b61372d81856136cc565b935061373d8185602086016136dd565b61374681613707565b840191505092915050565b6000602082019050818103600083015261376b8184613718565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137b282613787565b9050919050565b6137c2816137a7565b81146137cd57600080fd5b50565b6000813590506137df816137b9565b92915050565b6000819050919050565b6137f8816137e5565b811461380357600080fd5b50565b600081359050613815816137ef565b92915050565b600080604083850312156138325761383161377d565b5b6000613840858286016137d0565b925050602061385185828601613806565b9150509250929050565b60008115159050919050565b6138708161385b565b82525050565b600060208201905061388b6000830184613867565b92915050565b600061389c82613787565b9050919050565b6138ac81613891565b81146138b757600080fd5b50565b6000813590506138c9816138a3565b92915050565b6000806000606084860312156138e8576138e761377d565b5b60006138f6868287016138ba565b9350506020613907868287016138ba565b9250506040613918868287016138ba565b9150509250925092565b6000819050919050565b600061394761394261393d84613787565b613922565b613787565b9050919050565b60006139598261392c565b9050919050565b600061396b8261394e565b9050919050565b61397b81613960565b82525050565b60006020820190506139966000830184613972565b92915050565b6139a5816137e5565b82525050565b60006020820190506139c0600083018461399c565b92915050565b6139cf8161385b565b81146139da57600080fd5b50565b6000813590506139ec816139c6565b92915050565b600063ffffffff82169050919050565b613a0b816139f2565b8114613a1657600080fd5b50565b600081359050613a2881613a02565b92915050565b60008060408385031215613a4557613a4461377d565b5b6000613a53858286016139dd565b9250506020613a6485828601613a19565b9150509250929050565b600080600060608486031215613a8757613a8661377d565b5b6000613a95868287016137d0565b9350506020613aa6868287016137d0565b9250506040613ab786828701613806565b9150509250925092565b600060ff82169050919050565b613ad781613ac1565b82525050565b6000602082019050613af26000830184613ace565b92915050565b600060208284031215613b0e57613b0d61377d565b5b6000613b1c848285016137d0565b91505092915050565b60008060008060808587031215613b3f57613b3e61377d565b5b6000613b4d87828801613a19565b9450506020613b5e87828801613a19565b9350506040613b6f87828801613a19565b9250506060613b8087828801613a19565b91505092959194509250565b613b95816137a7565b82525050565b6000602082019050613bb06000830184613b8c565b92915050565b600060208284031215613bcc57613bcb61377d565b5b6000613bda84828501613806565b91505092915050565b6000604082019050613bf8600083018561399c565b613c05602083018461399c565b9392505050565b613c15816139f2565b82525050565b6000608082019050613c306000830187613c0c565b613c3d6020830186613c0c565b613c4a6040830185613c0c565b613c576060830184613c0c565b95945050505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613c9d82613707565b810181811067ffffffffffffffff82111715613cbc57613cbb613c65565b5b80604052505050565b6000613ccf613773565b9050613cdb8282613c94565b919050565b600067ffffffffffffffff821115613cfb57613cfa613c65565b5b602082029050602081019050919050565b600080fd5b6000613d24613d1f84613ce0565b613cc5565b90508083825260208201905060208402830185811115613d4757613d46613d0c565b5b835b81811015613d705780613d5c88826137d0565b845260208401935050602081019050613d49565b5050509392505050565b600082601f830112613d8f57613d8e613c60565b5b8135613d9f848260208601613d11565b91505092915050565b600067ffffffffffffffff821115613dc357613dc2613c65565b5b602082029050602081019050919050565b6000613de7613de284613da8565b613cc5565b90508083825260208201905060208402830185811115613e0a57613e09613d0c565b5b835b81811015613e335780613e1f8882613806565b845260208401935050602081019050613e0c565b5050509392505050565b600082601f830112613e5257613e51613c60565b5b8135613e62848260208601613dd4565b91505092915050565b60008060408385031215613e8257613e8161377d565b5b600083013567ffffffffffffffff811115613ea057613e9f613782565b5b613eac85828601613d7a565b925050602083013567ffffffffffffffff811115613ecd57613ecc613782565b5b613ed985828601613e3d565b9150509250929050565b613eec81613891565b82525050565b6000606082019050613f076000830186613ee3565b613f146020830185613ee3565b613f216040830184613ee3565b949350505050565b60008060408385031215613f4057613f3f61377d565b5b6000613f4e858286016137d0565b9250506020613f5f858286016137d0565b9150509250929050565b6000606082019050613f7e6000830186613867565b613f8b6020830185613867565b613f986040830184613867565b949350505050565b7f537761702076616c756520746f6f206c6f772e204974206d757374206265206160008201527f626f766520302e00000000000000000000000000000000000000000000000000602082015250565b6000613ffc6027836136cc565b915061400782613fa0565b604082019050919050565b6000602082019050818103600083015261402b81613fef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061406c826137e5565b9150614077836137e5565b925082820390508181111561408f5761408e614032565b5b92915050565b60006140a0826139f2565b91506140ab836139f2565b9250828201905063ffffffff8111156140c7576140c6614032565b5b92915050565b7f42757920746178657320746f2068696768000000000000000000000000000000600082015250565b60006141036011836136cc565b915061410e826140cd565b602082019050919050565b60006020820190508181036000830152614132816140f6565b9050919050565b7f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000600082015250565b600061416f601a836136cc565b915061417a82614139565b602082019050919050565b6000602082019050818103600083015261419e81614162565b9050919050565b60006141b0826137e5565b91506141bb836137e5565b92508282026141c9816137e5565b915082820484148315176141e0576141df614032565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614221826137e5565b915061422c836137e5565b92508261423c5761423b6141e7565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614281826137e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142b3576142b2614032565b5b600182019050919050565b7f53656c6c20746178657320746f20686967680000000000000000000000000000600082015250565b60006142f46012836136cc565b91506142ff826142be565b602082019050919050565b60006020820190508181036000830152614323816142e7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143866026836136cc565b91506143918261432a565b604082019050919050565b600060208201905081810360008301526143b581614379565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144186024836136cc565b9150614423826143bc565b604082019050919050565b600060208201905081810360008301526144478161440b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144aa6022836136cc565b91506144b58261444e565b604082019050919050565b600060208201905081810360008301526144d98161449d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145166020836136cc565b9150614521826144e0565b602082019050919050565b6000602082019050818103600083015261454581614509565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a86025836136cc565b91506145b38261454c565b604082019050919050565b600060208201905081810360008301526145d78161459b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061463a6023836136cc565b9150614645826145de565b604082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146cc6029836136cc565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b600061470d826137e5565b9150614718836137e5565b92508282019050808211156147305761472f614032565b5b92915050565b7f5472616e736665722065786365656473206d61782077616c6c65742073697a65600082015250565b600061476c6020836136cc565b915061477782614736565b602082019050919050565b6000602082019050818103600083015261479b8161475f565b9050919050565b6000815190506147b1816137b9565b92915050565b6000602082840312156147cd576147cc61377d565b5b60006147db848285016147a2565b91505092915050565b6000819050919050565b60006148096148046147ff846147e4565b613922565b6137e5565b9050919050565b614819816147ee565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614854816137a7565b82525050565b6000614866838361484b565b60208301905092915050565b6000602082019050919050565b600061488a8261481f565b614894818561482a565b935061489f8361483b565b8060005b838110156148d05781516148b7888261485a565b97506148c283614872565b9250506001810190506148a3565b5085935050505092915050565b600060a0820190506148f2600083018861399c565b6148ff6020830187614810565b8181036040830152614911818661487f565b90506149206060830185613b8c565b61492d608083018461399c565b9695505050505050565b600060c08201905061494c6000830189613b8c565b614959602083018861399c565b6149666040830187614810565b6149736060830186614810565b6149806080830185613b8c565b61498d60a083018461399c565b979650505050505050565b6000815190506149a7816137ef565b92915050565b6000806000606084860312156149c6576149c561377d565b5b60006149d486828701614998565b93505060206149e586828701614998565b92505060406149f686828701614998565b915050925092509256fea26469706673582212203a11af6a972c376f3a001e1d52826610022ea795660b7e2f5eefcc01521a5f2d64736f6c63430008130033

Deployed Bytecode Sourcemap

22450:20854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26359:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27265:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30115:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23143:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26633:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31360:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27466:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26543:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31044:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30489:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29471:603;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23191:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30730:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31694:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31176:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26740:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12204:103;;;;;;;;;;;;;:::i;:::-;;25049:160;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24335:162;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;28631:93;;;;;;;;;;;;;:::i;:::-;;11556:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26449:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42549:239;;;;;;;;;;;;;:::i;:::-;;42299:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28230:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26866:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28520:103;;;;;;;;;;;;;:::i;:::-;;42114:136;;;;;;;;;;;;;:::i;:::-;;23966:360;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30913:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27073:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28781:632;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24684:174;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30610:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12462:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24512:163;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;26359:82;26396:13;26429:4;;;;;;;;;;;;;;;;;26422:11;;26359:82;:::o;27265:193::-;27367:4;27389:39;27398:12;:10;:12::i;:::-;27412:7;27421:6;27389:8;:39::i;:::-;27446:4;27439:11;;27265:193;;;;:::o;30115:321::-;11442:13;:11;:13::i;:::-;30320::::1;30295:7;:21;;;:38;;;;;;;;;;;;;;;;;;30370:15;30344:7;:23;;;:41;;;;;;;;;;;;;;;;;;30417:11;30396:7;:18;;;:32;;;;;;;;;;;;;;;;;;30115:321:::0;;;:::o;23143:41::-;;;;;;;;;;;;;:::o;26633:99::-;26686:7;22979:17;26706:18;;26633:99;:::o;31360:251::-;11442:13;:11;:13::i;:::-;31460:1:::1;31450:6;:11;;;;31442:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31545:6;31516:35;;:6;:26;;:35;;;;31595:8;31562;:30;;;:41;;;;;;;;;;;;;;;;;;31360:251:::0;;:::o;27466:350::-;27598:4;27615:36;27625:6;27633:9;27644:6;27615:9;:36::i;:::-;27664:122;27687:6;27708:12;:10;:12::i;:::-;27769:6;27735:11;:19;27747:6;27735:19;;;;;;;;;;;;;;;:31;27755:10;27735:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;27664:8;:122::i;:::-;27804:4;27797:11;;27466:350;;;;;:::o;26543:82::-;26584:5;23133:1;26602:15;;26543:82;:::o;31044:124::-;11442:13;:11;:13::i;:::-;31155:5:::1;31119:24;:33;31144:7;31119:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;31044:124:::0;:::o;30489:113::-;11442:13;:11;:13::i;:::-;30590:4:::1;30560:18;:27;30579:7;30560:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;30489:113:::0;:::o;29471:603::-;11442:13;:11;:13::i;:::-;29651:9:::1;29630:8;:18;;;:30;;;;;;;;;;;;;;;;;;29692:9;29671:8;:18;;;:30;;;;;;;;;;;;;;;;;;29731:7;29712:8;:16;;;:26;;;;;;;;;;;;;;;;;;29765:4;29749:8;:13;;;:20;;;;;;;;;;;;;;;;;;29782;29902:8;:13;;;;;;;;;;;;29874:8;:16;;;;;;;;;;;;29844:8;:18;;;;;;;;;;;;29814:8;:18;;;;;;;;;;;;:48;;;;:::i;:::-;:76;;;;:::i;:::-;:101;;;;:::i;:::-;29782:133;;29981:1;29964:13;:18;;;;:57;;;;;30017:4;30000:13;:21;;;;29964:57;29928:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;29619:455;29471:603:::0;;;;:::o;23191:28::-;;;;;;;;;;;;;:::o;30730:124::-;30795:4;30819:18;:27;30838:7;30819:27;;;;;;;;;;;;;;;;;;;;;;;;;30812:34;;30730:124;;;:::o;31694:179::-;11442:13;:11;:13::i;:::-;31780:14:::1;31770:6;:24;;31762:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31859:6;31836;:20;;:29;;;;31694:179:::0;:::o;31176:136::-;31247:4;31271:24;:33;31296:7;31271:33;;;;;;;;;;;;;;;;;;;;;;;;;31264:40;;31176:136;;;:::o;26740:118::-;26806:7;26833:8;:17;26842:7;26833:17;;;;;;;;;;;;;;;;26826:24;;26740:118;;;:::o;12204:103::-;11442:13;:11;:13::i;:::-;12269:30:::1;12296:1;12269:18;:30::i;:::-;12204:103::o:0;25049:160::-;;;;;;;;;;;;;;:::o;24335:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28631:93::-;11442:13;:11;:13::i;:::-;28712:4:::1;28686:8;:23;;;:30;;;;;;;;;;;;;;;;;;28631:93::o:0;11556:87::-;11602:7;11629:6;;;;;;;;;;;11622:13;;11556:87;:::o;26449:86::-;26488:13;26521:6;;;;;;;;;;;;;;;;;26514:13;;26449:86;:::o;42549:239::-;11442:13;:11;:13::i;:::-;42602:19:::1;42624:24;42642:4;42624:9;:24::i;:::-;42602:46;;42659:27;42674:11;42659:14;:27::i;:::-;42697:20;:18;:20::i;:::-;42757:7;:5;:7::i;:::-;42733:47;;42750:4;42733:47;;;42767:11;42733:47;;;;;;:::i;:::-;;;;;;;;42591:197;42549:239::o:0;42299:198::-;11442:13;:11;:13::i;:::-;42374:17:::1;42394:21;42374:41;;42434:7;:5;:7::i;:::-;42426:25;;:63;42485:3;42465:16;42453:9;:28;;;;:::i;:::-;42452:36;;;;:::i;:::-;42426:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42363:134;42299:198:::0;:::o;28230:282::-;11442:13;:11;:13::i;:::-;28337:9:::1;28332:163;28352:9;:16;28350:1;:18;28332:163;;;28428:3;28432:1;28428:6;;;;;;;;:::i;:::-;;;;;;;;28399:14;:28;28414:9;28424:1;28414:12;;;;;;;;:::i;:::-;;;;;;;;28399:28;;;;;;;;;;;;;;;:35;;;;28479:4;28449:15;:29;28465:9;28475:1;28465:12;;;;;;;;:::i;:::-;;;;;;;;28449:29;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28370:3;;;;;:::i;:::-;;;;28332:163;;;;28230:282:::0;;:::o;26866:199::-;26971:4;26993:42;27003:12;:10;:12::i;:::-;27017:9;27028:6;26993:9;:42::i;:::-;27053:4;27046:11;;26866:199;;;;:::o;28520:103::-;11442:13;:11;:13::i;:::-;28610:5:::1;28580:8;:27;;;:35;;;;;;;;;;;;;;;;;;28520:103::o:0;42114:136::-;11442:13;:11;:13::i;:::-;22931:1:::1;22922:11;42167:6;:20;;:26;;;;42237:5;42204:8;:30;;;:38;;;;;;;;;;;;;;;;;;42114:136::o:0;23966:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30913:123::-;11442:13;:11;:13::i;:::-;31024:4:::1;30988:24;:33;31013:7;30988:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;30913:123:::0;:::o;27073:184::-;27190:7;27222:11;:18;27234:5;27222:18;;;;;;;;;;;;;;;:27;27241:7;27222:27;;;;;;;;;;;;;;;;27215:34;;27073:184;;;;:::o;28781:632::-;11442:13;:11;:13::i;:::-;28963:9:::1;28941;:19;;;:31;;;;;;;;;;;;;;;;;;29005:9;28983;:19;;;:31;;;;;;;;;;;;;;;;;;29045:7;29025:9;:17;;;:27;;;;;;;;;;;;;;;;;;29080:4;29063:9;:14;;;:21;;;;;;;;;;;;;;;;;;29097;29237:9;:14;;;;;;;;;;;;29204:9;:17;;;;;;;;;;;;29169:9;:19;;;;;;;;;;;;29134:9;:19;;;;;;;;;;;;:54;;;;:::i;:::-;:87;;;;:::i;:::-;:117;;;;:::i;:::-;29097:154;;29318:1;29300:14;:19;;;;:59;;;;;29355:4;29337:14;:22;;;;29300:59;29264:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28930:483;28781:632:::0;;;;:::o;24684:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30610:112::-;11442:13;:11;:13::i;:::-;30709:5:::1;30679:18;:27;30698:7;30679:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30610:112:::0;:::o;12462:201::-;11442:13;:11;:13::i;:::-;12571:1:::1;12551:22;;:8;:22;;::::0;12543:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12627:28;12646:8;12627:18;:28::i;:::-;12462:201:::0;:::o;24512:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10107:98::-;10160:7;10187:10;10180:17;;10107:98;:::o;27824:371::-;27968:1;27951:19;;:5;:19;;;27943:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28049:1;28030:21;;:7;:21;;;28022:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28133:6;28103:11;:18;28115:5;28103:18;;;;;;;;;;;;;;;:27;28122:7;28103:27;;;;;;;;;;;;;;;:36;;;;28171:7;28155:32;;28164:5;28155:32;;;28180:6;28155:32;;;;;;:::i;:::-;;;;;;;;27824:371;;;:::o;11721:132::-;11796:12;:10;:12::i;:::-;11785:23;;:7;:5;:7::i;:::-;:23;;;11777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11721:132::o;32709:1174::-;32847:1;32831:18;;:4;:18;;;32823:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32924:1;32910:16;;:2;:16;;;32902:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32994:1;32985:6;:10;32977:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33054:28;33085:24;33103:4;33085:9;:24::i;:::-;33054:55;;33127:5;33120:4;;:12;;;;;;;;;;;;;;;;;;33155:13;;;;;;;;;;;33149:19;;:2;:19;;;33145:63;;33192:4;33185;;:11;;;;;;;;;;;;;;;;;;33145:63;33260:24;33311:6;:26;;;33287:20;:50;;33260:77;;33374:13;;;;;;;;;;;33366:21;;:4;:21;;;;:57;;;;;33404:19;33366:57;:91;;;;;33441:16;;;;;;;;;;;33440:17;33366:91;:138;;;;;33474:8;:30;;;;;;;;;;;;33366:138;33348:231;;;33531:36;33546:20;33531:14;:36::i;:::-;33348:231;33634:12;33649:4;33634:19;;33664:8;33675:26;33692:4;33698:2;33675:16;:26::i;:::-;33664:37;;33718:18;:24;33737:4;33718:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;33746:18;:22;33765:2;33746:22;;;;;;;;;;;;;;;;;;;;;;;;;33718:50;:57;;;;33772:3;33718:57;33714:105;;;33802:5;33792:15;;33714:105;33831:44;33849:4;33855:2;33859:6;33867:7;33831:17;:44::i;:::-;32812:1071;;;;32709:1174;;;:::o;12823:191::-;12897:16;12916:6;;;;;;;;;;;12897:25;;12942:8;12933:6;;:17;;;;;;;;;;;;;;;;;;12997:8;12966:40;;12987:8;12966:40;;;;;;;;;;;;12886:128;12823:191;:::o;37045:2190::-;25271:4;25252:16;;:23;;;;;;;;;;;;;;;;;;37172:24:::1;37231:20;37224:3;37200:6;:21;;;:27;;;;:::i;:::-;37199:52;;;;:::i;:::-;37172:79;;37262:22;37317:20;37310:3;37288:6;:19;;;:25;;;;:::i;:::-;37287:50;;;;:::i;:::-;37262:75;;37348:19;37398:20;37391:3;37372:6;:16;;;:22;;;;:::i;:::-;37371:47;;;;:::i;:::-;37348:70;;37513:1;37491:8;:18;;;;;;;;;;;;:23;;;;:51;;;;37541:1;37518:9;:19;;;;;;;;;;;;:24;;;;37491:51;37487:1708;;;37558:23;37612:20;37607:3;37585:6;:21;;;:25;;;;:::i;:::-;37584:48;;;;:::i;:::-;37558:74;;37677:29;37737:15;37731:3;37709:20;:26;;;;:::i;:::-;:44;;;;:::i;:::-;37677:76;;37815:1;37792:21;:25;;;;:::i;:::-;37768:49;;37834:20;37878:21;37857:20;:42;;;;:::i;:::-;37834:65;;37916:22;37941:21;37916:46;;38015:30;38032:12;38015:16;:30::i;:::-;38063:23;38106:1;38089:15;:19;;;;:::i;:::-;38063:45;;38123:15;38192;38178:11;38160:14;38141:16;:33;;;;:::i;:::-;:48;;;;:::i;:::-;:66;;;;:::i;:::-;38123:84;;38276:18;38320:14;38297:21;:38;;;;:::i;:::-;38276:59;;38352:27;38400:7;38394:3;38383:10;:14;;;;:::i;:::-;38382:26;;;;:::i;:::-;38352:56;;38474:15;38467:3;38446:19;:25;;;;:::i;:::-;38445:45;;;;:::i;:::-;38423:67;;38507:31;38564:19;38541:21;:43;;;;:::i;:::-;38507:77;;38601:13;38621:15;38617:3;:19;;;;:::i;:::-;38601:35;;38653:96;38671:23;38696:5;38703:16;38721:14;38737:11;38653:17;:96::i;:::-;38808:56;38821:21;38844:19;38808:12;:56::i;:::-;37544:1332;;;;;;;;;;37487:1708;;;38981:38;38998:20;38981:16;:38::i;:::-;39035:15;39053:21;39035:39;;39089:78;39107:7;39116:3;39121:16;39139:14;39155:11;39089:17;:78::i;:::-;38966:229;37487:1708;39207:20;:18;:20::i;:::-;37119:2116;;;25317:5:::0;25298:16;;:24;;;;;;;;;;;;;;;;;;37045:2190;:::o;42849:184::-;42921:1;42899:6;:19;;:23;;;;42957:1;42933:6;:21;;:25;;;;42993:1;42969:6;:21;;:25;;;;43024:1;43005:6;:16;;:20;;;;42849:184::o;43041:260::-;43152:4;43188:13;;;;;;;;;;;43178:23;;:6;:23;;;:53;;;;43218:13;;;;;;;;;;;43205:26;;:9;:26;;;43178:53;43174:98;;;43255:5;43248:12;;;;43174:98;43289:4;43282:11;;43041:260;;;;;:::o;33892:3126::-;34171:4;34141:34;;:8;:27;;;;;;;;;;;;:34;;;:77;;;;;34188:7;:5;:7::i;:::-;34180:15;;:6;:15;;;:37;;;;34210:7;:5;:7::i;:::-;34199:18;;:9;:18;;;34180:37;34141:77;34137:2872;;;34283:7;34262:8;:19;34271:9;34262:19;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;34240:8;:19;34249:9;34240:19;;;;;;;;;;;;;;;:51;;;;34343:7;34325:8;:16;34334:6;34325:16;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;34306:8;:16;34315:6;34306:16;;;;;;;;;;;;;;;:45;;;;34393:9;34376:36;;34385:6;34376:36;;;34404:7;34376:36;;;;;;:::i;:::-;;;;;;;;34137:2872;;;34550:4;34520:34;;:8;:27;;;;;;;;;;;;:34;;;:59;;;;;34566:13;;;;;;;;;;;34558:21;;:6;:21;;;34520:59;34516:2493;;;34636:4;34611:29;;:8;:23;;;;;;;;;;;;:29;;;34603:38;;;;;;34692:4;34664:32;;:15;:26;34680:9;34664:26;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;34656:41;;;;;;34749:1;34721:14;:25;34736:9;34721:25;;;;;;;;;;;;;;;;:29;34712:39;;;;;;34804:14;:25;34819:9;34804:25;;;;;;;;;;;;;;;;34795:7;34774:20;34784:9;34774;:20::i;:::-;:28;;;;:::i;:::-;:55;;34766:64;;;;;;34864:14;:25;34879:9;34864:25;;;;;;;;;;;;;;;;34853:7;:36;;34845:45;;;;;;34907:18;34927;34947:16;34965:13;34982:23;34997:7;34982:14;:23::i;:::-;34906:99;;;;;;;;35020:23;35089:8;35076:10;35068:5;35055:10;35046:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;35020:78;;35154:7;35134:8;:16;35143:6;35134:16;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;35115:8;:16;35124:6;35115:16;;;;;;;;;;;;;;;:47;;;;35222:15;35199:8;:19;35208:9;35199:19;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;35177:8;:19;35186:9;35177:19;;;;;;;;;;;;;;;:61;;;;35253:62;35267:6;35275:10;35287;35299:8;35309:5;35253:13;:62::i;:::-;35357:10;35332:6;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;35407:10;35382:6;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;35455:8;35432:6;:19;;;:31;;;;;;;:::i;:::-;;;;;;;;35498:5;35478:6;:16;;;:25;;;;;;;:::i;:::-;;;;;;;;35546:5;35519:15;:26;35535:9;35519:26;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;35588:9;35571:36;;35580:6;35571:36;;;35599:7;35571:36;;;;;;:::i;:::-;;;;;;;;34588:1047;;;;;34516:2493;;;35702:4;35672:34;;:8;:27;;;;;;;;;;;;:34;;;35669:1340;;35739:4;35728:15;;:7;:15;;;35724:1278;;35787:13;;;;;;;;;;;35774:26;;:9;:26;;;;:114;;;;;35839:4;35805:38;;:24;:32;35830:6;35805:32;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;:82;;;;35883:4;35846:41;;:24;:35;35871:9;35846:35;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;35805:82;35774:114;35770:337;;;35977:6;:20;;;35964:7;35940:20;35950:9;35940;:20::i;:::-;:32;;;;:::i;:::-;35939:58;;35909:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;35770:337;36124:18;36144;36164:16;36182:13;36199:23;36214:7;36199:14;:23::i;:::-;36123:99;;;;;;;;36237:23;36306:8;36293:10;36285:5;36272:10;36263:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;36237:78;;36371:7;36351:8;:16;36360:6;36351:16;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;36332:8;:16;36341:6;36332:16;;;;;;;;;;;;;;;:47;;;;36439:15;36416:8;:19;36425:9;36416:19;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;36394:8;:19;36403:9;36394:19;;;;;;;;;;;;;;;:61;;;;36470:62;36484:6;36492:10;36504;36516:8;36526:5;36470:13;:62::i;:::-;36574:10;36549:6;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;36624:10;36599:6;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;36672:8;36649:6;:19;;;:31;;;;;;;:::i;:::-;;;;;;;;36715:5;36695:6;:16;;;:25;;;;;;;:::i;:::-;;;;;;;;36759:9;36742:44;;36751:6;36742:44;;;36770:15;36742:44;;;;;;:::i;:::-;;;;;;;;35755:1043;;;;;35724:1278;;;36858:7;36838:8;:16;36847:6;36838:16;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;36819:8;:16;36828:6;36819:16;;;;;;;;;;;;;;;:47;;;;36926:7;36903:8;:19;36912:9;36903:19;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;36881:8;:19;36890:9;36881:19;;;;;;;;;;;;;;;:53;;;;36971:9;36954:36;;36963:6;36954:36;;;36982:7;36954:36;;;;;;:::i;:::-;;;;;;;;35724:1278;35669:1340;34516:2493;34137:2872;33892:3126;;;;:::o;40303:589::-;40429:21;40467:1;40453:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40429:40;;40498:4;40480;40485:1;40480:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40524:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40514:4;40519:1;40514:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40559:62;40576:4;40591:15;;;;;;;;;;;40609:11;40559:8;:62::i;:::-;40660:15;;;;;;;;;;;:66;;;40741:11;40767:1;40811:4;40838;40858:15;40660:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40358:534;40303:589;:::o;39284:983::-;39513:1;39491:8;:18;;;;;;;;;;;;:23;;;;:51;;;;39541:1;39518:9;:19;;;;;;;;;;;;:24;;;;39491:51;39487:266;;;39559:17;39602:16;39591:5;39580:7;:17;;;;:::i;:::-;39579:40;;;;:::i;:::-;39559:60;;39652:1;39640:9;:13;39636:106;;;39682:7;:23;;;;;;;;;;;;39674:41;;:52;39716:9;39674:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39636:106;39544:209;39487:266;39789:1;39769:8;:16;;;;;;;;;;;;:21;;;;:47;;;;39815:1;39794:9;:17;;;;;;;;;;;;:22;;;;39769:47;39765:252;;;39833:15;39874:14;39863:5;39852:7;:17;;;;:::i;:::-;39851:38;;;;:::i;:::-;39833:56;;39920:1;39910:7;:11;39906:100;;;39950:7;:21;;;;;;;;;;;;39942:39;;:48;39982:7;39942:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39906:100;39818:199;39765:252;40050:1;40033:8;:13;;;;;;;;;;;;:18;;;;:41;;;;40073:1;40055:9;:14;;;;;;;;;;;;:19;;;;40033:41;40029:231;;;40091:12;40129:11;40118:5;40107:7;:17;;;;:::i;:::-;40106:35;;;;:::i;:::-;40091:50;;40169:1;40162:4;:8;40158:91;;;40199:7;:18;;;;;;;;;;;;40191:36;;:42;40228:4;40191:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40158:91;40076:184;40029:231;39284:983;;;;;:::o;40928:511::-;41076:62;41093:4;41108:15;;;;;;;;;;;41126:11;41076:8;:62::i;:::-;41179:15;;;;;;;;;;;:31;;;41218:9;41251:4;41271:11;41297:1;41340;41383:7;:5;:7::i;:::-;41405:15;41179:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40928:511;;:::o;31931:738::-;32020:7;32028;32037;32045;32082:4;32074:12;;:4;;;;;;;;;;;:12;;;32070:592;;32165:5;32140:9;:19;;;;;;;;;;;;32130:30;;:6;:30;;;;:::i;:::-;32129:42;;;;:::i;:::-;32226:5;32201:9;:19;;;;;;;;;;;;32191:30;;:6;:30;;;;:::i;:::-;32190:42;;;;:::i;:::-;32285:5;32262:9;:17;;;;;;;;;;;;32252:28;;:6;:28;;;;:::i;:::-;32251:40;;;;:::i;:::-;32341:5;32321:9;:14;;;;;;;;;;;;32311:25;;:6;:25;;;;:::i;:::-;32310:37;;;;:::i;:::-;32103:259;;;;;;;;;;32070:592;32456:5;32432:8;:18;;;;;;;;;;;;32422:29;;:6;:29;;;;:::i;:::-;32421:41;;;;:::i;:::-;32516:5;32492:8;:18;;;;;;;;;;;;32482:29;;:6;:29;;;;:::i;:::-;32481:41;;;;:::i;:::-;32574:5;32552:8;:16;;;;;;;;;;;;32542:27;;:6;:27;;;;:::i;:::-;32541:39;;;;:::i;:::-;32629:5;32610:8;:13;;;;;;;;;;;;32600:24;;:6;:24;;;;:::i;:::-;32599:36;;;;:::i;:::-;32395:255;;;;;;;;31931:738;;;;;;:::o;41471:611::-;41655:18;41713:5;41702:8;41689:10;41676;:23;;;;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;41655:63;;41784:10;41757:8;:23;41774:4;41757:23;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;41731:8;:23;41748:4;41731:23;;;;;;;;;;;;;;;:64;;;;41859:8;41832;:23;41849:4;41832:23;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41806:8;:23;41823:4;41806:23;;;;;;;;;;;;;;;:62;;;;41932:10;41905:8;:23;41922:4;41905:23;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;41879:8;:23;41896:4;41879:23;;;;;;;;;;;;;;;:64;;;;42007:5;41980:8;:23;41997:4;41980:23;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;41954:8;:23;41971:4;41954:23;;;;;;;;;;;;;;;:59;;;;42056:4;42031:43;;42040:6;42031:43;;;42063:10;42031:43;;;;;;:::i;:::-;;;;;;;;41644:438;41471:611;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:104::-;3491:7;3520:24;3538:5;3520:24;:::i;:::-;3509:35;;3446:104;;;:::o;3556:138::-;3637:32;3663:5;3637:32;:::i;:::-;3630:5;3627:43;3617:71;;3684:1;3681;3674:12;3617:71;3556:138;:::o;3700:155::-;3754:5;3792:6;3779:20;3770:29;;3808:41;3843:5;3808:41;:::i;:::-;3700:155;;;;:::o;3861:667::-;3962:6;3970;3978;4027:2;4015:9;4006:7;4002:23;3998:32;3995:119;;;4033:79;;:::i;:::-;3995:119;4153:1;4178:61;4231:7;4222:6;4211:9;4207:22;4178:61;:::i;:::-;4168:71;;4124:125;4288:2;4314:61;4367:7;4358:6;4347:9;4343:22;4314:61;:::i;:::-;4304:71;;4259:126;4424:2;4450:61;4503:7;4494:6;4483:9;4479:22;4450:61;:::i;:::-;4440:71;;4395:126;3861:667;;;;;:::o;4534:60::-;4562:3;4583:5;4576:12;;4534:60;;;:::o;4600:142::-;4650:9;4683:53;4701:34;4710:24;4728:5;4710:24;:::i;:::-;4701:34;:::i;:::-;4683:53;:::i;:::-;4670:66;;4600:142;;;:::o;4748:126::-;4798:9;4831:37;4862:5;4831:37;:::i;:::-;4818:50;;4748:126;;;:::o;4880:152::-;4956:9;4989:37;5020:5;4989:37;:::i;:::-;4976:50;;4880:152;;;:::o;5038:183::-;5151:63;5208:5;5151:63;:::i;:::-;5146:3;5139:76;5038:183;;:::o;5227:274::-;5346:4;5384:2;5373:9;5369:18;5361:26;;5397:97;5491:1;5480:9;5476:17;5467:6;5397:97;:::i;:::-;5227:274;;;;:::o;5507:118::-;5594:24;5612:5;5594:24;:::i;:::-;5589:3;5582:37;5507:118;;:::o;5631:222::-;5724:4;5762:2;5751:9;5747:18;5739:26;;5775:71;5843:1;5832:9;5828:17;5819:6;5775:71;:::i;:::-;5631:222;;;;:::o;5859:116::-;5929:21;5944:5;5929:21;:::i;:::-;5922:5;5919:32;5909:60;;5965:1;5962;5955:12;5909:60;5859:116;:::o;5981:133::-;6024:5;6062:6;6049:20;6040:29;;6078:30;6102:5;6078:30;:::i;:::-;5981:133;;;;:::o;6120:93::-;6156:7;6196:10;6189:5;6185:22;6174:33;;6120:93;;;:::o;6219:120::-;6291:23;6308:5;6291:23;:::i;:::-;6284:5;6281:34;6271:62;;6329:1;6326;6319:12;6271:62;6219:120;:::o;6345:137::-;6390:5;6428:6;6415:20;6406:29;;6444:32;6470:5;6444:32;:::i;:::-;6345:137;;;;:::o;6488:466::-;6552:6;6560;6609:2;6597:9;6588:7;6584:23;6580:32;6577:119;;;6615:79;;:::i;:::-;6577:119;6735:1;6760:50;6802:7;6793:6;6782:9;6778:22;6760:50;:::i;:::-;6750:60;;6706:114;6859:2;6885:52;6929:7;6920:6;6909:9;6905:22;6885:52;:::i;:::-;6875:62;;6830:117;6488:466;;;;;:::o;6960:619::-;7037:6;7045;7053;7102:2;7090:9;7081:7;7077:23;7073:32;7070:119;;;7108:79;;:::i;:::-;7070:119;7228:1;7253:53;7298:7;7289:6;7278:9;7274:22;7253:53;:::i;:::-;7243:63;;7199:117;7355:2;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7326:118;7483:2;7509:53;7554:7;7545:6;7534:9;7530:22;7509:53;:::i;:::-;7499:63;;7454:118;6960:619;;;;;:::o;7585:86::-;7620:7;7660:4;7653:5;7649:16;7638:27;;7585:86;;;:::o;7677:112::-;7760:22;7776:5;7760:22;:::i;:::-;7755:3;7748:35;7677:112;;:::o;7795:214::-;7884:4;7922:2;7911:9;7907:18;7899:26;;7935:67;7999:1;7988:9;7984:17;7975:6;7935:67;:::i;:::-;7795:214;;;;:::o;8015:329::-;8074:6;8123:2;8111:9;8102:7;8098:23;8094:32;8091:119;;;8129:79;;:::i;:::-;8091:119;8249:1;8274:53;8319:7;8310:6;8299:9;8295:22;8274:53;:::i;:::-;8264:63;;8220:117;8015:329;;;;:::o;8350:757::-;8432:6;8440;8448;8456;8505:3;8493:9;8484:7;8480:23;8476:33;8473:120;;;8512:79;;:::i;:::-;8473:120;8632:1;8657:52;8701:7;8692:6;8681:9;8677:22;8657:52;:::i;:::-;8647:62;;8603:116;8758:2;8784:52;8828:7;8819:6;8808:9;8804:22;8784:52;:::i;:::-;8774:62;;8729:117;8885:2;8911:52;8955:7;8946:6;8935:9;8931:22;8911:52;:::i;:::-;8901:62;;8856:117;9012:2;9038:52;9082:7;9073:6;9062:9;9058:22;9038:52;:::i;:::-;9028:62;;8983:117;8350:757;;;;;;;:::o;9113:118::-;9200:24;9218:5;9200:24;:::i;:::-;9195:3;9188:37;9113:118;;:::o;9237:222::-;9330:4;9368:2;9357:9;9353:18;9345:26;;9381:71;9449:1;9438:9;9434:17;9425:6;9381:71;:::i;:::-;9237:222;;;;:::o;9465:329::-;9524:6;9573:2;9561:9;9552:7;9548:23;9544:32;9541:119;;;9579:79;;:::i;:::-;9541:119;9699:1;9724:53;9769:7;9760:6;9749:9;9745:22;9724:53;:::i;:::-;9714:63;;9670:117;9465:329;;;;:::o;9800:332::-;9921:4;9959:2;9948:9;9944:18;9936:26;;9972:71;10040:1;10029:9;10025:17;10016:6;9972:71;:::i;:::-;10053:72;10121:2;10110:9;10106:18;10097:6;10053:72;:::i;:::-;9800:332;;;;;:::o;10138:115::-;10223:23;10240:5;10223:23;:::i;:::-;10218:3;10211:36;10138:115;;:::o;10259:537::-;10428:4;10466:3;10455:9;10451:19;10443:27;;10480:69;10546:1;10535:9;10531:17;10522:6;10480:69;:::i;:::-;10559:70;10625:2;10614:9;10610:18;10601:6;10559:70;:::i;:::-;10639;10705:2;10694:9;10690:18;10681:6;10639:70;:::i;:::-;10719;10785:2;10774:9;10770:18;10761:6;10719:70;:::i;:::-;10259:537;;;;;;;:::o;10802:117::-;10911:1;10908;10901:12;10925:180;10973:77;10970:1;10963:88;11070:4;11067:1;11060:15;11094:4;11091:1;11084:15;11111:281;11194:27;11216:4;11194:27;:::i;:::-;11186:6;11182:40;11324:6;11312:10;11309:22;11288:18;11276:10;11273:34;11270:62;11267:88;;;11335:18;;:::i;:::-;11267:88;11375:10;11371:2;11364:22;11154:238;11111:281;;:::o;11398:129::-;11432:6;11459:20;;:::i;:::-;11449:30;;11488:33;11516:4;11508:6;11488:33;:::i;:::-;11398:129;;;:::o;11533:311::-;11610:4;11700:18;11692:6;11689:30;11686:56;;;11722:18;;:::i;:::-;11686:56;11772:4;11764:6;11760:17;11752:25;;11832:4;11826;11822:15;11814:23;;11533:311;;;:::o;11850:117::-;11959:1;11956;11949:12;11990:710;12086:5;12111:81;12127:64;12184:6;12127:64;:::i;:::-;12111:81;:::i;:::-;12102:90;;12212:5;12241:6;12234:5;12227:21;12275:4;12268:5;12264:16;12257:23;;12328:4;12320:6;12316:17;12308:6;12304:30;12357:3;12349:6;12346:15;12343:122;;;12376:79;;:::i;:::-;12343:122;12491:6;12474:220;12508:6;12503:3;12500:15;12474:220;;;12583:3;12612:37;12645:3;12633:10;12612:37;:::i;:::-;12607:3;12600:50;12679:4;12674:3;12670:14;12663:21;;12550:144;12534:4;12529:3;12525:14;12518:21;;12474:220;;;12478:21;12092:608;;11990:710;;;;;:::o;12723:370::-;12794:5;12843:3;12836:4;12828:6;12824:17;12820:27;12810:122;;12851:79;;:::i;:::-;12810:122;12968:6;12955:20;12993:94;13083:3;13075:6;13068:4;13060:6;13056:17;12993:94;:::i;:::-;12984:103;;12800:293;12723:370;;;;:::o;13099:311::-;13176:4;13266:18;13258:6;13255:30;13252:56;;;13288:18;;:::i;:::-;13252:56;13338:4;13330:6;13326:17;13318:25;;13398:4;13392;13388:15;13380:23;;13099:311;;;:::o;13433:710::-;13529:5;13554:81;13570:64;13627:6;13570:64;:::i;:::-;13554:81;:::i;:::-;13545:90;;13655:5;13684:6;13677:5;13670:21;13718:4;13711:5;13707:16;13700:23;;13771:4;13763:6;13759:17;13751:6;13747:30;13800:3;13792:6;13789:15;13786:122;;;13819:79;;:::i;:::-;13786:122;13934:6;13917:220;13951:6;13946:3;13943:15;13917:220;;;14026:3;14055:37;14088:3;14076:10;14055:37;:::i;:::-;14050:3;14043:50;14122:4;14117:3;14113:14;14106:21;;13993:144;13977:4;13972:3;13968:14;13961:21;;13917:220;;;13921:21;13535:608;;13433:710;;;;;:::o;14166:370::-;14237:5;14286:3;14279:4;14271:6;14267:17;14263:27;14253:122;;14294:79;;:::i;:::-;14253:122;14411:6;14398:20;14436:94;14526:3;14518:6;14511:4;14503:6;14499:17;14436:94;:::i;:::-;14427:103;;14243:293;14166:370;;;;:::o;14542:894::-;14660:6;14668;14717:2;14705:9;14696:7;14692:23;14688:32;14685:119;;;14723:79;;:::i;:::-;14685:119;14871:1;14860:9;14856:17;14843:31;14901:18;14893:6;14890:30;14887:117;;;14923:79;;:::i;:::-;14887:117;15028:78;15098:7;15089:6;15078:9;15074:22;15028:78;:::i;:::-;15018:88;;14814:302;15183:2;15172:9;15168:18;15155:32;15214:18;15206:6;15203:30;15200:117;;;15236:79;;:::i;:::-;15200:117;15341:78;15411:7;15402:6;15391:9;15387:22;15341:78;:::i;:::-;15331:88;;15126:303;14542:894;;;;;:::o;15442:142::-;15545:32;15571:5;15545:32;:::i;:::-;15540:3;15533:45;15442:142;;:::o;15590:538::-;15787:4;15825:2;15814:9;15810:18;15802:26;;15838:87;15922:1;15911:9;15907:17;15898:6;15838:87;:::i;:::-;15935:88;16019:2;16008:9;16004:18;15995:6;15935:88;:::i;:::-;16033;16117:2;16106:9;16102:18;16093:6;16033:88;:::i;:::-;15590:538;;;;;;:::o;16134:474::-;16202:6;16210;16259:2;16247:9;16238:7;16234:23;16230:32;16227:119;;;16265:79;;:::i;:::-;16227:119;16385:1;16410:53;16455:7;16446:6;16435:9;16431:22;16410:53;:::i;:::-;16400:63;;16356:117;16512:2;16538:53;16583:7;16574:6;16563:9;16559:22;16538:53;:::i;:::-;16528:63;;16483:118;16134:474;;;;;:::o;16614:406::-;16745:4;16783:2;16772:9;16768:18;16760:26;;16796:65;16858:1;16847:9;16843:17;16834:6;16796:65;:::i;:::-;16871:66;16933:2;16922:9;16918:18;16909:6;16871:66;:::i;:::-;16947;17009:2;16998:9;16994:18;16985:6;16947:66;:::i;:::-;16614:406;;;;;;:::o;17026:226::-;17166:34;17162:1;17154:6;17150:14;17143:58;17235:9;17230:2;17222:6;17218:15;17211:34;17026:226;:::o;17258:366::-;17400:3;17421:67;17485:2;17480:3;17421:67;:::i;:::-;17414:74;;17497:93;17586:3;17497:93;:::i;:::-;17615:2;17610:3;17606:12;17599:19;;17258:366;;;:::o;17630:419::-;17796:4;17834:2;17823:9;17819:18;17811:26;;17883:9;17877:4;17873:20;17869:1;17858:9;17854:17;17847:47;17911:131;18037:4;17911:131;:::i;:::-;17903:139;;17630:419;;;:::o;18055:180::-;18103:77;18100:1;18093:88;18200:4;18197:1;18190:15;18224:4;18221:1;18214:15;18241:194;18281:4;18301:20;18319:1;18301:20;:::i;:::-;18296:25;;18335:20;18353:1;18335:20;:::i;:::-;18330:25;;18379:1;18376;18372:9;18364:17;;18403:1;18397:4;18394:11;18391:37;;;18408:18;;:::i;:::-;18391:37;18241:194;;;;:::o;18441:197::-;18480:3;18499:19;18516:1;18499:19;:::i;:::-;18494:24;;18532:19;18549:1;18532:19;:::i;:::-;18527:24;;18574:1;18571;18567:9;18560:16;;18597:10;18592:3;18589:19;18586:45;;;18611:18;;:::i;:::-;18586:45;18441:197;;;;:::o;18644:167::-;18784:19;18780:1;18772:6;18768:14;18761:43;18644:167;:::o;18817:366::-;18959:3;18980:67;19044:2;19039:3;18980:67;:::i;:::-;18973:74;;19056:93;19145:3;19056:93;:::i;:::-;19174:2;19169:3;19165:12;19158:19;;18817:366;;;:::o;19189:419::-;19355:4;19393:2;19382:9;19378:18;19370:26;;19442:9;19436:4;19432:20;19428:1;19417:9;19413:17;19406:47;19470:131;19596:4;19470:131;:::i;:::-;19462:139;;19189:419;;;:::o;19614:176::-;19754:28;19750:1;19742:6;19738:14;19731:52;19614:176;:::o;19796:366::-;19938:3;19959:67;20023:2;20018:3;19959:67;:::i;:::-;19952:74;;20035:93;20124:3;20035:93;:::i;:::-;20153:2;20148:3;20144:12;20137:19;;19796:366;;;:::o;20168:419::-;20334:4;20372:2;20361:9;20357:18;20349:26;;20421:9;20415:4;20411:20;20407:1;20396:9;20392:17;20385:47;20449:131;20575:4;20449:131;:::i;:::-;20441:139;;20168:419;;;:::o;20593:410::-;20633:7;20656:20;20674:1;20656:20;:::i;:::-;20651:25;;20690:20;20708:1;20690:20;:::i;:::-;20685:25;;20745:1;20742;20738:9;20767:30;20785:11;20767:30;:::i;:::-;20756:41;;20946:1;20937:7;20933:15;20930:1;20927:22;20907:1;20900:9;20880:83;20857:139;;20976:18;;:::i;:::-;20857:139;20641:362;20593:410;;;;:::o;21009:180::-;21057:77;21054:1;21047:88;21154:4;21151:1;21144:15;21178:4;21175:1;21168:15;21195:185;21235:1;21252:20;21270:1;21252:20;:::i;:::-;21247:25;;21286:20;21304:1;21286:20;:::i;:::-;21281:25;;21325:1;21315:35;;21330:18;;:::i;:::-;21315:35;21372:1;21369;21365:9;21360:14;;21195:185;;;;:::o;21386:180::-;21434:77;21431:1;21424:88;21531:4;21528:1;21521:15;21555:4;21552:1;21545:15;21572:233;21611:3;21634:24;21652:5;21634:24;:::i;:::-;21625:33;;21680:66;21673:5;21670:77;21667:103;;21750:18;;:::i;:::-;21667:103;21797:1;21790:5;21786:13;21779:20;;21572:233;;;:::o;21811:168::-;21951:20;21947:1;21939:6;21935:14;21928:44;21811:168;:::o;21985:366::-;22127:3;22148:67;22212:2;22207:3;22148:67;:::i;:::-;22141:74;;22224:93;22313:3;22224:93;:::i;:::-;22342:2;22337:3;22333:12;22326:19;;21985:366;;;:::o;22357:419::-;22523:4;22561:2;22550:9;22546:18;22538:26;;22610:9;22604:4;22600:20;22596:1;22585:9;22581:17;22574:47;22638:131;22764:4;22638:131;:::i;:::-;22630:139;;22357:419;;;:::o;22782:225::-;22922:34;22918:1;22910:6;22906:14;22899:58;22991:8;22986:2;22978:6;22974:15;22967:33;22782:225;:::o;23013:366::-;23155:3;23176:67;23240:2;23235:3;23176:67;:::i;:::-;23169:74;;23252:93;23341:3;23252:93;:::i;:::-;23370:2;23365:3;23361:12;23354:19;;23013:366;;;:::o;23385:419::-;23551:4;23589:2;23578:9;23574:18;23566:26;;23638:9;23632:4;23628:20;23624:1;23613:9;23609:17;23602:47;23666:131;23792:4;23666:131;:::i;:::-;23658:139;;23385:419;;;:::o;23810:223::-;23950:34;23946:1;23938:6;23934:14;23927:58;24019:6;24014:2;24006:6;24002:15;23995:31;23810:223;:::o;24039:366::-;24181:3;24202:67;24266:2;24261:3;24202:67;:::i;:::-;24195:74;;24278:93;24367:3;24278:93;:::i;:::-;24396:2;24391:3;24387:12;24380:19;;24039:366;;;:::o;24411:419::-;24577:4;24615:2;24604:9;24600:18;24592:26;;24664:9;24658:4;24654:20;24650:1;24639:9;24635:17;24628:47;24692:131;24818:4;24692:131;:::i;:::-;24684:139;;24411:419;;;:::o;24836:221::-;24976:34;24972:1;24964:6;24960:14;24953:58;25045:4;25040:2;25032:6;25028:15;25021:29;24836:221;:::o;25063:366::-;25205:3;25226:67;25290:2;25285:3;25226:67;:::i;:::-;25219:74;;25302:93;25391:3;25302:93;:::i;:::-;25420:2;25415:3;25411:12;25404:19;;25063:366;;;:::o;25435:419::-;25601:4;25639:2;25628:9;25624:18;25616:26;;25688:9;25682:4;25678:20;25674:1;25663:9;25659:17;25652:47;25716:131;25842:4;25716:131;:::i;:::-;25708:139;;25435:419;;;:::o;25860:182::-;26000:34;25996:1;25988:6;25984:14;25977:58;25860:182;:::o;26048:366::-;26190:3;26211:67;26275:2;26270:3;26211:67;:::i;:::-;26204:74;;26287:93;26376:3;26287:93;:::i;:::-;26405:2;26400:3;26396:12;26389:19;;26048:366;;;:::o;26420:419::-;26586:4;26624:2;26613:9;26609:18;26601:26;;26673:9;26667:4;26663:20;26659:1;26648:9;26644:17;26637:47;26701:131;26827:4;26701:131;:::i;:::-;26693:139;;26420:419;;;:::o;26845:224::-;26985:34;26981:1;26973:6;26969:14;26962:58;27054:7;27049:2;27041:6;27037:15;27030:32;26845:224;:::o;27075:366::-;27217:3;27238:67;27302:2;27297:3;27238:67;:::i;:::-;27231:74;;27314:93;27403:3;27314:93;:::i;:::-;27432:2;27427:3;27423:12;27416:19;;27075:366;;;:::o;27447:419::-;27613:4;27651:2;27640:9;27636:18;27628:26;;27700:9;27694:4;27690:20;27686:1;27675:9;27671:17;27664:47;27728:131;27854:4;27728:131;:::i;:::-;27720:139;;27447:419;;;:::o;27872:222::-;28012:34;28008:1;28000:6;27996:14;27989:58;28081:5;28076:2;28068:6;28064:15;28057:30;27872:222;:::o;28100:366::-;28242:3;28263:67;28327:2;28322:3;28263:67;:::i;:::-;28256:74;;28339:93;28428:3;28339:93;:::i;:::-;28457:2;28452:3;28448:12;28441:19;;28100:366;;;:::o;28472:419::-;28638:4;28676:2;28665:9;28661:18;28653:26;;28725:9;28719:4;28715:20;28711:1;28700:9;28696:17;28689:47;28753:131;28879:4;28753:131;:::i;:::-;28745:139;;28472:419;;;:::o;28897:228::-;29037:34;29033:1;29025:6;29021:14;29014:58;29106:11;29101:2;29093:6;29089:15;29082:36;28897:228;:::o;29131:366::-;29273:3;29294:67;29358:2;29353:3;29294:67;:::i;:::-;29287:74;;29370:93;29459:3;29370:93;:::i;:::-;29488:2;29483:3;29479:12;29472:19;;29131:366;;;:::o;29503:419::-;29669:4;29707:2;29696:9;29692:18;29684:26;;29756:9;29750:4;29746:20;29742:1;29731:9;29727:17;29720:47;29784:131;29910:4;29784:131;:::i;:::-;29776:139;;29503:419;;;:::o;29928:191::-;29968:3;29987:20;30005:1;29987:20;:::i;:::-;29982:25;;30021:20;30039:1;30021:20;:::i;:::-;30016:25;;30064:1;30061;30057:9;30050:16;;30085:3;30082:1;30079:10;30076:36;;;30092:18;;:::i;:::-;30076:36;29928:191;;;;:::o;30125:182::-;30265:34;30261:1;30253:6;30249:14;30242:58;30125:182;:::o;30313:366::-;30455:3;30476:67;30540:2;30535:3;30476:67;:::i;:::-;30469:74;;30552:93;30641:3;30552:93;:::i;:::-;30670:2;30665:3;30661:12;30654:19;;30313:366;;;:::o;30685:419::-;30851:4;30889:2;30878:9;30874:18;30866:26;;30938:9;30932:4;30928:20;30924:1;30913:9;30909:17;30902:47;30966:131;31092:4;30966:131;:::i;:::-;30958:139;;30685:419;;;:::o;31110:143::-;31167:5;31198:6;31192:13;31183:22;;31214:33;31241:5;31214:33;:::i;:::-;31110:143;;;;:::o;31259:351::-;31329:6;31378:2;31366:9;31357:7;31353:23;31349:32;31346:119;;;31384:79;;:::i;:::-;31346:119;31504:1;31529:64;31585:7;31576:6;31565:9;31561:22;31529:64;:::i;:::-;31519:74;;31475:128;31259:351;;;;:::o;31616:85::-;31661:7;31690:5;31679:16;;31616:85;;;:::o;31707:158::-;31765:9;31798:61;31816:42;31825:32;31851:5;31825:32;:::i;:::-;31816:42;:::i;:::-;31798:61;:::i;:::-;31785:74;;31707:158;;;:::o;31871:147::-;31966:45;32005:5;31966:45;:::i;:::-;31961:3;31954:58;31871:147;;:::o;32024:114::-;32091:6;32125:5;32119:12;32109:22;;32024:114;;;:::o;32144:184::-;32243:11;32277:6;32272:3;32265:19;32317:4;32312:3;32308:14;32293:29;;32144:184;;;;:::o;32334:132::-;32401:4;32424:3;32416:11;;32454:4;32449:3;32445:14;32437:22;;32334:132;;;:::o;32472:108::-;32549:24;32567:5;32549:24;:::i;:::-;32544:3;32537:37;32472:108;;:::o;32586:179::-;32655:10;32676:46;32718:3;32710:6;32676:46;:::i;:::-;32754:4;32749:3;32745:14;32731:28;;32586:179;;;;:::o;32771:113::-;32841:4;32873;32868:3;32864:14;32856:22;;32771:113;;;:::o;32920:732::-;33039:3;33068:54;33116:5;33068:54;:::i;:::-;33138:86;33217:6;33212:3;33138:86;:::i;:::-;33131:93;;33248:56;33298:5;33248:56;:::i;:::-;33327:7;33358:1;33343:284;33368:6;33365:1;33362:13;33343:284;;;33444:6;33438:13;33471:63;33530:3;33515:13;33471:63;:::i;:::-;33464:70;;33557:60;33610:6;33557:60;:::i;:::-;33547:70;;33403:224;33390:1;33387;33383:9;33378:14;;33343:284;;;33347:14;33643:3;33636:10;;33044:608;;;32920:732;;;;:::o;33658:831::-;33921:4;33959:3;33948:9;33944:19;33936:27;;33973:71;34041:1;34030:9;34026:17;34017:6;33973:71;:::i;:::-;34054:80;34130:2;34119:9;34115:18;34106:6;34054:80;:::i;:::-;34181:9;34175:4;34171:20;34166:2;34155:9;34151:18;34144:48;34209:108;34312:4;34303:6;34209:108;:::i;:::-;34201:116;;34327:72;34395:2;34384:9;34380:18;34371:6;34327:72;:::i;:::-;34409:73;34477:3;34466:9;34462:19;34453:6;34409:73;:::i;:::-;33658:831;;;;;;;;:::o;34495:807::-;34744:4;34782:3;34771:9;34767:19;34759:27;;34796:71;34864:1;34853:9;34849:17;34840:6;34796:71;:::i;:::-;34877:72;34945:2;34934:9;34930:18;34921:6;34877:72;:::i;:::-;34959:80;35035:2;35024:9;35020:18;35011:6;34959:80;:::i;:::-;35049;35125:2;35114:9;35110:18;35101:6;35049:80;:::i;:::-;35139:73;35207:3;35196:9;35192:19;35183:6;35139:73;:::i;:::-;35222;35290:3;35279:9;35275:19;35266:6;35222:73;:::i;:::-;34495:807;;;;;;;;;:::o;35308:143::-;35365:5;35396:6;35390:13;35381:22;;35412:33;35439:5;35412:33;:::i;:::-;35308:143;;;;:::o;35457:663::-;35545:6;35553;35561;35610:2;35598:9;35589:7;35585:23;35581:32;35578:119;;;35616:79;;:::i;:::-;35578:119;35736:1;35761:64;35817:7;35808:6;35797:9;35793:22;35761:64;:::i;:::-;35751:74;;35707:128;35874:2;35900:64;35956:7;35947:6;35936:9;35932:22;35900:64;:::i;:::-;35890:74;;35845:129;36013:2;36039:64;36095:7;36086:6;36075:9;36071:22;36039:64;:::i;:::-;36029:74;;35984:129;35457:663;;;;;:::o

Swarm Source

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