ETH Price: $3,669.71 (+1.91%)

Token

ERC-20: VRFI (VRFI)
 

Overview

Max Total Supply

100,000,000 VRFI

Holders

847

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
14,483.513010000000576838 VRFI

Value
$0.00
0x0c94c058cf555d601ef84ad8421639fc096c4211
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:
VRFI

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-07
*/

/**
 .----------------.  .----------------.  .----------------.  .----------------. 
| .--------------. || .--------------. || .--------------. || .--------------. |
| | ____   ____  | || |  _______     | || |  _________   | || |     _____    | |
| ||_  _| |_  _| | || | |_   __ \    | || | |_   ___  |  | || |    |_   _|   | |
| |  \ \   / /   | || |   | |__) |   | || |   | |_  \_|  | || |      | |     | |
| |   \ \ / /    | || |   |  __ /    | || |   |  _|      | || |      | |     | |
| |    \ ' /     | || |  _| |  \ \_  | || |  _| |_       | || |     _| |_    | |
| |     \_/      | || | |____| |___| | || | |_____|      | || |    |_____|   | |
| |              | || |              | || |              | || |              | |
| '--------------' || '--------------' || '--------------' || '--------------' |
 '----------------'  '----------------'  '----------------'  '----------------' 
**/
//SPDX-License-Identifier: Unlicensed
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: VRFI.sol



