Token Starnodz

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
86,658,107.52 STRZ

Holders:
3,531 addresses

Transfers:
-

Contract:
0x1D67454f6b393542290a7bBEeA32c66148909b340x1D67454f6b393542290a7bBEeA32c66148909b34

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StarNodz

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-11
*/

// File: interfaces/IPangolinFactory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
// File: interfaces/IPangolinRouter.sol

pragma solidity >=0.6.2;

interface IPangolinRouter {
    function factory() external pure returns (address);
    function WAVAX() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountAVAX);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountAVAX);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountAVAX);
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountAVAX);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: interfaces/INodeManager.sol


pragma solidity ^0.8.0;

interface INodeManager {
    function getMinPrice() external view returns (uint256);
    function createNode(address account, string memory nodeName, uint256 amount) external;
    function getNodeReward(address account, uint256 _creationTime) external view returns (uint256);
    function getAllNodesRewards(address account) external view returns (uint256);
    function cashoutNodeReward(address account, uint256 _creationTime) external;
    function cashoutAllNodesRewards(address account) external;
    function compoundNodeReward(address account, uint256 creationTime, uint256 rewardAmount) external;
}
// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

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

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

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

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

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

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// 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/finance/PaymentSplitter.sol


// OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol)

pragma solidity ^0.8.0;




