ETH Price: $2,610.62 (-1.72%)

Token

SatoParents ($SATOS)
 

Overview

Max Total Supply

1,000,000,000 $SATOS

Holders

83

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SatoParents

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-16
*/

/*
 * SPDX-License-Identifier: MIT
 * https://x.com/satosparents
 * https://t.me/satoparents
 * https://satoparents.xyz
 */



pragma solidity 0.8.19;

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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 upd 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 upd 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 upd 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 {}
}

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract SatoParents is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;
    
    uint256 private transferTaxTotal;
    uint256 private transferMarketingTax;
    uint256 private transferProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    bool private blacklistEnabled = true;
    bool private canChangeBlacklist = true;
    mapping(address => bool) private blacklist;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetDexPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("SatoParents", "$SATOS") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        transactionLimitsExempt(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        transactionLimitsExempt(address(dexPair), true);
        _setDexPair(address(dexPair), true);

        uint256 _buyMarketingTax = 20;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 80;
        uint256 _sellProjectTax = 0;

        uint256 _transferMarketingTax = 20;
        uint256 _transferProjectTax = 0;

        uint256 _totalSupply = 1_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        transferMarketingTax = _transferMarketingTax;
        transferProjectTax = _transferProjectTax;
        transferTaxTotal = transferMarketingTax + transferProjectTax;

        marketingWallet = address(0x5dE3f2923C2A81DEb57440Fe113484511dfA651e);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        transactionTaxesExempt(msg.sender, true);
        transactionTaxesExempt(address(this), true);
        transactionTaxesExempt(address(0xdead), true);
        transactionTaxesExempt(marketingWallet, true);

        transactionLimitsExempt(msg.sender, true);
        transactionLimitsExempt(address(this), true);
        transactionLimitsExempt(address(0xdead), true);
        transactionLimitsExempt(marketingWallet, true);

        transferOwnership(msg.sender);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, _totalSupply);
    }

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function transactionLimitsRemove() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enable If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function swapBackMinMaxEnabledSet(
        bool _enable,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enable;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enable, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newMaxTxLimit Base 1000, so 1% = 10
     */
    function maxTransactionLimitChange(
        uint256 newMaxTxLimit
    ) external onlyOwner {
        require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newMaxTxLimit * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newMaxWalletLimit Base 1000, so 1% = 10
     */
    function maxWalletLimitChange(
        uint256 newMaxWalletLimit
    ) external onlyOwner {
        require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newMaxWalletLimit * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    function setBlacklistEnabled(bool _enabled) external onlyOwner {
        blacklistEnabled = _enabled;
    }

    function setCanChangeBlacklist(bool _canChange) external onlyOwner {
        canChangeBlacklist = _canChange;
    }

    function setMultipleBlacklist(address[] calldata addresses, bool _isBlacklisted)
        external
        onlyOwner
    {
        require(canChangeBlacklist, "Blacklist cannot be changed anymore");
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklist[addresses[i]] = _isBlacklisted;
        }
    }

    function setBlacklist(address adr, bool _isBlacklisted) external onlyOwner {
        require(canChangeBlacklist, "Blacklist cannot be changed anymore");
        blacklist[adr] = _isBlacklisted;
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function transactionLimitsExempt(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesOnBuysSet(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function feesOnSellsChange(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    function feesOnTransfersChange(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        transferMarketingTax = _marketingFee;
        transferProjectTax = _devFee;
        transferTaxTotal = transferMarketingTax + transferProjectTax;
        require(
            transferTaxTotal <= 100,
            "Total transfer fee cannot be higher than 100%"
        );
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function transactionTaxesExempt(
        address account,
        bool excluded
    ) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetDexPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setDexPair(address pair, bool value) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setDexPair(pair, value);
    }

    function _setDexPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetDexPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newMktWal The new marketing wallet
     */
    function marketingWalletChange(address newMktWal) external onlyOwner {
        emit MarketingWalletUpdated(newMktWal, marketingWallet);
        marketingWallet = newMktWal;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newDevWal The new dev wallet
     */
    function developerWalletChange(address newDevWal) external onlyOwner {
        emit ProjectWalletUpdated(newDevWal, projectWallet);
        projectWallet = newDevWal;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function valuesForSwapback()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function valuesForLimits()
        external
        view
        returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx)
    {
        _limitsEnabled = limitsEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function valuesForReceivers()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function valuesForTaxes()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function addressPermissions(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

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

        if (blacklistEnabled) {
            require(
                !blacklist[from] && !blacklist[to],
                "Blacklisted address"
            );
        }

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack(amount);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }
            // on transfers
            else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
                fees = amount.mul(transferTaxTotal).div(100);
                tokensForProject += (fees * transferProjectTax) / transferTaxTotal;
                tokensForMarketing += (fees * transferMarketingTax) / transferTaxTotal;
            }


            if (fees > 0) {
                uint256 projectFee = fees * 20 / 100;
                uint256 marketingFee = fees - projectFee;
                
                super._transfer(from, projectWallet, projectFee);
                super._transfer(from, marketingWallet, marketingFee);
        
            }

            amount -= fees;
        }

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

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

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

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

    bool anti = true;

    function setAnti(bool _anti) external onlyOwner {
        anti = _anti;
    }

    function swapBack(uint256 amount) private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        if (anti && contractBalance > amount * 5) {
            contractBalance = amount * 5;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        (success, ) = address(projectWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"addressPermissions","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWal","type":"address"}],"name":"developerWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnBuysSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnSellsChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"feesOnTransfersChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWal","type":"address"}],"name":"marketingWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTransactionLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_canChange","type":"bool"}],"name":"setCanChangeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setMultipleBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapBackMinMaxEnabledSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"transactionLimitsExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionLimitsRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"transactionTaxesExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"valuesForLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valuesForTaxes","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506001601c60006101000a81548160ff0219169083151502179055506001601c60016101000a81548160ff0219169083151502179055506001601e60006101000a81548160ff021916908315150217905550348015620000b357600080fd5b506040518060400160405280600b81526020017f5361746f506172656e74730000000000000000000000000000000000000000008152506040518060400160405280600681526020017f245341544f530000000000000000000000000000000000000000000000000000815250816003908162000131919062000f9f565b50806004908162000143919062000f9f565b505050620001666200015a6200067860201b60201c565b6200068060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001928160016200074660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000212573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002389190620010f0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c69190620010f0565b6040518363ffffffff1660e01b8152600401620002e592919062001133565b6020604051808303816000875af115801562000305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032b9190620010f0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037360a05160016200074660201b60201c565b6200038860a05160016200088060201b60201c565b6000601490506000806050905060008060149050600080620003af6200092160201b60201c565b600a620003bd9190620012f0565b633b9aca00620003ce919062001341565b90506103e8600a82620003e2919062001341565b620003ee9190620013bb565b600a819055506103e8600a8262000406919062001341565b620004129190620013bb565b6009819055506103e86001826200042a919062001341565b620004369190620013bb565b60068190555060646002826200044d919062001341565b620004599190620013bb565b60078190555086600f8190555085601081905550601054600f546200047f9190620013f3565b600e819055508460128190555083601381905550601354601254620004a59190620013f3565b6011819055508260158190555081601681905550601654601554620004cb9190620013f3565b601481905550735de3f2923c2a81deb57440fe113484511dfa651e600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057a3360016200092a60201b60201c565b6200058d3060016200092a60201b60201c565b620005a261dead60016200092a60201b60201c565b620005d7600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092a60201b60201c565b620005ea3360016200074660201b60201c565b620005fd3060016200074660201b60201c565b6200061261dead60016200074660201b60201c565b62000647600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074660201b60201c565b620006583362000a6460201b60201c565b6200066a338262000b7960201b60201c565b505050505050505062001623565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007566200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200077c62000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cc906200148f565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620008749190620014ce565b60405180910390a25050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b60006012905090565b6200093a6200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200096062000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b0906200148f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a589190620014ce565b60405180910390a25050565b62000a746200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a9a62000cf160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000af3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aea906200148f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5c9062001561565b60405180910390fd5b62000b76816200068060201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be290620015d3565b60405180910390fd5b62000bff6000838362000d1b60201b60201c565b806002600082825462000c139190620013f3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c6a9190620013f3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cd1919062001606565b60405180910390a362000ced6000838362000d2060201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000da757607f821691505b60208210810362000dbd5762000dbc62000d5f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000de8565b62000e33868362000de8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e8062000e7a62000e748462000e4b565b62000e55565b62000e4b565b9050919050565b6000819050919050565b62000e9c8362000e5f565b62000eb462000eab8262000e87565b84845462000df5565b825550505050565b600090565b62000ecb62000ebc565b62000ed881848462000e91565b505050565b5b8181101562000f005762000ef460008262000ec1565b60018101905062000ede565b5050565b601f82111562000f4f5762000f198162000dc3565b62000f248462000dd8565b8101602085101562000f34578190505b62000f4c62000f438562000dd8565b83018262000edd565b50505b505050565b600082821c905092915050565b600062000f746000198460080262000f54565b1980831691505092915050565b600062000f8f838362000f61565b9150826002028217905092915050565b62000faa8262000d25565b67ffffffffffffffff81111562000fc65762000fc562000d30565b5b62000fd2825462000d8e565b62000fdf82828562000f04565b600060209050601f83116001811462001017576000841562001002578287015190505b6200100e858262000f81565b8655506200107e565b601f198416620010278662000dc3565b60005b8281101562001051578489015182556001820191506020850194506020810190506200102a565b868310156200107157848901516200106d601f89168262000f61565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010b8826200108b565b9050919050565b620010ca81620010ab565b8114620010d657600080fd5b50565b600081519050620010ea81620010bf565b92915050565b60006020828403121562001109576200110862001086565b5b60006200111984828501620010d9565b91505092915050565b6200112d81620010ab565b82525050565b60006040820190506200114a600083018562001122565b62001159602083018462001122565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620011ee57808604811115620011c657620011c562001160565b5b6001851615620011d65780820291505b8081029050620011e6856200118f565b9450620011a6565b94509492505050565b600082620012095760019050620012dc565b81620012195760009050620012dc565b81600181146200123257600281146200123d5762001273565b6001915050620012dc565b60ff84111562001252576200125162001160565b5b8360020a9150848211156200126c576200126b62001160565b5b50620012dc565b5060208310610133831016604e8410600b8410161715620012ad5782820a905083811115620012a757620012a662001160565b5b620012dc565b620012bc84848460016200119c565b92509050818404811115620012d657620012d562001160565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012fd8262000e4b565b91506200130a83620012e3565b9250620013397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011f7565b905092915050565b60006200134e8262000e4b565b91506200135b8362000e4b565b92508282026200136b8162000e4b565b9150828204841483151762001385576200138462001160565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013c88262000e4b565b9150620013d58362000e4b565b925082620013e857620013e76200138c565b5b828204905092915050565b6000620014008262000e4b565b91506200140d8362000e4b565b925082820190508082111562001428576200142762001160565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620014776020836200142e565b915062001484826200143f565b602082019050919050565b60006020820190508181036000830152620014aa8162001468565b9050919050565b60008115159050919050565b620014c881620014b1565b82525050565b6000602082019050620014e56000830184620014bd565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620015496026836200142e565b91506200155682620014eb565b604082019050919050565b600060208201905081810360008301526200157c816200153a565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620015bb601f836200142e565b9150620015c88262001583565b602082019050919050565b60006020820190508181036000830152620015ee81620015ac565b9050919050565b620016008162000e4b565b82525050565b60006020820190506200161d6000830184620015f5565b92915050565b60805160a0516153376200165e600039600081816120f3015261218f015260008181613a4501528181613b260152613b4d01526153376000f3fe6080604052600436106102345760003560e01c8063662906e41161012e578063c9567bf9116100ab578063e55648f41161006f578063e55648f41461084e578063f242ab4114610877578063f2fde38b146108a2578063f3cfad94146108cb578063fb42948a146108f45761023b565b8063c9567bf914610778578063c9b6c1ce1461078f578063ca3608c3146107b8578063d7ff53e5146107e1578063dd62ed3e146108115761023b565b806395d89b41116100f257806395d89b411461066b578063a457c2d714610696578063a9059cbb146106d3578063bb931db214610710578063c40b793b146107395761023b565b8063662906e41461059a57806370a08231146105c3578063715018a6146106005780637ff6f7b9146106175780638da5cb5b146106405761023b565b8063313ce567116101bc5780634482eea8116101805780634482eea8146104c75780634ada218b146104f057806351b8dc7b1461051b578063622fa7721461054457806363a7e2d9146105715761023b565b8063313ce567146103e05780633308740b1461040b578063336ddc2914610438578063391822af14610461578063395093511461048a5761023b565b8063135214951161020357806313521495146102fd578063153b0d1e1461032657806318160ddd1461034f57806321108a521461037a57806323b872dd146103a35761023b565b806306fdde0314610240578063088c9eb41461026b578063095ea7b3146102975780631201cbd0146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090b565b6040516102629190613c89565b60405180910390f35b34801561027757600080fd5b5061028061099d565b60405161028e929190613cec565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d81565b6109ee565b6040516102cb9190613ddc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e23565b610a0c565b005b34801561030957600080fd5b50610324600480360381019061031f9190613eb5565b610aa5565b005b34801561033257600080fd5b5061034d60048036038101906103489190613f15565b610c15565b005b34801561035b57600080fd5b50610364610d3b565b6040516103719190613f64565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613f7f565b610d45565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613fbf565b610e70565b6040516103d79190613ddc565b60405180910390f35b3480156103ec57600080fd5b506103f5610f68565b604051610402919061402e565b60405180910390f35b34801561041757600080fd5b50610420610f71565b60405161042f93929190614049565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614080565b610f97565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f7f565b6110d3565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613d81565b6111fe565b6040516104be9190613ddc565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613f15565b6112aa565b005b3480156104fc57600080fd5b506105056113cf565b6040516105129190613ddc565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614080565b6113e2565b005b34801561055057600080fd5b5061055961151e565b60405161056893929190614049565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613f7f565b611544565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613e23565b61162e565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614080565b6116c7565b6040516105f79190613f64565b60405180910390f35b34801561060c57600080fd5b5061061561170f565b005b34801561062357600080fd5b5061063e60048036038101906106399190613e23565b611797565b005b34801561064c57600080fd5b50610655611830565b60405161066291906140ad565b60405180910390f35b34801561067757600080fd5b5061068061185a565b60405161068d9190613c89565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613d81565b6118ec565b6040516106ca9190613ddc565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613d81565b6119d7565b6040516107079190613ddc565b60405180910390f35b34801561071c57600080fd5b50610737600480360381019061073291906140c8565b6119f5565b005b34801561074557600080fd5b50610760600480360381019061075b9190614080565b611b17565b60405161076f939291906140f5565b60405180910390f35b34801561078457600080fd5b5061078d611c10565b005b34801561079b57600080fd5b506107b660048036038101906107b19190613f15565b611cf1565b005b3480156107c457600080fd5b506107df60048036038101906107da919061412c565b611e16565b005b3480156107ed57600080fd5b506107f6611fbf565b6040516108089695949392919061417f565b60405180910390f35b34801561081d57600080fd5b50610838600480360381019061083391906141e0565b611fee565b6040516108459190613f64565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613f15565b612075565b005b34801561088357600080fd5b5061088c61218d565b60405161089991906140ad565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c49190614080565b6121b1565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906140c8565b6122a8565b005b34801561090057600080fd5b506109096123ca565b005b60606003805461091a9061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546109469061424f565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000610a026109fb612490565b8484612498565b6001905092915050565b610a14612490565b73ffffffffffffffffffffffffffffffffffffffff16610a32611830565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906142cc565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b610aad612490565b73ffffffffffffffffffffffffffffffffffffffff16610acb611830565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061435e565b60405180910390fd5b60005b83839050811015610c0f5781601d6000868685818110610b9657610b9561437e565b5b9050602002016020810190610bab9190614080565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c07906143dc565b915050610b73565b50505050565b610c1d612490565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061435e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b610d4d612490565b73ffffffffffffffffffffffffffffffffffffffff16610d6b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906142cc565b60405180910390fd5b81600f8190555080601081905550601054600f54610ddf9190614424565b600e819055506064600e541115610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906144ca565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610e64939291906144ea565b60405180910390a15050565b6000610e7d848484612661565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614593565b60405180910390fd5b610f5c85610f54612490565b858403612498565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610f9f612490565b73ffffffffffffffffffffffffffffffffffffffff16610fbd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110db612490565b73ffffffffffffffffffffffffffffffffffffffff166110f9611830565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906142cc565b60405180910390fd5b816012819055508060138190555060135460125461116d9190614424565b601181905550606460115411156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614625565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516111f2939291906144ea565b60405180910390a15050565b60006112a061120b612490565b848460016000611219612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129b9190614424565b612498565b6001905092915050565b6112b2612490565b73ffffffffffffffffffffffffffffffffffffffff166112d0611830565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906142cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516113c39190613ddc565b60405180910390a25050565b600c60009054906101000a900460ff1681565b6113ea612490565b73ffffffffffffffffffffffffffffffffffffffff16611408611830565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906142cc565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b61154c612490565b73ffffffffffffffffffffffffffffffffffffffff1661156a611830565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906142cc565b60405180910390fd5b81601581905550806016819055506016546015546115de9190614424565b6014819055506064601454111561162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906146b7565b60405180910390fd5b5050565b611636612490565b73ffffffffffffffffffffffffffffffffffffffff16611654611830565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906142cc565b60405180910390fd5b80601c60016101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611717612490565b73ffffffffffffffffffffffffffffffffffffffff16611735611830565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906142cc565b60405180910390fd5b611795600061338f565b565b61179f612490565b73ffffffffffffffffffffffffffffffffffffffff166117bd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906142cc565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118699061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546118959061424f565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600080600160006118fb612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614749565b60405180910390fd5b6119cc6119c3612490565b85858403612498565b600191505092915050565b60006119eb6119e4612490565b8484612661565b6001905092915050565b6119fd612490565b73ffffffffffffffffffffffffffffffffffffffff16611a1b611830565b73ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906142cc565b60405180910390fd5b6005811015611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906147db565b60405180910390fd5b6103e8611ac0610d3b565b82611acb91906147fb565b611ad5919061486c565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611b0c9190613f64565b60405180910390a150565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611c18612490565b73ffffffffffffffffffffffffffffffffffffffff16611c36611830565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906142cc565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611cf9612490565b73ffffffffffffffffffffffffffffffffffffffff16611d17611830565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906142cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0a9190613ddc565b60405180910390a25050565b611e1e612490565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611830565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142cc565b60405180910390fd5b6001821015611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061490f565b60405180910390fd5b81811015611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149a1565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611f3f610d3b565b611f4991906147fb565b611f53919061486c565b60068190555061271081611f65610d3b565b611f6f91906147fb565b611f79919061486c565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611fb293929190614049565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61207d612490565b73ffffffffffffffffffffffffffffffffffffffff1661209b611830565b73ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e8906142cc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614a33565b60405180910390fd5b6121898282613455565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6121b9612490565b73ffffffffffffffffffffffffffffffffffffffff166121d7611830565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ac5565b60405180910390fd5b6122a58161338f565b50565b6122b0612490565b73ffffffffffffffffffffffffffffffffffffffff166122ce611830565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906142cc565b60405180910390fd5b6002811015612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614b31565b60405180910390fd5b6103e8612373610d3b565b8261237e91906147fb565b612388919061486c565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516123bf9190613f64565b60405180910390a150565b6123d2612490565b73ffffffffffffffffffffffffffffffffffffffff166123f0611830565b73ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906142cc565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614c55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126549190613f64565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614d79565b60405180910390fd5b6000810361275857612753838360006134f6565b61338a565b601c60009054906101000a900460ff161561285157601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128115750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614de5565b60405180910390fd5b5b600860009054906101000a900460ff1615612d4c5761286e611830565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128dc57506128ac611830565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129155750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129685750600560149054906101000a900460ff16155b15612d4b57600c60009054906101000a900460ff16612a6257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a225750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614e77565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b055750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bac57600a54811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f09565b60405180910390fd5b600954612b5b836116c7565b82612b669190614424565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614f75565b60405180910390fd5b612d4a565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4f5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9e57600a54811115612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090615007565b60405180910390fd5b612d49565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4857600954612cfb836116c7565b82612d069190614424565b1115612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e90614f75565b60405180910390fd5b5b5b5b5b5b6000612d57306116c7565b905060006006548210159050808015612d7c5750600560159054906101000a900460ff165b8015612d955750600560149054906101000a900460ff16155b8015612deb5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e975750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612edc576001600560146101000a81548160ff021916908315150217905550612ec083613775565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f925750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9c57600090505b6000811561337a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fff57506000601154115b156130995761302c606461301e6011548861397090919063ffffffff16565b61398690919063ffffffff16565b90506011546013548261303f91906147fb565b613049919061486c565b6018600082825461305a9190614424565b925050819055506011546012548261307291906147fb565b61307c919061486c565b6017600082825461308d9190614424565b925050819055506132d8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130f457506000600e54115b1561318e576131216064613113600e548861397090919063ffffffff16565b61398690919063ffffffff16565b9050600e546010548261313491906147fb565b61313e919061486c565b6018600082825461314f9190614424565b92505081905550600e54600f548261316791906147fb565b613171919061486c565b601760008282546131829190614424565b925050819055506132d7565b60006014541180156131ea5750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132405750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d65761326d606461325f6014548861397090919063ffffffff16565b61398690919063ffffffff16565b90506014546016548261328091906147fb565b61328a919061486c565b6018600082825461329b9190614424565b92505081905550601454601554826132b391906147fb565b6132bd919061486c565b601760008282546132ce9190614424565b925050819055505b5b5b600081111561336b57600060646014836132f291906147fb565b6132fc919061486c565b90506000818361330c9190615027565b905061333b89600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f6565b61336889600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134f6565b50505b80856133779190615027565b94505b6133858787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb90614d79565b60405180910390fd5b6135df83838361399c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365c906150cd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f89190614424565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375c9190613f64565b60405180910390a361376f8484846139a1565b50505050565b6000613780306116c7565b9050600081905060008083036137985750505061396d565b6007548311156137a85760075492505b601e60009054906101000a900460ff1680156137cf57506005846137cc91906147fb565b83115b156137e4576005846137e191906147fb565b92505b600083905060004790506137f7826139a6565b600061380c8247613be390919063ffffffff16565b90506000613837866138296018548561397090919063ffffffff16565b61398690919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161388f9061511e565b60006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161391d9061511e565b60006040518083038185875af1925050503d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b505080955050505050505050505b50565b6000818361397e91906147fb565b905092915050565b60008183613994919061486c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156139c3576139c2615133565b5b6040519080825280602002602001820160405280156139f15781602001602082028036833780820191505090505b5090503081600081518110613a0957613a0861437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad29190615177565b81600181518110613ae657613ae561437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b4b307f000000000000000000000000000000000000000000000000000000000000000084612498565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bad9594939291906152a7565b600060405180830381600087803b158015613bc757600080fd5b505af1158015613bdb573d6000803e3d6000fd5b505050505050565b60008183613bf19190615027565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c33578082015181840152602081019050613c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5b82613bf9565b613c658185613c04565b9350613c75818560208601613c15565b613c7e81613c3f565b840191505092915050565b60006020820190508181036000830152613ca38184613c50565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd682613cab565b9050919050565b613ce681613ccb565b82525050565b6000604082019050613d016000830185613cdd565b613d0e6020830184613cdd565b9392505050565b600080fd5b600080fd5b613d2881613ccb565b8114613d3357600080fd5b50565b600081359050613d4581613d1f565b92915050565b6000819050919050565b613d5e81613d4b565b8114613d6957600080fd5b50565b600081359050613d7b81613d55565b92915050565b60008060408385031215613d9857613d97613d15565b5b6000613da685828601613d36565b9250506020613db785828601613d6c565b9150509250929050565b60008115159050919050565b613dd681613dc1565b82525050565b6000602082019050613df16000830184613dcd565b92915050565b613e0081613dc1565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613d15565b5b6000613e4784828501613e0e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7557613e74613e50565b5b8235905067ffffffffffffffff811115613e9257613e91613e55565b5b602083019150836020820283011115613eae57613ead613e5a565b5b9250929050565b600080600060408486031215613ece57613ecd613d15565b5b600084013567ffffffffffffffff811115613eec57613eeb613d1a565b5b613ef886828701613e5f565b93509350506020613f0b86828701613e0e565b9150509250925092565b60008060408385031215613f2c57613f2b613d15565b5b6000613f3a85828601613d36565b9250506020613f4b85828601613e0e565b9150509250929050565b613f5e81613d4b565b82525050565b6000602082019050613f796000830184613f55565b92915050565b60008060408385031215613f9657613f95613d15565b5b6000613fa485828601613d6c565b9250506020613fb585828601613d6c565b9150509250929050565b600080600060608486031215613fd857613fd7613d15565b5b6000613fe686828701613d36565b9350506020613ff786828701613d36565b925050604061400886828701613d6c565b9150509250925092565b600060ff82169050919050565b61402881614012565b82525050565b6000602082019050614043600083018461401f565b92915050565b600060608201905061405e6000830186613dcd565b61406b6020830185613f55565b6140786040830184613f55565b949350505050565b60006020828403121561409657614095613d15565b5b60006140a484828501613d36565b91505092915050565b60006020820190506140c26000830184613cdd565b92915050565b6000602082840312156140de576140dd613d15565b5b60006140ec84828501613d6c565b91505092915050565b600060608201905061410a6000830186613dcd565b6141176020830185613dcd565b6141246040830184613dcd565b949350505050565b60008060006060848603121561414557614144613d15565b5b600061415386828701613e0e565b935050602061416486828701613d6c565b925050604061417586828701613d6c565b9150509250925092565b600060c0820190506141946000830189613f55565b6141a16020830188613f55565b6141ae6040830187613f55565b6141bb6060830186613f55565b6141c86080830185613f55565b6141d560a0830184613f55565b979650505050505050565b600080604083850312156141f7576141f6613d15565b5b600061420585828601613d36565b925050602061421685828601613d36565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061426757607f821691505b60208210810361427a57614279614220565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613c04565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f426c61636b6c6973742063616e6e6f74206265206368616e67656420616e796d60008201527f6f72650000000000000000000000000000000000000000000000000000000000602082015250565b6000614348602383613c04565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e782613d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614419576144186143ad565b5b600182019050919050565b600061442f82613d4b565b915061443a83613d4b565b9250828201905080821115614452576144516143ad565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006144b4602883613c04565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b60006060820190506144ff6000830186613f55565b61450c6020830185613f55565b6145196040830184613f55565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061457d602883613c04565b915061458882614521565b604082019050919050565b600060208201905081810360008301526145ac81614570565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061460f602983613c04565b915061461a826145b3565b604082019050919050565b6000602082019050818103600083015261463e81614602565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006146a1602d83613c04565b91506146ac82614645565b604082019050919050565b600060208201905081810360008301526146d081614694565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614733602583613c04565b915061473e826146d7565b604082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613c04565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b600061480682613d4b565b915061481183613d4b565b925082820261481f81613d4b565b91508282048414831517614836576148356143ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487782613d4b565b915061488283613d4b565b9250826148925761489161483d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148f9603483613c04565b91506149048261489d565b604082019050919050565b60006020820190508181036000830152614928816148ec565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061498b602a83613c04565b91506149968261492f565b604082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a1d603983613c04565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aaf602683613c04565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614b1b602083613c04565b9150614b2682614ae5565b602082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bad602483613c04565b9150614bb882614b51565b604082019050919050565b60006020820190508181036000830152614bdc81614ba0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3f602283613c04565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602583613c04565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602383613c04565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614dcf601383613c04565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602283613c04565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602683613c04565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f5f601383613c04565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614ff1602783613c04565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b600061503282613d4b565b915061503d83613d4b565b9250828203905081811115615055576150546143ad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b7602683613c04565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b600081905092915050565b50565b60006151086000836150ed565b9150615113826150f8565b600082019050919050565b6000615129826150fb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061517181613d1f565b92915050565b60006020828403121561518d5761518c613d15565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b6000819050919050565b60006151d36151ce6151c9846151a4565b6151ae565b613d4b565b9050919050565b6151e3816151b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521e81613ccb565b82525050565b60006152308383615215565b60208301905092915050565b6000602082019050919050565b6000615254826151e9565b61525e81856151f4565b935061526983615205565b8060005b8381101561529a5781516152818882615224565b975061528c8361523c565b92505060018101905061526d565b5085935050505092915050565b600060a0820190506152bc6000830188613f55565b6152c960208301876151da565b81810360408301526152db8186615249565b90506152ea6060830185613cdd565b6152f76080830184613f55565b969550505050505056fea26469706673582212202a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b1064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063662906e41161012e578063c9567bf9116100ab578063e55648f41161006f578063e55648f41461084e578063f242ab4114610877578063f2fde38b146108a2578063f3cfad94146108cb578063fb42948a146108f45761023b565b8063c9567bf914610778578063c9b6c1ce1461078f578063ca3608c3146107b8578063d7ff53e5146107e1578063dd62ed3e146108115761023b565b806395d89b41116100f257806395d89b411461066b578063a457c2d714610696578063a9059cbb146106d3578063bb931db214610710578063c40b793b146107395761023b565b8063662906e41461059a57806370a08231146105c3578063715018a6146106005780637ff6f7b9146106175780638da5cb5b146106405761023b565b8063313ce567116101bc5780634482eea8116101805780634482eea8146104c75780634ada218b146104f057806351b8dc7b1461051b578063622fa7721461054457806363a7e2d9146105715761023b565b8063313ce567146103e05780633308740b1461040b578063336ddc2914610438578063391822af14610461578063395093511461048a5761023b565b8063135214951161020357806313521495146102fd578063153b0d1e1461032657806318160ddd1461034f57806321108a521461037a57806323b872dd146103a35761023b565b806306fdde0314610240578063088c9eb41461026b578063095ea7b3146102975780631201cbd0146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561090b565b6040516102629190613c89565b60405180910390f35b34801561027757600080fd5b5061028061099d565b60405161028e929190613cec565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613d81565b6109ee565b6040516102cb9190613ddc565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613e23565b610a0c565b005b34801561030957600080fd5b50610324600480360381019061031f9190613eb5565b610aa5565b005b34801561033257600080fd5b5061034d60048036038101906103489190613f15565b610c15565b005b34801561035b57600080fd5b50610364610d3b565b6040516103719190613f64565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613f7f565b610d45565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190613fbf565b610e70565b6040516103d79190613ddc565b60405180910390f35b3480156103ec57600080fd5b506103f5610f68565b604051610402919061402e565b60405180910390f35b34801561041757600080fd5b50610420610f71565b60405161042f93929190614049565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614080565b610f97565b005b34801561046d57600080fd5b5061048860048036038101906104839190613f7f565b6110d3565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613d81565b6111fe565b6040516104be9190613ddc565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613f15565b6112aa565b005b3480156104fc57600080fd5b506105056113cf565b6040516105129190613ddc565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190614080565b6113e2565b005b34801561055057600080fd5b5061055961151e565b60405161056893929190614049565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613f7f565b611544565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613e23565b61162e565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614080565b6116c7565b6040516105f79190613f64565b60405180910390f35b34801561060c57600080fd5b5061061561170f565b005b34801561062357600080fd5b5061063e60048036038101906106399190613e23565b611797565b005b34801561064c57600080fd5b50610655611830565b60405161066291906140ad565b60405180910390f35b34801561067757600080fd5b5061068061185a565b60405161068d9190613c89565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190613d81565b6118ec565b6040516106ca9190613ddc565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613d81565b6119d7565b6040516107079190613ddc565b60405180910390f35b34801561071c57600080fd5b50610737600480360381019061073291906140c8565b6119f5565b005b34801561074557600080fd5b50610760600480360381019061075b9190614080565b611b17565b60405161076f939291906140f5565b60405180910390f35b34801561078457600080fd5b5061078d611c10565b005b34801561079b57600080fd5b506107b660048036038101906107b19190613f15565b611cf1565b005b3480156107c457600080fd5b506107df60048036038101906107da919061412c565b611e16565b005b3480156107ed57600080fd5b506107f6611fbf565b6040516108089695949392919061417f565b60405180910390f35b34801561081d57600080fd5b50610838600480360381019061083391906141e0565b611fee565b6040516108459190613f64565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613f15565b612075565b005b34801561088357600080fd5b5061088c61218d565b60405161089991906140ad565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c49190614080565b6121b1565b005b3480156108d757600080fd5b506108f260048036038101906108ed91906140c8565b6122a8565b005b34801561090057600080fd5b506109096123ca565b005b60606003805461091a9061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546109469061424f565b80156109935780601f1061096857610100808354040283529160200191610993565b820191906000526020600020905b81548152906001019060200180831161097657829003601f168201915b5050505050905090565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b6000610a026109fb612490565b8484612498565b6001905092915050565b610a14612490565b73ffffffffffffffffffffffffffffffffffffffff16610a32611830565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f906142cc565b60405180910390fd5b80601c60006101000a81548160ff02191690831515021790555050565b610aad612490565b73ffffffffffffffffffffffffffffffffffffffff16610acb611830565b73ffffffffffffffffffffffffffffffffffffffff1614610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b18906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b679061435e565b60405180910390fd5b60005b83839050811015610c0f5781601d6000868685818110610b9657610b9561437e565b5b9050602002016020810190610bab9190614080565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c07906143dc565b915050610b73565b50505050565b610c1d612490565b73ffffffffffffffffffffffffffffffffffffffff16610c3b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906142cc565b60405180910390fd5b601c60019054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061435e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b610d4d612490565b73ffffffffffffffffffffffffffffffffffffffff16610d6b611830565b73ffffffffffffffffffffffffffffffffffffffff1614610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db8906142cc565b60405180910390fd5b81600f8190555080601081905550601054600f54610ddf9190614424565b600e819055506064600e541115610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e22906144ca565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610e64939291906144ea565b60405180910390a15050565b6000610e7d848484612661565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ec8612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614593565b60405180910390fd5b610f5c85610f54612490565b858403612498565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b610f9f612490565b73ffffffffffffffffffffffffffffffffffffffff16610fbd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a906142cc565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110db612490565b73ffffffffffffffffffffffffffffffffffffffff166110f9611830565b73ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906142cc565b60405180910390fd5b816012819055508060138190555060135460125461116d9190614424565b601181905550606460115411156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090614625565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16011546012546013546040516111f2939291906144ea565b60405180910390a15050565b60006112a061120b612490565b848460016000611219612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129b9190614424565b612498565b6001905092915050565b6112b2612490565b73ffffffffffffffffffffffffffffffffffffffff166112d0611830565b73ffffffffffffffffffffffffffffffffffffffff1614611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906142cc565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516113c39190613ddc565b60405180910390a25050565b600c60009054906101000a900460ff1681565b6113ea612490565b73ffffffffffffffffffffffffffffffffffffffff16611408611830565b73ffffffffffffffffffffffffffffffffffffffff161461145e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611455906142cc565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b61154c612490565b73ffffffffffffffffffffffffffffffffffffffff1661156a611830565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906142cc565b60405180910390fd5b81601581905550806016819055506016546015546115de9190614424565b6014819055506064601454111561162a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611621906146b7565b60405180910390fd5b5050565b611636612490565b73ffffffffffffffffffffffffffffffffffffffff16611654611830565b73ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a1906142cc565b60405180910390fd5b80601c60016101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611717612490565b73ffffffffffffffffffffffffffffffffffffffff16611735611830565b73ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611782906142cc565b60405180910390fd5b611795600061338f565b565b61179f612490565b73ffffffffffffffffffffffffffffffffffffffff166117bd611830565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a906142cc565b60405180910390fd5b80601e60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546118699061424f565b80601f01602080910402602001604051908101604052809291908181526020018280546118959061424f565b80156118e25780601f106118b7576101008083540402835291602001916118e2565b820191906000526020600020905b8154815290600101906020018083116118c557829003601f168201915b5050505050905090565b600080600160006118fb612490565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af90614749565b60405180910390fd5b6119cc6119c3612490565b85858403612498565b600191505092915050565b60006119eb6119e4612490565b8484612661565b6001905092915050565b6119fd612490565b73ffffffffffffffffffffffffffffffffffffffff16611a1b611830565b73ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a68906142cc565b60405180910390fd5b6005811015611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906147db565b60405180910390fd5b6103e8611ac0610d3b565b82611acb91906147fb565b611ad5919061486c565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051611b0c9190613f64565b60405180910390a150565b6000806000601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611c18612490565b73ffffffffffffffffffffffffffffffffffffffff16611c36611830565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906142cc565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611cf9612490565b73ffffffffffffffffffffffffffffffffffffffff16611d17611830565b73ffffffffffffffffffffffffffffffffffffffff1614611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d64906142cc565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e0a9190613ddc565b60405180910390a25050565b611e1e612490565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611830565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142cc565b60405180910390fd5b6001821015611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd9061490f565b60405180910390fd5b81811015611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906149a1565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611f3f610d3b565b611f4991906147fb565b611f53919061486c565b60068190555061271081611f65610d3b565b611f6f91906147fb565b611f79919061486c565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611fb293929190614049565b60405180910390a1505050565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61207d612490565b73ffffffffffffffffffffffffffffffffffffffff1661209b611830565b73ffffffffffffffffffffffffffffffffffffffff16146120f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e8906142cc565b60405180910390fd5b7f000000000000000000000000fe4b4e6ff57869b6820ca6d16673155f34cfe80c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614a33565b60405180910390fd5b6121898282613455565b5050565b7f000000000000000000000000fe4b4e6ff57869b6820ca6d16673155f34cfe80c81565b6121b9612490565b73ffffffffffffffffffffffffffffffffffffffff166121d7611830565b73ffffffffffffffffffffffffffffffffffffffff161461222d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612224906142cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390614ac5565b60405180910390fd5b6122a58161338f565b50565b6122b0612490565b73ffffffffffffffffffffffffffffffffffffffff166122ce611830565b73ffffffffffffffffffffffffffffffffffffffff1614612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906142cc565b60405180910390fd5b6002811015612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614b31565b60405180910390fd5b6103e8612373610d3b565b8261237e91906147fb565b612388919061486c565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a546040516123bf9190613f64565b60405180910390a150565b6123d2612490565b73ffffffffffffffffffffffffffffffffffffffff166123f0611830565b73ffffffffffffffffffffffffffffffffffffffff1614612446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243d906142cc565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fe90614bc3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90614c55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126549190613f64565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c790614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690614d79565b60405180910390fd5b6000810361275857612753838360006134f6565b61338a565b601c60009054906101000a900460ff161561285157601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128115750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284790614de5565b60405180910390fd5b5b600860009054906101000a900460ff1615612d4c5761286e611830565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128dc57506128ac611830565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129155750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129685750600560149054906101000a900460ff16155b15612d4b57600c60009054906101000a900460ff16612a6257601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a225750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614e77565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b055750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bac57600a54811115612b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4690614f09565b60405180910390fd5b600954612b5b836116c7565b82612b669190614424565b1115612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90614f75565b60405180910390fd5b612d4a565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c4f5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9e57600a54811115612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9090615007565b60405180910390fd5b612d49565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4857600954612cfb836116c7565b82612d069190614424565b1115612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e90614f75565b60405180910390fd5b5b5b5b5b5b6000612d57306116c7565b905060006006548210159050808015612d7c5750600560159054906101000a900460ff165b8015612d955750600560149054906101000a900460ff16155b8015612deb5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e415750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e975750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612edc576001600560146101000a81548160ff021916908315150217905550612ec083613775565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f925750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f9c57600090505b6000811561337a57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fff57506000601154115b156130995761302c606461301e6011548861397090919063ffffffff16565b61398690919063ffffffff16565b90506011546013548261303f91906147fb565b613049919061486c565b6018600082825461305a9190614424565b925050819055506011546012548261307291906147fb565b61307c919061486c565b6017600082825461308d9190614424565b925050819055506132d8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130f457506000600e54115b1561318e576131216064613113600e548861397090919063ffffffff16565b61398690919063ffffffff16565b9050600e546010548261313491906147fb565b61313e919061486c565b6018600082825461314f9190614424565b92505081905550600e54600f548261316791906147fb565b613171919061486c565b601760008282546131829190614424565b925050819055506132d7565b60006014541180156131ea5750601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132405750601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132d65761326d606461325f6014548861397090919063ffffffff16565b61398690919063ffffffff16565b90506014546016548261328091906147fb565b61328a919061486c565b6018600082825461329b9190614424565b92505081905550601454601554826132b391906147fb565b6132bd919061486c565b601760008282546132ce9190614424565b925050819055505b5b5b600081111561336b57600060646014836132f291906147fb565b6132fc919061486c565b90506000818361330c9190615027565b905061333b89600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f6565b61336889600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836134f6565b50505b80856133779190615027565b94505b6133858787876134f6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb90614d79565b60405180910390fd5b6135df83838361399c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365c906150cd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136f89190614424565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161375c9190613f64565b60405180910390a361376f8484846139a1565b50505050565b6000613780306116c7565b9050600081905060008083036137985750505061396d565b6007548311156137a85760075492505b601e60009054906101000a900460ff1680156137cf57506005846137cc91906147fb565b83115b156137e4576005846137e191906147fb565b92505b600083905060004790506137f7826139a6565b600061380c8247613be390919063ffffffff16565b90506000613837866138296018548561397090919063ffffffff16565b61398690919063ffffffff16565b905060006017819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161388f9061511e565b60006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161391d9061511e565b60006040518083038185875af1925050503d806000811461395a576040519150601f19603f3d011682016040523d82523d6000602084013e61395f565b606091505b505080955050505050505050505b50565b6000818361397e91906147fb565b905092915050565b60008183613994919061486c565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156139c3576139c2615133565b5b6040519080825280602002602001820160405280156139f15781602001602082028036833780820191505090505b5090503081600081518110613a0957613a0861437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad29190615177565b81600181518110613ae657613ae561437e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b4b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612498565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bad9594939291906152a7565b600060405180830381600087803b158015613bc757600080fd5b505af1158015613bdb573d6000803e3d6000fd5b505050505050565b60008183613bf19190615027565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c33578082015181840152602081019050613c18565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c5b82613bf9565b613c658185613c04565b9350613c75818560208601613c15565b613c7e81613c3f565b840191505092915050565b60006020820190508181036000830152613ca38184613c50565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd682613cab565b9050919050565b613ce681613ccb565b82525050565b6000604082019050613d016000830185613cdd565b613d0e6020830184613cdd565b9392505050565b600080fd5b600080fd5b613d2881613ccb565b8114613d3357600080fd5b50565b600081359050613d4581613d1f565b92915050565b6000819050919050565b613d5e81613d4b565b8114613d6957600080fd5b50565b600081359050613d7b81613d55565b92915050565b60008060408385031215613d9857613d97613d15565b5b6000613da685828601613d36565b9250506020613db785828601613d6c565b9150509250929050565b60008115159050919050565b613dd681613dc1565b82525050565b6000602082019050613df16000830184613dcd565b92915050565b613e0081613dc1565b8114613e0b57600080fd5b50565b600081359050613e1d81613df7565b92915050565b600060208284031215613e3957613e38613d15565b5b6000613e4784828501613e0e565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613e7557613e74613e50565b5b8235905067ffffffffffffffff811115613e9257613e91613e55565b5b602083019150836020820283011115613eae57613ead613e5a565b5b9250929050565b600080600060408486031215613ece57613ecd613d15565b5b600084013567ffffffffffffffff811115613eec57613eeb613d1a565b5b613ef886828701613e5f565b93509350506020613f0b86828701613e0e565b9150509250925092565b60008060408385031215613f2c57613f2b613d15565b5b6000613f3a85828601613d36565b9250506020613f4b85828601613e0e565b9150509250929050565b613f5e81613d4b565b82525050565b6000602082019050613f796000830184613f55565b92915050565b60008060408385031215613f9657613f95613d15565b5b6000613fa485828601613d6c565b9250506020613fb585828601613d6c565b9150509250929050565b600080600060608486031215613fd857613fd7613d15565b5b6000613fe686828701613d36565b9350506020613ff786828701613d36565b925050604061400886828701613d6c565b9150509250925092565b600060ff82169050919050565b61402881614012565b82525050565b6000602082019050614043600083018461401f565b92915050565b600060608201905061405e6000830186613dcd565b61406b6020830185613f55565b6140786040830184613f55565b949350505050565b60006020828403121561409657614095613d15565b5b60006140a484828501613d36565b91505092915050565b60006020820190506140c26000830184613cdd565b92915050565b6000602082840312156140de576140dd613d15565b5b60006140ec84828501613d6c565b91505092915050565b600060608201905061410a6000830186613dcd565b6141176020830185613dcd565b6141246040830184613dcd565b949350505050565b60008060006060848603121561414557614144613d15565b5b600061415386828701613e0e565b935050602061416486828701613d6c565b925050604061417586828701613d6c565b9150509250925092565b600060c0820190506141946000830189613f55565b6141a16020830188613f55565b6141ae6040830187613f55565b6141bb6060830186613f55565b6141c86080830185613f55565b6141d560a0830184613f55565b979650505050505050565b600080604083850312156141f7576141f6613d15565b5b600061420585828601613d36565b925050602061421685828601613d36565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061426757607f821691505b60208210810361427a57614279614220565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142b6602083613c04565b91506142c182614280565b602082019050919050565b600060208201905081810360008301526142e5816142a9565b9050919050565b7f426c61636b6c6973742063616e6e6f74206265206368616e67656420616e796d60008201527f6f72650000000000000000000000000000000000000000000000000000000000602082015250565b6000614348602383613c04565b9150614353826142ec565b604082019050919050565b600060208201905081810360008301526143778161433b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143e782613d4b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614419576144186143ad565b5b600182019050919050565b600061442f82613d4b565b915061443a83613d4b565b9250828201905080821115614452576144516143ad565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006144b4602883613c04565b91506144bf82614458565b604082019050919050565b600060208201905081810360008301526144e3816144a7565b9050919050565b60006060820190506144ff6000830186613f55565b61450c6020830185613f55565b6145196040830184613f55565b949350505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061457d602883613c04565b915061458882614521565b604082019050919050565b600060208201905081810360008301526145ac81614570565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061460f602983613c04565b915061461a826145b3565b604082019050919050565b6000602082019050818103600083015261463e81614602565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b60006146a1602d83613c04565b91506146ac82614645565b604082019050919050565b600060208201905081810360008301526146d081614694565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614733602583613c04565b915061473e826146d7565b604082019050919050565b6000602082019050818103600083015261476281614726565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147c5602483613c04565b91506147d082614769565b604082019050919050565b600060208201905081810360008301526147f4816147b8565b9050919050565b600061480682613d4b565b915061481183613d4b565b925082820261481f81613d4b565b91508282048414831517614836576148356143ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487782613d4b565b915061488283613d4b565b9250826148925761489161483d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148f9603483613c04565b91506149048261489d565b604082019050919050565b60006020820190508181036000830152614928816148ec565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061498b602a83613c04565b91506149968261492f565b604082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614a1d603983613c04565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614aaf602683613c04565b9150614aba82614a53565b604082019050919050565b60006020820190508181036000830152614ade81614aa2565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614b1b602083613c04565b9150614b2682614ae5565b602082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614bad602483613c04565b9150614bb882614b51565b604082019050919050565b60006020820190508181036000830152614bdc81614ba0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c3f602283613c04565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602583613c04565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602383613c04565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614dcf601383613c04565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602283613c04565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602683613c04565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f5f601383613c04565b9150614f6a82614f29565b602082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614ff1602783613c04565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b600061503282613d4b565b915061503d83613d4b565b9250828203905081811115615055576150546143ad565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006150b7602683613c04565b91506150c28261505b565b604082019050919050565b600060208201905081810360008301526150e6816150aa565b9050919050565b600081905092915050565b50565b60006151086000836150ed565b9150615113826150f8565b600082019050919050565b6000615129826150fb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061517181613d1f565b92915050565b60006020828403121561518d5761518c613d15565b5b600061519b84828501615162565b91505092915050565b6000819050919050565b6000819050919050565b60006151d36151ce6151c9846151a4565b6151ae565b613d4b565b9050919050565b6151e3816151b8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521e81613ccb565b82525050565b60006152308383615215565b60208301905092915050565b6000602082019050919050565b6000615254826151e9565b61525e81856151f4565b935061526983615205565b8060005b8381101561529a5781516152818882615224565b975061528c8361523c565b92505060018101905061526d565b5085935050505092915050565b600060a0820190506152bc6000830188613f55565b6152c960208301876151da565b81810360408301526152db8186615249565b90506152ea6060830185613cdd565b6152f76080830184613f55565b969550505050505056fea26469706673582212202a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b1064736f6c63430008130033

Deployed Bytecode Sourcemap

25414:22886:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39894:193;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33363:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33605:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33945:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34904:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39416:246;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38177:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35596:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34415:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25994:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37816:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38711:358;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;36059:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33480:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;47115:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33065:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41608:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30861:162;;;;;;;;;;;;;:::i;:::-;;36717:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31782:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40571:577;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37223:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25540:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32580:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31178:140;;;;;;;;;;;;;:::i;:::-;;11012:100;11066:13;11099:5;11092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;:::o;39894:193::-;39974:24;40000:22;40048:15;;;;;;;;;;;40065:13;;;;;;;;;;;40040:39;;;;39894:193;;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;33363:109::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33456:8:::1;33437:16;;:27;;;;;;;;;;;;;;;;;;33363:109:::0;:::o;33605:332::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33747:18:::1;;;;;;;;;;;33739:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:9;33816:114;33840:9;;:16;;33836:1;:20;33816:114;;;33904:14;33878:9;:23;33888:9;;33898:1;33888:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;33878:23;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;33858:3;;;;;:::i;:::-;;;;33816:114;;;;33605:332:::0;;;:::o;33945:202::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34039:18:::1;;;;;;;;;;;34031:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34125:14;34108:9;:14;34118:3;34108:14;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;33945:202:::0;;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;34904:403::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35040:13:::1;35022:15;:31;;;;35080:7;35064:13;:23;;;;35130:13;;35112:15;;:31;;;;:::i;:::-;35098:11;:45;;;;35177:3;35162:11;;:18;;35154:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35241:58;35255:11;;35268:15;;35285:13;;35241:58;;;;;;;;:::i;:::-;;;;;;;;34904:403:::0;;:::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;11974:93::-;12032:5;12057:2;12050:9;;11974:93;:::o;39416:246::-;39493:19;39514:18;39534:14;39583:13;;;;;;;;;;;39566:30;;39620:9;;39607:22;;39649:5;;39640:14;;39416:246;;;:::o;38177:175::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38294:13:::1;;;;;;;;;;;38262:46;;38283:9;38262:46;;;;;;;;;;;;38335:9;38319:13;;:25;;;;;;;;;;;;;;;;;;38177:175:::0;:::o;35596:455::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35737:13:::1;35718:16;:32;;;;35778:7;35761:14;:24;;;;35830:14;;35811:16;;:33;;;;:::i;:::-;35796:12;:48;;;;35893:3;35877:12;;:19;;35855:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35981:62;35996:12;;36010:16;;36028:14;;35981:62;;;;;;;;:::i;:::-;;;;;;;;35596:455:::0;;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;34415:202::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34558:4:::1;34528:19;:27;34548:6;34528:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34596:6;34578:31;;;34604:4;34578:31;;;;;;:::i;:::-;;;;;;;;34415:202:::0;;:::o;25994:34::-;;;;;;;;;;;;;:::o;37816:181::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37935:15:::1;;;;;;;;;;;37901:50;;37924:9;37901:50;;;;;;;;;;;;37980:9;37962:15;;:27;;;;;;;;;;;;;;;;;;37816:181:::0;:::o;38711:358::-;38804:21;38840:25;38880;38952:15;;;;;;;;;;;38933:34;;38998:16;;38978:36;;39045:16;;39025:36;;38711:358;;;:::o;36059:409::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36208:13:::1;36185:20;:36;;;;36253:7;36232:18;:28;;;;36313:18;;36290:20;;:41;;;;:::i;:::-;36271:16;:60;;;;36384:3;36364:16;;:23;;36342:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;36059:409:::0;;:::o;33480:117::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33579:10:::1;33558:18;;:31;;;;;;;;;;;;;;;;;;33480:117:::0;:::o;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;47115:79::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47181:5:::1;47174:4;;:12;;;;;;;;;;;;;;;;;;47115:79:::0;:::o;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;11231:104::-;11287:13;11320:7;11313:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:104;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;33065:290::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33197:1:::1;33176:17;:22;;33168:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33300:4;33283:13;:11;:13::i;:::-;33263:17;:33;;;;:::i;:::-;33262:42;;;;:::i;:::-;33250:9;:54;;;;33320:27;33337:9;;33320:27;;;;;;:::i;:::-;;;;;;;;33065:290:::0;:::o;41608:453::-;41733:23;41771:25;41811:31;41891:17;:26;41909:7;41891:26;;;;;;;;;;;;;;;;;;;;;;;;;41870:47;;41951:19;:28;41971:7;41951:28;;;;;;;;;;;;;;;;;;;;;;;;;41928:51;;42019:25;:34;42045:7;42019:34;;;;;;;;;;;;;;;;;;;;;;;;;41990:63;;41608:453;;;;;:::o;30861:162::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30931:4:::1;30914:14;;:21;;;;;;;;;;;;;;;;;;30964:4;30946:15;;:22;;;;;;;;;;;;;;;;;;30999:15;30984:31;;;;;;;;;;30861:162::o:0;36717:212::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36863:8:::1;36834:17;:26;36852:7;36834:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36903:7;36887:34;;;36912:8;36887:34;;;;;;:::i;:::-;;;;;;;;36717:212:::0;;:::o;31782:555::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31952:1:::1;31944:4;:9;;31922:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32060:4;32052;:12;;32044:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32142:7;32124:15;;:25;;;;;;;;;;;;;;;;;;32204:5;32196:4;32180:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32179:30;;;;:::i;:::-;32160:16;:49;;;;32264:5;32256:4;32240:13;:11;:13::i;:::-;:20;;;;:::i;:::-;32239:30;;;;:::i;:::-;32220:16;:49;;;;32285:44;32309:7;32318:4;32324;32285:44;;;;;;;;:::i;:::-;;;;;;;;31782:555:::0;;;:::o;40571:577::-;40661:20;40696:24;40735:22;40772:21;40808:25;40848:23;40914:11;;40899:26;;40955:15;;40936:34;;40998:13;;40981:30;;41038:12;;41022:28;;41081:16;;41061:36;;41126:14;;41108:32;;40571:577;;;;;;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;37223:241::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37327:7:::1;37319:15;;:4;:15;;::::0;37297:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37432:24;37444:4;37450:5;37432:11;:24::i;:::-;37223:241:::0;;:::o;25540:32::-;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;32580:267::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32709:1:::1;32692:13;:18;;32684:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32800:4;32783:13;:11;:13::i;:::-;32767;:29;;;;:::i;:::-;32766:38;;;;:::i;:::-;32758:5;:46;;;;32820:19;32833:5;;32820:19;;;;;;:::i;:::-;;;;;;;;32580:267:::0;:::o;31178:140::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31259:5:::1;31243:13;;:21;;;;;;;;;;;;;;;;;;31294:15;31280:30;;;;;;;;;;31178:140::o:0;10018:98::-;10071:7;10098:10;10091:17;;10018:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;42069:4434::-;42217:1;42201:18;;:4;:18;;;42193:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42294:1;42280:16;;:2;:16;;;42272:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42363:1;42353:6;:11;42349:93;;42381:28;42397:4;42403:2;42407:1;42381:15;:28::i;:::-;42424:7;;42349:93;42458:16;;;;;;;;;;;42454:164;;;42518:9;:15;42528:4;42518:15;;;;;;;;;;;;;;;;;;;;;;;;;42517:16;:34;;;;;42538:9;:13;42548:2;42538:13;;;;;;;;;;;;;;;;;;;;;;;;;42537:14;42517:34;42491:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;42454:164;42634:13;;;;;;;;;;;42630:1564;;;42694:7;:5;:7::i;:::-;42686:15;;:4;:15;;;;:49;;;;;42728:7;:5;:7::i;:::-;42722:13;;:2;:13;;;;42686:49;:86;;;;;42770:1;42756:16;;:2;:16;;;;42686:86;:128;;;;;42807:6;42793:21;;:2;:21;;;;42686:128;:158;;;;;42836:8;;;;;;;;;;;42835:9;42686:158;42664:1519;;;42884:14;;;;;;;;;;;42879:232;;42957:17;:23;42975:4;42957:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42984:17;:21;43002:2;42984:21;;;;;;;;;;;;;;;;;;;;;;;;;42957:48;42923:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;42879:232;43185:25;:31;43211:4;43185:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;43221:19;:23;43241:2;43221:23;;;;;;;;;;;;;;;;;;;;;;;;;43220:24;43185:59;43159:1009;;;43331:5;;43321:6;:15;;43287:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;43509:9;;43492:13;43502:2;43492:9;:13::i;:::-;43483:6;:22;;;;:::i;:::-;:35;;43449:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43159:1009;;;43687:25;:29;43713:2;43687:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;43721:19;:25;43741:4;43721:25;;;;;;;;;;;;;;;;;;;;;;;;;43720:26;43687:59;43661:507;;;43833:5;;43823:6;:15;;43789:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43661:507;;;43960:19;:23;43980:2;43960:23;;;;;;;;;;;;;;;;;;;;;;;;;43955:213;;44068:9;;44051:13;44061:2;44051:9;:13::i;:::-;44042:6;:22;;;;:::i;:::-;:35;;44008:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43955:213;43661:507;43159:1009;42664:1519;42630:1564;44206:28;44237:24;44255:4;44237:9;:24::i;:::-;44206:55;;44274:12;44313:16;;44289:20;:40;;44274:55;;44360:7;:39;;;;;44384:15;;;;;;;;;;;44360:39;:65;;;;;44417:8;;;;;;;;;;;44416:9;44360:65;:114;;;;;44443:25;:31;44469:4;44443:31;;;;;;;;;;;;;;;;;;;;;;;;;44442:32;44360:114;:155;;;;;44492:17;:23;44510:4;44492:23;;;;;;;;;;;;;;;;;;;;;;;;;44491:24;44360:155;:194;;;;;44533:17;:21;44551:2;44533:21;;;;;;;;;;;;;;;;;;;;;;;;;44532:22;44360:194;44342:332;;;44592:4;44581:8;;:15;;;;;;;;;;;;;;;;;;44613:16;44622:6;44613:8;:16::i;:::-;44657:5;44646:8;;:16;;;;;;;;;;;;;;;;;;44342:332;44686:12;44702:8;;;;;;;;;;;44701:9;44686:24;;44812:17;:23;44830:4;44812:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44839:17;:21;44857:2;44839:21;;;;;;;;;;;;;;;;;;;;;;;;;44812:48;44808:96;;;44887:5;44877:15;;44808:96;44916:12;45021:7;45017:1433;;;45073:25;:29;45099:2;45073:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;45121:1;45106:12;;:16;45073:49;45069:1011;;;45150:33;45179:3;45150:24;45161:12;;45150:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45143:40;;45248:12;;45230:14;;45223:4;:21;;;;:::i;:::-;45222:38;;;;:::i;:::-;45202:16;;:58;;;;;;;:::i;:::-;;;;;;;;45329:12;;45309:16;;45302:4;:23;;;;:::i;:::-;45301:40;;;;:::i;:::-;45279:18;;:62;;;;;;;:::i;:::-;;;;;;;;45069:1011;;;45403:25;:31;45429:4;45403:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45452:1;45438:11;;:15;45403:50;45399:681;;;45481:32;45509:3;45481:23;45492:11;;45481:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;45474:39;;45577:11;;45560:13;;45553:4;:20;;;;:::i;:::-;45552:36;;;;:::i;:::-;45532:16;;:56;;;;;;;:::i;:::-;;;;;;;;45656:11;;45637:15;;45630:4;:22;;;;:::i;:::-;45629:38;;;;:::i;:::-;45607:18;;:60;;;;;;;:::i;:::-;;;;;;;;45399:681;;;45754:1;45735:16;;:20;:56;;;;;45760:25;:31;45786:4;45760:31;;;;;;;;;;;;;;;;;;;;;;;;;45759:32;45735:56;:90;;;;;45796:25;:29;45822:2;45796:29;;;;;;;;;;;;;;;;;;;;;;;;;45795:30;45735:90;45731:349;;;45853:37;45886:3;45853:28;45864:16;;45853:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;45846:44;;45959:16;;45937:18;;45930:4;:25;;;;:::i;:::-;45929:46;;;;:::i;:::-;45909:16;;:66;;;;;;;:::i;:::-;;;;;;;;46048:16;;46024:20;;46017:4;:27;;;;:::i;:::-;46016:48;;;;:::i;:::-;45994:18;;:70;;;;;;;:::i;:::-;;;;;;;;45731:349;45399:681;45069:1011;46109:1;46102:4;:8;46098:310;;;46131:18;46164:3;46159:2;46152:4;:9;;;;:::i;:::-;:15;;;;:::i;:::-;46131:36;;46186:20;46216:10;46209:4;:17;;;;:::i;:::-;46186:40;;46263:48;46279:4;46285:13;;;;;;;;;;;46300:10;46263:15;:48::i;:::-;46330:52;46346:4;46352:15;;;;;;;;;;;46369:12;46330:15;:52::i;:::-;46112:296;;46098:310;46434:4;46424:14;;;;;:::i;:::-;;;45017:1433;46462:33;46478:4;46484:2;46488:6;46462:15;:33::i;:::-;42182:4321;;;;42069:4434;;;;:::o;23007:191::-;23081:16;23100:6;;;;;;;;;;;23081:25;;23126:8;23117:6;;:17;;;;;;;;;;;;;;;;;;23181:8;23150:40;;23171:8;23150:40;;;;;;;;;;;;23070:128;23007:191;:::o;37472:154::-;37572:5;37538:25;:31;37564:4;37538:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37612:5;37595:23;;37606:4;37595:23;;;;;;;;;;;;37472:154;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;47202:1095::-;47255:23;47281:24;47299:4;47281:9;:24::i;:::-;47255:50;;47316:25;47344:15;47316:43;;47370:12;47418:1;47399:15;:20;47395:59;;47436:7;;;;;47395:59;47488:16;;47470:15;:34;47466:101;;;47539:16;;47521:34;;47466:101;47583:4;;;;;;;;;;;:36;;;;;47618:1;47609:6;:10;;;;:::i;:::-;47591:15;:28;47583:36;47579:97;;;47663:1;47654:6;:10;;;;:::i;:::-;47636:28;;47579:97;47688:26;47717:15;47688:44;;47745:25;47773:21;47745:49;;47807:36;47824:18;47807:16;:36::i;:::-;47856:18;47877:44;47903:17;47877:21;:25;;:44;;;;:::i;:::-;47856:65;;47934:17;47954:79;48005:17;47954:32;47969:16;;47954:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;47934:99;;48067:1;48046:18;:22;;;;48098:1;48079:16;:20;;;;48134:13;;;;;;;;;;;48126:27;;48161:9;48126:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48112:63;;;;;48210:15;;;;;;;;;;;48202:29;;48253:21;48202:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48188:101;;;;;47244:1053;;;;;;;47202:1095;;:::o;3377:98::-;3435:7;3466:1;3462;:5;;;;:::i;:::-;3455:12;;3377:98;;;;:::o;3776:::-;3834:7;3865:1;3861;:5;;;;:::i;:::-;3854:12;;3776:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;46511:571::-;46637:21;46675:1;46661:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46637:40;;46706:4;46688;46693:1;46688:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46732:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46722:4;46727:1;46722:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;46761:56;46778:4;46793:9;46805:11;46761:8;:56::i;:::-;46856:9;:60;;;46931:11;46957:1;47001:4;47028;47048:15;46856:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46566:516;46511:571;:::o;3020:98::-;3078:7;3109:1;3105;:5;;;;:::i;:::-;3098:12;;3020:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:96::-;1518:7;1547:24;1565:5;1547:24;:::i;:::-;1536:35;;1481:96;;;:::o;1583:118::-;1670:24;1688:5;1670:24;:::i;:::-;1665:3;1658:37;1583:118;;:::o;1707:332::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1960:72;2028:2;2017:9;2013:18;2004:6;1960:72;:::i;:::-;1707:332;;;;;:::o;2126:117::-;2235:1;2232;2225:12;2249:117;2358:1;2355;2348:12;2372:122;2445:24;2463:5;2445:24;:::i;:::-;2438:5;2435:35;2425:63;;2484:1;2481;2474:12;2425:63;2372:122;:::o;2500:139::-;2546:5;2584:6;2571:20;2562:29;;2600:33;2627:5;2600:33;:::i;:::-;2500:139;;;;:::o;2645:77::-;2682:7;2711:5;2700:16;;2645:77;;;:::o;2728:122::-;2801:24;2819:5;2801:24;:::i;:::-;2794:5;2791:35;2781:63;;2840:1;2837;2830:12;2781:63;2728:122;:::o;2856:139::-;2902:5;2940:6;2927:20;2918:29;;2956:33;2983:5;2956:33;:::i;:::-;2856:139;;;;:::o;3001:474::-;3069:6;3077;3126:2;3114:9;3105:7;3101:23;3097:32;3094:119;;;3132:79;;:::i;:::-;3094:119;3252:1;3277:53;3322:7;3313:6;3302:9;3298:22;3277:53;:::i;:::-;3267:63;;3223:117;3379:2;3405:53;3450:7;3441:6;3430:9;3426:22;3405:53;:::i;:::-;3395:63;;3350:118;3001:474;;;;;:::o;3481:90::-;3515:7;3558:5;3551:13;3544:21;3533:32;;3481:90;;;:::o;3577:109::-;3658:21;3673:5;3658:21;:::i;:::-;3653:3;3646:34;3577:109;;:::o;3692:210::-;3779:4;3817:2;3806:9;3802:18;3794:26;;3830:65;3892:1;3881:9;3877:17;3868:6;3830:65;:::i;:::-;3692:210;;;;:::o;3908:116::-;3978:21;3993:5;3978:21;:::i;:::-;3971:5;3968:32;3958:60;;4014:1;4011;4004:12;3958:60;3908:116;:::o;4030:133::-;4073:5;4111:6;4098:20;4089:29;;4127:30;4151:5;4127:30;:::i;:::-;4030:133;;;;:::o;4169:323::-;4225:6;4274:2;4262:9;4253:7;4249:23;4245:32;4242:119;;;4280:79;;:::i;:::-;4242:119;4400:1;4425:50;4467:7;4458:6;4447:9;4443:22;4425:50;:::i;:::-;4415:60;;4371:114;4169:323;;;;:::o;4498:117::-;4607:1;4604;4597:12;4621:117;4730:1;4727;4720:12;4744:117;4853:1;4850;4843:12;4884:568;4957:8;4967:6;5017:3;5010:4;5002:6;4998:17;4994:27;4984:122;;5025:79;;:::i;:::-;4984:122;5138:6;5125:20;5115:30;;5168:18;5160:6;5157:30;5154:117;;;5190:79;;:::i;:::-;5154:117;5304:4;5296:6;5292:17;5280:29;;5358:3;5350:4;5342:6;5338:17;5328:8;5324:32;5321:41;5318:128;;;5365:79;;:::i;:::-;5318:128;4884:568;;;;;:::o;5458:698::-;5550:6;5558;5566;5615:2;5603:9;5594:7;5590:23;5586:32;5583:119;;;5621:79;;:::i;:::-;5583:119;5769:1;5758:9;5754:17;5741:31;5799:18;5791:6;5788:30;5785:117;;;5821:79;;:::i;:::-;5785:117;5934:80;6006:7;5997:6;5986:9;5982:22;5934:80;:::i;:::-;5916:98;;;;5712:312;6063:2;6089:50;6131:7;6122:6;6111:9;6107:22;6089:50;:::i;:::-;6079:60;;6034:115;5458:698;;;;;:::o;6162:468::-;6227:6;6235;6284:2;6272:9;6263:7;6259:23;6255:32;6252:119;;;6290:79;;:::i;:::-;6252:119;6410:1;6435:53;6480:7;6471:6;6460:9;6456:22;6435:53;:::i;:::-;6425:63;;6381:117;6537:2;6563:50;6605:7;6596:6;6585:9;6581:22;6563:50;:::i;:::-;6553:60;;6508:115;6162:468;;;;;:::o;6636:118::-;6723:24;6741:5;6723:24;:::i;:::-;6718:3;6711:37;6636:118;;:::o;6760:222::-;6853:4;6891:2;6880:9;6876:18;6868:26;;6904:71;6972:1;6961:9;6957:17;6948:6;6904:71;:::i;:::-;6760:222;;;;:::o;6988:474::-;7056:6;7064;7113:2;7101:9;7092:7;7088:23;7084:32;7081:119;;;7119:79;;:::i;:::-;7081:119;7239:1;7264:53;7309:7;7300:6;7289:9;7285:22;7264:53;:::i;:::-;7254:63;;7210:117;7366:2;7392:53;7437:7;7428:6;7417:9;7413:22;7392:53;:::i;:::-;7382:63;;7337:118;6988:474;;;;;:::o;7468:619::-;7545:6;7553;7561;7610:2;7598:9;7589:7;7585:23;7581:32;7578:119;;;7616:79;;:::i;:::-;7578:119;7736:1;7761:53;7806:7;7797:6;7786:9;7782:22;7761:53;:::i;:::-;7751:63;;7707:117;7863:2;7889:53;7934:7;7925:6;7914:9;7910:22;7889:53;:::i;:::-;7879:63;;7834:118;7991:2;8017:53;8062:7;8053:6;8042:9;8038:22;8017:53;:::i;:::-;8007:63;;7962:118;7468:619;;;;;:::o;8093:86::-;8128:7;8168:4;8161:5;8157:16;8146:27;;8093:86;;;:::o;8185:112::-;8268:22;8284:5;8268:22;:::i;:::-;8263:3;8256:35;8185:112;;:::o;8303:214::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:67;8507:1;8496:9;8492:17;8483:6;8443:67;:::i;:::-;8303:214;;;;:::o;8523:430::-;8666:4;8704:2;8693:9;8689:18;8681:26;;8717:65;8779:1;8768:9;8764:17;8755:6;8717:65;:::i;:::-;8792:72;8860:2;8849:9;8845:18;8836:6;8792:72;:::i;:::-;8874;8942:2;8931:9;8927:18;8918:6;8874:72;:::i;:::-;8523:430;;;;;;:::o;8959:329::-;9018:6;9067:2;9055:9;9046:7;9042:23;9038:32;9035:119;;;9073:79;;:::i;:::-;9035:119;9193:1;9218:53;9263:7;9254:6;9243:9;9239:22;9218:53;:::i;:::-;9208:63;;9164:117;8959:329;;;;:::o;9294:222::-;9387:4;9425:2;9414:9;9410:18;9402:26;;9438:71;9506:1;9495:9;9491:17;9482:6;9438:71;:::i;:::-;9294:222;;;;:::o;9522:329::-;9581:6;9630:2;9618:9;9609:7;9605:23;9601:32;9598:119;;;9636:79;;:::i;:::-;9598:119;9756:1;9781:53;9826:7;9817:6;9806:9;9802:22;9781:53;:::i;:::-;9771:63;;9727:117;9522:329;;;;:::o;9857:406::-;9988:4;10026:2;10015:9;10011:18;10003:26;;10039:65;10101:1;10090:9;10086:17;10077:6;10039:65;:::i;:::-;10114:66;10176:2;10165:9;10161:18;10152:6;10114:66;:::i;:::-;10190;10252:2;10241:9;10237:18;10228:6;10190:66;:::i;:::-;9857:406;;;;;;:::o;10269:613::-;10343:6;10351;10359;10408:2;10396:9;10387:7;10383:23;10379:32;10376:119;;;10414:79;;:::i;:::-;10376:119;10534:1;10559:50;10601:7;10592:6;10581:9;10577:22;10559:50;:::i;:::-;10549:60;;10505:114;10658:2;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;:::i;:::-;10674:63;;10629:118;10786:2;10812:53;10857:7;10848:6;10837:9;10833:22;10812:53;:::i;:::-;10802:63;;10757:118;10269:613;;;;;:::o;10888:775::-;11121:4;11159:3;11148:9;11144:19;11136:27;;11173:71;11241:1;11230:9;11226:17;11217:6;11173:71;:::i;:::-;11254:72;11322:2;11311:9;11307:18;11298:6;11254:72;:::i;:::-;11336;11404:2;11393:9;11389:18;11380:6;11336:72;:::i;:::-;11418;11486:2;11475:9;11471:18;11462:6;11418:72;:::i;:::-;11500:73;11568:3;11557:9;11553:19;11544:6;11500:73;:::i;:::-;11583;11651:3;11640:9;11636:19;11627:6;11583:73;:::i;:::-;10888:775;;;;;;;;;:::o;11669:474::-;11737:6;11745;11794:2;11782:9;11773:7;11769:23;11765:32;11762:119;;;11800:79;;:::i;:::-;11762:119;11920:1;11945:53;11990:7;11981:6;11970:9;11966:22;11945:53;:::i;:::-;11935:63;;11891:117;12047:2;12073:53;12118:7;12109:6;12098:9;12094:22;12073:53;:::i;:::-;12063:63;;12018:118;11669:474;;;;;:::o;12149:180::-;12197:77;12194:1;12187:88;12294:4;12291:1;12284:15;12318:4;12315:1;12308:15;12335:320;12379:6;12416:1;12410:4;12406:12;12396:22;;12463:1;12457:4;12453:12;12484:18;12474:81;;12540:4;12532:6;12528:17;12518:27;;12474:81;12602:2;12594:6;12591:14;12571:18;12568:38;12565:84;;12621:18;;:::i;:::-;12565:84;12386:269;12335:320;;;:::o;12661:182::-;12801:34;12797:1;12789:6;12785:14;12778:58;12661:182;:::o;12849:366::-;12991:3;13012:67;13076:2;13071:3;13012:67;:::i;:::-;13005:74;;13088:93;13177:3;13088:93;:::i;:::-;13206:2;13201:3;13197:12;13190:19;;12849:366;;;:::o;13221:419::-;13387:4;13425:2;13414:9;13410:18;13402:26;;13474:9;13468:4;13464:20;13460:1;13449:9;13445:17;13438:47;13502:131;13628:4;13502:131;:::i;:::-;13494:139;;13221:419;;;:::o;13646:222::-;13786:34;13782:1;13774:6;13770:14;13763:58;13855:5;13850:2;13842:6;13838:15;13831:30;13646:222;:::o;13874:366::-;14016:3;14037:67;14101:2;14096:3;14037:67;:::i;:::-;14030:74;;14113:93;14202:3;14113:93;:::i;:::-;14231:2;14226:3;14222:12;14215:19;;13874:366;;;:::o;14246:419::-;14412:4;14450:2;14439:9;14435:18;14427:26;;14499:9;14493:4;14489:20;14485:1;14474:9;14470:17;14463:47;14527:131;14653:4;14527:131;:::i;:::-;14519:139;;14246:419;;;:::o;14671:180::-;14719:77;14716:1;14709:88;14816:4;14813:1;14806:15;14840:4;14837:1;14830:15;14857:180;14905:77;14902:1;14895:88;15002:4;14999:1;14992:15;15026:4;15023:1;15016:15;15043:233;15082:3;15105:24;15123:5;15105:24;:::i;:::-;15096:33;;15151:66;15144:5;15141:77;15138:103;;15221:18;;:::i;:::-;15138:103;15268:1;15261:5;15257:13;15250:20;;15043:233;;;:::o;15282:191::-;15322:3;15341:20;15359:1;15341:20;:::i;:::-;15336:25;;15375:20;15393:1;15375:20;:::i;:::-;15370:25;;15418:1;15415;15411:9;15404:16;;15439:3;15436:1;15433:10;15430:36;;;15446:18;;:::i;:::-;15430:36;15282:191;;;;:::o;15479:227::-;15619:34;15615:1;15607:6;15603:14;15596:58;15688:10;15683:2;15675:6;15671:15;15664:35;15479:227;:::o;15712:366::-;15854:3;15875:67;15939:2;15934:3;15875:67;:::i;:::-;15868:74;;15951:93;16040:3;15951:93;:::i;:::-;16069:2;16064:3;16060:12;16053:19;;15712:366;;;:::o;16084:419::-;16250:4;16288:2;16277:9;16273:18;16265:26;;16337:9;16331:4;16327:20;16323:1;16312:9;16308:17;16301:47;16365:131;16491:4;16365:131;:::i;:::-;16357:139;;16084:419;;;:::o;16509:442::-;16658:4;16696:2;16685:9;16681:18;16673:26;;16709:71;16777:1;16766:9;16762:17;16753:6;16709:71;:::i;:::-;16790:72;16858:2;16847:9;16843:18;16834:6;16790:72;:::i;:::-;16872;16940:2;16929:9;16925:18;16916:6;16872:72;:::i;:::-;16509:442;;;;;;:::o;16957:227::-;17097:34;17093:1;17085:6;17081:14;17074:58;17166:10;17161:2;17153:6;17149:15;17142:35;16957:227;:::o;17190:366::-;17332:3;17353:67;17417:2;17412:3;17353:67;:::i;:::-;17346:74;;17429:93;17518:3;17429:93;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17190:366;;;:::o;17562:419::-;17728:4;17766:2;17755:9;17751:18;17743:26;;17815:9;17809:4;17805:20;17801:1;17790:9;17786:17;17779:47;17843:131;17969:4;17843:131;:::i;:::-;17835:139;;17562:419;;;:::o;17987:228::-;18127:34;18123:1;18115:6;18111:14;18104:58;18196:11;18191:2;18183:6;18179:15;18172:36;17987:228;:::o;18221:366::-;18363:3;18384:67;18448:2;18443:3;18384:67;:::i;:::-;18377:74;;18460:93;18549:3;18460:93;:::i;:::-;18578:2;18573:3;18569:12;18562:19;;18221:366;;;:::o;18593:419::-;18759:4;18797:2;18786:9;18782:18;18774:26;;18846:9;18840:4;18836:20;18832:1;18821:9;18817:17;18810:47;18874:131;19000:4;18874:131;:::i;:::-;18866:139;;18593:419;;;:::o;19018:232::-;19158:34;19154:1;19146:6;19142:14;19135:58;19227:15;19222:2;19214:6;19210:15;19203:40;19018:232;:::o;19256:366::-;19398:3;19419:67;19483:2;19478:3;19419:67;:::i;:::-;19412:74;;19495:93;19584:3;19495:93;:::i;:::-;19613:2;19608:3;19604:12;19597:19;;19256:366;;;:::o;19628:419::-;19794:4;19832:2;19821:9;19817:18;19809:26;;19881:9;19875:4;19871:20;19867:1;19856:9;19852:17;19845:47;19909:131;20035:4;19909:131;:::i;:::-;19901:139;;19628:419;;;:::o;20053:224::-;20193:34;20189:1;20181:6;20177:14;20170:58;20262:7;20257:2;20249:6;20245:15;20238:32;20053:224;:::o;20283:366::-;20425:3;20446:67;20510:2;20505:3;20446:67;:::i;:::-;20439:74;;20522:93;20611:3;20522:93;:::i;:::-;20640:2;20635:3;20631:12;20624:19;;20283:366;;;:::o;20655:419::-;20821:4;20859:2;20848:9;20844:18;20836:26;;20908:9;20902:4;20898:20;20894:1;20883:9;20879:17;20872:47;20936:131;21062:4;20936:131;:::i;:::-;20928:139;;20655:419;;;:::o;21080:223::-;21220:34;21216:1;21208:6;21204:14;21197:58;21289:6;21284:2;21276:6;21272:15;21265:31;21080:223;:::o;21309:366::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:419::-;21847:4;21885:2;21874:9;21870:18;21862:26;;21934:9;21928:4;21924:20;21920:1;21909:9;21905:17;21898:47;21962:131;22088:4;21962:131;:::i;:::-;21954:139;;21681:419;;;:::o;22106:410::-;22146:7;22169:20;22187:1;22169:20;:::i;:::-;22164:25;;22203:20;22221:1;22203:20;:::i;:::-;22198:25;;22258:1;22255;22251:9;22280:30;22298:11;22280:30;:::i;:::-;22269:41;;22459:1;22450:7;22446:15;22443:1;22440:22;22420:1;22413:9;22393:83;22370:139;;22489:18;;:::i;:::-;22370:139;22154:362;22106:410;;;;:::o;22522:180::-;22570:77;22567:1;22560:88;22667:4;22664:1;22657:15;22691:4;22688:1;22681:15;22708:185;22748:1;22765:20;22783:1;22765:20;:::i;:::-;22760:25;;22799:20;22817:1;22799:20;:::i;:::-;22794:25;;22838:1;22828:35;;22843:18;;:::i;:::-;22828:35;22885:1;22882;22878:9;22873:14;;22708:185;;;;:::o;22899:239::-;23039:34;23035:1;23027:6;23023:14;23016:58;23108:22;23103:2;23095:6;23091:15;23084:47;22899:239;:::o;23144:366::-;23286:3;23307:67;23371:2;23366:3;23307:67;:::i;:::-;23300:74;;23383:93;23472:3;23383:93;:::i;:::-;23501:2;23496:3;23492:12;23485:19;;23144:366;;;:::o;23516:419::-;23682:4;23720:2;23709:9;23705:18;23697:26;;23769:9;23763:4;23759:20;23755:1;23744:9;23740:17;23733:47;23797:131;23923:4;23797:131;:::i;:::-;23789:139;;23516:419;;;:::o;23941:229::-;24081:34;24077:1;24069:6;24065:14;24058:58;24150:12;24145:2;24137:6;24133:15;24126:37;23941:229;:::o;24176:366::-;24318:3;24339:67;24403:2;24398:3;24339:67;:::i;:::-;24332:74;;24415:93;24504:3;24415:93;:::i;:::-;24533:2;24528:3;24524:12;24517:19;;24176:366;;;:::o;24548:419::-;24714:4;24752:2;24741:9;24737:18;24729:26;;24801:9;24795:4;24791:20;24787:1;24776:9;24772:17;24765:47;24829:131;24955:4;24829:131;:::i;:::-;24821:139;;24548:419;;;:::o;24973:244::-;25113:34;25109:1;25101:6;25097:14;25090:58;25182:27;25177:2;25169:6;25165:15;25158:52;24973:244;:::o;25223:366::-;25365:3;25386:67;25450:2;25445:3;25386:67;:::i;:::-;25379:74;;25462:93;25551:3;25462:93;:::i;:::-;25580:2;25575:3;25571:12;25564:19;;25223:366;;;:::o;25595:419::-;25761:4;25799:2;25788:9;25784:18;25776:26;;25848:9;25842:4;25838:20;25834:1;25823:9;25819:17;25812:47;25876:131;26002:4;25876:131;:::i;:::-;25868:139;;25595:419;;;:::o;26020:225::-;26160:34;26156:1;26148:6;26144:14;26137:58;26229:8;26224:2;26216:6;26212:15;26205:33;26020:225;:::o;26251:366::-;26393:3;26414:67;26478:2;26473:3;26414:67;:::i;:::-;26407:74;;26490:93;26579:3;26490:93;:::i;:::-;26608:2;26603:3;26599:12;26592:19;;26251:366;;;:::o;26623:419::-;26789:4;26827:2;26816:9;26812:18;26804:26;;26876:9;26870:4;26866:20;26862:1;26851:9;26847:17;26840:47;26904:131;27030:4;26904:131;:::i;:::-;26896:139;;26623:419;;;:::o;27048:182::-;27188:34;27184:1;27176:6;27172:14;27165:58;27048:182;:::o;27236:366::-;27378:3;27399:67;27463:2;27458:3;27399:67;:::i;:::-;27392:74;;27475:93;27564:3;27475:93;:::i;:::-;27593:2;27588:3;27584:12;27577:19;;27236:366;;;:::o;27608:419::-;27774:4;27812:2;27801:9;27797:18;27789:26;;27861:9;27855:4;27851:20;27847:1;27836:9;27832:17;27825:47;27889:131;28015:4;27889:131;:::i;:::-;27881:139;;27608:419;;;:::o;28033:223::-;28173:34;28169:1;28161:6;28157:14;28150:58;28242:6;28237:2;28229:6;28225:15;28218:31;28033:223;:::o;28262:366::-;28404:3;28425:67;28489:2;28484:3;28425:67;:::i;:::-;28418:74;;28501:93;28590:3;28501:93;:::i;:::-;28619:2;28614:3;28610:12;28603:19;;28262:366;;;:::o;28634:419::-;28800:4;28838:2;28827:9;28823:18;28815:26;;28887:9;28881:4;28877:20;28873:1;28862:9;28858:17;28851:47;28915:131;29041:4;28915:131;:::i;:::-;28907:139;;28634:419;;;:::o;29059:221::-;29199:34;29195:1;29187:6;29183:14;29176:58;29268:4;29263:2;29255:6;29251:15;29244:29;29059:221;:::o;29286:366::-;29428:3;29449:67;29513:2;29508:3;29449:67;:::i;:::-;29442:74;;29525:93;29614:3;29525:93;:::i;:::-;29643:2;29638:3;29634:12;29627:19;;29286:366;;;:::o;29658:419::-;29824:4;29862:2;29851:9;29847:18;29839:26;;29911:9;29905:4;29901:20;29897:1;29886:9;29882:17;29875:47;29939:131;30065:4;29939:131;:::i;:::-;29931:139;;29658:419;;;:::o;30083:224::-;30223:34;30219:1;30211:6;30207:14;30200:58;30292:7;30287:2;30279:6;30275:15;30268:32;30083:224;:::o;30313:366::-;30455:3;30476:67;30540:2;30535:3;30476:67;:::i;:::-;30469:74;;30552:93;30641:3;30552:93;:::i;:::-;30670:2;30665:3;30661:12;30654:19;;30313:366;;;:::o;30685:419::-;30851:4;30889:2;30878:9;30874:18;30866:26;;30938:9;30932:4;30928:20;30924:1;30913:9;30909:17;30902:47;30966:131;31092:4;30966:131;:::i;:::-;30958:139;;30685:419;;;:::o;31110:222::-;31250:34;31246:1;31238:6;31234:14;31227:58;31319:5;31314:2;31306:6;31302:15;31295:30;31110:222;:::o;31338:366::-;31480:3;31501:67;31565:2;31560:3;31501:67;:::i;:::-;31494:74;;31577:93;31666:3;31577:93;:::i;:::-;31695:2;31690:3;31686:12;31679:19;;31338:366;;;:::o;31710:419::-;31876:4;31914:2;31903:9;31899:18;31891:26;;31963:9;31957:4;31953:20;31949:1;31938:9;31934:17;31927:47;31991:131;32117:4;31991:131;:::i;:::-;31983:139;;31710:419;;;:::o;32135:169::-;32275:21;32271:1;32263:6;32259:14;32252:45;32135:169;:::o;32310:366::-;32452:3;32473:67;32537:2;32532:3;32473:67;:::i;:::-;32466:74;;32549:93;32638:3;32549:93;:::i;:::-;32667:2;32662:3;32658:12;32651:19;;32310:366;;;:::o;32682:419::-;32848:4;32886:2;32875:9;32871:18;32863:26;;32935:9;32929:4;32925:20;32921:1;32910:9;32906:17;32899:47;32963:131;33089:4;32963:131;:::i;:::-;32955:139;;32682:419;;;:::o;33107:221::-;33247:34;33243:1;33235:6;33231:14;33224:58;33316:4;33311:2;33303:6;33299:15;33292:29;33107:221;:::o;33334:366::-;33476:3;33497:67;33561:2;33556:3;33497:67;:::i;:::-;33490:74;;33573:93;33662:3;33573:93;:::i;:::-;33691:2;33686:3;33682:12;33675:19;;33334:366;;;:::o;33706:419::-;33872:4;33910:2;33899:9;33895:18;33887:26;;33959:9;33953:4;33949:20;33945:1;33934:9;33930:17;33923:47;33987:131;34113:4;33987:131;:::i;:::-;33979:139;;33706:419;;;:::o;34131:225::-;34271:34;34267:1;34259:6;34255:14;34248:58;34340:8;34335:2;34327:6;34323:15;34316:33;34131:225;:::o;34362:366::-;34504:3;34525:67;34589:2;34584:3;34525:67;:::i;:::-;34518:74;;34601:93;34690:3;34601:93;:::i;:::-;34719:2;34714:3;34710:12;34703:19;;34362:366;;;:::o;34734:419::-;34900:4;34938:2;34927:9;34923:18;34915:26;;34987:9;34981:4;34977:20;34973:1;34962:9;34958:17;34951:47;35015:131;35141:4;35015:131;:::i;:::-;35007:139;;34734:419;;;:::o;35159:169::-;35299:21;35295:1;35287:6;35283:14;35276:45;35159:169;:::o;35334:366::-;35476:3;35497:67;35561:2;35556:3;35497:67;:::i;:::-;35490:74;;35573:93;35662:3;35573:93;:::i;:::-;35691:2;35686:3;35682:12;35675:19;;35334:366;;;:::o;35706:419::-;35872:4;35910:2;35899:9;35895:18;35887:26;;35959:9;35953:4;35949:20;35945:1;35934:9;35930:17;35923:47;35987:131;36113:4;35987:131;:::i;:::-;35979:139;;35706:419;;;:::o;36131:226::-;36271:34;36267:1;36259:6;36255:14;36248:58;36340:9;36335:2;36327:6;36323:15;36316:34;36131:226;:::o;36363:366::-;36505:3;36526:67;36590:2;36585:3;36526:67;:::i;:::-;36519:74;;36602:93;36691:3;36602:93;:::i;:::-;36720:2;36715:3;36711:12;36704:19;;36363:366;;;:::o;36735:419::-;36901:4;36939:2;36928:9;36924:18;36916:26;;36988:9;36982:4;36978:20;36974:1;36963:9;36959:17;36952:47;37016:131;37142:4;37016:131;:::i;:::-;37008:139;;36735:419;;;:::o;37160:194::-;37200:4;37220:20;37238:1;37220:20;:::i;:::-;37215:25;;37254:20;37272:1;37254:20;:::i;:::-;37249:25;;37298:1;37295;37291:9;37283:17;;37322:1;37316:4;37313:11;37310:37;;;37327:18;;:::i;:::-;37310:37;37160:194;;;;:::o;37360:225::-;37500:34;37496:1;37488:6;37484:14;37477:58;37569:8;37564:2;37556:6;37552:15;37545:33;37360:225;:::o;37591:366::-;37733:3;37754:67;37818:2;37813:3;37754:67;:::i;:::-;37747:74;;37830:93;37919:3;37830:93;:::i;:::-;37948:2;37943:3;37939:12;37932:19;;37591:366;;;:::o;37963:419::-;38129:4;38167:2;38156:9;38152:18;38144:26;;38216:9;38210:4;38206:20;38202:1;38191:9;38187:17;38180:47;38244:131;38370:4;38244:131;:::i;:::-;38236:139;;37963:419;;;:::o;38388:147::-;38489:11;38526:3;38511:18;;38388:147;;;;:::o;38541:114::-;;:::o;38661:398::-;38820:3;38841:83;38922:1;38917:3;38841:83;:::i;:::-;38834:90;;38933:93;39022:3;38933:93;:::i;:::-;39051:1;39046:3;39042:11;39035:18;;38661:398;;;:::o;39065:379::-;39249:3;39271:147;39414:3;39271:147;:::i;:::-;39264:154;;39435:3;39428:10;;39065:379;;;:::o;39450:180::-;39498:77;39495:1;39488:88;39595:4;39592:1;39585:15;39619:4;39616:1;39609:15;39636:143;39693:5;39724:6;39718:13;39709:22;;39740:33;39767:5;39740:33;:::i;:::-;39636:143;;;;:::o;39785:351::-;39855:6;39904:2;39892:9;39883:7;39879:23;39875:32;39872:119;;;39910:79;;:::i;:::-;39872:119;40030:1;40055:64;40111:7;40102:6;40091:9;40087:22;40055:64;:::i;:::-;40045:74;;40001:128;39785:351;;;;:::o;40142:85::-;40187:7;40216:5;40205:16;;40142:85;;;:::o;40233:60::-;40261:3;40282:5;40275:12;;40233:60;;;:::o;40299:158::-;40357:9;40390:61;40408:42;40417:32;40443:5;40417:32;:::i;:::-;40408:42;:::i;:::-;40390:61;:::i;:::-;40377:74;;40299:158;;;:::o;40463:147::-;40558:45;40597:5;40558:45;:::i;:::-;40553:3;40546:58;40463:147;;:::o;40616:114::-;40683:6;40717:5;40711:12;40701:22;;40616:114;;;:::o;40736:184::-;40835:11;40869:6;40864:3;40857:19;40909:4;40904:3;40900:14;40885:29;;40736:184;;;;:::o;40926:132::-;40993:4;41016:3;41008:11;;41046:4;41041:3;41037:14;41029:22;;40926:132;;;:::o;41064:108::-;41141:24;41159:5;41141:24;:::i;:::-;41136:3;41129:37;41064:108;;:::o;41178:179::-;41247:10;41268:46;41310:3;41302:6;41268:46;:::i;:::-;41346:4;41341:3;41337:14;41323:28;;41178:179;;;;:::o;41363:113::-;41433:4;41465;41460:3;41456:14;41448:22;;41363:113;;;:::o;41512:732::-;41631:3;41660:54;41708:5;41660:54;:::i;:::-;41730:86;41809:6;41804:3;41730:86;:::i;:::-;41723:93;;41840:56;41890:5;41840:56;:::i;:::-;41919:7;41950:1;41935:284;41960:6;41957:1;41954:13;41935:284;;;42036:6;42030:13;42063:63;42122:3;42107:13;42063:63;:::i;:::-;42056:70;;42149:60;42202:6;42149:60;:::i;:::-;42139:70;;41995:224;41982:1;41979;41975:9;41970:14;;41935:284;;;41939:14;42235:3;42228:10;;41636:608;;;41512:732;;;;:::o;42250:831::-;42513:4;42551:3;42540:9;42536:19;42528:27;;42565:71;42633:1;42622:9;42618:17;42609:6;42565:71;:::i;:::-;42646:80;42722:2;42711:9;42707:18;42698:6;42646:80;:::i;:::-;42773:9;42767:4;42763:20;42758:2;42747:9;42743:18;42736:48;42801:108;42904:4;42895:6;42801:108;:::i;:::-;42793:116;;42919:72;42987:2;42976:9;42972:18;42963:6;42919:72;:::i;:::-;43001:73;43069:3;43058:9;43054:19;43045:6;43001:73;:::i;:::-;42250:831;;;;;;;;:::o

Swarm Source

ipfs://2a97697af13c1e5acd5baab45f4cb8c7ce0f20a7bb7f5070e97aac3d79569b10
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.