pragma solidity ^0.8.10;







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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;

    struct Fee {
        uint16 liquidityFee;
        uint16 marketingFee;
        uint16 devFee;
        uint16 salariesFee;
        uint16 insuranceFee;
    }

    Fee public buyFee;
    Fee public sellFee;
    Fee public transferFee;
    Fee public sevenDayFee;

    uint16 private totalBuyFee;
    uint16 private totalSellFee;
    uint16 private totalTransferFee;
    uint16 private totalSevenDayFee;

    uint256 public swapTokensAtAmount;
    uint256 public timeGap = 30 minutes;
    uint256 private lastSwapTime;

    uint256 public dailyLimit;
    bool public isTradingEnabled;
    mapping(address => uint256) private lastSoldTime;
    mapping(address => uint256) private soldTokenin24Hrs;

    uint256 public maxTxAmount;
    uint256 public maxWalletAmount;

    address payable public _marketingWallet =
        payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc));
    address payable public _devWallet =
        payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc));
    address payable public _salariesWallet =
        payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc));
    address payable public _insuranceWallet =
        payable(address(0x6CF48b5edc8b4E72D2b67c5fA6a46B43358F8181));
    address payable public _deployerWallet =
        payable(address(0xcA57fcFbc10e6E58EC793b644797D3570DbEFC56));

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => uint256) public lastBuyTime;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

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

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

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

        buyFee.liquidityFee = 15; // 1.5%
        buyFee.marketingFee = 35; // 3.5%
        buyFee.devFee = 20; // 2%
        buyFee.salariesFee = 20; //2%
        buyFee.insuranceFee = 10; // 1%
        totalBuyFee = 100; // 10%

        sellFee.liquidityFee = 15; // 1.5%
        sellFee.marketingFee = 35; // 2.5%
        sellFee.devFee = 20; // 2%
        sellFee.salariesFee = 20; // 2%
        sellFee.insuranceFee = 10; // 1%
        totalSellFee = 100; // 10%

        transferFee.liquidityFee = 15; // 1.5%
        transferFee.marketingFee = 35; // 3.5%
        transferFee.devFee = 0;
        transferFee.salariesFee = 0;
        transferFee.insuranceFee = 10; // 1%
        totalTransferFee = 60; // 5%

        sevenDayFee.liquidityFee = 215; // 21.5%
        sevenDayFee.marketingFee = 35; // 3.5%
        sevenDayFee.devFee = 20; // 2%
        sevenDayFee.salariesFee = 20; // 2%
        sevenDayFee.insuranceFee = 10; // 1%
        totalSevenDayFee = 300; //30%

        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), 100 * 10**6 * 10**18); // 100,000,000 tokens
        maxWalletAmount = totalSupply().mul(1).div(100); // 1% of the supply (1,000,000 tokens per wallet limit)
        maxTxAmount = totalSupply().mul(1).div(1000); // 0.1% of the supply (100000 tokens per transaction)
        swapTokensAtAmount = totalSupply().mul(5).div(10000); //0.05% of the supply (50000 tokens per swap)

        dailyLimit = 250 * 10**3 * 10**18; // 250000 tokens
        isTradingEnabled = false;
    }

    receive() external payable {}

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "Token: The router already has that address"
        );
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
        address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Pair = _uniswapV2Pair;
    }

    function enableTrading () external onlyOwner {
        isTradingEnabled = true;
    }

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

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setSwapAtAmount(uint256 value, uint256 gap) external onlyOwner {
        swapTokensAtAmount = value * 10**18;
        timeGap = gap;
    }

    function setMaxWallet(uint256 value) external onlyOwner {
        maxWalletAmount = value * 10**18;
    }

    function setMaxTx(uint256 value) external onlyOwner {
        maxTxAmount = value * 10**18;
    }

    function setDailyLimit(uint256 value) external onlyOwner {
        require (value > 1000, "no rug pull");
        dailyLimit = value * 10**18;
    }

    function setWallets(
        address marketing,
        address dev,
        address salaries,
        address insurance,
        address deployer
    ) external onlyOwner {
        _marketingWallet = payable(marketing);
        _devWallet = payable(dev);
        _salariesWallet = payable(salaries);
        _insuranceWallet = payable(insurance);
        _deployerWallet = payable(deployer);
    }

    function setSellFee(
        uint16 insurance,
        uint16 marketing,
        uint16 liquidity,
        uint16 dev,
        uint16 salaries
    ) external onlyOwner {
        sellFee.salariesFee = salaries;
        sellFee.marketingFee = marketing;
        sellFee.liquidityFee = liquidity;
        sellFee.devFee = dev;
        sellFee.insuranceFee = insurance;
        totalSellFee = salaries + marketing + liquidity + dev + insurance;
    }

    function setSevenDayFee(
        uint16 insurance,
        uint16 marketing,
        uint16 liquidity,
        uint16 dev,
        uint16 salaries
    ) external onlyOwner {
        sevenDayFee.salariesFee = salaries;
        sevenDayFee.marketingFee = marketing;
        sevenDayFee.liquidityFee = liquidity;
        sevenDayFee.devFee = dev;
        sevenDayFee.insuranceFee = insurance;
        totalSevenDayFee = salaries + marketing + liquidity + dev + insurance;
    }

    function setBuyFee(
        uint16 insurance,
        uint16 marketing,
        uint16 liquidity,
        uint16 dev,
        uint16 salaries
    ) external onlyOwner {
        buyFee.salariesFee = salaries;
        buyFee.marketingFee = marketing;
        buyFee.liquidityFee = liquidity;
        buyFee.devFee = dev;
        buyFee.insuranceFee = insurance;
        totalBuyFee = salaries + marketing + liquidity + dev + insurance;
    }

    function setTransferFee(
        uint16 insurance,
        uint16 marketing,
        uint16 liquidity,
        uint16 dev,
        uint16 salaries
    ) external onlyOwner {
        transferFee.salariesFee = salaries;
        transferFee.marketingFee = marketing;
        transferFee.liquidityFee = liquidity;
        transferFee.devFee = dev;
        transferFee.insuranceFee = insurance;
        totalTransferFee = salaries + marketing + liquidity + dev + insurance;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Token: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function claimStuckTokens(address _token) external onlyOwner {
        require(_token != address(this), "No rugs");
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = (contractTokenBalance >= swapTokensAtAmount) &&
            (lastSwapTime + timeGap <= block.timestamp);

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;
            lastSwapTime = block.timestamp;

            contractTokenBalance = swapTokensAtAmount;

            uint256 totalFee = totalBuyFee +
                totalSellFee +
                totalSevenDayFee +
                totalTransferFee;

            uint256 swapTokens = contractTokenBalance
                .mul(
                    buyFee.liquidityFee +
                        sellFee.liquidityFee +
                        transferFee.liquidityFee +
                        sevenDayFee.liquidityFee
                )
                .div(totalFee);
            swapAndLiquify(swapTokens);

            uint256 feeTokens = contractTokenBalance.sub(swapTokens);
            swapAndSendToFee(feeTokens);

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (lastBuyTime[to] == 0 && !automatedMarketMakerPairs[to]) {
            lastBuyTime[to] = block.timestamp;
        }

        if (takeFee) {
            require(amount <= maxTxAmount, "Amount exceeds limit");
            require(isTradingEnabled, "trading is not enabled yet");

            if (!automatedMarketMakerPairs[to]) {
                require(
                    balanceOf(to) + amount <= maxWalletAmount,
                    "Balance exceeds limit"
                );
            }

            uint256 fees;

            if (automatedMarketMakerPairs[to]) {
                if (block.timestamp - lastSoldTime[from] >= 1 days) {
                    soldTokenin24Hrs[from] = 0;
                }

                require(
                    soldTokenin24Hrs[from] + amount <= dailyLimit,
                    "Token amount exceeds daily limit"
                );

                soldTokenin24Hrs[from] = soldTokenin24Hrs[from].add(amount);
                lastSoldTime[from] = block.timestamp;

                if (lastBuyTime[from] + 7 days > block.timestamp) {
                    fees = totalSevenDayFee;
                } else {
                    fees = totalSellFee;
                }
            } else if (automatedMarketMakerPairs[from]) {
                fees = totalBuyFee;
                lastBuyTime[to] = block.timestamp;
            }

            if (
                !automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to]
            ) {
                fees = totalTransferFee;
            }

            uint256 feeAmount = amount.mul(fees).div(1000);

            amount = amount.sub(feeAmount);

            super._transfer(from, address(this), feeAmount);
        }

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

    function swapAndSendToFee(uint256 tokens) private {
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(tokens);
        uint256 newBalance = address(this).balance.sub(initialBalance);

        uint256 totalMarketingFee = buyFee.marketingFee +
            sellFee.marketingFee +
            transferFee.marketingFee +
            sevenDayFee.marketingFee;
        uint256 totalDevFee = buyFee.devFee +
            sellFee.devFee +
            transferFee.devFee +
            sevenDayFee.devFee;
        uint256 totalInsuranceFee = buyFee.insuranceFee +
            sellFee.insuranceFee +
            transferFee.insuranceFee +
            sevenDayFee.insuranceFee;
        uint256 totalSalariesFee = buyFee.salariesFee +
            sellFee.salariesFee +
            transferFee.salariesFee +
            sevenDayFee.salariesFee;

        uint256 total = totalMarketingFee +
            totalDevFee +
            totalInsuranceFee +
            totalSalariesFee;

        uint256 marketingShare = newBalance.mul(totalMarketingFee).div(total);
        uint256 devShare = newBalance.mul(totalDevFee).div(total);
        uint256 salariesShare = newBalance.mul(totalSalariesFee).div(total);
        uint256 insuranceShare = newBalance.mul(totalInsuranceFee).div(total);

       // _marketingWallet.transfer(marketingShare);
       // _devWallet.transfer(devShare);
       // _salariesWallet.transfer(salariesShare);
      //  _insuranceWallet.transfer(insuranceShare);

        (bool success, ) = _marketingWallet.call{value: marketingShare }(""); 
        (bool success2, ) = _devWallet.call{value: devShare }("");
         (bool success3, ) = _salariesWallet.call{value: salariesShare }("");
          (bool success4, ) = _insuranceWallet.call{value: insuranceShare }("");


        require(success, "transfer to marketing wallet failed");
        require(success2, "Transfer to  dev wallet failed");
         require(success3, "Transfer to  salaries wallet failed");
          require(success4, "Transfer to  insurance wallet failed");



    }

    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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 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
            _deployerWallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"_deployerWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_insuranceWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_salariesWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"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":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDailyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setSevenDayFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gap","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"salaries","type":"address"},{"internalType":"address","name":"insurance","type":"address"},{"internalType":"address","name":"deployer","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sevenDayFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"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":"timeGap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610708600e55601680546001600160a01b0319908116739361eae77a347691e306f11db8d8f9c961aff3cc90811790925560178054821683179055601880548216909217909155601980548216736cf48b5edc8b4e72d2b67c5fa6a46b43358f8181179055601a805490911673ca57fcfbc10e6e58ec793b644797d3570dbefc561790553480156200009557600080fd5b506040805180820182526004808252635652464960e01b6020808401829052845180860190955291845290830152906003620000d28382620007ad565b506004620000e18282620007ad565b505050620000fe620000f8620003fb60201b60201c565b620003ff565b600880546001600160501b0319908116680a001400140023000f908117909255600c8054600980548416909417909355600a80548316680a000000000023000f179055600b8054909216680a00140014002300d7179091556001600160401b031990911667012c003c006400641790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000879565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e919062000879565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d2919062000879565b600680546001600160a01b038086166001600160a01b031992831617909255600780549284169290911691909117905590506200031181600162000451565b62000330620003286005546001600160a01b031690565b600162000541565b6200033d30600162000541565b62000366620003546005546001600160a01b031690565b6a52b7d2dcc80cd2e4000000620005fc565b620003a460646200039060016200037c60025490565b620006e160201b6200183f1790919060201c565b620006f660201b620018521790919060201c565b601555620003be6103e86200039060016200037c60025490565b601455620003d86127106200039060056200037c60025490565b600d5550506934f086f3b33b684000006010556011805460ff191690556200091a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503620004ed5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200059d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004e4565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e4565b8060026000828254620006689190620008ba565b90915550506001600160a01b0382166000908152602081905260408120805483929062000697908490620008ba565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000620006ef8284620008d5565b9392505050565b6000620006ef8284620008f7565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073457607f821691505b6020821081036200075557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070457600081815260208120601f850160051c81016020861015620007845750805b601f850160051c820191505b81811015620007a55782815560010162000790565b505050505050565b81516001600160401b03811115620007c957620007c962000709565b620007e181620007da84546200071f565b846200075b565b602080601f831160018114620008195760008415620008005750858301515b600019600386901b1c1916600185901b178555620007a5565b600085815260208120601f198616915b828110156200084a5788860151825594840194600190910190840162000829565b5085821015620008695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200088c57600080fd5b81516001600160a01b0381168114620006ef57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115620008d057620008d0620008a4565b500190565b6000816000190483118215151615620008f257620008f2620008a4565b500290565b6000826200091557634e487b7160e01b600052601260045260246000fd5b500490565b613072806200092a6000396000f3fe6080604052600436106102b25760003560e01c806367eeba0c11610175578063a9059cbb116100dc578063c024666811610095578063dd62ed3e1161006f578063dd62ed3e1461094a578063e2f4560514610990578063f2fde38b146109a6578063f9d0831a146109c657600080fd5b8063c0246668146108f4578063c492f04614610914578063dd5dd8f21461093457600080fd5b8063a9059cbb1461080a578063aa4bde281461082a578063acb2ad6f14610840578063b20d30a914610884578063b62496f5146108a4578063bc337182146108d457600080fd5b80638c0b5e221161012e5780638c0b5e22146107615780638da5cb5b1461077757806395d89b4114610795578063962dfc75146107aa5780639a7a23d6146107ca578063a457c2d7146107ea57600080fd5b806367eeba0c1461068757806370a082311461069d578063715018a6146106d357806382528791146106e85780638a8c523c146107085780638ba9d8e11461071d57600080fd5b8063313ce567116102195780634cfd4a92116101d25780634cfd4a92146105ae5780634fbee193146105ce57806351dfb5dc146106075780635d0044ca1461062757806365b8dbc01461064757806366ad738d1461066757600080fd5b8063313ce567146104c157806338c4f814146104dd57806339509351146104fd5780633fecc2e21461051d578063470624021461054a57806349bd5a5e1461058e57600080fd5b80631465d9291161026b5780631465d929146103a95780631694505e146103c957806318160ddd146103e95780631c92dc021461040857806323b872dd146104285780632b14ca561461044857600080fd5b8063064a59d0146102be57806306fdde03146102ed578063095ea7b31461030f5780630aaae7351461032f5780630e604eca1461036757806311a63e171461038957600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506011546102d89060ff1681565b60405190151581526020015b60405180910390f35b3480156102f957600080fd5b506103026109e6565b6040516102e49190612a08565b34801561031b57600080fd5b506102d861032a366004612a72565b610a78565b34801561033b57600080fd5b50601a5461034f906001600160a01b031681565b6040516001600160a01b0390911681526020016102e4565b34801561037357600080fd5b50610387610382366004612a9e565b610a90565b005b34801561039557600080fd5b5060175461034f906001600160a01b031681565b3480156103b557600080fd5b506103876103c4366004612ad7565b610ade565b3480156103d557600080fd5b5060065461034f906001600160a01b031681565b3480156103f557600080fd5b506002545b6040519081526020016102e4565b34801561041457600080fd5b50610387610423366004612ad7565b610baf565b34801561043457600080fd5b506102d8610443366004612b3c565b610c86565b34801561045457600080fd5b5060095461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102e4565b3480156104cd57600080fd5b50604051601281526020016102e4565b3480156104e957600080fd5b506103876104f8366004612ad7565b610caa565b34801561050957600080fd5b506102d8610518366004612a72565b610d81565b34801561052957600080fd5b506103fa610538366004612b7d565b601c6020526000908152604090205481565b34801561055657600080fd5b5060085461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561059a57600080fd5b5060075461034f906001600160a01b031681565b3480156105ba57600080fd5b506103876105c9366004612ad7565b610dc0565b3480156105da57600080fd5b506102d86105e9366004612b7d565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561061357600080fd5b5060185461034f906001600160a01b031681565b34801561063357600080fd5b50610387610642366004612b9a565b610e97565b34801561065357600080fd5b50610387610662366004612b7d565b610ed9565b34801561067357600080fd5b5060195461034f906001600160a01b031681565b34801561069357600080fd5b506103fa60105481565b3480156106a957600080fd5b506103fa6106b8366004612b7d565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b5061038761114a565b3480156106f457600080fd5b50610387610703366004612bb3565b611180565b34801561071457600080fd5b50610387611209565b34801561072957600080fd5b50600b5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561076d57600080fd5b506103fa60145481565b34801561078357600080fd5b506005546001600160a01b031661034f565b3480156107a157600080fd5b50610302611242565b3480156107b657600080fd5b5060165461034f906001600160a01b031681565b3480156107d657600080fd5b506103876107e5366004612c32565b611251565b3480156107f657600080fd5b506102d8610805366004612a72565b611322565b34801561081657600080fd5b506102d8610825366004612a72565b6113b4565b34801561083657600080fd5b506103fa60155481565b34801561084c57600080fd5b50600a5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561089057600080fd5b5061038761089f366004612b9a565b6113c2565b3480156108b057600080fd5b506102d86108bf366004612b7d565b601d6020526000908152604090205460ff1681565b3480156108e057600080fd5b506103876108ef366004612b9a565b611443565b34801561090057600080fd5b5061038761090f366004612c32565b611485565b34801561092057600080fd5b5061038761092f366004612c6b565b61150e565b34801561094057600080fd5b506103fa600e5481565b34801561095657600080fd5b506103fa610965366004612cf1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099c57600080fd5b506103fa600d5481565b3480156109b257600080fd5b506103876109c1366004612b7d565b6115ea565b3480156109d257600080fd5b506103876109e1366004612b7d565b611685565b6060600380546109f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612d1f565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b600033610a8681858561185e565b5060019392505050565b6005546001600160a01b03163314610ac35760405162461bcd60e51b8152600401610aba90612d59565b60405180910390fd5b610ad582670de0b6b3a7640000612da4565b600d55600e5550565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aba90612d59565b6008805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610b748785612dc3565b610b7e9190612dc3565b610b889190612dc3565b610b929190612dc3565b600c805461ffff191661ffff929092169190911790555050505050565b6005546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610aba90612d59565b600b805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610c458785612dc3565b610c4f9190612dc3565b610c599190612dc3565b610c639190612dc3565b600c60066101000a81548161ffff021916908361ffff1602179055505050505050565b600033610c94858285611982565b610c9f858585611a0e565b506001949350505050565b6005546001600160a01b03163314610cd45760405162461bcd60e51b8152600401610aba90612d59565b600a805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610d408785612dc3565b610d4a9190612dc3565b610d549190612dc3565b610d5e9190612dc3565b600c60046101000a81548161ffff021916908361ffff1602179055505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a869082908690610dbb908790612de9565b61185e565b6005546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610aba90612d59565b6009805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610e568785612dc3565b610e609190612dc3565b610e6a9190612dc3565b610e749190612dc3565b600c60026101000a81548161ffff021916908361ffff1602179055505050505050565b6005546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610aba90612d59565b610ed381670de0b6b3a7640000612da4565b60155550565b6005546001600160a01b03163314610f035760405162461bcd60e51b8152600401610aba90612d59565b6006546001600160a01b0390811690821603610f745760405162461bcd60e51b815260206004820152602a60248201527f546f6b656e3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610aba565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612e01565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612e01565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610aba90612d59565b61117e6000612044565b565b6005546001600160a01b031633146111aa5760405162461bcd60e51b8152600401610aba90612d59565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601980548416918516919091179055601a80549092169216919091179055565b6005546001600160a01b031633146112335760405162461bcd60e51b8152600401610aba90612d59565b6011805460ff19166001179055565b6060600480546109f590612d1f565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610aba90612d59565b6007546001600160a01b03908116908316036113145760405162461bcd60e51b815260206004820152604c60248201527f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a401610aba565b61131e8282612096565b5050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aba565b610c9f828686840361185e565b600033610a86818585611a0e565b6005546001600160a01b031633146113ec5760405162461bcd60e51b8152600401610aba90612d59565b6103e8811161142b5760405162461bcd60e51b815260206004820152600b60248201526a1b9bc81c9d59c81c1d5b1b60aa1b6044820152606401610aba565b61143d81670de0b6b3a7640000612da4565b60105550565b6005546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610aba90612d59565b61147f81670de0b6b3a7640000612da4565b60145550565b6005546001600160a01b031633146114af5760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115385760405162461bcd60e51b8152600401610aba90612d59565b60005b828110156115a95781601b600086868581811061155a5761155a612e1e565b905060200201602081019061156f9190612b7d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a181612e34565b91505061153b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516115dd93929190612e4d565b60405180910390a1505050565b6005546001600160a01b031633146116145760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0381166116795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61168281612044565b50565b6005546001600160a01b031633146116af5760405162461bcd60e51b8152600401610aba90612d59565b306001600160a01b038216036116f15760405162461bcd60e51b81526020600482015260076024820152664e6f207275677360c81b6044820152606401610aba565b6001600160a01b038116611738576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561131e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a59190612ea6565b9050816001600160a01b031663a9059cbb6117c86005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612ebf565b50505050565b600061184b8284612da4565b9392505050565b600061184b8284612edc565b6001600160a01b0383166118c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6001600160a01b0382166119215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118395781811015611a015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aba565b611839848484840361185e565b6001600160a01b038316611a345760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b038216611a5a5760405162461bcd60e51b8152600401610aba90612f43565b80600003611a7357611a6e83836000612180565b505050565b3060009081526020819052604081205490506000600d548210158015611aa8575042600e54600f54611aa59190612de9565b11155b9050808015611ac15750600754600160a01b900460ff16155b8015611ae657506001600160a01b0385166000908152601d602052604090205460ff16155b8015611b0057506005546001600160a01b03868116911614155b8015611b1a57506005546001600160a01b03858116911614155b15611c0e576007805460ff60a01b1916600160a01b17905542600f55600d54600c5490925060009061ffff600160201b8204811691600160301b8104821691611b6c9162010000810482169116612dc3565b611b769190612dc3565b611b809190612dc3565b600b54600a5460095460085461ffff9485169550600094611bdb948794611bd5949183169390831692611bb69281169116612dc3565b611bc09190612dc3565b611bca9190612dc3565b879061ffff1661183f565b90611852565b9050611be6816122d4565b6000611bf2858361235b565b9050611bfd81612367565b50506007805460ff60a01b19169055505b6007546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611c5c57506001600160a01b0385166000908152601b602052604090205460ff165b15611c65575060005b6001600160a01b0385166000908152601c6020526040902054158015611ca457506001600160a01b0385166000908152601d602052604090205460ff16155b15611cc5576001600160a01b0385166000908152601c602052604090204290555b801561203157601454841115611d145760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610aba565b60115460ff16611d665760405162461bcd60e51b815260206004820152601a60248201527f74726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aba565b6001600160a01b0385166000908152601d602052604090205460ff16611df95760155484611da9876001600160a01b031660009081526020819052604090205490565b611db39190612de9565b1115611df95760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b6044820152606401610aba565b6001600160a01b0385166000908152601d602052604081205460ff1615611f67576001600160a01b0387166000908152601260205260409020546201518090611e429042612f86565b10611e61576001600160a01b0387166000908152601360205260408120555b6010546001600160a01b038816600090815260136020526040902054611e88908790612de9565b1115611ed65760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20616d6f756e742065786365656473206461696c79206c696d69746044820152606401610aba565b6001600160a01b038716600090815260136020526040902054611ef990866127f6565b6001600160a01b038816600090815260136020908152604080832093909355601281528282204290819055601c90915291902054611f3a9062093a80612de9565b1115611f545750600c54600160301b900461ffff16611fac565b50600c5462010000900461ffff16611fac565b6001600160a01b0387166000908152601d602052604090205460ff1615611fac5750600c546001600160a01b0386166000908152601c6020526040902042905561ffff165b6001600160a01b0387166000908152601d602052604090205460ff16158015611fee57506001600160a01b0386166000908152601d602052604090205460ff16155b156120035750600c54600160201b900461ffff165b60006120156103e8611bd5888561183f565b9050612021868261235b565b955061202e883083612180565b50505b61203c868686612180565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff90911615150361212c5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610aba565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166121a65760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b0382166121cc5760405162461bcd60e51b8152600401610aba90612f43565b6001600160a01b038316600090815260208190526040902054818110156122445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aba565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061227b908490612de9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122c791815260200190565b60405180910390a3611839565b60006122e1826002611852565b905060006122ef838361235b565b9050476122fb83612802565b6000612307478361235b565b90506123138382612954565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600061184b8284612f86565b4761237182612802565b600061237d478361235b565b600b54600a5460095460085493945060009361ffff6201000094859004811694938490048116936123b5938190048216920416612dc3565b6123bf9190612dc3565b6123c99190612dc3565b600b54600a5460095460085461ffff9485169550600094600160201b9485900481169493849004811693612404938190048216920416612dc3565b61240e9190612dc3565b6124189190612dc3565b600b54600a5460095460085461ffff9485169550600094600160401b9485900481169493849004811693612453938190048216920416612dc3565b61245d9190612dc3565b6124679190612dc3565b600b54600a5460095460085461ffff9485169550600094600160301b94859004811694938490048116936124a2938190048216920416612dc3565b6124ac9190612dc3565b6124b69190612dc3565b61ffff169050600081836124ca8688612de9565b6124d49190612de9565b6124de9190612de9565b905060006124f082611bd5898961183f565b9050600061250283611bd58a8961183f565b9050600061251484611bd58b8861183f565b9050600061252685611bd58c8a61183f565b6016546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146125d1576040519150601f19603f3d011682016040523d82523d6000602084013e6125d6565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612683576040519150601f19603f3d011682016040523d82523d6000602084013e612688565b606091505b50509050836126e55760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b826127325760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f20206465762077616c6c6574206661696c656400006044820152606401610aba565b8161278b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220746f202073616c61726965732077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b806127e45760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220746f2020696e737572616e63652077616c6c65742066616044820152631a5b195960e21b6064820152608401610aba565b50505050505050505050505050505050565b600061184b8284612de9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061283757612837612e1e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612e01565b816001815181106128c7576128c7612e1e565b6001600160a01b0392831660209182029290920101526006546128ed913091168461185e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612926908590600090869030904290600401612f9d565b600060405180830381600087803b15801561294057600080fd5b505af115801561203c573d6000803e3d6000fd5b60065461296c9030906001600160a01b03168461185e565b600654601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129dc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a01919061300e565b5050505050565b600060208083528351808285015260005b81811015612a3557858101830151858201604001528201612a19565b81811115612a47576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461168257600080fd5b60008060408385031215612a8557600080fd5b8235612a9081612a5d565b946020939093013593505050565b60008060408385031215612ab157600080fd5b50508035926020909101359150565b803561ffff81168114612ad257600080fd5b919050565b600080600080600060a08688031215612aef57600080fd5b612af886612ac0565b9450612b0660208701612ac0565b9350612b1460408701612ac0565b9250612b2260608701612ac0565b9150612b3060808701612ac0565b90509295509295909350565b600080600060608486031215612b5157600080fd5b8335612b5c81612a5d565b92506020840135612b6c81612a5d565b929592945050506040919091013590565b600060208284031215612b8f57600080fd5b813561184b81612a5d565b600060208284031215612bac57600080fd5b5035919050565b600080600080600060a08688031215612bcb57600080fd5b8535612bd681612a5d565b94506020860135612be681612a5d565b93506040860135612bf681612a5d565b92506060860135612c0681612a5d565b91506080860135612c1681612a5d565b809150509295509295909350565b801515811461168257600080fd5b60008060408385031215612c4557600080fd5b8235612c5081612a5d565b91506020830135612c6081612c24565b809150509250929050565b600080600060408486031215612c8057600080fd5b833567ffffffffffffffff80821115612c9857600080fd5b818601915086601f830112612cac57600080fd5b813581811115612cbb57600080fd5b8760208260051b8501011115612cd057600080fd5b60209283019550935050840135612ce681612c24565b809150509250925092565b60008060408385031215612d0457600080fd5b8235612d0f81612a5d565b91506020830135612c6081612a5d565b600181811c90821680612d3357607f821691505b602082108103612d5357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612dbe57612dbe612d8e565b500290565b600061ffff808316818516808303821115612de057612de0612d8e565b01949350505050565b60008219821115612dfc57612dfc612d8e565b500190565b600060208284031215612e1357600080fd5b815161184b81612a5d565b634e487b7160e01b600052603260045260246000fd5b600060018201612e4657612e46612d8e565b5060010190565b6040808252810183905260008460608301825b86811015612e90578235612e7381612a5d565b6001600160a01b0316825260209283019290910190600101612e60565b5080925050508215156020830152949350505050565b600060208284031215612eb857600080fd5b5051919050565b600060208284031215612ed157600080fd5b815161184b81612c24565b600082612ef957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612f9857612f98612d8e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fed5784516001600160a01b031683529383019391830191600101612fc8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561302357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202b729ff8f092437327a76dd69151b10625daedc495f663a8b8ddee761855f08064736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806367eeba0c11610175578063a9059cbb116100dc578063c024666811610095578063dd62ed3e1161006f578063dd62ed3e1461094a578063e2f4560514610990578063f2fde38b146109a6578063f9d0831a146109c657600080fd5b8063c0246668146108f4578063c492f04614610914578063dd5dd8f21461093457600080fd5b8063a9059cbb1461080a578063aa4bde281461082a578063acb2ad6f14610840578063b20d30a914610884578063b62496f5146108a4578063bc337182146108d457600080fd5b80638c0b5e221161012e5780638c0b5e22146107615780638da5cb5b1461077757806395d89b4114610795578063962dfc75146107aa5780639a7a23d6146107ca578063a457c2d7146107ea57600080fd5b806367eeba0c1461068757806370a082311461069d578063715018a6146106d357806382528791146106e85780638a8c523c146107085780638ba9d8e11461071d57600080fd5b8063313ce567116102195780634cfd4a92116101d25780634cfd4a92146105ae5780634fbee193146105ce57806351dfb5dc146106075780635d0044ca1461062757806365b8dbc01461064757806366ad738d1461066757600080fd5b8063313ce567146104c157806338c4f814146104dd57806339509351146104fd5780633fecc2e21461051d578063470624021461054a57806349bd5a5e1461058e57600080fd5b80631465d9291161026b5780631465d929146103a95780631694505e146103c957806318160ddd146103e95780631c92dc021461040857806323b872dd146104285780632b14ca561461044857600080fd5b8063064a59d0146102be57806306fdde03146102ed578063095ea7b31461030f5780630aaae7351461032f5780630e604eca1461036757806311a63e171461038957600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506011546102d89060ff1681565b60405190151581526020015b60405180910390f35b3480156102f957600080fd5b506103026109e6565b6040516102e49190612a08565b34801561031b57600080fd5b506102d861032a366004612a72565b610a78565b34801561033b57600080fd5b50601a5461034f906001600160a01b031681565b6040516001600160a01b0390911681526020016102e4565b34801561037357600080fd5b50610387610382366004612a9e565b610a90565b005b34801561039557600080fd5b5060175461034f906001600160a01b031681565b3480156103b557600080fd5b506103876103c4366004612ad7565b610ade565b3480156103d557600080fd5b5060065461034f906001600160a01b031681565b3480156103f557600080fd5b506002545b6040519081526020016102e4565b34801561041457600080fd5b50610387610423366004612ad7565b610baf565b34801561043457600080fd5b506102d8610443366004612b3c565b610c86565b34801561045457600080fd5b5060095461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102e4565b3480156104cd57600080fd5b50604051601281526020016102e4565b3480156104e957600080fd5b506103876104f8366004612ad7565b610caa565b34801561050957600080fd5b506102d8610518366004612a72565b610d81565b34801561052957600080fd5b506103fa610538366004612b7d565b601c6020526000908152604090205481565b34801561055657600080fd5b5060085461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561059a57600080fd5b5060075461034f906001600160a01b031681565b3480156105ba57600080fd5b506103876105c9366004612ad7565b610dc0565b3480156105da57600080fd5b506102d86105e9366004612b7d565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561061357600080fd5b5060185461034f906001600160a01b031681565b34801561063357600080fd5b50610387610642366004612b9a565b610e97565b34801561065357600080fd5b50610387610662366004612b7d565b610ed9565b34801561067357600080fd5b5060195461034f906001600160a01b031681565b34801561069357600080fd5b506103fa60105481565b3480156106a957600080fd5b506103fa6106b8366004612b7d565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b5061038761114a565b3480156106f457600080fd5b50610387610703366004612bb3565b611180565b34801561071457600080fd5b50610387611209565b34801561072957600080fd5b50600b5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561076d57600080fd5b506103fa60145481565b34801561078357600080fd5b506005546001600160a01b031661034f565b3480156107a157600080fd5b50610302611242565b3480156107b657600080fd5b5060165461034f906001600160a01b031681565b3480156107d657600080fd5b506103876107e5366004612c32565b611251565b3480156107f657600080fd5b506102d8610805366004612a72565b611322565b34801561081657600080fd5b506102d8610825366004612a72565b6113b4565b34801561083657600080fd5b506103fa60155481565b34801561084c57600080fd5b50600a5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561089057600080fd5b5061038761089f366004612b9a565b6113c2565b3480156108b057600080fd5b506102d86108bf366004612b7d565b601d6020526000908152604090205460ff1681565b3480156108e057600080fd5b506103876108ef366004612b9a565b611443565b34801561090057600080fd5b5061038761090f366004612c32565b611485565b34801561092057600080fd5b5061038761092f366004612c6b565b61150e565b34801561094057600080fd5b506103fa600e5481565b34801561095657600080fd5b506103fa610965366004612cf1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099c57600080fd5b506103fa600d5481565b3480156109b257600080fd5b506103876109c1366004612b7d565b6115ea565b3480156109d257600080fd5b506103876109e1366004612b7d565b611685565b6060600380546109f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612d1f565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b600033610a8681858561185e565b5060019392505050565b6005546001600160a01b03163314610ac35760405162461bcd60e51b8152600401610aba90612d59565b60405180910390fd5b610ad582670de0b6b3a7640000612da4565b600d55600e5550565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aba90612d59565b6008805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610b748785612dc3565b610b7e9190612dc3565b610b889190612dc3565b610b929190612dc3565b600c805461ffff191661ffff929092169190911790555050505050565b6005546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610aba90612d59565b600b805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610c458785612dc3565b610c4f9190612dc3565b610c599190612dc3565b610c639190612dc3565b600c60066101000a81548161ffff021916908361ffff1602179055505050505050565b600033610c94858285611982565b610c9f858585611a0e565b506001949350505050565b6005546001600160a01b03163314610cd45760405162461bcd60e51b8152600401610aba90612d59565b600a805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610d408785612dc3565b610d4a9190612dc3565b610d549190612dc3565b610d5e9190612dc3565b600c60046101000a81548161ffff021916908361ffff1602179055505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a869082908690610dbb908790612de9565b61185e565b6005546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610aba90612d59565b6009805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610e568785612dc3565b610e609190612dc3565b610e6a9190612dc3565b610e749190612dc3565b600c60026101000a81548161ffff021916908361ffff1602179055505050505050565b6005546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610aba90612d59565b610ed381670de0b6b3a7640000612da4565b60155550565b6005546001600160a01b03163314610f035760405162461bcd60e51b8152600401610aba90612d59565b6006546001600160a01b0390811690821603610f745760405162461bcd60e51b815260206004820152602a60248201527f546f6b656e3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610aba565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612e01565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612e01565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610aba90612d59565b61117e6000612044565b565b6005546001600160a01b031633146111aa5760405162461bcd60e51b8152600401610aba90612d59565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601980548416918516919091179055601a80549092169216919091179055565b6005546001600160a01b031633146112335760405162461bcd60e51b8152600401610aba90612d59565b6011805460ff19166001179055565b6060600480546109f590612d1f565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610aba90612d59565b6007546001600160a01b03908116908316036113145760405162461bcd60e51b815260206004820152604c60248201527f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a401610aba565b61131e8282612096565b5050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aba565b610c9f828686840361185e565b600033610a86818585611a0e565b6005546001600160a01b031633146113ec5760405162461bcd60e51b8152600401610aba90612d59565b6103e8811161142b5760405162461bcd60e51b815260206004820152600b60248201526a1b9bc81c9d59c81c1d5b1b60aa1b6044820152606401610aba565b61143d81670de0b6b3a7640000612da4565b60105550565b6005546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610aba90612d59565b61147f81670de0b6b3a7640000612da4565b60145550565b6005546001600160a01b031633146114af5760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115385760405162461bcd60e51b8152600401610aba90612d59565b60005b828110156115a95781601b600086868581811061155a5761155a612e1e565b905060200201602081019061156f9190612b7d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a181612e34565b91505061153b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516115dd93929190612e4d565b60405180910390a1505050565b6005546001600160a01b031633146116145760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0381166116795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61168281612044565b50565b6005546001600160a01b031633146116af5760405162461bcd60e51b8152600401610aba90612d59565b306001600160a01b038216036116f15760405162461bcd60e51b81526020600482015260076024820152664e6f207275677360c81b6044820152606401610aba565b6001600160a01b038116611738576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561131e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a59190612ea6565b9050816001600160a01b031663a9059cbb6117c86005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612ebf565b50505050565b600061184b8284612da4565b9392505050565b600061184b8284612edc565b6001600160a01b0383166118c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6001600160a01b0382166119215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118395781811015611a015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aba565b611839848484840361185e565b6001600160a01b038316611a345760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b038216611a5a5760405162461bcd60e51b8152600401610aba90612f43565b80600003611a7357611a6e83836000612180565b505050565b3060009081526020819052604081205490506000600d548210158015611aa8575042600e54600f54611aa59190612de9565b11155b9050808015611ac15750600754600160a01b900460ff16155b8015611ae657506001600160a01b0385166000908152601d602052604090205460ff16155b8015611b0057506005546001600160a01b03868116911614155b8015611b1a57506005546001600160a01b03858116911614155b15611c0e576007805460ff60a01b1916600160a01b17905542600f55600d54600c5490925060009061ffff600160201b8204811691600160301b8104821691611b6c9162010000810482169116612dc3565b611b769190612dc3565b611b809190612dc3565b600b54600a5460095460085461ffff9485169550600094611bdb948794611bd5949183169390831692611bb69281169116612dc3565b611bc09190612dc3565b611bca9190612dc3565b879061ffff1661183f565b90611852565b9050611be6816122d4565b6000611bf2858361235b565b9050611bfd81612367565b50506007805460ff60a01b19169055505b6007546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611c5c57506001600160a01b0385166000908152601b602052604090205460ff165b15611c65575060005b6001600160a01b0385166000908152601c6020526040902054158015611ca457506001600160a01b0385166000908152601d602052604090205460ff16155b15611cc5576001600160a01b0385166000908152601c602052604090204290555b801561203157601454841115611d145760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610aba565b60115460ff16611d665760405162461bcd60e51b815260206004820152601a60248201527f74726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aba565b6001600160a01b0385166000908152601d602052604090205460ff16611df95760155484611da9876001600160a01b031660009081526020819052604090205490565b611db39190612de9565b1115611df95760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b6044820152606401610aba565b6001600160a01b0385166000908152601d602052604081205460ff1615611f67576001600160a01b0387166000908152601260205260409020546201518090611e429042612f86565b10611e61576001600160a01b0387166000908152601360205260408120555b6010546001600160a01b038816600090815260136020526040902054611e88908790612de9565b1115611ed65760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20616d6f756e742065786365656473206461696c79206c696d69746044820152606401610aba565b6001600160a01b038716600090815260136020526040902054611ef990866127f6565b6001600160a01b038816600090815260136020908152604080832093909355601281528282204290819055601c90915291902054611f3a9062093a80612de9565b1115611f545750600c54600160301b900461ffff16611fac565b50600c5462010000900461ffff16611fac565b6001600160a01b0387166000908152601d602052604090205460ff1615611fac5750600c546001600160a01b0386166000908152601c6020526040902042905561ffff165b6001600160a01b0387166000908152601d602052604090205460ff16158015611fee57506001600160a01b0386166000908152601d602052604090205460ff16155b156120035750600c54600160201b900461ffff165b60006120156103e8611bd5888561183f565b9050612021868261235b565b955061202e883083612180565b50505b61203c868686612180565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff90911615150361212c5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610aba565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166121a65760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b0382166121cc5760405162461bcd60e51b8152600401610aba90612f43565b6001600160a01b038316600090815260208190526040902054818110156122445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aba565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061227b908490612de9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122c791815260200190565b60405180910390a3611839565b60006122e1826002611852565b905060006122ef838361235b565b9050476122fb83612802565b6000612307478361235b565b90506123138382612954565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600061184b8284612f86565b4761237182612802565b600061237d478361235b565b600b54600a5460095460085493945060009361ffff6201000094859004811694938490048116936123b5938190048216920416612dc3565b6123bf9190612dc3565b6123c99190612dc3565b600b54600a5460095460085461ffff9485169550600094600160201b9485900481169493849004811693612404938190048216920416612dc3565b61240e9190612dc3565b6124189190612dc3565b600b54600a5460095460085461ffff9485169550600094600160401b9485900481169493849004811693612453938190048216920416612dc3565b61245d9190612dc3565b6124679190612dc3565b600b54600a5460095460085461ffff9485169550600094600160301b94859004811694938490048116936124a2938190048216920416612dc3565b6124ac9190612dc3565b6124b69190612dc3565b61ffff169050600081836124ca8688612de9565b6124d49190612de9565b6124de9190612de9565b905060006124f082611bd5898961183f565b9050600061250283611bd58a8961183f565b9050600061251484611bd58b8861183f565b9050600061252685611bd58c8a61183f565b6016546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146125d1576040519150601f19603f3d011682016040523d82523d6000602084013e6125d6565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612683576040519150601f19603f3d011682016040523d82523d6000602084013e612688565b606091505b50509050836126e55760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b826127325760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f20206465762077616c6c6574206661696c656400006044820152606401610aba565b8161278b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220746f202073616c61726965732077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b806127e45760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220746f2020696e737572616e63652077616c6c65742066616044820152631a5b195960e21b6064820152608401610aba565b50505050505050505050505050505050565b600061184b8284612de9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061283757612837612e1e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612e01565b816001815181106128c7576128c7612e1e565b6001600160a01b0392831660209182029290920101526006546128ed913091168461185e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612926908590600090869030904290600401612f9d565b600060405180830381600087803b15801561294057600080fd5b505af115801561203c573d6000803e3d6000fd5b60065461296c9030906001600160a01b03168461185e565b600654601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129dc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a01919061300e565b5050505050565b600060208083528351808285015260005b81811015612a3557858101830151858201604001528201612a19565b81811115612a47576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461168257600080fd5b60008060408385031215612a8557600080fd5b8235612a9081612a5d565b946020939093013593505050565b60008060408385031215612ab157600080fd5b50508035926020909101359150565b803561ffff81168114612ad257600080fd5b919050565b600080600080600060a08688031215612aef57600080fd5b612af886612ac0565b9450612b0660208701612ac0565b9350612b1460408701612ac0565b9250612b2260608701612ac0565b9150612b3060808701612ac0565b90509295509295909350565b600080600060608486031215612b5157600080fd5b8335612b5c81612a5d565b92506020840135612b6c81612a5d565b929592945050506040919091013590565b600060208284031215612b8f57600080fd5b813561184b81612a5d565b600060208284031215612bac57600080fd5b5035919050565b600080600080600060a08688031215612bcb57600080fd5b8535612bd681612a5d565b94506020860135612be681612a5d565b93506040860135612bf681612a5d565b92506060860135612c0681612a5d565b91506080860135612c1681612a5d565b809150509295509295909350565b801515811461168257600080fd5b60008060408385031215612c4557600080fd5b8235612c5081612a5d565b91506020830135612c6081612c24565b809150509250929050565b600080600060408486031215612c8057600080fd5b833567ffffffffffffffff80821115612c9857600080fd5b818601915086601f830112612cac57600080fd5b813581811115612cbb57600080fd5b8760208260051b8501011115612cd057600080fd5b60209283019550935050840135612ce681612c24565b809150509250925092565b60008060408385031215612d0457600080fd5b8235612d0f81612a5d565b91506020830135612c6081612a5d565b600181811c90821680612d3357607f821691505b602082108103612d5357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612dbe57612dbe612d8e565b500290565b600061ffff808316818516808303821115612de057612de0612d8e565b01949350505050565b60008219821115612dfc57612dfc612d8e565b500190565b600060208284031215612e1357600080fd5b815161184b81612a5d565b634e487b7160e01b600052603260045260246000fd5b600060018201612e4657612e46612d8e565b5060010190565b6040808252810183905260008460608301825b86811015612e90578235612e7381612a5d565b6001600160a01b0316825260209283019290910190600101612e60565b5080925050508215156020830152949350505050565b600060208284031215612eb857600080fd5b5051919050565b600060208284031215612ed157600080fd5b815161184b81612c24565b600082612ef957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612f9857612f98612d8e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fed5784516001600160a01b031683529383019391830191600101612fc8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561302357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202b729ff8f092437327a76dd69151b10625daedc495f663a8b8ddee761855f08064736f6c634300080f0033

Deployed Bytecode Sourcemap

36395:17951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37159:28;;;;;;;;;;-1:-1:-1;37159:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;37159:28:0;;;;;;;;23005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25356:201::-;;;;;;;;;;-1:-1:-1;25356:201:0;;;;;:::i;:::-;;:::i;37847:110::-;;;;;;;;;;-1:-1:-1;37847:110:0;;;;-1:-1:-1;;;;;37847:110:0;;;;;;-1:-1:-1;;;;;1444:32:1;;;1426:51;;1414:2;1399:18;37847:110:0;1264:219:1;42384:150:0;;;;;;;;;;-1:-1:-1;42384:150:0;;;;;:::i;:::-;;:::i;:::-;;37500:105;;;;;;;;;;-1:-1:-1;37500:105:0;;;;-1:-1:-1;;;;;37500:105:0;;;44303:452;;;;;;;;;;-1:-1:-1;44303:452:0;;;;;:::i;:::-;;:::i;36469:41::-;;;;;;;;;;-1:-1:-1;36469:41:0;;;;-1:-1:-1;;;;;36469:41:0;;;24125:108;;;;;;;;;;-1:-1:-1;24213:12:0;;24125:108;;;2764:25:1;;;2752:2;2737:18;24125:108:0;2618:177:1;43808:487:0;;;;;;;;;;-1:-1:-1;43808:487:0;;;;;:::i;:::-;;:::i;26137:295::-;;;;;;;;;;-1:-1:-1;26137:295:0;;;;;:::i;:::-;;:::i;36778:18::-;;;;;;;;;;-1:-1:-1;36778:18:0;;;;;;;;;;;;;;;-1:-1:-1;;;36778:18:0;;;;;-1:-1:-1;;;36778:18:0;;;;;-1:-1:-1;;;36778:18:0;;;;;;;;;;3520:6:1;3553:15;;;3535:34;;3605:15;;;3600:2;3585:18;;3578:43;3657:15;;;3637:18;;;3630:43;;;;3709:15;;3704:2;3689:18;;3682:43;3762:15;;;3756:3;3741:19;;3734:44;3497:3;3482:19;36778:18:0;3261:523:1;23967:93:0;;;;;;;;;;-1:-1:-1;23967:93:0;;24050:2;3931:36:1;;3919:2;3904:18;23967:93:0;3789:184:1;44763:487:0;;;;;;;;;;-1:-1:-1;44763:487:0;;;;;:::i;:::-;;:::i;26841:240::-;;;;;;;;;;-1:-1:-1;26841:240:0;;;;;:::i;:::-;;:::i;38078:46::-;;;;;;;;;;-1:-1:-1;38078:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;36754:17;;;;;;;;;;-1:-1:-1;36754:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;36754:17:0;;;;;-1:-1:-1;;;36754:17:0;;;;;-1:-1:-1;;;36754:17:0;;;;;;36517:28;;;;;;;;;;-1:-1:-1;36517:28:0;;;;-1:-1:-1;;;;;36517:28:0;;;43341:459;;;;;;;;;;-1:-1:-1;43341:459:0;;;;;:::i;:::-;;:::i;46371:126::-;;;;;;;;;;-1:-1:-1;46371:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46461:28:0;46437:4;46461:28;;;:19;:28;;;;;;;;;46371:126;37612:110;;;;;;;;;;-1:-1:-1;37612:110:0;;;;-1:-1:-1;;;;;37612:110:0;;;42542:107;;;;;;;;;;-1:-1:-1;42542:107:0;;;;;:::i;:::-;;:::i;41215:536::-;;;;;;;;;;-1:-1:-1;41215:536:0;;;;;:::i;:::-;;:::i;37729:111::-;;;;;;;;;;-1:-1:-1;37729:111:0;;;;-1:-1:-1;;;;;37729:111:0;;;37127:25;;;;;;;;;;;;;;;;24296:127;;;;;;;;;;-1:-1:-1;24296:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;24397:18:0;24370:7;24397:18;;;;;;;;;;;;24296:127;35513:103;;;;;;;;;;;;;:::i;42923:410::-;;;;;;;;;;-1:-1:-1;42923:410:0;;;;;:::i;:::-;;:::i;41759:87::-;;;;;;;;;;;;;:::i;36832:22::-;;;;;;;;;;-1:-1:-1;36832:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;36832:22:0;;;;;-1:-1:-1;;;36832:22:0;;;;;-1:-1:-1;;;36832:22:0;;;;;;37310:26;;;;;;;;;;;;;;;;34862:87;;;;;;;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;34935:6:0;34862:87;;23224:104;;;;;;;;;;;;;:::i;37382:111::-;;;;;;;;;;-1:-1:-1;37382:111:0;;;;-1:-1:-1;;;;;37382:111:0;;;45258:323;;;;;;;;;;-1:-1:-1;45258:323:0;;;;;:::i;:::-;;:::i;27584:438::-;;;;;;;;;;-1:-1:-1;27584:438:0;;;;;:::i;:::-;;:::i;24629:193::-;;;;;;;;;;-1:-1:-1;24629:193:0;;;;;:::i;:::-;;:::i;37343:30::-;;;;;;;;;;;;;;;;36803:22;;;;;;;;;;-1:-1:-1;36803:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;36803:22:0;;;;;-1:-1:-1;;;36803:22:0;;;;;-1:-1:-1;;;36803:22:0;;;;;;42764:151;;;;;;;;;;-1:-1:-1;42764:151:0;;;;;:::i;:::-;;:::i;38131:57::-;;;;;;;;;;-1:-1:-1;38131:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42657:99;;;;;;;;;;-1:-1:-1;42657:99:0;;;;;:::i;:::-;;:::i;41854:184::-;;;;;;;;;;-1:-1:-1;41854:184:0;;;;;:::i;:::-;;:::i;42046:330::-;;;;;;;;;;-1:-1:-1;42046:330:0;;;;;:::i;:::-;;:::i;37048:35::-;;;;;;;;;;;;;;;;24885:151;;;;;;;;;;-1:-1:-1;24885:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;25001:18:0;;;24974:7;25001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24885:151;37008:33;;;;;;;;;;;;;;;;35771:201;;;;;;;;;;-1:-1:-1;35771:201:0;;;;;:::i;:::-;;:::i;45949:414::-;;;;;;;;;;-1:-1:-1;45949:414:0;;;;;:::i;:::-;;:::i;23005:100::-;23059:13;23092:5;23085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23005:100;:::o;25356:201::-;25439:4;20725:10;25495:32;20725:10;25511:7;25520:6;25495:8;:32::i;:::-;-1:-1:-1;25545:4:0;;25356:201;-1:-1:-1;;;25356:201:0:o;42384:150::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;;;;;;;;;42488:14:::1;:5:::0;42496:6:::1;42488:14;:::i;:::-;42467:18;:35:::0;42513:7:::1;:13:::0;-1:-1:-1;42384:150:0:o;44303:452::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;44487:6:::1;:29:::0;;::::1;44569:31:::0;;::::1;-1:-1:-1::0;;44527:31:0;;;-1:-1:-1;;;44487:29:0;;::::1;;-1:-1:-1::0;;44527:31:0;;;;;::::1;;;-1:-1:-1::0;;44611:19:0;;;;;-1:-1:-1;;;44611:19:0;;::::1;;;-1:-1:-1::0;;;;44641:31:0::1;-1:-1:-1::0;;;44641:31:0;;::::1;::::0;;;::::1;;::::0;;;44611:19;44569:31;44697:20:::1;44527:31:::0;44487:29;44697:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;44683:11;:64:::0;;-1:-1:-1;;44683:64:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;44303:452:0:o;43808:487::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43997:11:::1;:34:::0;;::::1;44089:36:::0;;::::1;-1:-1:-1::0;;44042:36:0;;;-1:-1:-1;;;43997:34:0;;::::1;;-1:-1:-1::0;;44042:36:0;;;;;::::1;;;-1:-1:-1::0;;44136:24:0;;;;;-1:-1:-1;;;44136:24:0;;::::1;;;-1:-1:-1::0;;;;44171:36:0::1;-1:-1:-1::0;;;44171:36:0;;::::1;::::0;;;::::1;;::::0;;;44136:24;44089:36;44237:20:::1;44042:36:::0;43997:34;44237:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;44218:16;;:69;;;;;;;;;;;;;;;;;;43808:487:::0;;;;;:::o;26137:295::-;26268:4;20725:10;26326:38;26342:4;20725:10;26357:6;26326:15;:38::i;:::-;26375:27;26385:4;26391:2;26395:6;26375:9;:27::i;:::-;-1:-1:-1;26420:4:0;;26137:295;-1:-1:-1;;;;26137:295:0:o;44763:487::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;44952:11:::1;:34:::0;;::::1;45044:36:::0;;::::1;-1:-1:-1::0;;44997:36:0;;;-1:-1:-1;;;44952:34:0;;::::1;;-1:-1:-1::0;;44997:36:0;;;;;::::1;;;-1:-1:-1::0;;45091:24:0;;;;;-1:-1:-1;;;45091:24:0;;::::1;;;-1:-1:-1::0;;;;45126:36:0::1;-1:-1:-1::0;;;45126:36:0;;::::1;::::0;;;::::1;;::::0;;;45091:24;45044:36;45192:20:::1;44997:36:::0;44952:34;45192:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;45173:16;;:69;;;;;;;;;;;;;;;;;;44763:487:::0;;;;;:::o;26841:240::-;20725:10;26929:4;27010:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;27010:27:0;;;;;;;;;;26929:4;;20725:10;26985:66;;20725:10;;27010:27;;:40;;27040:10;;27010:40;:::i;:::-;26985:8;:66::i;43341:459::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43526:7:::1;:30:::0;;::::1;43610:32:::0;;::::1;-1:-1:-1::0;;43567:32:0;;;-1:-1:-1;;;43526:30:0;;::::1;;-1:-1:-1::0;;43567:32:0;;;;;::::1;;;-1:-1:-1::0;;43653:20:0;;;;;-1:-1:-1;;;43653:20:0;;::::1;;;-1:-1:-1::0;;;;43684:32:0::1;-1:-1:-1::0;;;43684:32:0;;::::1;::::0;;;::::1;;::::0;;;43653:20;43610:32;43742:20:::1;43567:32:::0;43526:30;43742:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;43727:12;;:65;;;;;;;;;;;;;;;;;;43341:459:::0;;;;;:::o;42542:107::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42627:14:::1;:5:::0;42635:6:::1;42627:14;:::i;:::-;42609:15;:32:::0;-1:-1:-1;42542:107:0:o;41215:536::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;41338:15:::1;::::0;-1:-1:-1;;;;;41338:15:0;;::::1;41316:38:::0;;::::1;::::0;41294:130:::1;;;::::0;-1:-1:-1;;;41294:130:0;;8714:2:1;41294:130:0::1;::::0;::::1;8696:21:1::0;8753:2;8733:18;;;8726:30;8792:34;8772:18;;;8765:62;-1:-1:-1;;;8843:18:1;;;8836:40;8893:19;;41294:130:0::1;8512:406:1::0;41294:130:0::1;41482:15;::::0;41440:59:::1;::::0;-1:-1:-1;;;;;41482:15:0;;::::1;::::0;41440:59;::::1;::::0;::::1;::::0;41482:15:::1;::::0;41440:59:::1;41510:15;:48:::0;;-1:-1:-1;;;;;;41510:48:0::1;-1:-1:-1::0;;;;;41510:48:0;::::1;::::0;;::::1;::::0;;;41612:25:::1;::::0;;-1:-1:-1;;;41612:25:0;;;;-1:-1:-1;;41510:48:0;41612:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;41510:48;41612:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41594:69:0::1;;41672:4;41679:15;;;;;;;;;-1:-1:-1::0;;;;;41679:15:0::1;-1:-1:-1::0;;;;;41679:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41594:108;::::0;-1:-1:-1;;;;;;41594:108:0::1;::::0;;;;;;-1:-1:-1;;;;;9409:15:1;;;41594:108:0::1;::::0;::::1;9391:34:1::0;9461:15;;9441:18;;;9434:43;9326:18;;41594:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41713:13;:30:::0;;-1:-1:-1;;;;;;41713:30:0::1;-1:-1:-1::0;;;;;41713:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;41215:536:0:o;35513:103::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;35578:30:::1;35605:1;35578:18;:30::i;:::-;35513:103::o:0;42923:410::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43112:16:::1;:37:::0;;-1:-1:-1;;;;;;43112:37:0;;::::1;-1:-1:-1::0;;;;;43112:37:0;;::::1;;::::0;;;43160:10:::1;:25:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;43196:15:::1;:35:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;43242:16:::1;:37:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;43290:15:::1;:35:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42923:410::o;41759:87::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;41815:16:::1;:23:::0;;-1:-1:-1;;41815:23:0::1;41834:4;41815:23;::::0;;41759:87::o;23224:104::-;23280:13;23313:7;23306:14;;;;;:::i;45258:323::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;45402:13:::1;::::0;-1:-1:-1;;;;;45402:13:0;;::::1;45394:21:::0;;::::1;::::0;45372:147:::1;;;::::0;-1:-1:-1;;;45372:147:0;;9690:2:1;45372:147:0::1;::::0;::::1;9672:21:1::0;9729:2;9709:18;;;9702:30;9768:34;9748:18;;;9741:62;9839:34;9819:18;;;9812:62;-1:-1:-1;;;9890:19:1;;;9883:43;9943:19;;45372:147:0::1;9488:480:1::0;45372:147:0::1;45532:41;45561:4;45567:5;45532:28;:41::i;:::-;45258:323:::0;;:::o;27584:438::-;20725:10;27677:4;27760:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;27760:27:0;;;;;;;;;;27677:4;;20725:10;27806:35;;;;27798:85;;;;-1:-1:-1;;;27798:85:0;;10175:2:1;27798:85:0;;;10157:21:1;10214:2;10194:18;;;10187:30;10253:34;10233:18;;;10226:62;-1:-1:-1;;;10304:18:1;;;10297:35;10349:19;;27798:85:0;9973:401:1;27798:85:0;27919:60;27928:5;27935:7;27963:15;27944:16;:34;27919:8;:60::i;24629:193::-;24708:4;20725:10;24764:28;20725:10;24781:2;24785:6;24764:9;:28::i;42764:151::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42849:4:::1;42841:5;:12;42832:37;;;::::0;-1:-1:-1;;;42832:37:0;;10581:2:1;42832:37:0::1;::::0;::::1;10563:21:1::0;10620:2;10600:18;;;10593:30;-1:-1:-1;;;10639:18:1;;;10632:41;10690:18;;42832:37:0::1;10379:335:1::0;42832:37:0::1;42893:14;:5:::0;42901:6:::1;42893:14;:::i;:::-;42880:10;:27:::0;-1:-1:-1;42764:151:0:o;42657:99::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42734:14:::1;:5:::0;42742:6:::1;42734:14;:::i;:::-;42720:11;:28:::0;-1:-1:-1;42657:99:0:o;41854:184::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41939:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;41939:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41996:34;;154:41:1;;;41996:34:0::1;::::0;127:18:1;41996:34:0::1;;;;;;;41854:184:::0;;:::o;42046:330::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42189:9:::1;42184:116;42204:19:::0;;::::1;42184:116;;;42280:8;42245:19;:32;42265:8;;42274:1;42265:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42245:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42245:32:0;:43;;-1:-1:-1;;42245:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42225:3;::::1;::::0;::::1;:::i;:::-;;;;42184:116;;;;42317:51;42349:8;;42359;42317:51;;;;;;;;:::i;:::-;;;;;;;;42046:330:::0;;;:::o;35771:201::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35860:22:0;::::1;35852:73;;;::::0;-1:-1:-1;;;35852:73:0;;11992:2:1;35852:73:0::1;::::0;::::1;11974:21:1::0;12031:2;12011:18;;;12004:30;12070:34;12050:18;;;12043:62;-1:-1:-1;;;12121:18:1;;;12114:36;12167:19;;35852:73:0::1;11790:402:1::0;35852:73:0::1;35936:28;35955:8;35936:18;:28::i;:::-;35771:201:::0;:::o;45949:414::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;46047:4:::1;-1:-1:-1::0;;;;;46029:23:0;::::1;::::0;46021:43:::1;;;::::0;-1:-1:-1;;;46021:43:0;;12399:2:1;46021:43:0::1;::::0;::::1;12381:21:1::0;12438:1;12418:18;;;12411:29;-1:-1:-1;;;12456:18:1;;;12449:37;12503:18;;46021:43:0::1;12197:330:1::0;46021:43:0::1;-1:-1:-1::0;;;;;46079:22:0;::::1;46075:124;;34935:6:::0;;46118:48:::1;::::0;-1:-1:-1;;;;;34935:6:0;;;;46144:21:::1;46118:48:::0;::::1;;;::::0;::::1;::::0;;;46144:21;34935:6;46118:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;46075:124;46272:35;::::0;-1:-1:-1;;;46272:35:0;;46301:4:::1;46272:35;::::0;::::1;1426:51:1::0;46236:6:0;;46209:17:::1;::::0;-1:-1:-1;;;;;46272:20:0;::::1;::::0;::::1;::::0;1399:18:1;;46272:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46254:53;;46318:10;-1:-1:-1::0;;;;;46318:19:0::1;;46338:7;34935:6:::0;;-1:-1:-1;;;;;34935:6:0;;34862:87;46338:7:::1;46318:37;::::0;-1:-1:-1;;;;;;46318:37:0::1;::::0;;;;;;-1:-1:-1;;;;;12913:32:1;;;46318:37:0::1;::::0;::::1;12895:51:1::0;12962:18;;;12955:34;;;12868:18;;46318:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46010:353;;45949:414:::0;:::o;4551:98::-;4609:7;4636:5;4640:1;4636;:5;:::i;:::-;4629:12;4551:98;-1:-1:-1;;;4551:98:0:o;4950:::-;5008:7;5035:5;5039:1;5035;:5;:::i;31220:380::-;-1:-1:-1;;;;;31356:19:0;;31348:68;;;;-1:-1:-1;;;31348:68:0;;13674:2:1;31348:68:0;;;13656:21:1;13713:2;13693:18;;;13686:30;13752:34;13732:18;;;13725:62;-1:-1:-1;;;13803:18:1;;;13796:34;13847:19;;31348:68:0;13472:400:1;31348:68:0;-1:-1:-1;;;;;31435:21:0;;31427:68;;;;-1:-1:-1;;;31427:68:0;;14079:2:1;31427:68:0;;;14061:21:1;14118:2;14098:18;;;14091:30;14157:34;14137:18;;;14130:62;-1:-1:-1;;;14208:18:1;;;14201:32;14250:19;;31427:68:0;13877:398:1;31427:68:0;-1:-1:-1;;;;;31508:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31560:32;;2764:25:1;;;31560:32:0;;2737:18:1;31560:32:0;;;;;;;31220:380;;;:::o;31887:453::-;-1:-1:-1;;;;;25001:18:0;;;32022:24;25001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;32089:37:0;;32085:248;;32171:6;32151:16;:26;;32143:68;;;;-1:-1:-1;;;32143:68:0;;14482:2:1;32143:68:0;;;14464:21:1;14521:2;14501:18;;;14494:30;14560:31;14540:18;;;14533:59;14609:18;;32143:68:0;14280:353:1;32143:68:0;32255:51;32264:5;32271:7;32299:6;32280:16;:25;32255:8;:51::i;46505:3650::-;-1:-1:-1;;;;;46637:18:0;;46629:68;;;;-1:-1:-1;;;46629:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46716:16:0;;46708:64;;;;-1:-1:-1;;;46708:64:0;;;;;;;:::i;:::-;46789:6;46799:1;46789:11;46785:93;;46817:28;46833:4;46839:2;46843:1;46817:15;:28::i;:::-;46505:3650;;;:::o;46785:93::-;46939:4;46890:28;24397:18;;;;;;;;;;;46890:55;;46958:12;46998:18;;46974:20;:42;;46973:104;;;;;47061:15;47050:7;;47035:12;;:22;;;;:::i;:::-;:41;;46973:104;46958:119;;47108:7;:33;;;;-1:-1:-1;47133:8:0;;-1:-1:-1;;;47133:8:0;;;;47132:9;47108:33;:82;;;;-1:-1:-1;;;;;;47159:31:0;;;;;;:25;:31;;;;;;;;47158:32;47108:82;:114;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;47207:15:0;;;34935:6;;47207:15;;47108:114;:144;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;47239:13:0;;;34935:6;;47239:13;;47108:144;47090:984;;;47279:8;:15;;-1:-1:-1;;;;47279:15:0;-1:-1:-1;;;47279:15:0;;;47324;47309:12;:30;47379:18;;47532:16;;47379:18;;-1:-1:-1;47279:15:0;;47532:16;-1:-1:-1;;;47532:16:0;;;;;-1:-1:-1;;;47496:16:0;;;;;47433:43;;47464:12;;;;;;47433:11;:43;:::i;:::-;:79;;;;:::i;:::-;:115;;;;:::i;:::-;47798:11;:24;47746:11;:24;47698:7;:20;47651:6;:19;47414:134;;;;;-1:-1:-1;47565:18:0;;47586:287;;47414:134;;47586:255;;47798:24;;;;47746;;;;47651:67;;47698:20;;;47651:19;:67;:::i;:::-;:119;;;;:::i;:::-;:171;;;;:::i;:::-;47586:20;;:255;;:42;:255::i;:::-;:277;;:287::i;:::-;47565:308;;47888:26;47903:10;47888:14;:26::i;:::-;47931:17;47951:36;:20;47976:10;47951:24;:36::i;:::-;47931:56;;48002:27;48019:9;48002:16;:27::i;:::-;-1:-1:-1;;48046:8:0;:16;;-1:-1:-1;;;;48046:16:0;;;-1:-1:-1;47090:984:0;48102:8;;-1:-1:-1;;;;;48212:25:0;;48086:12;48212:25;;;:19;:25;;;;;;48102:8;-1:-1:-1;;;48102:8:0;;;;;48101:9;;48212:25;;:52;;-1:-1:-1;;;;;;48241:23:0;;;;;;:19;:23;;;;;;;;48212:52;48208:100;;;-1:-1:-1;48291:5:0;48208:100;-1:-1:-1;;;;;48324:15:0;;;;;;:11;:15;;;;;;:20;:54;;;;-1:-1:-1;;;;;;48349:29:0;;;;;;:25;:29;;;;;;;;48348:30;48324:54;48320:120;;;-1:-1:-1;;;;;48395:15:0;;;;;;:11;:15;;;;;48413;48395:33;;48320:120;48456:7;48452:1650;;;48498:11;;48488:6;:21;;48480:54;;;;-1:-1:-1;;;48480:54:0;;15650:2:1;48480:54:0;;;15632:21:1;15689:2;15669:18;;;15662:30;-1:-1:-1;;;15708:18:1;;;15701:50;15768:18;;48480:54:0;15448:344:1;48480:54:0;48557:16;;;;48549:55;;;;-1:-1:-1;;;48549:55:0;;15999:2:1;48549:55:0;;;15981:21:1;16038:2;16018:18;;;16011:30;16077:28;16057:18;;;16050:56;16123:18;;48549:55:0;15797:350:1;48549:55:0;-1:-1:-1;;;;;48626:29:0;;;;;;:25;:29;;;;;;;;48621:207;;48732:15;;48722:6;48706:13;48716:2;-1:-1:-1;;;;;24397:18:0;24370:7;24397:18;;;;;;;;;;;;24296:127;48706:13;:22;;;;:::i;:::-;:41;;48676:136;;;;-1:-1:-1;;;48676:136:0;;16354:2:1;48676:136:0;;;16336:21:1;16393:2;16373:18;;;16366:30;-1:-1:-1;;;16412:18:1;;;16405:51;16473:18;;48676:136:0;16152:345:1;48676:136:0;-1:-1:-1;;;;;48877:29:0;;48844:12;48877:29;;;:25;:29;;;;;;;;48873:849;;;-1:-1:-1;;;;;48949:18:0;;;;;;:12;:18;;;;;;48971:6;;48931:36;;:15;:36;:::i;:::-;:46;48927:121;;-1:-1:-1;;;;;49002:22:0;;49027:1;49002:22;;;:16;:22;;;;;:26;48927:121;49133:10;;-1:-1:-1;;;;;49098:22:0;;;;;;:16;:22;;;;;;:31;;49123:6;;49098:31;:::i;:::-;:45;;49068:151;;;;-1:-1:-1;;;49068:151:0;;16834:2:1;49068:151:0;;;16816:21:1;;;16853:18;;;16846:30;16912:34;16892:18;;;16885:62;16964:18;;49068:151:0;16632:356:1;49068:151:0;-1:-1:-1;;;;;49265:22:0;;;;;;:16;:22;;;;;;:34;;49292:6;49265:26;:34::i;:::-;-1:-1:-1;;;;;49240:22:0;;;;;;:16;:22;;;;;;;;:59;;;;49318:12;:18;;;;;49339:15;49318:36;;;;49379:11;:17;;;;;;;:26;;49399:6;49379:26;:::i;:::-;:44;49375:184;;;-1:-1:-1;49455:16:0;;-1:-1:-1;;;49455:16:0;;;;48873:849;;49375:184;-1:-1:-1;49527:12:0;;;;;;;48873:849;;;-1:-1:-1;;;;;49584:31:0;;;;;;:25;:31;;;;;;;;49580:142;;;-1:-1:-1;49643:11:0;;-1:-1:-1;;;;;49673:15:0;;49643:11;49673:15;;;:11;:15;;;;;49691;49673:33;;49643:11;;49580:142;-1:-1:-1;;;;;49761:31:0;;;;;;:25;:31;;;;;;;;49760:32;:83;;;;-1:-1:-1;;;;;;49814:29:0;;;;;;:25;:29;;;;;;;;49813:30;49760:83;49738:179;;;-1:-1:-1;49885:16:0;;-1:-1:-1;;;49885:16:0;;;;49738:179;49933:17;49953:26;49974:4;49953:16;:6;49964:4;49953:10;:16::i;:26::-;49933:46;-1:-1:-1;50005:21:0;:6;49933:46;50005:10;:21::i;:::-;49996:30;;50043:47;50059:4;50073;50080:9;50043:15;:47::i;:::-;48465:1637;;48452:1650;50114:33;50130:4;50136:2;50140:6;50114:15;:33::i;:::-;46618:3537;;;46505:3650;;;:::o;36132:191::-;36225:6;;;-1:-1:-1;;;;;36242:17:0;;;-1:-1:-1;;;;;;36242:17:0;;;;;;;36275:40;;36225:6;;;36242:17;36225:6;;36275:40;;36206:16;;36275:40;36195:128;36132:191;:::o;45589:352::-;-1:-1:-1;;;;;45694:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;45672:153;;;;-1:-1:-1;;;45672:153:0;;17195:2:1;45672:153:0;;;17177:21:1;17234:2;17214:18;;;17207:30;17273:34;17253:18;;;17246:62;17344:33;17324:18;;;17317:61;17395:19;;45672:153:0;16993:427:1;45672:153:0;-1:-1:-1;;;;;45836:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;45836:39:0;;;;;;;;;;45893:40;;45836:39;;:31;45893:40;;;45589:352;;:::o;28501:671::-;-1:-1:-1;;;;;28632:18:0;;28624:68;;;;-1:-1:-1;;;28624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28711:16:0;;28703:64;;;;-1:-1:-1;;;28703:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28853:15:0;;28831:19;28853:15;;;;;;;;;;;28887:21;;;;28879:72;;;;-1:-1:-1;;;28879:72:0;;17627:2:1;28879:72:0;;;17609:21:1;17666:2;17646:18;;;17639:30;17705:34;17685:18;;;17678:62;-1:-1:-1;;;17756:18:1;;;17749:36;17802:19;;28879:72:0;17425:402:1;28879:72:0;-1:-1:-1;;;;;28987:15:0;;;:9;:15;;;;;;;;;;;29005:20;;;28987:38;;29047:13;;;;;;;;:23;;29019:6;;28987:9;29047:23;;29019:6;;29047:23;:::i;:::-;;;;;;;;29103:2;-1:-1:-1;;;;;29088:26:0;29097:4;-1:-1:-1;;;;;29088:26:0;;29107:6;29088:26;;;;2764:25:1;;2752:2;2737:18;;2618:177;29088:26:0;;;;;;;;29127:37;46505:3650;52294:923;52404:12;52419:13;:6;52430:1;52419:10;:13::i;:::-;52404:28;-1:-1:-1;52443:17:0;52463:16;:6;52404:28;52463:10;:16::i;:::-;52443:36;-1:-1:-1;52782:21:0;52848:22;52865:4;52848:16;:22::i;:::-;53001:18;53022:41;:21;53048:14;53022:25;:41::i;:::-;53001:62;;53113:35;53126:9;53137:10;53113:12;:35::i;:::-;53166:43;;;18034:25:1;;;18090:2;18075:18;;18068:34;;;18118:18;;;18111:34;;;53166:43:0;;18022:2:1;18007:18;53166:43:0;;;;;;;52342:875;;;;52294:923;:::o;4194:98::-;4252:7;4279:5;4283:1;4279;:5;:::i;50163:2123::-;50249:21;50281:24;50298:6;50281:16;:24::i;:::-;50316:18;50337:41;:21;50363:14;50337:25;:41::i;:::-;50530:11;:24;50490:11;:24;50454:7;:20;50419:6;:19;50316:62;;-1:-1:-1;50391:25:0;;50530:24;;;;;;;;;50490;;;;;;;50419:55;;50454:20;;;;;;50419:19;;:55;:::i;:::-;:95;;;;:::i;:::-;:135;;;;:::i;:::-;50680:11;:18;50646:11;:18;50616:7;:14;50587:6;:13;50391:163;;;;;-1:-1:-1;50565:19:0;;-1:-1:-1;;;50680:18:0;;;;;;;50646;;;;;;;50587:43;;50616:14;;;;;;50587:13;;:43;:::i;:::-;:77;;;;:::i;:::-;:111;;;;:::i;:::-;50848:11;:24;50808:11;:24;50772:7;:20;50848:24;50737:19;50565:133;;;;;-1:-1:-1;50709:25:0;;-1:-1:-1;;;50848:24:0;;;;;;;50808;;;;;;;50737:55;;50772:20;;;;;;50737:19;;:55;:::i;:::-;:95;;;;:::i;:::-;:135;;;;:::i;:::-;51018:11;:23;50979:11;:23;50944:7;:19;50910:6;:18;50709:163;;;;;-1:-1:-1;50883:24:0;;-1:-1:-1;;;51018:23:0;;;;;;;50979;;;;;;;50910:53;;50944:19;;;;;;50910:18;;:53;:::i;:::-;:92;;;;:::i;:::-;:131;;;;:::i;:::-;50883:158;;;-1:-1:-1;51054:13:0;50883:158;51130:17;51070:44;51103:11;51070:17;:44;:::i;:::-;:77;;;;:::i;:::-;:109;;;;:::i;:::-;51054:125;-1:-1:-1;51192:22:0;51217:44;51054:125;51217:33;:10;51232:17;51217:14;:33::i;:44::-;51192:69;-1:-1:-1;51272:16:0;51291:38;51323:5;51291:27;:10;51306:11;51291:14;:27::i;:38::-;51272:57;-1:-1:-1;51340:21:0;51364:43;51401:5;51364:32;:10;51379:16;51364:14;:32::i;:43::-;51340:67;-1:-1:-1;51418:22:0;51443:44;51481:5;51443:33;:10;51458:17;51443:14;:33::i;:44::-;51723:16;;:49;;51418:69;;-1:-1:-1;51705:12:0;;-1:-1:-1;;;;;51723:16:0;;;;51752:14;;51705:12;51723:49;51705:12;51723:49;51752:14;51723:16;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51804:10:0;;:37;;51704:68;;-1:-1:-1;51785:13:0;;-1:-1:-1;;;;;51804:10:0;;;;51827:8;;51785:13;51804:37;51785:13;51804:37;51827:8;51804:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51873:15:0;;:47;;51784:57;;-1:-1:-1;51854:13:0;;-1:-1:-1;;;;;51873:15:0;;;;51901:13;;51854;51873:47;51854:13;51873:47;51901:13;51873:15;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51953:16:0;;:49;;51853:67;;-1:-1:-1;51934:13:0;;-1:-1:-1;;;;;51953:16:0;;;;51982:14;;51934:13;51953:49;51934:13;51953:49;51982:14;51953:16;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51933:69;;;52025:7;52017:55;;;;-1:-1:-1;;;52017:55:0;;18568:2:1;52017:55:0;;;18550:21:1;18607:2;18587:18;;;18580:30;18646:34;18626:18;;;18619:62;-1:-1:-1;;;18697:18:1;;;18690:33;18740:19;;52017:55:0;18366:399:1;52017:55:0;52091:8;52083:51;;;;-1:-1:-1;;;52083:51:0;;18972:2:1;52083:51:0;;;18954:21:1;19011:2;18991:18;;;18984:30;19050:32;19030:18;;;19023:60;19100:18;;52083:51:0;18770:354:1;52083:51:0;52154:8;52146:56;;;;-1:-1:-1;;;52146:56:0;;19331:2:1;52146:56:0;;;19313:21:1;19370:2;19350:18;;;19343:30;19409:34;19389:18;;;19382:62;-1:-1:-1;;;19460:18:1;;;19453:33;19503:19;;52146:56:0;19129:399:1;52146:56:0;52223:8;52215:57;;;;-1:-1:-1;;;52215:57:0;;19735:2:1;52215:57:0;;;19717:21:1;19774:2;19754:18;;;19747:30;19813:34;19793:18;;;19786:62;-1:-1:-1;;;19864:18:1;;;19857:34;19908:19;;52215:57:0;19533:400:1;52215:57:0;50213:2073;;;;;;;;;;;;;;;50163:2123;:::o;3813:98::-;3871:7;3898:5;3902:1;3898;:5;:::i;53225:589::-;53375:16;;;53389:1;53375:16;;;;;;;;53351:21;;53375:16;;;;;;;;;;-1:-1:-1;53375:16:0;53351:40;;53420:4;53402;53407:1;53402:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53402:23:0;;;:7;;;;;;;;;;:23;;;;53446:15;;:22;;;-1:-1:-1;;;53446:22:0;;;;:15;;;;;:20;;:22;;;;;53402:7;;53446:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53436:4;53441:1;53436:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53436:32:0;;;:7;;;;;;;;;:32;53513:15;;53481:62;;53498:4;;53513:15;53531:11;53481:8;:62::i;:::-;53582:15;;:224;;-1:-1:-1;;;53582:224:0;;-1:-1:-1;;;;;53582:15:0;;;;:66;;:224;;53663:11;;53582:15;;53733:4;;53760;;53780:15;;53582:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53822:521;54002:15;;53970:62;;53987:4;;-1:-1:-1;;;;;54002:15:0;54020:11;53970:8;:62::i;:::-;54075:15;;54279;;54075:260;;-1:-1:-1;;;54075:260:0;;54147:4;54075:260;;;21404:34:1;21454:18;;;21447:34;;;54075:15:0;21497:18:1;;;21490:34;;;21540:18;;;21533:34;-1:-1:-1;;;;;54279:15:0;;;21583:19:1;;;21576:44;54309:15:0;21636:19:1;;;21629:35;54075:15:0;;;:31;;54114:9;;21338:19:1;;54075:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;53822:521;;:::o;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1488:248::-;1556:6;1564;1617:2;1605:9;1596:7;1592:23;1588:32;1585:52;;;1633:1;1630;1623:12;1585:52;-1:-1:-1;;1656:23:1;;;1726:2;1711:18;;;1698:32;;-1:-1:-1;1488:248:1:o;1741:159::-;1808:20;;1868:6;1857:18;;1847:29;;1837:57;;1890:1;1887;1880:12;1837:57;1741:159;;;:::o;1905:474::-;1995:6;2003;2011;2019;2027;2080:3;2068:9;2059:7;2055:23;2051:33;2048:53;;;2097:1;2094;2087:12;2048:53;2120:28;2138:9;2120:28;:::i;:::-;2110:38;;2167:37;2200:2;2189:9;2185:18;2167:37;:::i;:::-;2157:47;;2223:37;2256:2;2245:9;2241:18;2223:37;:::i;:::-;2213:47;;2279:37;2312:2;2301:9;2297:18;2279:37;:::i;:::-;2269:47;;2335:38;2368:3;2357:9;2353:19;2335:38;:::i;:::-;2325:48;;1905:474;;;;;;;;:::o;2800:456::-;2877:6;2885;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;3001:9;2988:23;3020:31;3045:5;3020:31;:::i;:::-;3070:5;-1:-1:-1;3127:2:1;3112:18;;3099:32;3140:33;3099:32;3140:33;:::i;:::-;2800:456;;3192:7;;-1:-1:-1;;;3246:2:1;3231:18;;;;3218:32;;2800:456::o;3978:247::-;4037:6;4090:2;4078:9;4069:7;4065:23;4061:32;4058:52;;;4106:1;4103;4096:12;4058:52;4145:9;4132:23;4164:31;4189:5;4164:31;:::i;4438:180::-;4497:6;4550:2;4538:9;4529:7;4525:23;4521:32;4518:52;;;4566:1;4563;4556:12;4518:52;-1:-1:-1;4589:23:1;;4438:180;-1:-1:-1;4438:180:1:o;4623:813::-;4718:6;4726;4734;4742;4750;4803:3;4791:9;4782:7;4778:23;4774:33;4771:53;;;4820:1;4817;4810:12;4771:53;4859:9;4846:23;4878:31;4903:5;4878:31;:::i;:::-;4928:5;-1:-1:-1;4985:2:1;4970:18;;4957:32;4998:33;4957:32;4998:33;:::i;:::-;5050:7;-1:-1:-1;5109:2:1;5094:18;;5081:32;5122:33;5081:32;5122:33;:::i;:::-;5174:7;-1:-1:-1;5233:2:1;5218:18;;5205:32;5246:33;5205:32;5246:33;:::i;:::-;5298:7;-1:-1:-1;5357:3:1;5342:19;;5329:33;5371;5329;5371;:::i;:::-;5423:7;5413:17;;;4623:813;;;;;;;;:::o;5441:118::-;5527:5;5520:13;5513:21;5506:5;5503:32;5493:60;;5549:1;5546;5539:12;5564:382;5629:6;5637;5690:2;5678:9;5669:7;5665:23;5661:32;5658:52;;;5706:1;5703;5696:12;5658:52;5745:9;5732:23;5764:31;5789:5;5764:31;:::i;:::-;5814:5;-1:-1:-1;5871:2:1;5856:18;;5843:32;5884:30;5843:32;5884:30;:::i;:::-;5933:7;5923:17;;;5564:382;;;;;:::o;5951:750::-;6043:6;6051;6059;6112:2;6100:9;6091:7;6087:23;6083:32;6080:52;;;6128:1;6125;6118:12;6080:52;6168:9;6155:23;6197:18;6238:2;6230:6;6227:14;6224:34;;;6254:1;6251;6244:12;6224:34;6292:6;6281:9;6277:22;6267:32;;6337:7;6330:4;6326:2;6322:13;6318:27;6308:55;;6359:1;6356;6349:12;6308:55;6399:2;6386:16;6425:2;6417:6;6414:14;6411:34;;;6441:1;6438;6431:12;6411:34;6496:7;6489:4;6479:6;6476:1;6472:14;6468:2;6464:23;6460:34;6457:47;6454:67;;;6517:1;6514;6507:12;6454:67;6548:4;6540:13;;;;-1:-1:-1;6572:6:1;-1:-1:-1;;6613:20:1;;6600:34;6643:28;6600:34;6643:28;:::i;:::-;6690:5;6680:15;;;5951:750;;;;;:::o;6706:388::-;6774:6;6782;6835:2;6823:9;6814:7;6810:23;6806:32;6803:52;;;6851:1;6848;6841:12;6803:52;6890:9;6877:23;6909:31;6934:5;6909:31;:::i;:::-;6959:5;-1:-1:-1;7016:2:1;7001:18;;6988:32;7029:33;6988:32;7029:33;:::i;7099:380::-;7178:1;7174:12;;;;7221;;;7242:61;;7296:4;7288:6;7284:17;7274:27;;7242:61;7349:2;7341:6;7338:14;7318:18;7315:38;7312:161;;7395:10;7390:3;7386:20;7383:1;7376:31;7430:4;7427:1;7420:15;7458:4;7455:1;7448:15;7312:161;;7099:380;;;:::o;7484:356::-;7686:2;7668:21;;;7705:18;;;7698:30;7764:34;7759:2;7744:18;;7737:62;7831:2;7816:18;;7484:356::o;7845:127::-;7906:10;7901:3;7897:20;7894:1;7887:31;7937:4;7934:1;7927:15;7961:4;7958:1;7951:15;7977:168;8017:7;8083:1;8079;8075:6;8071:14;8068:1;8065:21;8060:1;8053:9;8046:17;8042:45;8039:71;;;8090:18;;:::i;:::-;-1:-1:-1;8130:9:1;;7977:168::o;8150:224::-;8189:3;8217:6;8250:2;8247:1;8243:10;8280:2;8277:1;8273:10;8311:3;8307:2;8303:12;8298:3;8295:21;8292:47;;;8319:18;;:::i;:::-;8355:13;;8150:224;-1:-1:-1;;;;8150:224:1:o;8379:128::-;8419:3;8450:1;8446:6;8443:1;8440:13;8437:39;;;8456:18;;:::i;:::-;-1:-1:-1;8492:9:1;;8379:128::o;8923:251::-;8993:6;9046:2;9034:9;9025:7;9021:23;9017:32;9014:52;;;9062:1;9059;9052:12;9014:52;9094:9;9088:16;9113:31;9138:5;9113:31;:::i;10719:127::-;10780:10;10775:3;10771:20;10768:1;10761:31;10811:4;10808:1;10801:15;10835:4;10832:1;10825:15;10851:135;10890:3;10911:17;;;10908:43;;10931:18;;:::i;:::-;-1:-1:-1;10978:1:1;10967:13;;10851:135::o;10991:794::-;11213:2;11225:21;;;11198:18;;11281:22;;;11165:4;11360:6;11334:2;11319:18;;11165:4;11394:304;11408:6;11405:1;11402:13;11394:304;;;11483:6;11470:20;11503:31;11528:5;11503:31;:::i;:::-;-1:-1:-1;;;;;11559:31:1;11547:44;;11614:4;11673:15;;;;11638:12;;;;11587:1;11423:9;11394:304;;;11398:3;11715;11707:11;;;;11770:6;11763:14;11756:22;11749:4;11738:9;11734:20;11727:52;10991:794;;;;;;:::o;12532:184::-;12602:6;12655:2;12643:9;12634:7;12630:23;12626:32;12623:52;;;12671:1;12668;12661:12;12623:52;-1:-1:-1;12694:16:1;;12532:184;-1:-1:-1;12532:184:1:o;13000:245::-;13067:6;13120:2;13108:9;13099:7;13095:23;13091:32;13088:52;;;13136:1;13133;13126:12;13088:52;13168:9;13162:16;13187:28;13209:5;13187:28;:::i;13250:217::-;13290:1;13316;13306:132;;13360:10;13355:3;13351:20;13348:1;13341:31;13395:4;13392:1;13385:15;13423:4;13420:1;13413:15;13306:132;-1:-1:-1;13452:9:1;;13250:217::o;14638:401::-;14840:2;14822:21;;;14879:2;14859:18;;;14852:30;14918:34;14913:2;14898:18;;14891:62;-1:-1:-1;;;14984:2:1;14969:18;;14962:35;15029:3;15014:19;;14638:401::o;15044:399::-;15246:2;15228:21;;;15285:2;15265:18;;;15258:30;15324:34;15319:2;15304:18;;15297:62;-1:-1:-1;;;15390:2:1;15375:18;;15368:33;15433:3;15418:19;;15044:399::o;16502:125::-;16542:4;16570:1;16567;16564:8;16561:34;;;16575:18;;:::i;:::-;-1:-1:-1;16612:9:1;;16502:125::o;20070:980::-;20332:4;20380:3;20369:9;20365:19;20411:6;20400:9;20393:25;20437:2;20475:6;20470:2;20459:9;20455:18;20448:34;20518:3;20513:2;20502:9;20498:18;20491:31;20542:6;20577;20571:13;20608:6;20600;20593:22;20646:3;20635:9;20631:19;20624:26;;20685:2;20677:6;20673:15;20659:29;;20706:1;20716:195;20730:6;20727:1;20724:13;20716:195;;;20795:13;;-1:-1:-1;;;;;20791:39:1;20779:52;;20886:15;;;;20851:12;;;;20827:1;20745:9;20716:195;;;-1:-1:-1;;;;;;;20967:32:1;;;;20962:2;20947:18;;20940:60;-1:-1:-1;;;21031:3:1;21016:19;21009:35;20928:3;20070:980;-1:-1:-1;;;20070:980:1:o;21675:306::-;21763:6;21771;21779;21832:2;21820:9;21811:7;21807:23;21803:32;21800:52;;;21848:1;21845;21838:12;21800:52;21877:9;21871:16;21861:26;;21927:2;21916:9;21912:18;21906:25;21896:35;;21971:2;21960:9;21956:18;21950:25;21940:35;;21675:306;;;;;:::o

Swarm Source

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