/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    mapping(IERC20 => uint256) private _erc20TotalReleased;
    mapping(IERC20 => mapping(address => uint256)) private _erc20Released;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20
     * contract.
     */
    function totalReleased(IERC20 token) public view returns (uint256) {
        return _erc20TotalReleased[token];
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an
     * IERC20 contract.
     */
    function released(IERC20 token, address account) public view returns (uint256) {
        return _erc20Released[token][account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + totalReleased();
        uint256 payment = _pendingPayment(account, totalReceived, released(account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] += payment;
        _totalReleased += payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their
     * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20
     * contract.
     */
    function release(IERC20 token, address account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token);
        uint256 payment = _pendingPayment(account, totalReceived, released(token, account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _erc20Released[token][account] += payment;
        _erc20TotalReleased[token] += payment;

        SafeERC20.safeTransfer(token, account, payment);
        emit ERC20PaymentReleased(token, account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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


// OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.4;

contract StarNodz is ERC20, Ownable, PaymentSplitter {
    using SafeMath for uint256;

    address public joePair;
    address public joeRouterAddress = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; // TraderJoe Router

    address public teamPool;
    address public rewardsPool;

    // Burn address
    address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    uint256 public rewardsFee;
    uint256 public liquidityPoolFee;
    uint256 public teamPoolFee;
    uint256 public cashoutFee;
    uint256 public totalFees;


    // Max transfer amount rate in basis points. (default is 10% of total supply)
    uint16 public maxTransferAmountRate = 500;
     // Max balance amount rate in basis points. (default is 5% of total supply)
    uint16 public maxBalanceAmountRate = 1000;

    uint256 public swapTokensAmount;
    uint256 public totalClaimed = 0;
    bool public isTradingEnabled = true;
    bool public swapLiquifyEnabled = true;

    IPangolinRouter private joeRouter;
    INodeManager private nodeManager;
    uint256 private rwSwap;
    bool private swapping = false;

    mapping(address => bool) public isBlacklisted;
    mapping(address => bool) public automatedMarketMakerPairs;
    // Addresses that excluded from antiWhale
    mapping(address => bool) private _excludedFromAntiWhale;

    event UpdateJoeRouter(
        address indexed newAddress,
        address indexed oldAddress
    );

    event MaxTransferAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate);
    event maxBalanceAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event LiquidityWalletUpdated(
        address indexed newLiquidityWallet,
        address indexed oldLiquidityWallet
    );

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

    event Cashout(
        address indexed account,
        uint256 amount,
        uint256 indexed blockTime
    );

    event Compound(
        address indexed account,
        uint256 amount,
        uint256 indexed blockTime
    );

    modifier antiWhale(address sender, address recipient, uint256 amount) {
        if (maxTransferAmount() > 0) {
            if (
                _excludedFromAntiWhale[sender] == false
                && _excludedFromAntiWhale[recipient] == false
            ) {
                require(amount <= maxTransferAmount(), "Starnodes::antiWhale: Transfer amount exceeds the maxTransferAmount");
                if (sender == joePair) {
                    require(balanceOf(recipient).add(amount) <= maxBalanceAmount(), "Starnodes::antiWhale: Transfer would exceed the maxBalanceAmount of the recipient");
                }
            }
        }
        _;
    }

    constructor(
        address[] memory payees,
        uint256[] memory shares,
        address[] memory addresses,
        uint256[] memory fees,
        uint256 swapAmount
    )
        ERC20("Starnodz", "STRZ")
        PaymentSplitter(payees, shares)
    {
        _excludedFromAntiWhale[msg.sender] = true;
        _excludedFromAntiWhale[address(0)] = true;
        _excludedFromAntiWhale[address(this)] = true;
        _excludedFromAntiWhale[BURN_ADDRESS] = true;

        require(
            addresses[0] != address(0) && addresses[1] != address(0) && addresses[2] != address(0),
            "CONSTR:1"
        );
        teamPool = addresses[0];
        rewardsPool = addresses[1];
        nodeManager = INodeManager(addresses[2]);

        require(joeRouterAddress != address(0), "CONSTR:2");
        IPangolinRouter _joeRouter = IPangolinRouter(joeRouterAddress);

        address _joePair = IPangolinFactory(_joeRouter.factory())
        .createPair(address(this), _joeRouter.WAVAX());


        joeRouter = _joeRouter;
        joePair = _joePair;

        _setAutomatedMarketMakerPair(_joePair, true);

        require(
            fees[0] != 0 && fees[1] != 0 && fees[2] != 0 && fees[3] != 0,
            "CONSTR:3"
        );
        teamPoolFee = fees[0];
        rewardsFee = fees[1];
        liquidityPoolFee = fees[2];
        cashoutFee = fees[3];
        rwSwap = fees[4];

        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);

        require(swapAmount > 0, "CONSTR:7");
        swapTokensAmount = swapAmount * (10**18);
    }

    function migrate(address[] memory addresses_, uint256[] memory balances_) external onlyOwner {
        for (uint256 i = 0; i < addresses_.length; i++) {
            _mint(addresses_[i], balances_[i]);
        }
    }

    function burn(address account, uint256 amount) external onlyOwner {
        _burn(account, amount);
    }

    function updateJoeRouterAddress(address newAddress) external onlyOwner {
        require(
            newAddress != address(joeRouter),
            "TKN:1"
        );
        emit UpdateJoeRouter(newAddress, address(joeRouter));
        IPangolinRouter	 _joeRouter = IPangolinRouter(newAddress);
        address _joePair = IPangolinFactory(joeRouter.factory()).createPair(
            address(this),
            _joeRouter.WAVAX()
        );
        joePair = _joePair;
        joeRouterAddress = newAddress;
    }

    function updateSwapTokensAmount(uint256 newVal) external onlyOwner {
        swapTokensAmount = newVal;
    }

    function updateTeamPool(address payable newVal) external onlyOwner {
        teamPool = newVal;
    }

    function updateRewardsPool(address payable newVal) external onlyOwner {
        rewardsPool = newVal;
    }

    function updateRewardsFee(uint256 newVal) external onlyOwner {
        rewardsFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateLiquidityFee(uint256 newVal) external onlyOwner {
        liquidityPoolFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateTeamFee(uint256 newVal) external onlyOwner {
        teamPoolFee = newVal;
        totalFees = rewardsFee.add(liquidityPoolFee).add(teamPoolFee);
    }

    function updateCashoutFee(uint256 newVal) external onlyOwner {
        cashoutFee = newVal;
    }

    function updateRwSwapFee(uint256 newVal) external onlyOwner {
        rwSwap = newVal;
    }

    function updateSwapLiquify(bool newVal) external onlyOwner {
        swapLiquifyEnabled = newVal;
    }

    function updateIsTradingEnabled(bool newVal) external onlyOwner {
        isTradingEnabled = newVal;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        onlyOwner
    {
        require(
            pair != joePair,
            "TKN:2"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function blacklistAddress(address account, bool value)
        external
        onlyOwner
    {
        isBlacklisted[account] = value;
    }

    function isExcludedFromAntiWhale(address _account) public view returns (bool) {
        return _excludedFromAntiWhale[_account];
    }

    /**
     * @dev Returns the max wallet amount.
     */
    function maxBalanceAmount() public view returns (uint256) {
        return (totalSupply()-balanceOf(rewardsPool)).mul(maxBalanceAmountRate).div(10000);
    }

    /**
     * @dev Returns the max transfer amount.
     */
    function maxTransferAmount() public view returns (uint256) {
        return (totalSupply()-balanceOf(rewardsPool)).mul(maxTransferAmountRate).div(10000);
    }

    function setExcludedFromAntiWhale(address _account, bool _excluded) public onlyOwner {
        _excludedFromAntiWhale[_account] = _excluded;
    }

    /**
     * @dev Update the max balance amount rate.
     * Can only be called by the current operator.
     */
    function updatemaxBalanceAmountRate(uint16 _maxBalanceAmountRate) external onlyOwner {
        require(_maxBalanceAmountRate <= 10000, "SEED::updatemaxBalanceAmountRate: Max transfer amount rate must not exceed the maximum rate.");
        require(_maxBalanceAmountRate >= 200, "SEED::updatemaxBalanceAmountRate: Max transfer amount rate must  exceed the minimum rate.");
        emit maxBalanceAmountRateUpdated(msg.sender, maxBalanceAmountRate, _maxBalanceAmountRate);
        maxBalanceAmountRate = _maxBalanceAmountRate;
    }

    /**
     * @dev Update the max transfer amount rate.
     * Can only be called by the current operator.
     */
    function updateMaxTransferAmountRate(uint16 _maxTransferAmountRate) public onlyOwner {
        require(_maxTransferAmountRate <= 10000, "SEED::updateMaxTransferAmountRate: Max transfer amount rate must not exceed the maximum rate.");
        require(_maxTransferAmountRate >= 100, "SEED::updateMaxTransferAmountRate: Max transfer amount rate must exceed the minimum rate.");
        emit MaxTransferAmountRateUpdated(msg.sender, maxTransferAmountRate, _maxTransferAmountRate);
        maxTransferAmountRate = _maxTransferAmountRate;
    }

    // Private methods

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "TKN:3"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal  override antiWhale(from, to, amount){
        require(
            !isBlacklisted[from] && !isBlacklisted[to],
            "BLACKLISTED"
        );
        require(from != address(0), "ERC20:1");
        require(to != address(0), "ERC20:2");
        if (from != owner() && to != joePair && to != address(joeRouter) && to != address(this) && from != address(this)) {
            require(isTradingEnabled, "TRADING_DISABLED");
        }
        super._transfer(from, to, amount);
    }

    function swapAndSendToFee(address destination, uint256 tokens) private {
        uint256 initialAVAXBalance = address(this).balance;

        swapTokensForAVAX(tokens);
        uint256 newBalance = (address(this).balance).sub(initialAVAXBalance);
        payable(destination).transfer(newBalance);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForAVAX(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForAVAX(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = joeRouter.WAVAX();

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

        joeRouter.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of AVAX
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    // External node methods

    function createNodeWithTokens(string memory name, uint256 amount_) external {
        address sender = _msgSender();
        require(
            bytes(name).length > 3 && bytes(name).length < 32,
            "NC:1"
        );
        require(
            sender != address(0),
            "NC:2"
        );
        require(!isBlacklisted[sender], "BLACKLISTED");
        require(
            sender != teamPool && sender != rewardsPool,
            "NC:4"
        );
        require(
            balanceOf(sender) >= amount_,
            "NC:5"
        );

        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;
        if (
            swapAmountOk &&
            swapLiquifyEnabled &&
            !swapping &&
            sender != owner() &&
            !automatedMarketMakerPairs[sender]
        ) {
            swapping = true;

            uint256 teamTokens = contractTokenBalance
                .mul(teamPoolFee)
                .div(100);

            swapAndSendToFee(teamPool, teamTokens);

            uint256 rewardsPoolTokens = contractTokenBalance
                .mul(rewardsFee)
                .div(100);

            uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div(
                100
            );

            swapAndSendToFee(rewardsPool, rewardsTokenstoSwap);

            super._transfer(
                address(this),
                rewardsPool,
                rewardsPoolTokens.sub(rewardsTokenstoSwap)
            );

            uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
                100
            );

            swapAndLiquify(swapTokens);
            swapTokensForAVAX(balanceOf(address(this)));

            swapping = false;
        }
        super._transfer(sender, address(this), amount_);
        nodeManager.createNode(sender, name, amount_);
    }

    function cashoutReward(uint256 blocktime) external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "CASHOUT:1"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "CASHOUT:3"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "CASHOUT:4"
        );

        if (swapLiquifyEnabled) {
            uint256 feeAmount;
            if (cashoutFee > 0) {
                feeAmount = rewardAmount.mul(cashoutFee).div(100);
                swapAndSendToFee(rewardsPool, feeAmount);
            }
            rewardAmount -= feeAmount;
        }
        super._transfer(rewardsPool, sender, rewardAmount);
        nodeManager.cashoutNodeReward(sender, blocktime);
        totalClaimed += rewardAmount;

        emit Cashout(sender, rewardAmount, blocktime);
    }

    function cashoutAll() external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "CASHOUT:5"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "CASHOUT:7"
        );
        uint256 rewardAmount = nodeManager.getAllNodesRewards(sender);
        require(
            rewardAmount > 0,
            "CASHOUT:8"
        );
        if (swapLiquifyEnabled) {
            uint256 feeAmount;
            if (cashoutFee > 0) {
                feeAmount = rewardAmount.mul(cashoutFee).div(100);
                swapAndSendToFee(rewardsPool, feeAmount);
            }
            rewardAmount -= feeAmount;
        }
        super._transfer(rewardsPool, sender, rewardAmount);
        nodeManager.cashoutAllNodesRewards(sender);
        totalClaimed += rewardAmount;

        emit Cashout(sender, rewardAmount, 0);
    }

    function compoundNodeRewards(uint256 blocktime) external {
        address sender = _msgSender();
        require(
            sender != address(0),
            "COMP:1"
        );
        require(
            !isBlacklisted[sender],
            "BLACKLISTED"
        );
        require(
            sender != teamPool && sender != rewardsPool,
            "COMP:2"
        );
        uint256 rewardAmount = nodeManager.getNodeReward(sender, blocktime);
        require(
            rewardAmount > 0,
            "COMP:3"
        );

        uint256 contractTokenBalance = balanceOf(address(this));
        bool swapAmountOk = contractTokenBalance >= swapTokensAmount;
        if (
            swapAmountOk &&
            swapLiquifyEnabled &&
            !swapping &&
            sender != owner() &&
            !automatedMarketMakerPairs[sender]
        ) {
            swapping = true;

            uint256 teamTokens = contractTokenBalance
                .mul(teamPoolFee)
                .div(100);

            swapAndSendToFee(teamPool, teamTokens);

            uint256 rewardsPoolTokens = contractTokenBalance
                .mul(rewardsFee)
                .div(100);

            uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div(
                100
            );

            swapAndSendToFee(rewardsPool, rewardsTokenstoSwap);

            super._transfer(
                address(this),
                rewardsPool,
                rewardsPoolTokens.sub(rewardsTokenstoSwap)
            );

            uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div(
                100
            );

            swapAndLiquify(swapTokens);
            swapTokensForAVAX(balanceOf(address(this)));

            swapping = false;
        }
        super._transfer(rewardsPool, address(this), rewardAmount);
        nodeManager.compoundNodeReward(sender, blocktime, rewardAmount);

        emit Compound(sender, rewardAmount, blocktime);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"fees","type":"uint256[]"},{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Cashout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"blockTime","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"MaxTransferAmountRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateJoeRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"maxBalanceAmountRateUpdated","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"compoundNodeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isExcludedFromAntiWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joeRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalanceAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalanceAmountRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmountRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"balances_","type":"uint256[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"setExcludedFromAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateIsTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateJoeRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxTransferAmountRate","type":"uint16"}],"name":"updateMaxTransferAmountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"updateSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newVal","type":"address"}],"name":"updateTeamPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxBalanceAmountRate","type":"uint16"}],"name":"updatemaxBalanceAmountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e80547360ae616a2155ee3d9a68541ba4544862310933d46001600160a01b03199091161790556016805463ffffffff19166303e801f417905560006018556019805461ffff1916610101179055601c805460ff191690553480156200006a57600080fd5b50604051620052f4380380620052f48339810160408190526200008d9162000e46565b604080518082018252600881526729ba30b93737b23d60c11b60208083019182528351808501909452600484526329aa292d60e11b90840152815188938893929091620000dd9160039162000c82565b508051620000f390600490602084019062000c82565b505050620001106200010a6200097c60201b60201c565b62000980565b8051825114620001825760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620001d55760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604482015260640162000179565b60005b82518110156200025957620002448382815181106200020757634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200023057634e487b7160e01b600052603260045260246000fd5b6020026020010151620009d260201b60201c565b80620002508162000fd7565b915050620001d8565b5050336000908152601f60205260408082208054600160ff1991821681179092557f8c60882dec3cf54096060609fdd16c336781b436ca34f3f27a220dfcfa1d48558054821683179055308452918320805483168217905561dead83527fef94442dfc0e910ca743614215a10fad3ff708bf5378f9c5c958c9192b3bf00480549092161790558451909150849082906200030357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316141580156200035f575060006001600160a01b0316836001815181106200034b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b8015620003a8575060006001600160a01b0316836002815181106200039457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614155b620003e15760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3160c01b604482015260640162000179565b826000815181106200040357634e487b7160e01b600052603260045260246000fd5b6020026020010151600f60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001815181106200045357634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082600281518110620004a357634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601a80546001600160a01b0319166001600160a01b03928316179055600e5416620005075760405162461bcd60e51b815260206004820152600860248201526721a7a729aa291d1960c11b604482015260640162000179565b600e546040805163c45a015560e01b815290516001600160a01b0390921691600091839163c45a015591600480820192602092909190829003018186803b1580156200055257600080fd5b505afa15801562000567573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058d919062000e29565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b158015620005d657600080fd5b505afa158015620005eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000611919062000e29565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200065a57600080fd5b505af11580156200066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000695919062000e29565b6019805462010000600160b01b031916620100006001600160a01b038681169190910291909117909155600d80546001600160a01b0319169183169190911790559050620006e581600162000bc0565b836000815181106200070757634e487b7160e01b600052603260045260246000fd5b60200260200101516000141580156200074a5750836001815181106200073d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007815750836002815181106200077457634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b8015620007b8575083600381518110620007ab57634e487b7160e01b600052603260045260246000fd5b6020026020010151600014155b620007f15760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3360c01b604482015260640162000179565b836000815181106200081357634e487b7160e01b600052603260045260246000fd5b6020026020010151601381905550836001815181106200084357634e487b7160e01b600052603260045260246000fd5b6020026020010151601181905550836002815181106200087357634e487b7160e01b600052603260045260246000fd5b602002602001015160128190555083600381518110620008a357634e487b7160e01b600052603260045260246000fd5b602002602001015160148190555083600481518110620008d357634e487b7160e01b600052603260045260246000fd5b6020026020010151601b819055506200091a6013546200090660125460115462000c6d60201b62002b141790919060201c565b62000c6d60201b62002b141790919060201c565b60155582620009575760405162461bcd60e51b8152602060048201526008602482015267434f4e5354523a3760c01b604482015260640162000179565b6200096b83670de0b6b3a764000062000f78565b601755506200102195505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821662000a3f5760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b606482015260840162000179565b6000811162000a915760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604482015260640162000179565b6001600160a01b0382166000908152600860205260409020541562000b0d5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b606482015260840162000179565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416908117909155600090815260086020526040902081905560065462000b7790829062000f5d565b600655604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b6001600160a01b0382166000908152601e602052604090205460ff161515811515141562000c195760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b604482015260640162000179565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600062000c7b828462000f5d565b9392505050565b82805462000c909062000f9a565b90600052602060002090601f01602090048101928262000cb4576000855562000cff565b82601f1062000ccf57805160ff191683800117855562000cff565b8280016001018555821562000cff579182015b8281111562000cff57825182559160200191906001019062000ce2565b5062000d0d92915062000d11565b5090565b5b8082111562000d0d576000815560010162000d12565b80516001600160a01b038116811462000d4057600080fd5b919050565b600082601f83011262000d56578081fd5b8151602062000d6f62000d698362000f37565b62000f04565b80838252828201915082860187848660051b890101111562000d8f578586fd5b855b8581101562000db85762000da58262000d28565b8452928401929084019060010162000d91565b5090979650505050505050565b600082601f83011262000dd6578081fd5b8151602062000de962000d698362000f37565b80838252828201915082860187848660051b890101111562000e09578586fd5b855b8581101562000db85781518452928401929084019060010162000e0b565b60006020828403121562000e3b578081fd5b62000c7b8262000d28565b600080600080600060a0868803121562000e5e578081fd5b85516001600160401b038082111562000e75578283fd5b62000e8389838a0162000d45565b9650602088015191508082111562000e99578283fd5b62000ea789838a0162000dc5565b9550604088015191508082111562000ebd578283fd5b62000ecb89838a0162000d45565b9450606088015191508082111562000ee1578283fd5b5062000ef08882890162000dc5565b925050608086015190509295509295909350565b604051601f8201601f191681016001600160401b038111828210171562000f2f5762000f2f6200100b565b604052919050565b60006001600160401b0382111562000f535762000f536200100b565b5060051b60200190565b6000821982111562000f735762000f7362000ff5565b500190565b600081600019048311821515161562000f955762000f9562000ff5565b500290565b600181811c9082168062000faf57607f821691505b6020821081141562000fd157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000fee5762000fee62000ff5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6142c380620010316000396000f3fe6080604052600436106103dd5760003560e01c80636eacab12116101fd578063acedf07c11610118578063dd62ed3e116100ab578063f2fde38b1161007a578063f2fde38b14610c26578063f4e27dc814610c46578063fabc403514610c66578063fccc281314610c85578063fe575a8714610c9b57600080fd5b8063dd62ed3e14610b8b578063de01e15114610bd1578063e159b3ae14610bf1578063e33b7de314610c1157600080fd5b8063c7f59a67116100e7578063c7f59a6714610ae9578063ce7c2ac214610b09578063d54ad2a114610b3f578063d79779b214610b5557600080fd5b8063acedf07c14610a63578063b326a0f914610a83578063b62496f514610a99578063bbc6799814610ac957600080fd5b806395d89b4111610190578063a457c2d71161015f578063a457c2d7146109f9578063a9059cbb14610a19578063a9e7572314610a39578063ab04acd414610a4e57600080fd5b806395d89b411461096e5780639852595c146109835780639a7a23d6146109b95780639dc29fac146109d957600080fd5b80638b83209b116101cc5780638b83209b146108f05780638bc9c7b0146109105780638da5cb5b146109305780638e6756631461094e57600080fd5b80636eacab121461087b57806370a082311461089b578063715018a6146108bb5780637beb2c14146108d057600080fd5b80633ff8bf2e116102f85780635c69cb5d1161028b5780636770474b1161025a5780636770474b146107e55780636815a91c146108055780636a141e2c146108255780636bca89cb146108455780636d9ae0be1461086557600080fd5b80635c69cb5d1461076f5780635f1c31821461078f57806365bfe430146107a55780636653a340146107c557600080fd5b80634ef91063116102c75780634ef9106314610703578063527509f314610724578063545579731461074457806354f12f1f1461075957600080fd5b80633ff8bf2e1461064f578063406072a91461067d578063455a4396146106c357806348b75044146106e357600080fd5b806323b872dd11610370578063313ce5671161033f578063313ce567146105de57806339509351146105fa578063396365041461061a5780633a98ef391461063a57600080fd5b806323b872dd1461054f578063269f534c1461056f5780632ae883fd146105a85780632bb14e1d146105c857600080fd5b8063095ea7b3116103ac578063095ea7b3146104d657806313114a9d146104f657806318160ddd1461051a578063191655871461052f57600080fd5b80630359fea91461042b578063064a59d01461046857806306fdde0314610492578063084a6bff146104b457600080fd5b36610426577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561043757600080fd5b5060105461044b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047457600080fd5b506019546104829060ff1681565b604051901515815260200161045f565b34801561049e57600080fd5b506104a7610ccb565b60405161045f9190613f8b565b3480156104c057600080fd5b506104d46104cf366004613eb2565b610d5d565b005b3480156104e257600080fd5b506104826104f1366004613cc4565b610db7565b34801561050257600080fd5b5061050c60155481565b60405190815260200161045f565b34801561052657600080fd5b5060025461050c565b34801561053b57600080fd5b506104d461054a366004613be7565b610dcd565b34801561055b57600080fd5b5061048261056a366004613c57565b610efb565b34801561057b57600080fd5b5061048261058a366004613be7565b6001600160a01b03166000908152601f602052604090205460ff1690565b3480156105b457600080fd5b506104d46105c3366004613db2565b610fa7565b3480156105d457600080fd5b5061050c60115481565b3480156105ea57600080fd5b506040516012815260200161045f565b34801561060657600080fd5b50610482610615366004613cc4565b610fe4565b34801561062657600080fd5b50600f5461044b906001600160a01b031681565b34801561064657600080fd5b5060065461050c565b34801561065b57600080fd5b5060165461066a9061ffff1681565b60405161ffff909116815260200161045f565b34801561068957600080fd5b5061050c610698366004613dea565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156106cf57600080fd5b506104d46106de366004613c97565b611020565b3480156106ef57600080fd5b506104d46106fe366004613dea565b611075565b34801561070f57600080fd5b5060165461066a9062010000900461ffff1681565b34801561073057600080fd5b50600e5461044b906001600160a01b031681565b34801561075057600080fd5b506104d461125d565b34801561076557600080fd5b5061050c60125481565b34801561077b57600080fd5b506104d461078a366004613eb2565b611524565b34801561079b57600080fd5b5061050c60175481565b3480156107b157600080fd5b506104d46107c0366004613eb2565b6118f9565b3480156107d157600080fd5b506104d46107e0366004613be7565b611bc9565b3480156107f157600080fd5b506104d4610800366004613eb2565b611c15565b34801561081157600080fd5b506104d4610820366004613eb2565b611c44565b34801561083157600080fd5b506104d4610840366004613e90565b611c73565b34801561085157600080fd5b50600d5461044b906001600160a01b031681565b34801561087157600080fd5b5061050c60145481565b34801561088757600080fd5b506104d4610896366004613be7565b611e38565b3480156108a757600080fd5b5061050c6108b6366004613be7565b611e84565b3480156108c757600080fd5b506104d4611e9f565b3480156108dc57600080fd5b506104d46108eb366004613e90565b611ed5565b3480156108fc57600080fd5b5061044b61090b366004613eb2565b6120a8565b34801561091c57600080fd5b506104d461092b366004613eb2565b6120e6565b34801561093c57600080fd5b506005546001600160a01b031661044b565b34801561095a57600080fd5b506104d4610969366004613eb2565b612115565b34801561097a57600080fd5b506104a7612159565b34801561098f57600080fd5b5061050c61099e366004613be7565b6001600160a01b031660009081526009602052604090205490565b3480156109c557600080fd5b506104d46109d4366004613c97565b612168565b3480156109e557600080fd5b506104d46109f4366004613cc4565b6121e6565b348015610a0557600080fd5b50610482610a14366004613cc4565b61221a565b348015610a2557600080fd5b50610482610a34366004613cc4565b6122b3565b348015610a4557600080fd5b5061050c6122c0565b348015610a5a57600080fd5b5061050c612306565b348015610a6f57600080fd5b506104d4610a7e366004613eb2565b612339565b348015610a8f57600080fd5b5061050c60135481565b348015610aa557600080fd5b50610482610ab4366004613be7565b601e6020526000908152604090205460ff1681565b348015610ad557600080fd5b506104d4610ae4366004613dfc565b61237d565b348015610af557600080fd5b506104d4610b04366004613c97565b6126c3565b348015610b1557600080fd5b5061050c610b24366004613be7565b6001600160a01b031660009081526008602052604090205490565b348015610b4b57600080fd5b5061050c60185481565b348015610b6157600080fd5b5061050c610b70366004613be7565b6001600160a01b03166000908152600b602052604090205490565b348015610b9757600080fd5b5061050c610ba6366004613c1f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bdd57600080fd5b506104d4610bec366004613cef565b612718565b348015610bfd57600080fd5b506104d4610c0c366004613be7565b6127bd565b348015610c1d57600080fd5b5060075461050c565b348015610c3257600080fd5b506104d4610c41366004613be7565b612a35565b348015610c5257600080fd5b506104d4610c61366004613db2565b612ad0565b348015610c7257600080fd5b5060195461048290610100900460ff1681565b348015610c9157600080fd5b5061044b61dead81565b348015610ca757600080fd5b50610482610cb6366004613be7565b601d6020526000908152604090205460ff1681565b606060038054610cda906141e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d06906141e8565b8015610d535780601f10610d2857610100808354040283529160200191610d53565b820191906000526020600020905b815481529060010190602001808311610d3657829003601f168201915b5050505050905090565b6005546001600160a01b03163314610d905760405162461bcd60e51b8152600401610d879061402f565b60405180910390fd5b6011819055601354601254610db19190610dab908490612b14565b90612b14565b60155550565b6000610dc4338484612b20565b50600192915050565b6001600160a01b038116600090815260086020526040902054610e025760405162461bcd60e51b8152600401610d8790613f9e565b6000610e0d60075490565b610e17904761414e565b90506000610e448383610e3f866001600160a01b031660009081526009602052604090205490565b612c3c565b905080610e635760405162461bcd60e51b8152600401610d8790613fe4565b6001600160a01b03831660009081526009602052604081208054839290610e8b90849061414e565b925050819055508060076000828254610ea4919061414e565b90915550610eb490508382612c82565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b6000610f08848484612d9b565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f8d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d87565b610f9a8533858403612b20565b60019150505b9392505050565b6005546001600160a01b03163314610fd15760405162461bcd60e51b8152600401610d879061402f565b6019805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dc491859061101b90869061414e565b612b20565b6005546001600160a01b0316331461104a5760405162461bcd60e51b8152600401610d879061402f565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600860205260409020546110aa5760405162461bcd60e51b8152600401610d8790613f9e565b6001600160a01b0382166000908152600b60205260408120546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561110257600080fd5b505afa158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a9190613eca565b611144919061414e565b9050600061117d8383610e3f87876001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b90508061119c5760405162461bcd60e51b8152600401610d8790613fe4565b6001600160a01b038085166000908152600c60209081526040808320938716835292905290812080548392906111d390849061414e565b90915550506001600160a01b0384166000908152600b60205260408120805483929061120090849061414e565b9091555061121190508484836130e8565b604080516001600160a01b038581168252602082018490528616917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a250505050565b33806112975760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3560b81b6044820152606401610d87565b6001600160a01b0381166000908152601d602052604090205460ff16156112d05760405162461bcd60e51b8152600401610d8790614064565b600f546001600160a01b038281169116148015906112fc57506010546001600160a01b03828116911614155b6113345760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3760b81b6044820152606401610d87565b601a5460405163956de88760e01b81526001600160a01b038381166004830152600092169063956de8879060240160206040518083038186803b15801561137a57600080fd5b505afa15801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190613eca565b9050600081116113f05760405162461bcd60e51b815260206004820152600960248201526808682a6909eaaa874760bb1b6044820152606401610d87565b601954610100900460ff161561145257601454600090156114445761142b60646114256014548561313a90919063ffffffff16565b90613146565b601054909150611444906001600160a01b031682613152565b61144e81836141a5565b9150505b601054611469906001600160a01b031683836131a8565b601a5460405163d3b0dba960e01b81526001600160a01b0384811660048301529091169063d3b0dba990602401600060405180830381600087803b1580156114b057600080fd5b505af11580156114c4573d6000803e3d6000fd5b5050505080601860008282546114da919061414e565b90915550506040518181526000906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d09060200160405180910390a35050565b338061155b5760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3160d01b6044820152606401610d87565b6001600160a01b0381166000908152601d602052604090205460ff16156115945760405162461bcd60e51b8152600401610d8790614064565b600f546001600160a01b038281169116148015906115c057506010546001600160a01b03828116911614155b6115f55760405162461bcd60e51b815260206004820152600660248201526521a7a6a81d1960d11b6044820152606401610d87565b601a5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b15801561164257600080fd5b505afa158015611656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167a9190613eca565b9050600081116116b55760405162461bcd60e51b8152602060048201526006602482015265434f4d503a3360d01b6044820152606401610d87565b60006116c030611e84565b601754909150811080159081906116de5750601954610100900460ff165b80156116ed5750601c5460ff16155b801561170757506005546001600160a01b03858116911614155b801561172c57506001600160a01b0384166000908152601e602052604090205460ff16155b1561182a57601c805460ff191660011790556013546000906117569060649061142590869061313a565b600f5490915061176f906001600160a01b031682613152565b600061178b60646114256011548761313a90919063ffffffff16565b905060006117a96064611425601b548561313a90919063ffffffff16565b6010549091506117c2906001600160a01b031682613152565b6010546117e39030906001600160a01b03166117de8585613378565b6131a8565b60006117ff60646114256012548961313a90919063ffffffff16565b905061180a81613384565b61181b61181630611e84565b61340b565b5050601c805460ff1916905550505b601054611841906001600160a01b031630856131a8565b601a5460405163cbd1499360e01b81526001600160a01b03868116600483015260248201889052604482018690529091169063cbd1499390606401600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b5050505084846001600160a01b03167f0e311a2c6dbfb0153ec3a8a5bdca09070b3e5f60768fdc10a20453f38d186873856040516118ea91815260200190565b60405180910390a35050505050565b33806119335760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3160b81b6044820152606401610d87565b6001600160a01b0381166000908152601d602052604090205460ff161561196c5760405162461bcd60e51b8152600401610d8790614064565b600f546001600160a01b0382811691161480159061199857506010546001600160a01b03828116911614155b6119d05760405162461bcd60e51b8152602060048201526009602482015268434153484f55543a3360b81b6044820152606401610d87565b601a5460405163939c6bfb60e01b81526001600160a01b03838116600483015260248201859052600092169063939c6bfb9060440160206040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190613eca565b905060008111611a935760405162461bcd60e51b815260206004820152600960248201526810d054d213d5550e8d60ba1b6044820152606401610d87565b601954610100900460ff1615611aef5760145460009015611ae157611ac860646114256014548561313a90919063ffffffff16565b601054909150611ae1906001600160a01b031682613152565b611aeb81836141a5565b9150505b601054611b06906001600160a01b031683836131a8565b601a54604051633bcf707b60e01b81526001600160a01b0384811660048301526024820186905290911690633bcf707b90604401600060405180830381600087803b158015611b5457600080fd5b505af1158015611b68573d6000803e3d6000fd5b505050508060186000828254611b7e919061414e565b909155505060405181815283906001600160a01b038416907f4f32a1005fcf45a64a68bc4258b4e0f5522b7aa6a06506781aa4e6c6395c48d0906020015b60405180910390a3505050565b6005546001600160a01b03163314611bf35760405162461bcd60e51b8152600401610d879061402f565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c3f5760405162461bcd60e51b8152600401610d879061402f565b601755565b6005546001600160a01b03163314611c6e5760405162461bcd60e51b8152600401610d879061402f565b601455565b6005546001600160a01b03163314611c9d5760405162461bcd60e51b8152600401610d879061402f565b6127108161ffff161115611d3f5760405162461bcd60e51b815260206004820152605d60248201527f534545443a3a7570646174654d61785472616e73666572416d6f756e7452617460448201527f653a204d6178207472616e7366657220616d6f756e742072617465206d75737460648201527f206e6f742065786365656420746865206d6178696d756d20726174652e000000608482015260a401610d87565b60648161ffff161015611ddc5760405162461bcd60e51b815260206004820152605960248201527f534545443a3a7570646174654d61785472616e73666572416d6f756e7452617460448201527f653a204d6178207472616e7366657220616d6f756e742072617465206d7573746064820152781032bc31b2b2b2103a34329036b4b734b6bab6903930ba329760391b608482015260a401610d87565b6016546040805161ffff9283168152918316602083015233917fb62a50fc861a770636e85357becb3b82a32e911106609d4985871eaf29011e08910160405180910390a26016805461ffff191661ffff92909216919091179055565b6005546001600160a01b03163314611e625760405162461bcd60e51b8152600401610d879061402f565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611ec95760405162461bcd60e51b8152600401610d879061402f565b611ed360006135ad565b565b6005546001600160a01b03163314611eff5760405162461bcd60e51b8152600401610d879061402f565b6127108161ffff161115611fa15760405162461bcd60e51b815260206004820152605c60248201527f534545443a3a7570646174656d617842616c616e6365416d6f756e745261746560448201527f3a204d6178207472616e7366657220616d6f756e742072617465206d7573742060648201527f6e6f742065786365656420746865206d6178696d756d20726174652e00000000608482015260a401610d87565b60c88161ffff16101561203e5760405162461bcd60e51b815260206004820152605960248201527f534545443a3a7570646174656d617842616c616e6365416d6f756e745261746560448201527f3a204d6178207472616e7366657220616d6f756e742072617465206d757374206064820152781032bc31b2b2b2103a34329036b4b734b6bab6903930ba329760391b608482015260a401610d87565b601654604080516201000090920461ffff90811683528316602083015233917f48a8b3c17c1c8f369741a18a6b61adb482f30aa47685d7d5fd01ca16c3104ef6910160405180910390a26016805461ffff909216620100000263ffff000019909216919091179055565b6000600a82815481106120cb57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6005546001600160a01b031633146121105760405162461bcd60e51b8152600401610d879061402f565b601b55565b6005546001600160a01b0316331461213f5760405162461bcd60e51b8152600401610d879061402f565b6012819055601354601154610db19190610dab9084612b14565b606060048054610cda906141e8565b6005546001600160a01b031633146121925760405162461bcd60e51b8152600401610d879061402f565b600d546001600160a01b03838116911614156121d85760405162461bcd60e51b81526020600482015260056024820152642a25a71d1960d91b6044820152606401610d87565b6121e282826135ff565b5050565b6005546001600160a01b031633146122105760405162461bcd60e51b8152600401610d879061402f565b6121e282826136aa565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561229c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d87565b6122a93385858403612b20565b5060019392505050565b6000610dc4338484612d9b565b60165460105460009161230191612710916114259161ffff909116906122ee906001600160a01b0316611e84565b6002546122fb91906141a5565b9061313a565b905090565b6016546010546000916123019161271091611425916201000090910461ffff16906122ee906001600160a01b0316611e84565b6005546001600160a01b031633146123635760405162461bcd60e51b8152600401610d879061402f565b6013819055601254601154610db1918391610dab91612b14565b815133906003108015612391575060208351105b6123c65760405162461bcd60e51b8152600401610d87906020808252600490820152634e433a3160e01b604082015260600190565b6001600160a01b0381166124055760405162461bcd60e51b8152600401610d879060208082526004908201526327219d1960e11b604082015260600190565b6001600160a01b0381166000908152601d602052604090205460ff161561243e5760405162461bcd60e51b8152600401610d8790614064565b600f546001600160a01b0382811691161480159061246a57506010546001600160a01b03828116911614155b61249f5760405162461bcd60e51b8152600401610d87906020808252600490820152631390ce8d60e21b604082015260600190565b816124a982611e84565b10156124e05760405162461bcd60e51b8152600401610d87906020808252600490820152634e433a3560e01b604082015260600190565b60006124eb30611e84565b601754909150811080159081906125095750601954610100900460ff165b80156125185750601c5460ff16155b801561253257506005546001600160a01b03848116911614155b801561255757506001600160a01b0383166000908152601e602052604090205460ff16155b1561264b57601c805460ff191660011790556013546000906125819060649061142590869061313a565b600f5490915061259a906001600160a01b031682613152565b60006125b660646114256011548761313a90919063ffffffff16565b905060006125d46064611425601b548561313a90919063ffffffff16565b6010549091506125ed906001600160a01b031682613152565b6010546126099030906001600160a01b03166117de8585613378565b600061262560646114256012548961313a90919063ffffffff16565b905061263081613384565b61263c61181630611e84565b5050601c805460ff1916905550505b6126568330866131a8565b601a54604051634810cb9960e11b81526001600160a01b039091169063902197329061268a90869089908990600401613f57565b600060405180830381600087803b1580156126a457600080fd5b505af11580156126b8573d6000803e3d6000fd5b505050505050505050565b6005546001600160a01b031633146126ed5760405162461bcd60e51b8152600401610d879061402f565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146127425760405162461bcd60e51b8152600401610d879061402f565b60005b82518110156127b8576127a683828151811061277157634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061279957634e487b7160e01b600052603260045260246000fd5b60200260200101516137f8565b806127b081614223565b915050612745565b505050565b6005546001600160a01b031633146127e75760405162461bcd60e51b8152600401610d879061402f565b6019546001600160a01b03828116620100009092041614156128335760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3160d81b6044820152606401610d87565b6019546040516001600160a01b03620100009092048216918316907fb172ff8de0a3afc7f2ad25e3396c86087d62f54aa2b1757e9c048e3712fddbcd90600090a360008190506000601960029054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156128c957600080fd5b505afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129019190613c03565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561294957600080fd5b505afa15801561295d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129819190613c03565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156129c957600080fd5b505af11580156129dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a019190613c03565b600d80546001600160a01b039283166001600160a01b031991821617909155600e8054959092169416939093179092555050565b6005546001600160a01b03163314612a5f5760405162461bcd60e51b8152600401610d879061402f565b6001600160a01b038116612ac45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d87565b612acd816135ad565b50565b6005546001600160a01b03163314612afa5760405162461bcd60e51b8152600401610d879061402f565b601980549115156101000261ff0019909216919091179055565b6000610fa0828461414e565b6001600160a01b038316612b825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d87565b6001600160a01b038216612be35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d87565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611bbc565b6006546001600160a01b03841660009081526008602052604081205490918391612c669086614186565b612c709190614166565b612c7a91906141a5565b949350505050565b80471015612cd25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610d87565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d1f576040519150601f19603f3d011682016040523d82523d6000602084013e612d24565b606091505b50509050806127b85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610d87565b8282826000612da86122c0565b1115612f37576001600160a01b0383166000908152601f602052604090205460ff16158015612df057506001600160a01b0382166000908152601f602052604090205460ff16155b15612f3757612dfd6122c0565b811115612e7e5760405162461bcd60e51b815260206004820152604360248201527f537461726e6f6465733a3a616e74695768616c653a205472616e73666572206160448201527f6d6f756e74206578636565647320746865206d61785472616e73666572416d6f6064820152621d5b9d60ea1b608482015260a401610d87565b600d546001600160a01b0384811691161415612f3757612e9c612306565b612ea982610dab85611e84565b1115612f375760405162461bcd60e51b815260206004820152605160248201527f537461726e6f6465733a3a616e74695768616c653a205472616e73666572207760448201527f6f756c642065786365656420746865206d617842616c616e6365416d6f756e74606482015270081bd9881d1a19481c9958da5c1a595b9d607a1b608482015260a401610d87565b6001600160a01b0386166000908152601d602052604090205460ff16158015612f7957506001600160a01b0385166000908152601d602052604090205460ff16155b612f955760405162461bcd60e51b8152600401610d8790614064565b6001600160a01b038616612fd55760405162461bcd60e51b815260206004820152600760248201526645524332303a3160c81b6044820152606401610d87565b6001600160a01b0385166130155760405162461bcd60e51b815260206004820152600760248201526622a92199181d1960c91b6044820152606401610d87565b6005546001600160a01b038781169116148015906130415750600d546001600160a01b03868116911614155b801561306157506019546001600160a01b03868116620100009092041614155b801561307657506001600160a01b0385163014155b801561308b57506001600160a01b0386163014155b156130d55760195460ff166130d55760405162461bcd60e51b815260206004820152601060248201526f15149051125391d7d11254d05093115160821b6044820152606401610d87565b6130e08686866131a8565b505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526127b89084906138d7565b6000610fa08284614186565b6000610fa08284614166565b4761315c8261340b565b60006131684783613378565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f193505050501580156131a1573d6000803e3d6000fd5b5050505050565b6001600160a01b03831661320c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d87565b6001600160a01b03821661326e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d87565b6001600160a01b038316600090815260208190526040902054818110156132e65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d87565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061331d90849061414e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161336991815260200190565b60405180910390a35b50505050565b6000610fa082846141a5565b6000613391826002613146565b9050600061339f8383613378565b9050476133ab8361340b565b60006133b74783613378565b90506133c383826139a9565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061344e57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050601960029054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156134bc57600080fd5b505afa1580156134d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f49190613c03565b8160018151811061351557634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019546135419130916201000090041684612b20565b601954604051633b158ab160e11b8152620100009091046001600160a01b03169063762b15629061357f908590600090869030904290600401614089565b600060405180830381600087803b15801561359957600080fd5b505af11580156130e0573d6000803e3d6000fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601e602052604090205460ff16151581151514156136565760405162461bcd60e51b8152602060048201526005602482015264544b4e3a3360d81b6044820152606401610d87565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03821661370a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d87565b6001600160a01b0382166000908152602081905260409020548181101561377e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d87565b6001600160a01b03831660009081526020819052604081208383039055600280548492906137ad9084906141a5565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6001600160a01b03821661384e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d87565b8060026000828254613860919061414e565b90915550506001600160a01b0382166000908152602081905260408120805483929061388d90849061414e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600061392c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a6d9092919063ffffffff16565b8051909150156127b8578080602001905181019061394a9190613dce565b6127b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610d87565b6019546139c79030906201000090046001600160a01b031684612b20565b601954604051637c8d9fb960e11b8152306004820152602481018490526000604482018190526064820181905260848201524260a4820152620100009091046001600160a01b03169063f91b3f7290839060c4016060604051808303818588803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131a19190613ee2565b6060612c7a848460008585843b613ac65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d87565b600080866001600160a01b03168587604051613ae29190613f3b565b60006040518083038185875af1925050503d8060008114613b1f576040519150601f19603f3d011682016040523d82523d6000602084013e613b24565b606091505b5091509150613b34828286613b3f565b979650505050505050565b60608315613b4e575081610fa0565b825115613b5e5782518084602001fd5b8160405162461bcd60e51b8152600401610d879190613f8b565b600082601f830112613b88578081fd5b81356020613b9d613b988361412a565b6140f9565b80838252828201915082860187848660051b8901011115613bbc578586fd5b855b85811015613bda57813584529284019290840190600101613bbe565b5090979650505050505050565b600060208284031215613bf8578081fd5b8135610fa08161426a565b600060208284031215613c14578081fd5b8151610fa08161426a565b60008060408385031215613c31578081fd5b8235613c3c8161426a565b91506020830135613c4c8161426a565b809150509250929050565b600080600060608486031215613c6b578081fd5b8335613c768161426a565b92506020840135613c868161426a565b929592945050506040919091013590565b60008060408385031215613ca9578182fd5b8235613cb48161426a565b91506020830135613c4c8161427f565b60008060408385031215613cd6578182fd5b8235613ce18161426a565b946020939093013593505050565b60008060408385031215613d01578182fd5b823567ffffffffffffffff80821115613d18578384fd5b818501915085601f830112613d2b578384fd5b81356020613d3b613b988361412a565b8083825282820191508286018a848660051b8901011115613d5a578889fd5b8896505b84871015613d85578035613d718161426a565b835260019690960195918301918301613d5e565b5096505086013592505080821115613d9b578283fd5b50613da885828601613b78565b9150509250929050565b600060208284031215613dc3578081fd5b8135610fa08161427f565b600060208284031215613ddf578081fd5b8151610fa08161427f565b60008060408385031215613c31578182fd5b60008060408385031215613e0e578182fd5b823567ffffffffffffffff80821115613e25578384fd5b818501915085601f830112613e38578384fd5b8135602082821115613e4c57613e4c614254565b613e5e601f8301601f191682016140f9565b92508183528781838601011115613e73578586fd5b818185018285013790820181019490945295939092013593505050565b600060208284031215613ea1578081fd5b813561ffff81168114610fa0578182fd5b600060208284031215613ec3578081fd5b5035919050565b600060208284031215613edb578081fd5b5051919050565b600080600060608486031215613ef6578081fd5b8351925060208401519150604084015190509250925092565b60008151808452613f278160208601602086016141bc565b601f01601f19169290920160200192915050565b60008251613f4d8184602087016141bc565b9190910192915050565b6001600160a01b0384168152606060208201819052600090613f7b90830185613f0f565b9050826040830152949350505050565b602081526000610fa06020830184613f0f565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a10931050d2d31254d5115160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156140d85784516001600160a01b0316835293830193918301916001016140b3565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561412257614122614254565b604052919050565b600067ffffffffffffffff82111561414457614144614254565b5060051b60200190565b600082198211156141615761416161423e565b500190565b60008261418157634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156141a0576141a061423e565b500290565b6000828210156141b7576141b761423e565b500390565b60005b838110156141d75781810151838201526020016141bf565b838111156133725750506000910152565b600181811c908216806141fc57607f821691505b6020821081141561421d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142375761423761423e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612acd57600080fd5b8015158114612acd57600080fdfea26469706673582212200ddcd9ad6793aa960c55864af8f1ecb617854d40ddd181fc15793b607ed3402e64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da5000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000003000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da500000000000000000000000000232c43377fb629302a9cb1546b1a473b74f6952700000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000005a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000002000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da5000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000003000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da500000000000000000000000000232c43377fb629302a9cb1546b1a473b74f6952700000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000005a

-----Decoded View---------------
Arg [0] : payees (address[]): 0x795acb29bec5085c9fcd9c4494e5bb7559a22ecf,0xa0bf01cf4cac06e163cb45eaa85effa25d5da500
Arg [1] : shares (uint256[]): 50,50
Arg [2] : addresses (address[]): 0x795acb29bec5085c9fcd9c4494e5bb7559a22ecf,0xa0bf01cf4cac06e163cb45eaa85effa25d5da500,0x232c43377fb629302a9cb1546b1a473b74f69527
Arg [3] : fees (uint256[]): 20,10,10,5,90
Arg [4] : swapAmount (uint256): 5

-----Encoded View---------------
21 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf
Arg [7] : 000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da500
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [12] : 000000000000000000000000795acb29bec5085c9fcd9c4494e5bb7559a22ecf
Arg [13] : 000000000000000000000000a0bf01cf4cac06e163cb45eaa85effa25d5da500
Arg [14] : 000000000000000000000000232c43377fb629302a9cb1546b1a473b74f69527
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [17] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [18] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [20] : 000000000000000000000000000000000000000000000000000000000000005a


Deployed ByteCode Sourcemap

52245:18192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26210:40;22832:10;26210:40;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;26240:9:0;8726:2:1;8711:18;;8704:34;8617:18;26210:40:0;;;;;;;52245:18192;;;;;52504:26;;;;;;;;;;-1:-1:-1;52504:26:0;;;;-1:-1:-1;;;;;52504:26:0;;;;;;-1:-1:-1;;;;;8418:32:1;;;8400:51;;8388:2;8373:18;52504:26:0;;;;;;;;53159:35;;;;;;;;;;-1:-1:-1;53159:35:0;;;;;;;;;;;10857:14:1;;10850:22;10832:41;;10820:2;10805:18;53159:35:0;10787:92:1;32700:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;58072:171::-;;;;;;;;;;-1:-1:-1;58072:171:0;;;;;:::i;:::-;;:::i;:::-;;34867:169;;;;;;;;;;-1:-1:-1;34867:169:0;;;;;:::i;:::-;;:::i;52785:24::-;;;;;;;;;;;;;;;;;;;28966:25:1;;;28954:2;28939:18;52785:24:0;28921:76:1;33820:108:0;;;;;;;;;;-1:-1:-1;33908:12:0;;33820:108;;27996:566;;;;;;;;;;-1:-1:-1;27996:566:0;;;;;:::i;:::-;;:::i;35518:492::-;;;;;;;;;;-1:-1:-1;35518:492:0;;;;;:::i;:::-;;:::i;59463:136::-;;;;;;;;;;-1:-1:-1;59463:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;59559:32:0;59535:4;59559:32;;;:22;:32;;;;;;;;;59463:136;58937:108;;;;;;;;;;-1:-1:-1;58937:108:0;;;;;:::i;:::-;;:::i;52650:25::-;;;;;;;;;;;;;;;;33662:93;;;;;;;;;;-1:-1:-1;33662:93:0;;33745:2;30456:36:1;;30444:2;30429:18;33662:93:0;30411:87:1;36419:215:0;;;;;;;;;;-1:-1:-1;36419:215:0;;;;;:::i;:::-;;:::i;52474:23::-;;;;;;;;;;-1:-1:-1;52474:23:0;;;;-1:-1:-1;;;;;52474:23:0;;;26341:91;;;;;;;;;;-1:-1:-1;26412:12:0;;26341:91;;52903:41;;;;;;;;;;-1:-1:-1;52903:41:0;;;;;;;;;;;28507:6:1;28495:19;;;28477:38;;28465:2;28450:18;52903:41:0;28432:89:1;27470:135:0;;;;;;;;;;-1:-1:-1;27470:135:0;;;;;:::i;:::-;-1:-1:-1;;;;;27567:21:0;;;27540:7;27567:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27470:135;59309:146;;;;;;;;;;-1:-1:-1;59309:146:0;;;;;:::i;:::-;;:::i;28830:641::-;;;;;;;;;;-1:-1:-1;28830:641:0;;;;;:::i;:::-;;:::i;53033:41::-;;;;;;;;;;-1:-1:-1;53033:41:0;;;;;;;;;;;52369:76;;;;;;;;;;-1:-1:-1;52369:76:0;;;;-1:-1:-1;;;;;52369:76:0;;;67347:1032;;;;;;;;;;;;;:::i;52682:31::-;;;;;;;;;;;;;;;;68387:2047;;;;;;;;;;-1:-1:-1;68387:2047:0;;;;;:::i;:::-;;:::i;53083:31::-;;;;;;;;;;;;;;;;66265:1074;;;;;;;;;;-1:-1:-1;66265:1074:0;;;;;:::i;:::-;;:::i;57955:109::-;;;;;;;;;;-1:-1:-1;57955:109:0;;;;;:::i;:::-;;:::i;57725:111::-;;;;;;;;;;-1:-1:-1;57725:111:0;;;;;:::i;:::-;;:::i;58615:99::-;;;;;;;;;;-1:-1:-1;58615:99:0;;;;;:::i;:::-;;:::i;61007:543::-;;;;;;;;;;-1:-1:-1;61007:543:0;;;;;:::i;:::-;;:::i;52340:22::-;;;;;;;;;;-1:-1:-1;52340:22:0;;;;-1:-1:-1;;;;;52340:22:0;;;52753:25;;;;;;;;;;;;;;;;57844:103;;;;;;;;;;-1:-1:-1;57844:103:0;;;;;:::i;:::-;;:::i;33991:127::-;;;;;;;;;;-1:-1:-1;33991:127:0;;;;;:::i;:::-;;:::i;44374:103::-;;;;;;;;;;;;;:::i;60344:535::-;;;;;;;;;;-1:-1:-1;60344:535:0;;;;;:::i;:::-;;:::i;27696:100::-;;;;;;;;;;-1:-1:-1;27696:100:0;;;;;:::i;:::-;;:::i;58722:94::-;;;;;;;;;;-1:-1:-1;58722:94:0;;;;;:::i;:::-;;:::i;43723:87::-;;;;;;;;;;-1:-1:-1;43796:6:0;;-1:-1:-1;;;;;43796:6:0;43723:87;;58251:179;;;;;;;;;;-1:-1:-1;58251:179:0;;;;;:::i;:::-;;:::i;32919:104::-;;;;;;;;;;;;;:::i;27192:109::-;;;;;;;;;;-1:-1:-1;27192:109:0;;;;;:::i;:::-;-1:-1:-1;;;;;27275:18:0;27248:7;27275:18;;;:9;:18;;;;;;;27192:109;59053:248;;;;;;;;;;-1:-1:-1;59053:248:0;;;;;:::i;:::-;;:::i;57075:107::-;;;;;;;;;;-1:-1:-1;57075:107:0;;;;;:::i;:::-;;:::i;37137:413::-;;;;;;;;;;-1:-1:-1;37137:413:0;;;;;:::i;:::-;;:::i;34331:175::-;;;;;;;;;;-1:-1:-1;34331:175:0;;;;;:::i;:::-;;:::i;59900:161::-;;;;;;;;;;;;;:::i;59669:159::-;;;;;;;;;;;;;:::i;58438:169::-;;;;;;;;;;-1:-1:-1;58438:169:0;;;;;:::i;:::-;;:::i;52720:26::-;;;;;;;;;;;;;;;;53445:57;;;;;;;;;;-1:-1:-1;53445:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;64273:1984;;;;;;;;;;-1:-1:-1;64273:1984:0;;;;;:::i;:::-;;:::i;60069:148::-;;;;;;;;;;-1:-1:-1;60069:148:0;;;;;:::i;:::-;;:::i;26988:105::-;;;;;;;;;;-1:-1:-1;26988:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;27069:16:0;27042:7;27069:16;;;:7;:16;;;;;;;26988:105;53121:31;;;;;;;;;;;;;;;;26778:119;;;;;;;;;;-1:-1:-1;26778:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;26863:26:0;26836:7;26863:26;;;:19;:26;;;;;;;26778:119;34569:151;;;;;;;;;;-1:-1:-1;34569:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;34685:18:0;;;34658:7;34685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;34569:151;56847:220;;;;;;;;;;-1:-1:-1;56847:220:0;;;;;:::i;:::-;;:::i;57190:527::-;;;;;;;;;;-1:-1:-1;57190:527:0;;;;;:::i;:::-;;:::i;26526:95::-;;;;;;;;;;-1:-1:-1;26599:14:0;;26526:95;;44632:201;;;;;;;;;;-1:-1:-1;44632:201:0;;;;;:::i;:::-;;:::i;58824:105::-;;;;;;;;;;-1:-1:-1;58824:105:0;;;;;:::i;:::-;;:::i;53201:37::-;;;;;;;;;;-1:-1:-1;53201:37:0;;;;;;;;;;;52560:81;;;;;;;;;;;;52599:42;52560:81;;53393:45;;;;;;;;;;-1:-1:-1;53393:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32700:100;32754:13;32787:5;32780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32700:100;:::o;58072:171::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;;;;;;;;;58144:10:::1;:19:::0;;;58223:11:::1;::::0;58201:16:::1;::::0;58186:49:::1;::::0;58223:11;58186:32:::1;::::0;58157:6;;58186:14:::1;:32::i;:::-;:36:::0;::::1;:49::i;:::-;58174:9;:61:::0;-1:-1:-1;58072:171:0:o;34867:169::-;34950:4;34967:39;22832:10;34990:7;34999:6;34967:8;:39::i;:::-;-1:-1:-1;35024:4:0;34867:169;;;;:::o;27996:566::-;-1:-1:-1;;;;;28072:16:0;;28091:1;28072:16;;;:7;:16;;;;;;28064:71;;;;-1:-1:-1;;;28064:71:0;;;;;;;:::i;:::-;28148:21;28196:15;26599:14;;;26526:95;28196:15;28172:39;;:21;:39;:::i;:::-;28148:63;;28222:15;28240:58;28256:7;28265:13;28280:17;28289:7;-1:-1:-1;;;;;27275:18:0;27248:7;27275:18;;;:9;:18;;;;;;;27192:109;28280:17;28240:15;:58::i;:::-;28222:76;-1:-1:-1;28319:12:0;28311:68;;;;-1:-1:-1;;;28311:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28392:18:0;;;;;;:9;:18;;;;;:29;;28414:7;;28392:18;:29;;28414:7;;28392:29;:::i;:::-;;;;;;;;28450:7;28432:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;28470:35:0;;-1:-1:-1;28488:7:0;28497;28470:17;:35::i;:::-;28521:33;;;-1:-1:-1;;;;;8662:32:1;;8644:51;;8726:2;8711:18;;8704:34;;;28521:33:0;;8617:18:1;28521:33:0;;;;;;;27996:566;;;:::o;35518:492::-;35658:4;35675:36;35685:6;35693:9;35704:6;35675:9;:36::i;:::-;-1:-1:-1;;;;;35751:19:0;;35724:24;35751:19;;;:11;:19;;;;;;;;22832:10;35751:33;;;;;;;;35803:26;;;;35795:79;;;;-1:-1:-1;;;35795:79:0;;21184:2:1;35795:79:0;;;21166:21:1;21223:2;21203:18;;;21196:30;21262:34;21242:18;;;21235:62;-1:-1:-1;;;21313:18:1;;;21306:38;21361:19;;35795:79:0;21156:230:1;35795:79:0;35910:57;35919:6;22832:10;35960:6;35941:16;:25;35910:8;:57::i;:::-;35998:4;35991:11;;;35518:492;;;;;;:::o;58937:108::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;59012:16:::1;:25:::0;;-1:-1:-1;;59012:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58937:108::o;36419:215::-;22832:10;36507:4;36556:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;36556:34:0;;;;;;;;;;36507:4;;36524:80;;36547:7;;36556:47;;36593:10;;36556:47;:::i;:::-;36524:8;:80::i;59309:146::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;59417:22:0;;;::::1;;::::0;;;:13:::1;:22;::::0;;;;:30;;-1:-1:-1;;59417:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;59309:146::o;28830:641::-;-1:-1:-1;;;;;28912:16:0;;28931:1;28912:16;;;:7;:16;;;;;;28904:71;;;;-1:-1:-1;;;28904:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26863:26:0;;28988:21;26863:26;;;:19;:26;;;;;;29012:30;;-1:-1:-1;;;29012:30:0;;29036:4;29012:30;;;8400:51:1;-1:-1:-1;;;;;29012:15:0;;;;;8373:18:1;;29012:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;;:::i;:::-;28988:77;;29076:15;29094:65;29110:7;29119:13;29134:24;29143:5;29150:7;-1:-1:-1;;;;;27567:21:0;;;27540:7;27567:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;27470:135;29094:65;29076:83;-1:-1:-1;29180:12:0;29172:68;;;;-1:-1:-1;;;29172:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29253:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;29287:7;;29253:21;:41;;29287:7;;29253:41;:::i;:::-;;;;-1:-1:-1;;;;;;;29305:26:0;;;;;;:19;:26;;;;;:37;;29335:7;;29305:26;:37;;29335:7;;29305:37;:::i;:::-;;;;-1:-1:-1;29355:47:0;;-1:-1:-1;29378:5:0;29385:7;29394;29355:22;:47::i;:::-;29418:45;;;-1:-1:-1;;;;;8662:32:1;;;8644:51;;8726:2;8711:18;;8704:34;;;29418:45:0;;;;;8617:18:1;29418:45:0;;;;;;;28830:641;;;;:::o;67347:1032::-;22832:10;;67429:79;;;;-1:-1:-1;;;67429:79:0;;23430:2:1;67429:79:0;;;23412:21:1;23469:1;23449:18;;;23442:29;-1:-1:-1;;;23487:18:1;;;23480:39;23536:18;;67429:79:0;23402:158:1;67429:79:0;-1:-1:-1;;;;;67542:21:0;;;;;;:13;:21;;;;;;;;67541:22;67519:83;;;;-1:-1:-1;;;67519:83:0;;;;;;;:::i;:::-;67645:8;;-1:-1:-1;;;;;67635:18:0;;;67645:8;;67635:18;;;;:43;;-1:-1:-1;67667:11:0;;-1:-1:-1;;;;;67657:21:0;;;67667:11;;67657:21;;67635:43;67613:102;;;;-1:-1:-1;;;67613:102:0;;26003:2:1;67613:102:0;;;25985:21:1;26042:1;26022:18;;;26015:29;-1:-1:-1;;;26060:18:1;;;26053:39;26109:18;;67613:102:0;25975:158:1;67613:102:0;67749:11;;:38;;-1:-1:-1;;;67749:38:0;;-1:-1:-1;;;;;8418:32:1;;;67749:38:0;;;8400:51:1;67726:20:0;;67749:11;;:30;;8373:18:1;;67749:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67726:61;;67835:1;67820:12;:16;67798:75;;;;-1:-1:-1;;;67798:75:0;;15253:2:1;67798:75:0;;;15235:21:1;15292:1;15272:18;;;15265:29;-1:-1:-1;;;15310:18:1;;;15303:39;15359:18;;67798:75:0;15225:158:1;67798:75:0;67888:18;;;;;;;67884:285;;;67959:10;;67923:17;;67959:14;67955:163;;68006:37;68039:3;68006:28;68023:10;;68006:12;:16;;:28;;;;:::i;:::-;:32;;:37::i;:::-;68079:11;;67994:49;;-1:-1:-1;68062:40:0;;-1:-1:-1;;;;;68079:11:0;67994:49;68062:16;:40::i;:::-;68132:25;68148:9;68132:25;;:::i;:::-;;;67884:285;;68195:11;;68179:50;;-1:-1:-1;;;;;68195:11:0;68208:6;68216:12;68179:15;:50::i;:::-;68240:11;;:42;;-1:-1:-1;;;68240:42:0;;-1:-1:-1;;;;;8418:32:1;;;68240:42:0;;;8400:51:1;68240:11:0;;;;:34;;8373:18:1;;68240:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68309:12;68293;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;68339:32:0;;28966:25:1;;;68369:1:0;;-1:-1:-1;;;;;68339:32:0;;;;;28954:2:1;28939:18;68339:32:0;;;;;;;67347:1032;;:::o;68387:2047::-;22832:10;;68495:76;;;;-1:-1:-1;;;68495:76:0;;20349:2:1;68495:76:0;;;20331:21:1;20388:1;20368:18;;;20361:29;-1:-1:-1;;;20406:18:1;;;20399:36;20452:18;;68495:76:0;20321:155:1;68495:76:0;-1:-1:-1;;;;;68605:21:0;;;;;;:13;:21;;;;;;;;68604:22;68582:83;;;;-1:-1:-1;;;68582:83:0;;;;;;;:::i;:::-;68708:8;;-1:-1:-1;;;;;68698:18:0;;;68708:8;;68698:18;;;;:43;;-1:-1:-1;68730:11:0;;-1:-1:-1;;;;;68720:21:0;;;68730:11;;68720:21;;68698:43;68676:99;;;;-1:-1:-1;;;68676:99:0;;12940:2:1;68676:99:0;;;12922:21:1;12979:1;12959:18;;;12952:29;-1:-1:-1;;;12997:18:1;;;12990:36;13043:18;;68676:99:0;12912:155:1;68676:99:0;68809:11;;:44;;-1:-1:-1;;;68809:44:0;;-1:-1:-1;;;;;8662:32:1;;;68809:44:0;;;8644:51:1;8711:18;;;8704:34;;;68786:20:0;;68809:11;;:25;;8617:18:1;;68809:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68786:67;;68901:1;68886:12;:16;68864:72;;;;-1:-1:-1;;;68864:72:0;;13274:2:1;68864:72:0;;;13256:21:1;13313:1;13293:18;;;13286:29;-1:-1:-1;;;13331:18:1;;;13324:36;13377:18;;68864:72:0;13246:155:1;68864:72:0;68949:28;68980:24;68998:4;68980:9;:24::i;:::-;69059:16;;68949:55;;-1:-1:-1;69035:40:0;;;;;;;69104:47;;-1:-1:-1;69133:18:0;;;;;;;69104:47;:73;;;;-1:-1:-1;69169:8:0;;;;69168:9;69104:73;:107;;;;-1:-1:-1;43796:6:0;;-1:-1:-1;;;;;69194:17:0;;;43796:6;;69194:17;;69104:107;:158;;;;-1:-1:-1;;;;;;69229:33:0;;;;;;:25;:33;;;;;;;;69228:34;69104:158;69086:1140;;;69289:8;:15;;-1:-1:-1;;69289:15:0;69300:4;69289:15;;;69385:11;;69289:8;;69342:82;;69420:3;;69342:55;;:20;;:42;:55::i;:82::-;69458:8;;69321:103;;-1:-1:-1;69441:38:0;;-1:-1:-1;;;;;69458:8:0;69321:103;69441:16;:38::i;:::-;69496:25;69524:81;69601:3;69524:54;69567:10;;69524:20;:42;;:54;;;;:::i;:81::-;69496:109;;69622:27;69652:70;69704:3;69652:29;69674:6;;69652:17;:21;;:29;;;;:::i;:70::-;69756:11;;69622:100;;-1:-1:-1;69739:50:0;;-1:-1:-1;;;;;69756:11:0;69622:100;69739:16;:50::i;:::-;69872:11;;69806:153;;69848:4;;-1:-1:-1;;;;;69872:11:0;69902:42;:17;69924:19;69902:21;:42::i;:::-;69806:15;:153::i;:::-;69976:18;69997:83;70062:3;69997:42;70022:16;;69997:20;:24;;:42;;;;:::i;:83::-;69976:104;;70097:26;70112:10;70097:14;:26::i;:::-;70138:43;70156:24;70174:4;70156:9;:24::i;:::-;70138:17;:43::i;:::-;-1:-1:-1;;70198:8:0;:16;;-1:-1:-1;;70198:16:0;;;-1:-1:-1;;69086:1140:0;70252:11;;70236:57;;-1:-1:-1;;;;;70252:11:0;70273:4;70280:12;70236:15;:57::i;:::-;70304:11;;:63;;-1:-1:-1;;;70304:63:0;;-1:-1:-1;;;;;10562:32:1;;;70304:63:0;;;10544:51:1;10611:18;;;10604:34;;;10654:18;;;10647:34;;;70304:11:0;;;;:30;;10517:18:1;;70304:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70416:9;70394:6;-1:-1:-1;;;;;70385:41:0;;70402:12;70385:41;;;;28966:25:1;;28954:2;28939:18;;28921:76;70385:41:0;;;;;;;;68387:2047;;;;;:::o;66265:1074::-;22832:10;;66367:79;;;;-1:-1:-1;;;66367:79:0;;18842:2:1;66367:79:0;;;18824:21:1;18881:1;18861:18;;;18854:29;-1:-1:-1;;;18899:18:1;;;18892:39;18948:18;;66367:79:0;18814:158:1;66367:79:0;-1:-1:-1;;;;;66480:21:0;;;;;;:13;:21;;;;;;;;66479:22;66457:83;;;;-1:-1:-1;;;66457:83:0;;;;;;;:::i;:::-;66583:8;;-1:-1:-1;;;;;66573:18:0;;;66583:8;;66573:18;;;;:43;;-1:-1:-1;66605:11:0;;-1:-1:-1;;;;;66595:21:0;;;66605:11;;66595:21;;66573:43;66551:102;;;;-1:-1:-1;;;66551:102:0;;14418:2:1;66551:102:0;;;14400:21:1;14457:1;14437:18;;;14430:29;-1:-1:-1;;;14475:18:1;;;14468:39;14524:18;;66551:102:0;14390:158:1;66551:102:0;66687:11;;:44;;-1:-1:-1;;;66687:44:0;;-1:-1:-1;;;;;8662:32:1;;;66687:44:0;;;8644:51:1;8711:18;;;8704:34;;;66664:20:0;;66687:11;;:25;;8617:18:1;;66687:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66664:67;;66779:1;66764:12;:16;66742:75;;;;-1:-1:-1;;;66742:75:0;;19514:2:1;66742:75:0;;;19496:21:1;19553:1;19533:18;;;19526:29;-1:-1:-1;;;19571:18:1;;;19564:39;19620:18;;66742:75:0;19486:158:1;66742:75:0;66834:18;;;;;;;66830:285;;;66905:10;;66869:17;;66905:14;66901:163;;66952:37;66985:3;66952:28;66969:10;;66952:12;:16;;:28;;;;:::i;:37::-;67025:11;;66940:49;;-1:-1:-1;67008:40:0;;-1:-1:-1;;;;;67025:11:0;66940:49;67008:16;:40::i;:::-;67078:25;67094:9;67078:25;;:::i;:::-;;;66830:285;;67141:11;;67125:50;;-1:-1:-1;;;;;67141:11:0;67154:6;67162:12;67125:15;:50::i;:::-;67186:11;;:48;;-1:-1:-1;;;67186:48:0;;-1:-1:-1;;;;;8662:32:1;;;67186:48:0;;;8644:51:1;8711:18;;;8704:34;;;67186:11:0;;;;:29;;8617:18:1;;67186:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67261:12;67245;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;67291:40:0;;28966:25:1;;;67321:9:0;;-1:-1:-1;;;;;67291:40:0;;;;;28954:2:1;28939:18;67291:40:0;;;;;;;;66265:1074;;;:::o;57955:109::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58036:11:::1;:20:::0;;-1:-1:-1;;;;;;58036:20:0::1;-1:-1:-1::0;;;;;58036:20:0;;;::::1;::::0;;;::::1;::::0;;57955:109::o;57725:111::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;57803:16:::1;:25:::0;57725:111::o;58615:99::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58687:10:::1;:19:::0;58615:99::o;61007:543::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;61137:5:::1;61111:22;:31;;;;61103:137;;;::::0;-1:-1:-1;;;61103:137:0;;18340:2:1;61103:137:0::1;::::0;::::1;18322:21:1::0;18379:2;18359:18;;;18352:30;18418:34;18398:18;;;18391:62;18489:34;18469:18;;;18462:62;18561:31;18540:19;;;18533:60;18610:19;;61103:137:0::1;18312:323:1::0;61103:137:0::1;61285:3;61259:22;:29;;;;61251:131;;;::::0;-1:-1:-1;;;61251:131:0;;14755:2:1;61251:131:0::1;::::0;::::1;14737:21:1::0;14794:2;14774:18;;;14767:30;14833:34;14813:18;;;14806:62;14904:34;14884:18;;;14877:62;-1:-1:-1;;;14955:19:1;;;14948:56;15021:19;;61251:131:0::1;14727:319:1::0;61251:131:0::1;61439:21;::::0;61398:87:::1;::::0;;61439:21:::1;::::0;;::::1;28723:34:1::0;;28793:15;;;28788:2;28773:18;;28766:43;61427:10:0::1;::::0;61398:87:::1;::::0;28671:18:1;61398:87:0::1;;;;;;;61496:21;:46:::0;;-1:-1:-1;;61496:46:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;61007:543::o;57844:103::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;57922:8:::1;:17:::0;;-1:-1:-1;;;;;;57922:17:0::1;-1:-1:-1::0;;;;;57922:17:0;;;::::1;::::0;;;::::1;::::0;;57844:103::o;33991:127::-;-1:-1:-1;;;;;34092:18:0;34065:7;34092:18;;;;;;;;;;;;33991:127::o;44374:103::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;44439:30:::1;44466:1;44439:18;:30::i;:::-;44374:103::o:0;60344:535::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;60473:5:::1;60448:21;:30;;;;60440:135;;;::::0;-1:-1:-1;;;60440:135:0;;20683:2:1;60440:135:0::1;::::0;::::1;20665:21:1::0;20722:2;20702:18;;;20695:30;20761:34;20741:18;;;20734:62;20832:34;20812:18;;;20805:62;20904:30;20883:19;;;20876:59;20952:19;;60440:135:0::1;20655:322:1::0;60440:135:0::1;60619:3;60594:21;:28;;;;60586:130;;;::::0;-1:-1:-1;;;60586:130:0;;19851:2:1;60586:130:0::1;::::0;::::1;19833:21:1::0;19890:2;19870:18;;;19863:30;19929:34;19909:18;;;19902:62;20000:34;19980:18;;;19973:62;-1:-1:-1;;;20051:19:1;;;20044:56;20117:19;;60586:130:0::1;19823:319:1::0;60586:130:0::1;60772:20;::::0;60732:84:::1;::::0;;60772:20;;;::::1;;::::0;;::::1;28723:34:1::0;;28793:15;;28788:2;28773:18;;28766:43;60760:10:0::1;::::0;60732:84:::1;::::0;28671:18:1;60732:84:0::1;;;;;;;60827:20;:44:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;60827:44:0;;::::1;::::0;;;::::1;::::0;;60344:535::o;27696:100::-;27747:7;27774;27782:5;27774:14;;;;;;-1:-1:-1;;;27774:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27774:14:0;;27696:100;-1:-1:-1;;27696:100:0:o;58722:94::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58793:6:::1;:15:::0;58722:94::o;58251:179::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58325:16:::1;:25:::0;;;58410:11:::1;::::0;58373:10:::1;::::0;:49:::1;::::0;58410:11;58373:32:::1;::::0;58344:6;58373:14:::1;:32::i;32919:104::-:0;32975:13;33008:7;33001:14;;;;;:::i;59053:248::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;59199:7:::1;::::0;-1:-1:-1;;;;;59191:15:0;;::::1;59199:7:::0;::::1;59191:15;;59169:70;;;::::0;-1:-1:-1;;;59169:70:0;;28202:2:1;59169:70:0::1;::::0;::::1;28184:21:1::0;28241:1;28221:18;;;28214:29;-1:-1:-1;;;28259:18:1;;;28252:35;28304:18;;59169:70:0::1;28174:154:1::0;59169:70:0::1;59252:41;59281:4;59287:5;59252:28;:41::i;:::-;59053:248:::0;;:::o;57075:107::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;57152:22:::1;57158:7;57167:6;57152:5;:22::i;37137:413::-:0;22832:10;37230:4;37274:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;37274:34:0;;;;;;;;;;37327:35;;;;37319:85;;;;-1:-1:-1;;;37319:85:0;;27091:2:1;37319:85:0;;;27073:21:1;27130:2;27110:18;;;27103:30;27169:34;27149:18;;;27142:62;-1:-1:-1;;;27220:18:1;;;27213:35;27265:19;;37319:85:0;27063:227:1;37319:85:0;37440:67;22832:10;37463:7;37491:15;37472:16;:34;37440:8;:67::i;:::-;-1:-1:-1;37538:4:0;;37137:413;-1:-1:-1;;;37137:413:0:o;34331:175::-;34417:4;34434:42;22832:10;34458:9;34469:6;34434:9;:42::i;59900:161::-;60020:21;;60002:11;;59950:7;;59977:76;;60047:5;;59977:65;;60020:21;;;;;59992:22;;-1:-1:-1;;;;;60002:11:0;59992:9;:22::i;:::-;33908:12;;59978:36;;;;:::i;:::-;59977:42;;:65::i;:76::-;59970:83;;59900:161;:::o;59669:159::-;59788:20;;59770:11;;59718:7;;59745:75;;59814:5;;59745:64;;59788:20;;;;;;;59760:22;;-1:-1:-1;;;;;59770:11:0;59760:9;:22::i;58438:169::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58507:11:::1;:20:::0;;;58565:16:::1;::::0;58550:10:::1;::::0;:49:::1;::::0;58521:6;;58550:32:::1;::::0;:14:::1;:32::i;64273:1984::-:0;64422:18;;22832:10;;64443:1;-1:-1:-1;64422:49:0;;;;;64469:2;64454:4;64448:18;:23;64422:49;64400:103;;;;-1:-1:-1;;;64400:103:0;;;;;;22289:2:1;22271:21;;;22328:1;22308:18;;;22301:29;-1:-1:-1;;;22361:2:1;22346:18;;22339:34;22405:2;22390:18;;22261:153;64400:103:0;-1:-1:-1;;;;;64536:20:0;;64514:74;;;;-1:-1:-1;;;64514:74:0;;;;;;25313:2:1;25295:21;;;25352:1;25332:18;;;25325:29;-1:-1:-1;;;25385:2:1;25370:18;;25363:34;25429:2;25414:18;;25285:153;64514:74:0;-1:-1:-1;;;;;64608:21:0;;;;;;:13;:21;;;;;;;;64607:22;64599:46;;;;-1:-1:-1;;;64599:46:0;;;;;;;:::i;:::-;64688:8;;-1:-1:-1;;;;;64678:18:0;;;64688:8;;64678:18;;;;:43;;-1:-1:-1;64710:11:0;;-1:-1:-1;;;;;64700:21:0;;;64710:11;;64700:21;;64678:43;64656:97;;;;-1:-1:-1;;;64656:97:0;;;;;;16404:2:1;16386:21;;;16443:1;16423:18;;;16416:29;-1:-1:-1;;;16476:2:1;16461:18;;16454:34;16520:2;16505:18;;16376:153;64656:97:0;64807:7;64786:17;64796:6;64786:9;:17::i;:::-;:28;;64764:82;;;;-1:-1:-1;;;64764:82:0;;;;;;12205:2:1;12187:21;;;12244:1;12224:18;;;12217:29;-1:-1:-1;;;12277:2:1;12262:18;;12255:34;12321:2;12306:18;;12177:153;64764:82:0;64859:28;64890:24;64908:4;64890:9;:24::i;:::-;64969:16;;64859:55;;-1:-1:-1;64945:40:0;;;;;;;65014:47;;-1:-1:-1;65043:18:0;;;;;;;65014:47;:73;;;;-1:-1:-1;65079:8:0;;;;65078:9;65014:73;:107;;;;-1:-1:-1;43796:6:0;;-1:-1:-1;;;;;65104:17:0;;;43796:6;;65104:17;;65014:107;:158;;;;-1:-1:-1;;;;;;65139:33:0;;;;;;:25;:33;;;;;;;;65138:34;65014:158;64996:1140;;;65199:8;:15;;-1:-1:-1;;65199:15:0;65210:4;65199:15;;;65295:11;;65199:8;;65252:82;;65330:3;;65252:55;;:20;;:42;:55::i;:82::-;65368:8;;65231:103;;-1:-1:-1;65351:38:0;;-1:-1:-1;;;;;65368:8:0;65231:103;65351:16;:38::i;:::-;65406:25;65434:81;65511:3;65434:54;65477:10;;65434:20;:42;;:54;;;;:::i;:81::-;65406:109;;65532:27;65562:70;65614:3;65562:29;65584:6;;65562:17;:21;;:29;;;;:::i;:70::-;65666:11;;65532:100;;-1:-1:-1;65649:50:0;;-1:-1:-1;;;;;65666:11:0;65532:100;65649:16;:50::i;:::-;65782:11;;65716:153;;65758:4;;-1:-1:-1;;;;;65782:11:0;65812:42;:17;65834:19;65812:21;:42::i;65716:153::-;65886:18;65907:83;65972:3;65907:42;65932:16;;65907:20;:24;;:42;;;;:::i;:83::-;65886:104;;66007:26;66022:10;66007:14;:26::i;:::-;66048:43;66066:24;66084:4;66066:9;:24::i;66048:43::-;-1:-1:-1;;66108:8:0;:16;;-1:-1:-1;;66108:16:0;;;-1:-1:-1;;64996:1140:0;66146:47;66162:6;66178:4;66185:7;66146:15;:47::i;:::-;66204:11;;:45;;-1:-1:-1;;;66204:45:0;;-1:-1:-1;;;;;66204:11:0;;;;:22;;:45;;66227:6;;66235:4;;66241:7;;66204:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64273:1984;;;;;:::o;60069:148::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;60165:32:0;;;::::1;;::::0;;;:22:::1;:32;::::0;;;;:44;;-1:-1:-1;;60165:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60069:148::o;56847:220::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;56956:9:::1;56951:109;56975:10;:17;56971:1;:21;56951:109;;;57014:34;57020:10;57031:1;57020:13;;;;;;-1:-1:-1::0;;;57020:13:0::1;;;;;;;;;;;;;;;57035:9;57045:1;57035:12;;;;;;-1:-1:-1::0;;;57035:12:0::1;;;;;;;;;;;;;;;57014:5;:34::i;:::-;56994:3:::0;::::1;::::0;::::1;:::i;:::-;;;;56951:109;;;;56847:220:::0;;:::o;57190:527::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;57316:9:::1;::::0;-1:-1:-1;;;;;57294:32:0;;::::1;57316:9:::0;;;::::1;;57294:32;;57272:87;;;::::0;-1:-1:-1;;;57272:87:0;;23767:2:1;57272:87:0::1;::::0;::::1;23749:21:1::0;23806:1;23786:18;;;23779:29;-1:-1:-1;;;23824:18:1;;;23817:35;23869:18;;57272:87:0::1;23739:154:1::0;57272:87:0::1;57411:9;::::0;57375:47:::1;::::0;-1:-1:-1;;;;;57411:9:0;;;::::1;::::0;::::1;::::0;57375:47;::::1;::::0;::::1;::::0;;;::::1;57433:27;57479:10;57433:57;;57501:16;57537:9;;;;;;;;;-1:-1:-1::0;;;;;57537:9:0::1;-1:-1:-1::0;;;;;57537:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;57520:48:0::1;;57591:4;57611:10;-1:-1:-1::0;;;;;57611:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57520:120;::::0;-1:-1:-1;;;;;;57520:120:0::1;::::0;;;;;;-1:-1:-1;;;;;8979:15:1;;;57520:120:0::1;::::0;::::1;8961:34:1::0;9031:15;;9011:18;;;9004:43;8896:18;;57520:120:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57651:7;:18:::0;;-1:-1:-1;;;;;57651:18:0;;::::1;-1:-1:-1::0;;;;;;57651:18:0;;::::1;;::::0;;;57680:16:::1;:29:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;57190:527:0:o;44632:201::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44721:22:0;::::1;44713:73;;;::::0;-1:-1:-1;;;44713:73:0;;13608:2:1;44713:73:0::1;::::0;::::1;13590:21:1::0;13647:2;13627:18;;;13620:30;13686:34;13666:18;;;13659:62;-1:-1:-1;;;13737:18:1;;;13730:36;13783:19;;44713:73:0::1;13580:228:1::0;44713:73:0::1;44797:28;44816:8;44797:18;:28::i;:::-;44632:201:::0;:::o;58824:105::-;43796:6;;-1:-1:-1;;;;;43796:6:0;22832:10;43943:23;43935:68;;;;-1:-1:-1;;;43935:68:0;;;;;;;:::i;:::-;58894:18:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;58894:27:0;;::::1;::::0;;;::::1;::::0;;58824:105::o;48053:98::-;48111:7;48138:5;48142:1;48138;:5;:::i;40821:380::-;-1:-1:-1;;;;;40957:19:0;;40949:68;;;;-1:-1:-1;;;40949:68:0;;24908:2:1;40949:68:0;;;24890:21:1;24947:2;24927:18;;;24920:30;24986:34;24966:18;;;24959:62;-1:-1:-1;;;25037:18:1;;;25030:34;25081:19;;40949:68:0;24880:226:1;40949:68:0;-1:-1:-1;;;;;41036:21:0;;41028:68;;;;-1:-1:-1;;;41028:68:0;;14015:2:1;41028:68:0;;;13997:21:1;14054:2;14034:18;;;14027:30;14093:34;14073:18;;;14066:62;-1:-1:-1;;;14144:18:1;;;14137:32;14186:19;;41028:68:0;13987:224:1;41028:68:0;-1:-1:-1;;;;;41109:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41161:32;;28966:25:1;;;41161:32:0;;28939:18:1;41161:32:0;28921:76:1;29649:248:0;29859:12;;-1:-1:-1;;;;;29839:16:0;;29795:7;29839:16;;;:7;:16;;;;;;29795:7;;29874:15;;29823:32;;:13;:32;:::i;:::-;29822:49;;;;:::i;:::-;:67;;;;:::i;:::-;29815:74;29649:248;-1:-1:-1;;;;29649:248:0:o;8440:317::-;8555:6;8530:21;:31;;8522:73;;;;-1:-1:-1;;;8522:73:0;;17163:2:1;8522:73:0;;;17145:21:1;17202:2;17182:18;;;17175:30;17241:31;17221:18;;;17214:59;17290:18;;8522:73:0;17135:179:1;8522:73:0;8609:12;8627:9;-1:-1:-1;;;;;8627:14:0;8649:6;8627:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8608:52;;;8679:7;8671:78;;;;-1:-1:-1;;;8671:78:0;;16736:2:1;8671:78:0;;;16718:21:1;16775:2;16755:18;;;16748:30;16814:34;16794:18;;;16787:62;16885:28;16865:18;;;16858:56;16931:19;;8671:78:0;16708:248:1;61886:599:0;62010:4;62016:2;62020:6;54653:1;54631:19;:17;:19::i;:::-;:23;54627:571;;;-1:-1:-1;;;;;54693:30:0;;;;;;:22;:30;;;;;;;;:39;;;:102;;-1:-1:-1;;;;;;54753:33:0;;;;;;:22;:33;;;;;;;;:42;54693:102;54671:516;;;54848:19;:17;:19::i;:::-;54838:6;:29;;54830:109;;;;-1:-1:-1;;;54830:109:0;;22954:2:1;54830:109:0;;;22936:21:1;22993:2;22973:18;;;22966:30;23032:34;23012:18;;;23005:62;23103:34;23083:18;;;23076:62;-1:-1:-1;;;23154:19:1;;;23147:34;23198:19;;54830:109:0;22926:297:1;54830:109:0;54972:7;;-1:-1:-1;;;;;54962:17:0;;;54972:7;;54962:17;54958:214;;;55048:18;:16;:18::i;:::-;55012:32;55037:6;55012:20;55022:9;55012;:20::i;:32::-;:54;;55004:148;;;;-1:-1:-1;;;55004:148:0;;11311:2:1;55004:148:0;;;11293:21:1;11350:2;11330:18;;;11323:30;11389:34;11369:18;;;11362:62;11460:34;11440:18;;;11433:62;-1:-1:-1;;;11511:19:1;;;11504:48;11569:19;;55004:148:0;11283:311:1;55004:148:0;-1:-1:-1;;;;;62061:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;::::1;;62060:20;:42:::0;::::1;;;-1:-1:-1::0;;;;;;62085:17:0;::::1;;::::0;;;:13:::1;:17;::::0;;;;;::::1;;62084:18;62060:42;62038:103;;;;-1:-1:-1::0;;;62038:103:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;62160:18:0;::::1;62152:38;;;::::0;-1:-1:-1;;;62152:38:0;;21593:2:1;62152:38:0::1;::::0;::::1;21575:21:1::0;21632:1;21612:18;;;21605:29;-1:-1:-1;;;21650:18:1;;;21643:37;21697:18;;62152:38:0::1;21565:156:1::0;62152:38:0::1;-1:-1:-1::0;;;;;62209:16:0;::::1;62201:36;;;::::0;-1:-1:-1;;;62201:36:0;;19179:2:1;62201:36:0::1;::::0;::::1;19161:21:1::0;19218:1;19198:18;;;19191:29;-1:-1:-1;;;19236:18:1;;;19229:37;19283:18;;62201:36:0::1;19151:156:1::0;62201:36:0::1;43796:6:::0;;-1:-1:-1;;;;;62252:15:0;;::::1;43796:6:::0;;62252:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;62277:7:0::1;::::0;-1:-1:-1;;;;;62271:13:0;;::::1;62277:7:::0;::::1;62271:13;;62252:32;:60;;;;-1:-1:-1::0;62302:9:0::1;::::0;-1:-1:-1;;;;;62288:24:0;;::::1;62302:9:::0;;;::::1;;62288:24;;62252:60;:83;;;;-1:-1:-1::0;;;;;;62316:19:0;::::1;62330:4;62316:19;;62252:83;:108;;;;-1:-1:-1::0;;;;;;62339:21:0;::::1;62355:4;62339:21;;62252:108;62248:186;;;62385:16;::::0;::::1;;62377:45;;;::::0;-1:-1:-1;;;62377:45:0;;27857:2:1;62377:45:0::1;::::0;::::1;27839:21:1::0;27896:2;27876:18;;;27869:30;-1:-1:-1;;;27915:18:1;;;27908:46;27971:18;;62377:45:0::1;27829:166:1::0;62377:45:0::1;62444:33;62460:4;62466:2;62470:6;62444:15;:33::i;:::-;61886:599:::0;;;;;;:::o;18042:211::-;18186:58;;;-1:-1:-1;;;;;8662:32:1;;18186:58:0;;;8644:51:1;8711:18;;;;8704:34;;;18186:58:0;;;;;;;;;;8617:18:1;;;;18186:58:0;;;;;;;;-1:-1:-1;;;;;18186:58:0;-1:-1:-1;;;18186:58:0;;;18159:86;;18179:5;;18159:19;:86::i;48791:98::-;48849:7;48876:5;48880:1;48876;:5;:::i;49190:98::-;49248:7;49275:5;49279:1;49275;:5;:::i;62493:309::-;62604:21;62638:25;62656:6;62638:17;:25::i;:::-;62674:18;62695:47;62696:21;62723:18;62695:27;:47::i;:::-;62753:41;;62674:68;;-1:-1:-1;;;;;;62753:29:0;;;:41;;;;;62674:68;;62753:41;;;;62674:68;62753:29;:41;;;;;;;;;;;;;;;;;;;;;62493:309;;;;:::o;38040:733::-;-1:-1:-1;;;;;38180:20:0;;38172:70;;;;-1:-1:-1;;;38172:70:0;;24502:2:1;38172:70:0;;;24484:21:1;24541:2;24521:18;;;24514:30;24580:34;24560:18;;;24553:62;-1:-1:-1;;;24631:18:1;;;24624:35;24676:19;;38172:70:0;24474:227:1;38172:70:0;-1:-1:-1;;;;;38261:23:0;;38253:71;;;;-1:-1:-1;;;38253:71:0;;11801:2:1;38253:71:0;;;11783:21:1;11840:2;11820:18;;;11813:30;11879:34;11859:18;;;11852:62;-1:-1:-1;;;11930:18:1;;;11923:33;11973:19;;38253:71:0;11773:225:1;38253:71:0;-1:-1:-1;;;;;38421:17:0;;38397:21;38421:17;;;;;;;;;;;38457:23;;;;38449:74;;;;-1:-1:-1;;;38449:74:0;;15590:2:1;38449:74:0;;;15572:21:1;15629:2;15609:18;;;15602:30;15668:34;15648:18;;;15641:62;-1:-1:-1;;;15719:18:1;;;15712:36;15765:19;;38449:74:0;15562:228:1;38449:74:0;-1:-1:-1;;;;;38559:17:0;;;:9;:17;;;;;;;;;;;38579:22;;;38559:42;;38623:20;;;;;;;;:30;;38595:6;;38559:9;38623:30;;38595:6;;38623:30;:::i;:::-;;;;;;;;38688:9;-1:-1:-1;;;;;38671:35:0;38680:6;-1:-1:-1;;;;;38671:35:0;;38699:6;38671:35;;;;28966:25:1;;28954:2;28939:18;;28921:76;38671:35:0;;;;;;;;38719:46;38040:733;;;;:::o;48434:98::-;48492:7;48519:5;48523:1;48519;:5;:::i;62810:413::-;62869:12;62884:13;:6;62895:1;62884:10;:13::i;:::-;62869:28;-1:-1:-1;62908:17:0;62928:16;:6;62869:28;62928:10;:16::i;:::-;62908:36;-1:-1:-1;62980:21:0;63012:23;63030:4;63012:17;:23::i;:::-;63048:18;63069:41;:21;63095:14;63069:25;:41::i;:::-;63048:62;;63121:35;63134:9;63145:10;63121:12;:35::i;:::-;63172:43;;;30192:25:1;;;30248:2;30233:18;;30226:34;;;30276:18;;;30269:34;;;63172:43:0;;30180:2:1;30165:18;63172:43:0;;;;;;;62810:413;;;;;:::o;63231:489::-;63322:16;;;63336:1;63322:16;;;;;;;;63298:21;;63322:16;;;;;;;;;;-1:-1:-1;63322:16:0;63298:40;;63367:4;63349;63354:1;63349:7;;;;;;-1:-1:-1;;;63349:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;63349:23:0;;;-1:-1:-1;;;;;63349:23:0;;;;;63393:9;;;;;;;;;-1:-1:-1;;;;;63393:9:0;-1:-1:-1;;;;;63393:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;63383:4;63388:1;63383:7;;;;;;-1:-1:-1;;;63383:7:0;;;;;;;;;-1:-1:-1;;;;;63383:27:0;;;:7;;;;;;;;;:27;63455:9;;63423:56;;63440:4;;63455:9;;;;63467:11;63423:8;:56::i;:::-;63492:9;;:220;;-1:-1:-1;;;63492:220:0;;:9;;;;-1:-1:-1;;;;;63492:9:0;;:61;;:220;;63568:11;;63594:1;;63639:4;;63666;;63686:15;;63492:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44993:191;45086:6;;;-1:-1:-1;;;;;45103:17:0;;;-1:-1:-1;;;;;;45103:17:0;;;;;;;45136:40;;45086:6;;;45103:17;45086:6;;45136:40;;45067:16;;45136:40;44993:191;;:::o;61584:294::-;-1:-1:-1;;;;;61689:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;61667:95;;;;-1:-1:-1;;;61667:95:0;;22621:2:1;61667:95:0;;;22603:21:1;22660:1;22640:18;;;22633:29;-1:-1:-1;;;22678:18:1;;;22671:35;22723:18;;61667:95:0;22593:154:1;61667:95:0;-1:-1:-1;;;;;61773:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;61773:39:0;;;;;;;;;;61830:40;;61773:39;;:31;61830:40;;;61584:294;;:::o;39792:591::-;-1:-1:-1;;;;;39876:21:0;;39868:67;;;;-1:-1:-1;;;39868:67:0;;24100:2:1;39868:67:0;;;24082:21:1;24139:2;24119:18;;;24112:30;24178:34;24158:18;;;24151:62;-1:-1:-1;;;24229:18:1;;;24222:31;24270:19;;39868:67:0;24072:223:1;39868:67:0;-1:-1:-1;;;;;40035:18:0;;40010:22;40035:18;;;;;;;;;;;40072:24;;;;40064:71;;;;-1:-1:-1;;;40064:71:0;;12537:2:1;40064:71:0;;;12519:21:1;12576:2;12556:18;;;12549:30;12615:34;12595:18;;;12588:62;-1:-1:-1;;;12666:18:1;;;12659:32;12708:19;;40064:71:0;12509:224:1;40064:71:0;-1:-1:-1;;;;;40171:18:0;;:9;:18;;;;;;;;;;40192:23;;;40171:44;;40237:12;:22;;40209:6;;40171:9;40237:22;;40209:6;;40237:22;:::i;:::-;;;;-1:-1:-1;;40277:37:0;;28966:25:1;;;40303:1:0;;-1:-1:-1;;;;;40277:37:0;;;;;28954:2:1;28939:18;40277:37:0;;;;;;;56951:109:::1;56847:220:::0;;:::o;39060:399::-;-1:-1:-1;;;;;39144:21:0;;39136:65;;;;-1:-1:-1;;;39136:65:0;;27497:2:1;39136:65:0;;;27479:21:1;27536:2;27516:18;;;27509:30;27575:33;27555:18;;;27548:61;27626:18;;39136:65:0;27469:181:1;39136:65:0;39292:6;39276:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;39309:18:0;;:9;:18;;;;;;;;;;:28;;39331:6;;39309:9;:28;;39331:6;;39309:28;:::i;:::-;;;;-1:-1:-1;;39353:37:0;;28966:25:1;;;-1:-1:-1;;;;;39353:37:0;;;39370:1;;39353:37;;28954:2:1;28939:18;39353:37:0;;;;;;;59053:248;;:::o;20615:716::-;21039:23;21065:69;21093:4;21065:69;;;;;;;;;;;;;;;;;21073:5;-1:-1:-1;;;;;21065:27:0;;;:69;;;;;:::i;:::-;21149:17;;21039:95;;-1:-1:-1;21149:21:0;21145:179;;21246:10;21235:30;;;;;;;;;;;;:::i;:::-;21227:85;;;;-1:-1:-1;;;21227:85:0;;26340:2:1;21227:85:0;;;26322:21:1;26379:2;26359:18;;;26352:30;26418:34;26398:18;;;26391:62;-1:-1:-1;;;26469:18:1;;;26462:40;26519:19;;21227:85:0;26312:232:1;63728:505:0;63908:9;;63876:56;;63893:4;;63908:9;;;-1:-1:-1;;;;;63908:9:0;63920:11;63876:8;:56::i;:::-;63975:9;;:250;;-1:-1:-1;;;63975:250:0;;64042:4;63975:250;;;10071:34:1;10121:18;;;10114:34;;;64088:1:0;10164:18:1;;;10157:34;;;10207:18;;;10200:34;;;10250:19;;;10243:44;64199:15:0;10303:19:1;;;10296:35;63975:9:0;;;;-1:-1:-1;;;;;63975:9:0;;:26;;64009:9;;10005:19:1;;63975:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9924:229::-;10061:12;10093:52;10115:6;10123:4;10129:1;10132:12;10061;7441:20;;11331:60;;;;-1:-1:-1;;;11331:60:0;;25645:2:1;11331:60:0;;;25627:21:1;25684:2;25664:18;;;25657:30;25723:31;25703:18;;;25696:59;25772:18;;11331:60:0;25617:179:1;11331:60:0;11405:12;11419:23;11446:6;-1:-1:-1;;;;;11446:11:0;11465:5;11472:4;11446:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11404:73;;;;11495:51;11512:7;11521:10;11533:12;11495:16;:51::i;:::-;11488:58;11044:510;-1:-1:-1;;;;;;;11044:510:0:o;13730:712::-;13880:12;13909:7;13905:530;;;-1:-1:-1;13940:10:0;13933:17;;13905:530;14054:17;;:21;14050:374;;14252:10;14246:17;14313:15;14300:10;14296:2;14292:19;14285:44;14200:148;14395:12;14388:20;;-1:-1:-1;;;14388:20:0;;;;;;;;:::i;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1510:398::-;1578:6;1586;1639:2;1627:9;1618:7;1614:23;1610:32;1607:2;;;1660:6;1652;1645:22;1607:2;1704:9;1691:23;1723:31;1748:5;1723:31;:::i;:::-;1773:5;-1:-1:-1;1830:2:1;1815:18;;1802:32;1843:33;1802:32;1843:33;:::i;:::-;1895:7;1885:17;;;1597:311;;;;;:::o;1913:466::-;1990:6;1998;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:2;;;2080:6;2072;2065:22;2027:2;2124:9;2111:23;2143:31;2168:5;2143:31;:::i;:::-;2193:5;-1:-1:-1;2250:2:1;2235:18;;2222:32;2263:33;2222:32;2263:33;:::i;:::-;2017:362;;2315:7;;-1:-1:-1;;;2369:2:1;2354:18;;;;2341:32;;2017:362::o;2384:392::-;2449:6;2457;2510:2;2498:9;2489:7;2485:23;2481:32;2478:2;;;2531:6;2523;2516:22;2478:2;2575:9;2562:23;2594:31;2619:5;2594:31;:::i;:::-;2644:5;-1:-1:-1;2701:2:1;2686:18;;2673:32;2714:30;2673:32;2714:30;:::i;2781:325::-;2849:6;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:2;;;2931:6;2923;2916:22;2878:2;2975:9;2962:23;2994:31;3019:5;2994:31;:::i;:::-;3044:5;3096:2;3081:18;;;;3068:32;;-1:-1:-1;;;2868:238:1:o;3111:1281::-;3229:6;3237;3290:2;3278:9;3269:7;3265:23;3261:32;3258:2;;;3311:6;3303;3296:22;3258:2;3356:9;3343:23;3385:18;3426:2;3418:6;3415:14;3412:2;;;3447:6;3439;3432:22;3412:2;3490:6;3479:9;3475:22;3465:32;;3535:7;3528:4;3524:2;3520:13;3516:27;3506:2;;3562:6;3554;3547:22;3506:2;3603;3590:16;3625:4;3649:60;3665:43;3705:2;3665:43;:::i;3649:60::-;3731:3;3755:2;3750:3;3743:15;3783:2;3778:3;3774:12;3767:19;;3814:2;3810;3806:11;3862:7;3857:2;3851;3848:1;3844:10;3840:2;3836:19;3832:28;3829:41;3826:2;;;3888:6;3880;3873:22;3826:2;3915:6;3906:15;;3930:238;3944:2;3941:1;3938:9;3930:238;;;4015:3;4002:17;4032:31;4057:5;4032:31;:::i;:::-;4076:18;;3962:1;3955:9;;;;;4114:12;;;;4146;;3930:238;;;-1:-1:-1;4187:5:1;-1:-1:-1;;4230:18:1;;4217:32;;-1:-1:-1;;4261:16:1;;;4258:2;;;4295:6;4287;4280:22;4258:2;;4323:63;4378:7;4367:8;4356:9;4352:24;4323:63;:::i;:::-;4313:73;;;3248:1144;;;;;:::o;4397:251::-;4453:6;4506:2;4494:9;4485:7;4481:23;4477:32;4474:2;;;4527:6;4519;4512:22;4474:2;4571:9;4558:23;4590:28;4612:5;4590:28;:::i;4653:255::-;4720:6;4773:2;4761:9;4752:7;4748:23;4744:32;4741:2;;;4794:6;4786;4779:22;4741:2;4831:9;4825:16;4850:28;4872:5;4850:28;:::i;5189:412::-;5271:6;5279;5332:2;5320:9;5311:7;5307:23;5303:32;5300:2;;;5353:6;5345;5338:22;5606:879;5684:6;5692;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;5766:6;5758;5751:22;5713:2;5811:9;5798:23;5840:18;5881:2;5873:6;5870:14;5867:2;;;5902:6;5894;5887:22;5867:2;5945:6;5934:9;5930:22;5920:32;;5990:7;5983:4;5979:2;5975:13;5971:27;5961:2;;6017:6;6009;6002:22;5961:2;6058;6045:16;6080:4;6103:2;6099;6096:10;6093:2;;;6109:18;;:::i;:::-;6151:53;6194:2;6175:13;;-1:-1:-1;;6171:27:1;6167:36;;6151:53;:::i;:::-;6138:66;;6227:2;6220:5;6213:17;6267:7;6262:2;6257;6253;6249:11;6245:20;6242:33;6239:2;;;6293:6;6285;6278:22;6239:2;6353;6348;6344;6340:11;6335:2;6328:5;6324:14;6311:45;6376:14;;;6372:23;;6365:39;;;;6380:5;6460:18;;;;6447:32;;-1:-1:-1;;;5703:782:1:o;6490:292::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:2;;;6622:6;6614;6607:22;6569:2;6666:9;6653:23;6716:6;6709:5;6705:18;6698:5;6695:29;6685:2;;6743:6;6735;6728:22;6787:190;6846:6;6899:2;6887:9;6878:7;6874:23;6870:32;6867:2;;;6920:6;6912;6905:22;6867:2;-1:-1:-1;6948:23:1;;6857:120;-1:-1:-1;6857:120:1:o;6982:194::-;7052:6;7105:2;7093:9;7084:7;7080:23;7076:32;7073:2;;;7126:6;7118;7111:22;7073:2;-1:-1:-1;7154:16:1;;7063:113;-1:-1:-1;7063:113:1:o;7181:316::-;7269:6;7277;7285;7338:2;7326:9;7317:7;7313:23;7309:32;7306:2;;;7359:6;7351;7344:22;7306:2;7393:9;7387:16;7377:26;;7443:2;7432:9;7428:18;7422:25;7412:35;;7487:2;7476:9;7472:18;7466:25;7456:35;;7296:201;;;;;:::o;7502:258::-;7544:3;7582:5;7576:12;7609:6;7604:3;7597:19;7625:63;7681:6;7674:4;7669:3;7665:14;7658:4;7651:5;7647:16;7625:63;:::i;:::-;7742:2;7721:15;-1:-1:-1;;7717:29:1;7708:39;;;;7749:4;7704:50;;7552:208;-1:-1:-1;;7552:208:1:o;7765:274::-;7894:3;7932:6;7926:13;7948:53;7994:6;7989:3;7982:4;7974:6;7970:17;7948:53;:::i;:::-;8017:16;;;;;7902:137;-1:-1:-1;;7902:137:1:o;9058:388::-;-1:-1:-1;;;;;9263:32:1;;9245:51;;9332:2;9327;9312:18;;9305:30;;;-1:-1:-1;;9352:45:1;;9378:18;;9370:6;9352:45;:::i;:::-;9344:53;;9433:6;9428:2;9417:9;9413:18;9406:34;9235:211;;;;;;:::o;10884:220::-;11033:2;11022:9;11015:21;10996:4;11053:45;11094:2;11083:9;11079:18;11071:6;11053:45;:::i;15795:402::-;15997:2;15979:21;;;16036:2;16016:18;;;16009:30;16075:34;16070:2;16055:18;;16048:62;-1:-1:-1;;;16141:2:1;16126:18;;16119:36;16187:3;16172:19;;15969:228::o;17726:407::-;17928:2;17910:21;;;17967:2;17947:18;;;17940:30;18006:34;18001:2;17986:18;;17979:62;-1:-1:-1;;;18072:2:1;18057:18;;18050:41;18123:3;18108:19;;17900:233::o;21726:356::-;21928:2;21910:21;;;21947:18;;;21940:30;22006:34;22001:2;21986:18;;21979:62;22073:2;22058:18;;21900:182::o;26549:335::-;26751:2;26733:21;;;26790:2;26770:18;;;26763:30;-1:-1:-1;;;26824:2:1;26809:18;;26802:41;26875:2;26860:18;;26723:161::o;29002:983::-;29264:4;29312:3;29301:9;29297:19;29343:6;29332:9;29325:25;29369:2;29407:6;29402:2;29391:9;29387:18;29380:34;29450:3;29445:2;29434:9;29430:18;29423:31;29474:6;29509;29503:13;29540:6;29532;29525:22;29578:3;29567:9;29563:19;29556:26;;29617:2;29609:6;29605:15;29591:29;;29638:4;29651:195;29665:6;29662:1;29659:13;29651:195;;;29730:13;;-1:-1:-1;;;;;29726:39:1;29714:52;;29821:15;;;;29786:12;;;;29762:1;29680:9;29651:195;;;-1:-1:-1;;;;;;;29902:32:1;;;;29897:2;29882:18;;29875:60;-1:-1:-1;;;29966:3:1;29951:19;29944:35;29863:3;29273:712;-1:-1:-1;;;29273:712:1:o;30503:275::-;30574:2;30568:9;30639:2;30620:13;;-1:-1:-1;;30616:27:1;30604:40;;30674:18;30659:34;;30695:22;;;30656:62;30653:2;;;30721:18;;:::i;:::-;30757:2;30750:22;30548:230;;-1:-1:-1;30548:230:1:o;30783:183::-;30843:4;30876:18;30868:6;30865:30;30862:2;;;30898:18;;:::i;:::-;-1:-1:-1;30943:1:1;30939:14;30955:4;30935:25;;30852:114::o;30971:128::-;31011:3;31042:1;31038:6;31035:1;31032:13;31029:2;;;31048:18;;:::i;:::-;-1:-1:-1;31084:9:1;;31019:80::o;31104:217::-;31144:1;31170;31160:2;;-1:-1:-1;;;31195:31:1;;31249:4;31246:1;31239:15;31277:4;31202:1;31267:15;31160:2;-1:-1:-1;31306:9:1;;31150:171::o;31326:168::-;31366:7;31432:1;31428;31424:6;31420:14;31417:1;31414:21;31409:1;31402:9;31395:17;31391:45;31388:2;;;31439:18;;:::i;:::-;-1:-1:-1;31479:9:1;;31378:116::o;31499:125::-;31539:4;31567:1;31564;31561:8;31558:2;;;31572:18;;:::i;:::-;-1:-1:-1;31609:9:1;;31548:76::o;31629:258::-;31701:1;31711:113;31725:6;31722:1;31719:13;31711:113;;;31801:11;;;31795:18;31782:11;;;31775:39;31747:2;31740:10;31711:113;;;31842:6;31839:1;31836:13;31833:2;;;-1:-1:-1;;31877:1:1;31859:16;;31852:27;31682:205::o;31892:380::-;31971:1;31967:12;;;;32014;;;32035:2;;32089:4;32081:6;32077:17;32067:27;;32035:2;32142;32134:6;32131:14;32111:18;32108:38;32105:2;;;32188:10;32183:3;32179:20;32176:1;32169:31;32223:4;32220:1;32213:15;32251:4;32248:1;32241:15;32105:2;;31947:325;;;:::o;32277:135::-;32316:3;-1:-1:-1;;32337:17:1;;32334:2;;;32357:18;;:::i;:::-;-1:-1:-1;32404:1:1;32393:13;;32324:88::o;32417:127::-;32478:10;32473:3;32469:20;32466:1;32459:31;32509:4;32506:1;32499:15;32533:4;32530:1;32523:15;32549:127;32610:10;32605:3;32601:20;32598:1;32591:31;32641:4;32638:1;32631:15;32665:4;32662:1;32655:15;32681:131;-1:-1:-1;;;;;32756:31:1;;32746:42;;32736:2;;32802:1;32799;32792:12;32817:118;32903:5;32896:13;32889:21;32882:5;32879:32;32869:2;;32925:1;32922;32915:12

Swarm Source

ipfs://0ddcd9ad6793aa960c55864af8f1ecb617854d40ddd181fc15793b607ed3402e
Loading