ETH Price: $3,469.06 (+0.15%)

Token

IslandInu (ISLAINU)
 

Overview

Max Total Supply

100,000,000,000 ISLAINU

Holders

596

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
325.692258168 ISLAINU

Value
$0.00
0x9428a3c2C8E67f7197E2726A6F08fA5e25A6EdfA
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:
IslandInu

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-25
*/

// SPDX-License-Identifier: MIT
// @dev Telegram: defi_guru
pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    /**
     * @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 sub(a, b, 'SafeMath: subtraction overflow');
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, 'SafeMath: multiplication overflow');

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, 'SafeMath: modulo by zero');
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;

        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}('');
        require(success, 'Address: unable to send value, recipient may have reverted');
    }

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, 'Address: insufficient balance for call');
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), 'Address: call to non-contract');

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
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() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

pragma solidity ^0.6.0;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() public {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    modifier isHuman() {
        require(tx.origin == msg.sender, 'sorry humans only');
        _;
    }
}

pragma solidity ^0.6.0;

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            'TransferHelper::transferFrom: transferFrom failed'
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
}

interface IPinkAntiBot {
  function setTokenOwner(address owner) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external;
}

interface ITopHolderRewardDistributor {
    function depositReward(uint256 amount) external;
    function onTransfer(address sender, address recipient, uint256 amount) external;
}

contract IslandInu is Context, IERC20, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using Address for address;
    using TransferHelper for address;

    string private _name = 'IslandInu';
    string private _symbol = 'ISLAINU';
    uint8 private _decimals = 9;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _tokenBalance;
    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 100_000_000_000e9;
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) public isTaxless;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;

    uint256 public _feeDecimal = 2;
    // index 0 = buy fee, index 1 = sell fee, index 2 = p2p fee
    uint256[] public _taxFee;
    uint256[] public _teamFee;
    uint256[] public _marketingFee;

    uint256 internal _feeTotal;
    uint256 internal _marketingFeeCollected;
    uint256 internal _teamFeeCollected;

    bool public isFeeActive = false; // should be true
    bool private inSwap;
    bool public swapEnabled = true;

    uint256 public maxTxAmount = _tokenTotal.mul(5).div(1000); // 0.5%
    uint256 public minTokensBeforeSwap = 1_000_000e9;

    address public marketingWallet;
    address public teamWallet;

    IUniswapV2Router02 public router;
    address public pair;

    event SwapUpdated(bool enabled);
    event Swap(uint256 swaped, uint256 recieved);

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

    constructor(address _router,address _owner,address _marketingWallet, address _teamWallet) public {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        router = _uniswapV2Router;
        marketingWallet = _marketingWallet;
        teamWallet = _teamWallet;
        
        isTaxless[_owner] = true;
        isTaxless[teamWallet] = true;
        isTaxless[marketingWallet] = true;
        isTaxless[address(this)] = true;

        excludeAccount(address(pair));
        excludeAccount(address(this));
        excludeAccount(address(marketingWallet));
        excludeAccount(address(teamWallet));
        excludeAccount(address(address(0)));
        excludeAccount(address(address(0x000000000000000000000000000000000000dEaD)));

        _reflectionBalance[_owner] = _reflectionTotal;
        emit Transfer(address(0),_owner, _tokenTotal);

        _taxFee.push(200);
        _taxFee.push(200);
        _taxFee.push(200);

        _teamFee.push(200);
        _teamFee.push(200);
        _teamFee.push(200);

        _marketingFee.push(200);
        _marketingFee.push(200);
        _marketingFee.push(200);

        transferOwnership(_owner);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tokenTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tokenBalance[account];
        return tokenFromReflection(_reflectionBalance[account]);
    }

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

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

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

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

        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount exceeds allowance')
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, 'ERC20: decreased allowance below zero')
        );
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tokenAmount) public view returns (uint256) {
        require(tokenAmount <= _tokenTotal, 'Amount must be less than supply');
        return tokenAmount.mul(_getReflectionRate());
    }

    function tokenFromReflection(uint256 reflectionAmount) public view returns (uint256) {
        require(reflectionAmount <= _reflectionTotal, 'Amount must be less than total reflections');
        uint256 currentRate = _getReflectionRate();
        return reflectionAmount.div(currentRate);
    }

    function excludeAccount(address account) public onlyOwner {
        require(account != address(router), 'ERC20: We can not exclude Uniswap router.');
        require(!_isExcluded[account], 'ERC20: Account is already excluded');
        if (_reflectionBalance[account] > 0) {
            _tokenBalance[account] = tokenFromReflection(_reflectionBalance[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner {
        require(_isExcluded[account], 'ERC20: Account is already included');
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tokenBalance[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), 'ERC20: approve from the zero address');
        require(spender != address(0), 'ERC20: approve to the zero address');

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

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

        require(isTaxless[sender] || isTaxless[recipient] || amount <= maxTxAmount, 'Max Transfer Limit Exceeds!');

        if (swapEnabled && !inSwap && sender != pair) {
            swap();
        }

        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();

        if (isFeeActive && !isTaxless[sender] && !isTaxless[recipient] && !inSwap) {
            transferAmount = collectFee(sender, amount, rate, recipient == pair, sender != pair && recipient != pair);
        }

        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));
        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);
        }

        emit Transfer(sender, recipient, transferAmount);
    }

    function calculateFee(uint256 feeIndex, uint256 amount) internal returns(uint256, uint256) {
        uint256 taxFee = amount.mul(_taxFee[feeIndex]).div(10**(_feeDecimal + 2));
        uint256 marketingFee = amount.mul(_marketingFee[feeIndex]).div(10**(_feeDecimal + 2));
        uint256 teamFee = amount.mul(_teamFee[feeIndex]).div(10**(_feeDecimal + 2));
        
        _marketingFeeCollected = _marketingFeeCollected.add(marketingFee);
        _teamFeeCollected = _teamFeeCollected.add(teamFee);
        return (taxFee, marketingFee.add(teamFee));
    }

    function collectFee(
        address account,
        uint256 amount,
        uint256 rate,
        bool sell,
        bool p2p
    ) private returns (uint256) {
        uint256 transferAmount = amount;

        (uint256 taxFee, uint256 otherFee) = calculateFee(p2p ? 2 : sell ? 1 : 0, amount);
        if(otherFee != 0) 
        {
            transferAmount = transferAmount.sub(otherFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(otherFee.mul(rate));
            if (_isExcluded[address(this)]) {
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(otherFee);
            }
            emit Transfer(account, address(this), otherFee);
        }
        if(taxFee != 0){
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
        }
        _feeTotal = _feeTotal.add(taxFee).add(otherFee);
        return transferAmount;
    }

    function swap() private lockTheSwap {
        uint256 totalFee = _teamFeeCollected.add(_marketingFeeCollected);

        if(minTokensBeforeSwap > totalFee) return;

        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = router.WETH();       

        uint256 balanceBefore = address(this).balance;

        _approve(address(this), address(router), totalFee);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            totalFee,
            0,
            sellPath,
            address(this),
            block.timestamp
        );

        uint256 amountFee = address(this).balance.sub(balanceBefore);
        
        uint256 amountMarketing = amountFee.mul(_marketingFeeCollected).div(totalFee);
        if(amountMarketing > 0) payable(marketingWallet).transfer(amountMarketing);

        uint256 amountTeam = address(this).balance;
        if(amountTeam > 0) payable(marketingWallet).transfer(address(this).balance);
        
        _marketingFeeCollected = 0;
        _teamFeeCollected = 0;

        emit Swap(totalFee, amountFee);
    }

    function _getReflectionRate() private view returns (uint256) {
        uint256 reflectionSupply = _reflectionTotal;
        uint256 tokenSupply = _tokenTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectionBalance[_excluded[i]] > reflectionSupply || _tokenBalance[_excluded[i]] > tokenSupply)
                return _reflectionTotal.div(_tokenTotal);
            reflectionSupply = reflectionSupply.sub(_reflectionBalance[_excluded[i]]);
            tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]);
        }
        if (reflectionSupply < _reflectionTotal.div(_tokenTotal)) return _reflectionTotal.div(_tokenTotal);
        return reflectionSupply.div(tokenSupply);
    }

    function setPairRouterRewardToken(address _pair, IUniswapV2Router02 _router) external onlyOwner {
        pair = _pair;
        router = _router;
    }

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

    function setSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
        SwapUpdated(enabled);
    }

    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }

    function setTaxFee(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _taxFee[0] = buy;
        _taxFee[1] = sell;
        _taxFee[2] = p2p;
    }


    function setTeamFee(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _teamFee[0] = buy;
        _teamFee[1] = sell;
        _teamFee[2] = p2p;
    }

    function setMarketingFee(uint256 buy, uint256 sell, uint256 p2p) external onlyOwner {
        _marketingFee[0] = buy;
        _marketingFee[1] = sell;
        _marketingFee[2] = p2p;
    }

    function setMarketingWallet(address wallet) external onlyOwner {
        marketingWallet = wallet;
    }

    function setTeamWallet(address wallet)  external onlyOwner {
        teamWallet = wallet;
    }

    function setMaxTxAmount(uint256 percentage) external onlyOwner {
        maxTxAmount = _tokenTotal.mul(percentage).div(10000);
    }

    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swaped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"recieved","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTaxless","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"contract IUniswapV2Router02","name":"_router","type":"address"}],"name":"setPairRouterRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"},{"internalType":"uint256","name":"p2p","type":"uint256"}],"name":"setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600981526020017f49736c616e64496e75000000000000000000000000000000000000000000000081525060029080519060200190620000519291906200161e565b506040518060400160405280600781526020017f49534c41494e5500000000000000000000000000000000000000000000000000815250600390805190602001906200009f9291906200161e565b506009600460006101000a81548160ff021916908360ff16021790555068056bc75e2d6310000060085560085460001981620000d757fe5b06600019036009556002600d556000601460006101000a81548160ff0219169083151502179055506001601460026101000a81548160ff021916908315150217905550620001526103e86200013e600560085462000a0360201b62002eb71790919060201c565b62000a8e60201b62002f3d1790919060201c565b60155566038d7ea4c680006016553480156200016d57600080fd5b506040516200615e3803806200615e833981810160405260808110156200019357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050506000620001d462000ae060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555060008490508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c557600080fd5b505afa158015620002da573d6000803e3d6000fd5b505050506040513d6020811015620002f157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036557600080fd5b505afa1580156200037a573d6000803e3d6000fd5b505050506040513d60208110156200039157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200040c57600080fd5b505af115801562000421573d6000803e3d6000fd5b505050506040513d60208110156200043857600080fd5b8101908080519060200190929190505050601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000723601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000ae860201b60201c565b620007343062000ae860201b60201c565b62000767601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000ae860201b60201c565b6200079a601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000ae860201b60201c565b620007ac600062000ae860201b60201c565b620007bf61dead62000ae860201b60201c565b600954600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a3600e60c89080600181540180825580915050600190039060005260206000200160009091909190915055600e60c89080600181540180825580915050600190039060005260206000200160009091909190915055600e60c89080600181540180825580915050600190039060005260206000200160009091909190915055600f60c89080600181540180825580915050600190039060005260206000200160009091909190915055600f60c89080600181540180825580915050600190039060005260206000200160009091909190915055600f60c89080600181540180825580915050600190039060005260206000200160009091909190915055601060c89080600181540180825580915050600190039060005260206000200160009091909190915055601060c89080600181540180825580915050600190039060005260206000200160009091909190915055601060c89080600181540180825580915050600190039060005260206000200160009091909190915055620009f88462000ea260201b60201c565b5050505050620016c4565b60008083141562000a18576000905062000a88565b600082840290508284828162000a2a57fe5b041462000a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620061146021913960400191505060405180910390fd5b809150505b92915050565b600062000ad883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620010b860201b60201c565b905092915050565b600033905090565b62000af862000ae060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000bb9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180620061356029913960400191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620060a26022913960400191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000de45762000da0600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200118360201b60201c565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b62000eb262000ae060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000f73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620060ee6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808311829062001168576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200112c5780820151818401526020810190506200110f565b50505050905090810190601f1680156200115a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200117557fe5b049050809150509392505050565b6000600954821115620011e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620060c4602a913960400191505060405180910390fd5b6000620011f46200121860201b60201c565b905062001210818462000a8e60201b62002f3d1790919060201c565b915050919050565b60008060095490506000600854905060005b600c8054905081101562001497578260056000600c84815481106200124b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200133457508160066000600c8481548110620012cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562001363576200135860085460095462000a8e60201b62002f3d1790919060201c565b935050505062001505565b620013f460056000600c84815481106200137957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200150860201b62002f871790919060201c565b92506200148760066000600c84815481106200140c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836200150860201b62002f871790919060201c565b915080806001019150506200122a565b50620014b660085460095462000a8e60201b62002f3d1790919060201c565b821015620014e657620014dc60085460095462000a8e60201b62002f3d1790919060201c565b9250505062001505565b62001500818362000a8e60201b62002f3d1790919060201c565b925050505b90565b60006200155283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200155a60201b60201c565b905092915050565b60008383111582906200160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620015cf578082015181840152602081019050620015b2565b50505050905090810190601f168015620015fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200166157805160ff191683800117855562001692565b8280016001018555821562001692579182015b828111156200169157825182559160200191906001019062001674565b5b509050620016a19190620016a5565b5090565b5b80821115620016c0576000816000905550600101620016a6565b5090565b6149ce80620016d46000396000f3fe6080604052600436106102605760003560e01c80638c0b5e2211610144578063cba0e996116100b6578063ec28438a1161007a578063ec28438a14610e14578063f2cc0c1814610e4f578063f2fde38b14610ea0578063f84354f114610ef1578063f887ea4014610f42578063fbf63fc214610f8357610267565b8063cba0e99614610c93578063dd62ed3e14610cfa578063e01af92c14610d7f578063e43504da14610dbc578063e5d41c6b14610de957610267565b8063a457c2d711610108578063a457c2d714610a7d578063a5ae2d2f14610aee578063a8aa1b3114610b55578063a9059cbb14610b96578063a918299c14610c07578063b7bfff6514610c5657610267565b80638c0b5e22146108e35780638da5cb5b1461090e57806391cc19c21461094f57806394169e0d1461099e57806395d89b41146109ed57610267565b8063324c3454116101dd57806359927044116101a157806359927044146107675780635d098b38146107a85780636ddd1713146107f957806370a0823114610826578063715018a61461088b57806375f0a874146108a257610267565b8063324c3454146105c0578063395093511461060f578063455fdd781461068057806347f2dc5b146106cf57806348a464731461072c57610267565b806318160ddd1161022457806318160ddd1461045c57806319db457d1461048757806323b872dd146104b25780632d83811914610543578063313ce5671461059257610267565b806306fdde031461026c578063095ea7b3146102fc5780631185c1d51461036d5780631392c086146103bc5780631525ff7d1461040b57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610ff4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611096565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b506103a66004803603602081101561039057600080fd5b81019080803590602001909291905050506110b4565b6040518082815260200191505060405180910390f35b3480156103c857600080fd5b506103f5600480360360208110156103df57600080fd5b81019080803590602001909291905050506110d5565b6040518082815260200191505060405180910390f35b34801561041757600080fd5b5061045a6004803603602081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611170565b005b34801561046857600080fd5b5061047161127c565b6040518082815260200191505060405180910390f35b34801561049357600080fd5b5061049c611286565b6040518082815260200191505060405180910390f35b3480156104be57600080fd5b5061052b600480360360608110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061128c565b60405180821515815260200191505060405180910390f35b34801561054f57600080fd5b5061057c6004803603602081101561056657600080fd5b8101908080359060200190929190505050611365565b6040518082815260200191505060405180910390f35b34801561059e57600080fd5b506105a76113e9565b604051808260ff16815260200191505060405180910390f35b3480156105cc57600080fd5b5061060d600480360360608110156105e357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611400565b005b34801561061b57600080fd5b506106686004803603604081101561063257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611524565b60405180821515815260200191505060405180910390f35b34801561068c57600080fd5b506106b9600480360360208110156106a357600080fd5b81019080803590602001909291905050506115d7565b6040518082815260200191505060405180910390f35b3480156106db57600080fd5b5061072a600480360360408110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506115f8565b005b34801561073857600080fd5b506107656004803603602081101561074f57600080fd5b810190808035906020019092919050505061171b565b005b34801561077357600080fd5b5061077c6117ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107f7600480360360208110156107cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611813565b005b34801561080557600080fd5b5061080e61191f565b60405180821515815260200191505060405180910390f35b34801561083257600080fd5b506108756004803603602081101561084957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611932565b6040518082815260200191505060405180910390f35b34801561089757600080fd5b506108a0611a1d565b005b3480156108ae57600080fd5b506108b7611ba3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108ef57600080fd5b506108f8611bc9565b6040518082815260200191505060405180910390f35b34801561091a57600080fd5b50610923611bcf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095b57600080fd5b506109886004803603602081101561097257600080fd5b8101908080359060200190929190505050611bf8565b6040518082815260200191505060405180910390f35b3480156109aa57600080fd5b506109eb600480360360608110156109c157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c19565b005b3480156109f957600080fd5b50610a02611d3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a42578082015181840152602081019050610a27565b50505050905090810190601f168015610a6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a8957600080fd5b50610ad660048036036040811015610aa057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ddf565b60405180821515815260200191505060405180910390f35b348015610afa57600080fd5b50610b3d60048036036020811015610b1157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eac565b60405180821515815260200191505060405180910390f35b348015610b6157600080fd5b50610b6a611ecc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba257600080fd5b50610bef60048036036040811015610bb957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ef2565b60405180821515815260200191505060405180910390f35b348015610c1357600080fd5b50610c5460048036036060811015610c2a57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611f10565b005b348015610c6257600080fd5b50610c9160048036036020811015610c7957600080fd5b81019080803515159060200190929190505050612034565b005b348015610c9f57600080fd5b50610ce260048036036020811015610cb657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612119565b60405180821515815260200191505060405180910390f35b348015610d0657600080fd5b50610d6960048036036040811015610d1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061216f565b6040518082815260200191505060405180910390f35b348015610d8b57600080fd5b50610dba60048036036020811015610da257600080fd5b810190808035151590602001909291905050506121f6565b005b348015610dc857600080fd5b50610dd1612314565b60405180821515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe612327565b6040518082815260200191505060405180910390f35b348015610e2057600080fd5b50610e4d60048036036020811015610e3757600080fd5b810190808035906020019092919050505061232d565b005b348015610e5b57600080fd5b50610e9e60048036036020811015610e7257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612427565b005b348015610eac57600080fd5b50610eef60048036036020811015610ec357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cb565b005b348015610efd57600080fd5b50610f4060048036036020811015610f1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d6565b005b348015610f4e57600080fd5b50610f57612d43565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f8f57600080fd5b50610ff260048036036040811015610fa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d69565b005b606060028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561108c5780601f106110615761010080835404028352916020019161108c565b820191906000526020600020905b81548152906001019060200180831161106f57829003601f168201915b5050505050905090565b60006110aa6110a3612fd1565b8484612fd9565b6001905092915050565b600e81815481106110c157fe5b906000526020600020016000915090505481565b600060085482111561114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b61116961115a6131d0565b83612eb790919063ffffffff16565b9050919050565b611178612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b600d5481565b600061129984848461348b565b61135a846112a5612fd1565b6113558560405180606001604052806028815260200161488f60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061130b612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d219092919063ffffffff16565b612fd9565b600190509392505050565b60006009548211156113c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806147fc602a913960400191505060405180910390fd5b60006113cc6131d0565b90506113e18184612f3d90919063ffffffff16565b915050919050565b6000600460009054906101000a900460ff16905090565b611408612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82600e6000815481106114d757fe5b906000526020600020018190555081600e6001815481106114f457fe5b906000526020600020018190555080600e60028154811061151157fe5b9060005260206000200181905550505050565b60006115cd611531612fd1565b846115c88560076000611542612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b612fd9565b6001905092915050565b600f81815481106115e457fe5b906000526020600020016000915090505481565b611600612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611723612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61181b612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460029054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119cd57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a18565b611a15600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611365565b90505b919050565b611a25612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60108181548110611c0557fe5b906000526020600020016000915090505481565b611c21612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82600f600081548110611cf057fe5b906000526020600020018190555081600f600181548110611d0d57fe5b906000526020600020018190555080600f600281548110611d2a57fe5b9060005260206000200181905550505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dd55780601f10611daa57610100808354040283529160200191611dd5565b820191906000526020600020905b815481529060010190602001808311611db857829003601f168201915b5050505050905090565b6000611ea2611dec612fd1565b84611e9d856040518060600160405280602581526020016149746025913960076000611e16612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d219092919063ffffffff16565b612fd9565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f06611eff612fd1565b848461348b565b6001905092915050565b611f18612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b826010600081548110611fe757fe5b906000526020600020018190555081601060018154811061200457fe5b906000526020600020018190555080601060028154811061202157fe5b9060005260206000200181905550505050565b61203c612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121fe612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460026101000a81548160ff0219169083151502179055507fd2b6af97bbcf94796ee3844c1f0948ba30b3f2d496875e5e1587309eb210aac58160405180821515815260200191505060405180910390a150565b601460009054906101000a900460ff1681565b60165481565b612335612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61241e61271061241083600854612eb790919063ffffffff16565b612f3d90919063ffffffff16565b60158190555050565b61242f612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148e06029913960400191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147da6022913960400191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561270d576126c9600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611365565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127d3612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148266026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129de612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149526022913960400191505060405180910390fd5b60005b600c80549050811015612d3f578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110612b7457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d3257600c6001600c805490500381548110612bd057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110612c0857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c805480612cf857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612d3f565b8080600101915050612b43565b5050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d71612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080831415612eca5760009050612f37565b6000828402905082848281612edb57fe5b0414612f32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061486e6021913960400191505060405180910390fd5b809150505b92915050565b6000612f7f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e69565b905092915050565b6000612fc983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d21565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061492e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061484c6022913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008060095490506000600854905060005b600c80549050811015613431578260056000600c848154811061320157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806132e857508160066000600c848154811061328057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561330e57613304600854600954612f3d90919063ffffffff16565b9350505050613488565b61339760056000600c848154811061332257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8790919063ffffffff16565b925061342260066000600c84815481106133ad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8790919063ffffffff16565b915080806001019150506131e2565b50613449600854600954612f3d90919063ffffffff16565b82101561347057613467600854600954612f3d90919063ffffffff16565b92505050613488565b6134838183612f3d90919063ffffffff16565b925050505b90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149096025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147b76023913960400191505060405180910390fd5b600081116135f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148b76029913960400191505060405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136915750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061369e57506015548111155b613710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4d6178205472616e73666572204c696d6974204578636565647321000000000081525060200191505060405180910390fd5b601460029054906101000a900460ff1680156137395750601460019054906101000a900460ff16155b80156137935750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156137a1576137a0613f2f565b5b600081905060006137b06131d0565b9050601460009054906101000a900460ff1680156138185750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561386e5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138875750601460019054906101000a900460ff16155b1561399757613994858483601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415801561398f5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6143ca565b91505b6139fb6139ad8285612eb790919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8790919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa2613a548284612eb790919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613bcd57613b8983600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8790919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cb557613c7182600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050565b6000838311158290613dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d93578082015181840152602081019050613d78565b50505050905090810190601f168015613dc05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083118290613f15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613eda578082015181840152602081019050613ebf565b50505050905090810190601f168015613f075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613f2157fe5b049050809150509392505050565b6001601460016101000a81548160ff0219169083151502179055506000613f63601254601354613de190919063ffffffff16565b9050806016541115613f7557506143ad565b6060600267ffffffffffffffff81118015613f8f57600080fd5b50604051908082528060200260200182016040528015613fbe5781602001602082028036833780820191505090505b5090503081600081518110613fcf57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d602081101561409b57600080fd5b8101908080519060200190929190505050816001815181106140b957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600047905061412530601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612fd9565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156141e95780820151818401526020810190506141ce565b505050509050019650505050505050600060405180830381600087803b15801561421257600080fd5b505af1158015614226573d6000803e3d6000fd5b50505050600061423f8247612f8790919063ffffffff16565b9050600061426a8561425c60125485612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905060008111156142df57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142dd573d6000803e3d6000fd5b505b6000479050600081111561435757601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015614355573d6000803e3d6000fd5b505b600060128190555060006013819055507f015fc8ee969fd902d9ebd12a31c54446400a2b512a405366fe14defd6081d2208684604051808381526020018281526020019250505060405180910390a15050505050505b6000601460016101000a81548160ff021916908315150217905550565b6000808590506000806143fb856143ef57866143e75760006143ea565b60015b6143f2565b60025b60ff1689614683565b91509150600081146146115761441a8184612f8790919063ffffffff16565b92506144806144328883612eb790919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145ab5761456781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600082146146475761464061462f8884612eb790919063ffffffff16565b600954612f8790919063ffffffff16565b6009819055505b61466e8161466084601154613de190919063ffffffff16565b613de190919063ffffffff16565b60118190555082935050505095945050505050565b60008060006146cc6002600d5401600a0a6146be600e88815481106146a457fe5b906000526020600020015487612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905060006147146002600d5401600a0a614706601089815481106146ec57fe5b906000526020600020015488612eb790919063ffffffff16565b612f3d90919063ffffffff16565b9050600061475c6002600d5401600a0a61474e600f8a8154811061473457fe5b906000526020600020015489612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905061477382601254613de190919063ffffffff16565b60128190555061478e81601354613de190919063ffffffff16565b601381905550826147a88284613de190919063ffffffff16565b94509450505050925092905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a204163636f756e7420697320616c7265616479206578636c75646564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a2057652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a204163636f756e7420697320616c726561647920696e636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fc532b10229451516854d3a124041a3d127bedd57f93a036d2a1623915ac220c64736f6c634300060c003345524332303a204163636f756e7420697320616c7265616479206578636c75646564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a2057652063616e206e6f74206578636c75646520556e697377617020726f757465722e0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002a0392aee7a2946ebb80d0a6dc91f2de3e26fd3d000000000000000000000000e93d971105741d60734c677b443048855cfdfcd10000000000000000000000001c829a7c59a87c05b05f058e87f9d130add3c505

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638c0b5e2211610144578063cba0e996116100b6578063ec28438a1161007a578063ec28438a14610e14578063f2cc0c1814610e4f578063f2fde38b14610ea0578063f84354f114610ef1578063f887ea4014610f42578063fbf63fc214610f8357610267565b8063cba0e99614610c93578063dd62ed3e14610cfa578063e01af92c14610d7f578063e43504da14610dbc578063e5d41c6b14610de957610267565b8063a457c2d711610108578063a457c2d714610a7d578063a5ae2d2f14610aee578063a8aa1b3114610b55578063a9059cbb14610b96578063a918299c14610c07578063b7bfff6514610c5657610267565b80638c0b5e22146108e35780638da5cb5b1461090e57806391cc19c21461094f57806394169e0d1461099e57806395d89b41146109ed57610267565b8063324c3454116101dd57806359927044116101a157806359927044146107675780635d098b38146107a85780636ddd1713146107f957806370a0823114610826578063715018a61461088b57806375f0a874146108a257610267565b8063324c3454146105c0578063395093511461060f578063455fdd781461068057806347f2dc5b146106cf57806348a464731461072c57610267565b806318160ddd1161022457806318160ddd1461045c57806319db457d1461048757806323b872dd146104b25780632d83811914610543578063313ce5671461059257610267565b806306fdde031461026c578063095ea7b3146102fc5780631185c1d51461036d5780631392c086146103bc5780631525ff7d1461040b57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610ff4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030857600080fd5b506103556004803603604081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611096565b60405180821515815260200191505060405180910390f35b34801561037957600080fd5b506103a66004803603602081101561039057600080fd5b81019080803590602001909291905050506110b4565b6040518082815260200191505060405180910390f35b3480156103c857600080fd5b506103f5600480360360208110156103df57600080fd5b81019080803590602001909291905050506110d5565b6040518082815260200191505060405180910390f35b34801561041757600080fd5b5061045a6004803603602081101561042e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611170565b005b34801561046857600080fd5b5061047161127c565b6040518082815260200191505060405180910390f35b34801561049357600080fd5b5061049c611286565b6040518082815260200191505060405180910390f35b3480156104be57600080fd5b5061052b600480360360608110156104d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061128c565b60405180821515815260200191505060405180910390f35b34801561054f57600080fd5b5061057c6004803603602081101561056657600080fd5b8101908080359060200190929190505050611365565b6040518082815260200191505060405180910390f35b34801561059e57600080fd5b506105a76113e9565b604051808260ff16815260200191505060405180910390f35b3480156105cc57600080fd5b5061060d600480360360608110156105e357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611400565b005b34801561061b57600080fd5b506106686004803603604081101561063257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611524565b60405180821515815260200191505060405180910390f35b34801561068c57600080fd5b506106b9600480360360208110156106a357600080fd5b81019080803590602001909291905050506115d7565b6040518082815260200191505060405180910390f35b3480156106db57600080fd5b5061072a600480360360408110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506115f8565b005b34801561073857600080fd5b506107656004803603602081101561074f57600080fd5b810190808035906020019092919050505061171b565b005b34801561077357600080fd5b5061077c6117ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107b457600080fd5b506107f7600480360360208110156107cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611813565b005b34801561080557600080fd5b5061080e61191f565b60405180821515815260200191505060405180910390f35b34801561083257600080fd5b506108756004803603602081101561084957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611932565b6040518082815260200191505060405180910390f35b34801561089757600080fd5b506108a0611a1d565b005b3480156108ae57600080fd5b506108b7611ba3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108ef57600080fd5b506108f8611bc9565b6040518082815260200191505060405180910390f35b34801561091a57600080fd5b50610923611bcf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561095b57600080fd5b506109886004803603602081101561097257600080fd5b8101908080359060200190929190505050611bf8565b6040518082815260200191505060405180910390f35b3480156109aa57600080fd5b506109eb600480360360608110156109c157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611c19565b005b3480156109f957600080fd5b50610a02611d3d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a42578082015181840152602081019050610a27565b50505050905090810190601f168015610a6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a8957600080fd5b50610ad660048036036040811015610aa057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ddf565b60405180821515815260200191505060405180910390f35b348015610afa57600080fd5b50610b3d60048036036020811015610b1157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611eac565b60405180821515815260200191505060405180910390f35b348015610b6157600080fd5b50610b6a611ecc565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba257600080fd5b50610bef60048036036040811015610bb957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ef2565b60405180821515815260200191505060405180910390f35b348015610c1357600080fd5b50610c5460048036036060811015610c2a57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611f10565b005b348015610c6257600080fd5b50610c9160048036036020811015610c7957600080fd5b81019080803515159060200190929190505050612034565b005b348015610c9f57600080fd5b50610ce260048036036020811015610cb657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612119565b60405180821515815260200191505060405180910390f35b348015610d0657600080fd5b50610d6960048036036040811015610d1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061216f565b6040518082815260200191505060405180910390f35b348015610d8b57600080fd5b50610dba60048036036020811015610da257600080fd5b810190808035151590602001909291905050506121f6565b005b348015610dc857600080fd5b50610dd1612314565b60405180821515815260200191505060405180910390f35b348015610df557600080fd5b50610dfe612327565b6040518082815260200191505060405180910390f35b348015610e2057600080fd5b50610e4d60048036036020811015610e3757600080fd5b810190808035906020019092919050505061232d565b005b348015610e5b57600080fd5b50610e9e60048036036020811015610e7257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612427565b005b348015610eac57600080fd5b50610eef60048036036020811015610ec357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cb565b005b348015610efd57600080fd5b50610f4060048036036020811015610f1457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d6565b005b348015610f4e57600080fd5b50610f57612d43565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f8f57600080fd5b50610ff260048036036040811015610fa657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d69565b005b606060028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561108c5780601f106110615761010080835404028352916020019161108c565b820191906000526020600020905b81548152906001019060200180831161106f57829003601f168201915b5050505050905090565b60006110aa6110a3612fd1565b8484612fd9565b6001905092915050565b600e81815481106110c157fe5b906000526020600020016000915090505481565b600060085482111561114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b61116961115a6131d0565b83612eb790919063ffffffff16565b9050919050565b611178612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b600d5481565b600061129984848461348b565b61135a846112a5612fd1565b6113558560405180606001604052806028815260200161488f60289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061130b612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d219092919063ffffffff16565b612fd9565b600190509392505050565b60006009548211156113c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806147fc602a913960400191505060405180910390fd5b60006113cc6131d0565b90506113e18184612f3d90919063ffffffff16565b915050919050565b6000600460009054906101000a900460ff16905090565b611408612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82600e6000815481106114d757fe5b906000526020600020018190555081600e6001815481106114f457fe5b906000526020600020018190555080600e60028154811061151157fe5b9060005260206000200181905550505050565b60006115cd611531612fd1565b846115c88560076000611542612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b612fd9565b6001905092915050565b600f81815481106115e457fe5b906000526020600020016000915090505481565b611600612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611723612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060168190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61181b612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460029054906101000a900460ff1681565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119cd57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a18565b611a15600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611365565b90505b919050565b611a25612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60108181548110611c0557fe5b906000526020600020016000915090505481565b611c21612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82600f600081548110611cf057fe5b906000526020600020018190555081600f600181548110611d0d57fe5b906000526020600020018190555080600f600281548110611d2a57fe5b9060005260206000200181905550505050565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dd55780601f10611daa57610100808354040283529160200191611dd5565b820191906000526020600020905b815481529060010190602001808311611db857829003601f168201915b5050505050905090565b6000611ea2611dec612fd1565b84611e9d856040518060600160405280602581526020016149746025913960076000611e16612fd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d219092919063ffffffff16565b612fd9565b6001905092915050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f06611eff612fd1565b848461348b565b6001905092915050565b611f18612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b826010600081548110611fe757fe5b906000526020600020018190555081601060018154811061200457fe5b906000526020600020018190555080601060028154811061202157fe5b9060005260206000200181905550505050565b61203c612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121fe612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460026101000a81548160ff0219169083151502179055507fd2b6af97bbcf94796ee3844c1f0948ba30b3f2d496875e5e1587309eb210aac58160405180821515815260200191505060405180910390a150565b601460009054906101000a900460ff1681565b60165481565b612335612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61241e61271061241083600854612eb790919063ffffffff16565b612f3d90919063ffffffff16565b60158190555050565b61242f612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148e06029913960400191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612639576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806147da6022913960400191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561270d576126c9600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611365565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127d3612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612893576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612919576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148266026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129de612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149526022913960400191505060405180910390fd5b60005b600c80549050811015612d3f578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110612b7457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d3257600c6001600c805490500381548110612bd057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110612c0857fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c805480612cf857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612d3f565b8080600101915050612b43565b5050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612d71612fd1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080831415612eca5760009050612f37565b6000828402905082848281612edb57fe5b0414612f32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061486e6021913960400191505060405180910390fd5b809150505b92915050565b6000612f7f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e69565b905092915050565b6000612fc983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d21565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061492e6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061484c6022913960400191505060405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008060095490506000600854905060005b600c80549050811015613431578260056000600c848154811061320157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806132e857508160066000600c848154811061328057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561330e57613304600854600954612f3d90919063ffffffff16565b9350505050613488565b61339760056000600c848154811061332257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8790919063ffffffff16565b925061342260066000600c84815481106133ad57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8790919063ffffffff16565b915080806001019150506131e2565b50613449600854600954612f3d90919063ffffffff16565b82101561347057613467600854600954612f3d90919063ffffffff16565b92505050613488565b6134838183612f3d90919063ffffffff16565b925050505b90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613511576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806149096025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613597576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806147b76023913960400191505060405180910390fd5b600081116135f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148b76029913960400191505060405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136915750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061369e57506015548111155b613710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4d6178205472616e73666572204c696d6974204578636565647321000000000081525060200191505060405180910390fd5b601460029054906101000a900460ff1680156137395750601460019054906101000a900460ff16155b80156137935750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156137a1576137a0613f2f565b5b600081905060006137b06131d0565b9050601460009054906101000a900460ff1680156138185750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561386e5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138875750601460019054906101000a900460ff16155b1561399757613994858483601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415801561398f5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6143ca565b91505b6139fb6139ad8285612eb790919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8790919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aa2613a548284612eb790919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613bcd57613b8983600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8790919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cb557613c7182600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050565b6000838311158290613dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d93578082015181840152602081019050613d78565b50505050905090810190601f168015613dc05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008083118290613f15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613eda578082015181840152602081019050613ebf565b50505050905090810190601f168015613f075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613f2157fe5b049050809150509392505050565b6001601460016101000a81548160ff0219169083151502179055506000613f63601254601354613de190919063ffffffff16565b9050806016541115613f7557506143ad565b6060600267ffffffffffffffff81118015613f8f57600080fd5b50604051908082528060200260200182016040528015613fbe5781602001602082028036833780820191505090505b5090503081600081518110613fcf57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561407157600080fd5b505afa158015614085573d6000803e3d6000fd5b505050506040513d602081101561409b57600080fd5b8101908080519060200190929190505050816001815181106140b957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600047905061412530601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612fd9565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156141e95780820151818401526020810190506141ce565b505050509050019650505050505050600060405180830381600087803b15801561421257600080fd5b505af1158015614226573d6000803e3d6000fd5b50505050600061423f8247612f8790919063ffffffff16565b9050600061426a8561425c60125485612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905060008111156142df57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156142dd573d6000803e3d6000fd5b505b6000479050600081111561435757601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015614355573d6000803e3d6000fd5b505b600060128190555060006013819055507f015fc8ee969fd902d9ebd12a31c54446400a2b512a405366fe14defd6081d2208684604051808381526020018281526020019250505060405180910390a15050505050505b6000601460016101000a81548160ff021916908315150217905550565b6000808590506000806143fb856143ef57866143e75760006143ea565b60015b6143f2565b60025b60ff1689614683565b91509150600081146146115761441a8184612f8790919063ffffffff16565b92506144806144328883612eb790919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145ab5761456781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613de190919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b600082146146475761464061462f8884612eb790919063ffffffff16565b600954612f8790919063ffffffff16565b6009819055505b61466e8161466084601154613de190919063ffffffff16565b613de190919063ffffffff16565b60118190555082935050505095945050505050565b60008060006146cc6002600d5401600a0a6146be600e88815481106146a457fe5b906000526020600020015487612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905060006147146002600d5401600a0a614706601089815481106146ec57fe5b906000526020600020015488612eb790919063ffffffff16565b612f3d90919063ffffffff16565b9050600061475c6002600d5401600a0a61474e600f8a8154811061473457fe5b906000526020600020015489612eb790919063ffffffff16565b612f3d90919063ffffffff16565b905061477382601254613de190919063ffffffff16565b60128190555061478e81601354613de190919063ffffffff16565b601381905550826147a88284613de190919063ffffffff16565b94509450505050925092905056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a204163636f756e7420697320616c7265616479206578636c75646564416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a2057652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a204163636f756e7420697320616c726561647920696e636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fc532b10229451516854d3a124041a3d127bedd57f93a036d2a1623915ac220c64736f6c634300060c0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002a0392aee7a2946ebb80d0a6dc91f2de3e26fd3d000000000000000000000000e93d971105741d60734c677b443048855cfdfcd10000000000000000000000001c829a7c59a87c05b05f058e87f9d130add3c505

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _owner (address): 0x2a0392Aee7A2946Ebb80d0A6dC91f2DE3E26Fd3d
Arg [2] : _marketingWallet (address): 0xe93D971105741D60734C677B443048855cfDfCD1
Arg [3] : _teamWallet (address): 0x1c829a7C59a87C05B05f058e87f9d130aDd3c505

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000002a0392aee7a2946ebb80d0a6dc91f2de3e26fd3d
Arg [2] : 000000000000000000000000e93d971105741d60734c677b443048855cfdfcd1
Arg [3] : 0000000000000000000000001c829a7c59a87c05b05f058e87f9d130add3c505


Deployed Bytecode Sourcemap

22404:13627:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25445:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26386:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23310:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27641:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35630:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25722:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23208:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26555:407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27873:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25631:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34958:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26970:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23341:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34602:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35877:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23821:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35516:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23616:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25829:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17119:148;;;;;;;;;;;;;:::i;:::-;;23784:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23655:57;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16477:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23373:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35136:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25536:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27196:319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23071:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23894:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26052:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;35316:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34859:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27523:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26235:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34723:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23534:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23727:48;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35735:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28180:455;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17422:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28643:489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23855:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34440:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25445:83;25482:13;25515:5;25508:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25445:83;:::o;26386:161::-;26461:4;26478:39;26487:12;:10;:12::i;:::-;26501:7;26510:6;26478:8;:39::i;:::-;26535:4;26528:11;;26386:161;;;;:::o;23310:24::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27641:224::-;27712:7;27755:11;;27740;:26;;27732:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27820:37;27836:20;:18;:20::i;:::-;27820:11;:15;;:37;;;;:::i;:::-;27813:44;;27641:224;;;:::o;35630:97::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35713:6:::1;35700:10;;:19;;;;;;;;;;;;;;;;;;35630:97:::0;:::o;25722:99::-;25775:7;25802:11;;25795:18;;25722:99;:::o;23208:30::-;;;;:::o;26555:407::-;26695:4;26712:36;26722:6;26730:9;26741:6;26712:9;:36::i;:::-;26761:171;26784:6;26805:12;:10;:12::i;:::-;26832:89;26870:6;26832:89;;;;;;;;;;;;;;;;;:11;:19;26844:6;26832:19;;;;;;;;;;;;;;;:33;26852:12;:10;:12::i;:::-;26832:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26761:8;:171::i;:::-;26950:4;26943:11;;26555:407;;;;;:::o;27873:299::-;27949:7;27997:16;;27977;:36;;27969:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28071:19;28093:20;:18;:20::i;:::-;28071:42;;28131:33;28152:11;28131:16;:20;;:33;;;;:::i;:::-;28124:40;;;27873:299;;;:::o;25631:83::-;25672:5;25697:9;;;;;;;;;;;25690:16;;25631:83;:::o;34958:168::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35060:3:::1;35047:7;35055:1;35047:10;;;;;;;;;;;;;;;:16;;;;35087:4;35074:7;35082:1;35074:10;;;;;;;;;;;;;;;:17;;;;35115:3;35102:7;35110:1;35102:10;;;;;;;;;;;;;;;:16;;;;34958:168:::0;;;:::o;26970:218::-;27058:4;27075:83;27084:12;:10;:12::i;:::-;27098:7;27107:50;27146:10;27107:11;:25;27119:12;:10;:12::i;:::-;27107:25;;;;;;;;;;;;;;;:34;27133:7;27107:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27075:8;:83::i;:::-;27176:4;27169:11;;26970:218;;;;:::o;23341:25::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34602:113::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34702:5:::1;34681:9;:18;34691:7;34681:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;34602:113:::0;;:::o;35877:114::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35977:6:::1;35955:19;:28;;;;35877:114:::0;:::o;23821:25::-;;;;;;;;;;;;;:::o;35516:106::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35608:6:::1;35590:15;;:24;;;;;;;;;;;;;;;;;;35516:106:::0;:::o;23616:30::-;;;;;;;;;;;;;:::o;25829:215::-;25895:7;25919:11;:20;25931:7;25919:20;;;;;;;;;;;;;;;;;;;;;;;;;25915:55;;;25948:13;:22;25962:7;25948:22;;;;;;;;;;;;;;;;25941:29;;;;25915:55;25988:48;26008:18;:27;26027:7;26008:27;;;;;;;;;;;;;;;;25988:19;:48::i;:::-;25981:55;;25829:215;;;;:::o;17119:148::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17226:1:::1;17189:40;;17210:6;::::0;::::1;;;;;;;;17189:40;;;;;;;;;;;;17257:1;17240:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17119:148::o:0;23784:30::-;;;;;;;;;;;;;:::o;23655:57::-;;;;:::o;16477:79::-;16515:7;16542:6;;;;;;;;;;;16535:13;;16477:79;:::o;23373:30::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35136:172::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35240:3:::1;35226:8;35235:1;35226:11;;;;;;;;;;;;;;;:17;;;;35268:4;35254:8;35263:1;35254:11;;;;;;;;;;;;;;;:18;;;;35297:3;35283:8;35292:1;35283:11;;;;;;;;;;;;;;;:17;;;;35136:172:::0;;;:::o;25536:87::-;25575:13;25608:7;25601:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25536:87;:::o;27196:319::-;27289:4;27306:179;27329:12;:10;:12::i;:::-;27356:7;27378:96;27417:15;27378:96;;;;;;;;;;;;;;;;;:11;:25;27390:12;:10;:12::i;:::-;27378:25;;;;;;;;;;;;;;;:34;27404:7;27378:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;27306:8;:179::i;:::-;27503:4;27496:11;;27196:319;;;;:::o;23071:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;23894:19::-;;;;;;;;;;;;;:::o;26052:175::-;26138:4;26155:42;26165:12;:10;:12::i;:::-;26179:9;26190:6;26155:9;:42::i;:::-;26215:4;26208:11;;26052:175;;;;:::o;35316:192::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35430:3:::1;35411:13;35425:1;35411:16;;;;;;;;;;;;;;;:22;;;;35463:4;35444:13;35458:1;35444:16;;;;;;;;;;;;;;;:23;;;;35497:3;35478:13;35492:1;35478:16;;;;;;;;;;;;;;;:22;;;;35316:192:::0;;;:::o;34859:91::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34937:5:::1;34923:11;;:19;;;;;;;;;;;;;;;;;;34859:91:::0;:::o;27523:110::-;27581:4;27605:11;:20;27617:7;27605:20;;;;;;;;;;;;;;;;;;;;;;;;;27598:27;;27523:110;;;:::o;26235:143::-;26316:7;26343:11;:18;26355:5;26343:18;;;;;;;;;;;;;;;:27;26362:7;26343:27;;;;;;;;;;;;;;;;26336:34;;26235:143;;;;:::o;34723:128::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34805:7:::1;34791:11;;:21;;;;;;;;;;;;;;;;;;34823:20;34835:7;34823:20;;;;;;;;;;;;;;;;;;;;34723:128:::0;:::o;23534:31::-;;;;;;;;;;;;;:::o;23727:48::-;;;;:::o;35735:134::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35823:38:::1;35855:5;35823:27;35839:10;35823:11;;:15;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;35809:11;:52;;;;35735:134:::0;:::o;28180:455::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28276:6:::1;;;;;;;;;;;28257:26;;:7;:26;;;;28249:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28349:11;:20;28361:7;28349:20;;;;;;;;;;;;;;;;;;;;;;;;;28348:21;28340:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28453:1;28423:18;:27;28442:7;28423:27;;;;;;;;;;;;;;;;:31;28419:137;;;28496:48;28516:18;:27;28535:7;28516:27;;;;;;;;;;;;;;;;28496:19;:48::i;:::-;28471:13;:22;28485:7;28471:22;;;;;;;;;;;;;;;:73;;;;28419:137;28589:4;28566:11;:20;28578:7;28566:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;28604:9;28619:7;28604:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28180:455:::0;:::o;17422:244::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17531:1:::1;17511:22;;:8;:22;;;;17503:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17621:8;17592:38;;17613:6;::::0;::::1;;;;;;;;17592:38;;;;;;;;;;;;17650:8;17641:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17422:244:::0;:::o;28643:489::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28722:11:::1;:20;28734:7;28722:20;;;;;;;;;;;;;;;;;;;;;;;;;28714:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28797:9;28792:333;28816:9;:16;;;;28812:1;:20;28792:333;;;28874:7;28858:23;;:9;28868:1;28858:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;28854:260;;;28917:9;28946:1;28927:9;:16;;;;:20;28917:31;;;;;;;;;;;;;;;;;;;;;;;;;28902:9;28912:1;28902:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28992:1;28967:13;:22;28981:7;28967:22;;;;;;;;;;;;;;;:26;;;;29035:5;29012:11;:20;29024:7;29012:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29059:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29093:5;;28854:260;28834:3;;;;;;;28792:333;;;;28643:489:::0;:::o;23855:32::-;;;;;;;;;;;;;:::o;34440:154::-;16699:12;:10;:12::i;:::-;16689:22;;:6;;;;;;;;;;:22;;;16681:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34554:5:::1;34547:4;;:12;;;;;;;;;;;;;;;;;;34579:7;34570:6;;:16;;;;;;;;;;;;;;;;;;34440:154:::0;;:::o;5961:471::-;6019:7;6269:1;6264;:6;6260:47;;;6294:1;6287:8;;;;6260:47;6319:9;6335:1;6331;:5;6319:17;;6364:1;6359;6355;:5;;;;;;:10;6347:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6423:1;6416:8;;;5961:471;;;;;:::o;6908:132::-;6966:7;6993:39;6997:1;7000;6993:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6986:46;;6908:132;;;;:::o;5037:136::-;5095:7;5122:43;5126:1;5129;5122:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5115:50;;5037:136;;;;:::o;632:106::-;685:15;720:10;713:17;;632:106;:::o;29140:371::-;29284:1;29267:19;;:5;:19;;;;29259:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29365:1;29346:21;;:7;:21;;;;29338:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29449:6;29419:11;:18;29431:5;29419:18;;;;;;;;;;;;;;;:27;29438:7;29419:27;;;;;;;;;;;;;;;:36;;;;29487:7;29471:32;;29480:5;29471:32;;;29496:6;29471:32;;;;;;;;;;;;;;;;;;29140:371;;;:::o;33701:731::-;33753:7;33773:24;33800:16;;33773:43;;33827:19;33849:11;;33827:33;;33876:9;33871:394;33895:9;:16;;;;33891:1;:20;33871:394;;;33972:16;33937:18;:32;33956:9;33966:1;33956:12;;;;;;;;;;;;;;;;;;;;;;;;;33937:32;;;;;;;;;;;;;;;;:51;:96;;;;34022:11;33992:13;:27;34006:9;34016:1;34006:12;;;;;;;;;;;;;;;;;;;;;;;;;33992:27;;;;;;;;;;;;;;;;:41;33937:96;33933:159;;;34059:33;34080:11;;34059:16;;:20;;:33;;;;:::i;:::-;34052:40;;;;;;;33933:159;34126:54;34147:18;:32;34166:9;34176:1;34166:12;;;;;;;;;;;;;;;;;;;;;;;;;34147:32;;;;;;;;;;;;;;;;34126:16;:20;;:54;;;;:::i;:::-;34107:73;;34209:44;34225:13;:27;34239:9;34249:1;34239:12;;;;;;;;;;;;;;;;;;;;;;;;;34225:27;;;;;;;;;;;;;;;;34209:11;:15;;:44;;;;:::i;:::-;34195:58;;33913:3;;;;;;;33871:394;;;;34298:33;34319:11;;34298:16;;:20;;:33;;;;:::i;:::-;34279:16;:52;34275:98;;;34340:33;34361:11;;34340:16;;:20;;:33;;;;:::i;:::-;34333:40;;;;;;34275:98;34391:33;34412:11;34391:16;:20;;:33;;;;:::i;:::-;34384:40;;;;33701:731;;:::o;29519:1490::-;29668:1;29650:20;;:6;:20;;;;29642:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29752:1;29731:23;;:9;:23;;;;29723:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29822:1;29813:6;:10;29805:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29890:9;:17;29900:6;29890:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;29911:9;:20;29921:9;29911:20;;;;;;;;;;;;;;;;;;;;;;;;;29890:41;:66;;;;29945:11;;29935:6;:21;;29890:66;29882:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30005:11;;;;;;;;;;;:22;;;;;30021:6;;;;;;;;;;;30020:7;30005:22;:40;;;;;30041:4;;;;;;;;;;;30031:14;;:6;:14;;;;30005:40;30001:79;;;30062:6;:4;:6::i;:::-;30001:79;30092:22;30117:6;30092:31;;30134:12;30149:20;:18;:20::i;:::-;30134:35;;30186:11;;;;;;;;;;;:33;;;;;30202:9;:17;30212:6;30202:17;;;;;;;;;;;;;;;;;;;;;;;;;30201:18;30186:33;:58;;;;;30224:9;:20;30234:9;30224:20;;;;;;;;;;;;;;;;;;;;;;;;;30223:21;30186:58;:69;;;;;30249:6;;;;;;;;;;;30248:7;30186:69;30182:207;;;30289:88;30300:6;30308;30316:4;30335;;;;;;;;;;;30322:17;;:9;:17;;;30351:4;;;;;;;;;;;30341:14;;:6;:14;;;;:35;;;;;30372:4;;;;;;;;;;;30359:17;;:9;:17;;;;30341:35;30289:10;:88::i;:::-;30272:105;;30182:207;30461:48;30492:16;30503:4;30492:6;:10;;:16;;;;:::i;:::-;30461:18;:26;30480:6;30461:26;;;;;;;;;;;;;;;;:30;;:48;;;;:::i;:::-;30432:18;:26;30451:6;30432:26;;;;;;;;;;;;;;;:77;;;;30552:59;30586:24;30605:4;30586:14;:18;;:24;;;;:::i;:::-;30552:18;:29;30571:9;30552:29;;;;;;;;;;;;;;;;:33;;:59;;;;:::i;:::-;30520:18;:29;30539:9;30520:29;;;;;;;;;;;;;;;:91;;;;30700:11;:19;30712:6;30700:19;;;;;;;;;;;;;;;;;;;;;;;;;30696:109;;;30760:33;30786:6;30760:13;:21;30774:6;30760:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;30736:13;:21;30750:6;30736:21;;;;;;;;;;;;;;;:57;;;;30696:109;30819:11;:22;30831:9;30819:22;;;;;;;;;;;;;;;;;;;;;;;;;30815:126;;;30885:44;30914:14;30885:13;:24;30899:9;30885:24;;;;;;;;;;;;;;;;:28;;:44;;;;:::i;:::-;30858:13;:24;30872:9;30858:24;;;;;;;;;;;;;;;:71;;;;30815:126;30975:9;30958:43;;30967:6;30958:43;;;30986:14;30958:43;;;;;;;;;;;;;;;;;;29519:1490;;;;;:::o;5476:226::-;5596:7;5629:1;5624;:6;;5632:12;5616:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5656:9;5672:1;5668;:5;5656:17;;5693:1;5686:8;;;5476:226;;;;;:::o;4573:181::-;4631:7;4651:9;4667:1;4663;:5;4651:17;;4692:1;4687;:6;;4679:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4745:1;4738:8;;;4573:181;;;;:::o;7536:312::-;7656:7;7688:1;7684;:5;7691:12;7676:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7715:9;7731:1;7727;:5;;;;;;7715:17;;7839:1;7832:8;;;7536:312;;;;;:::o;32541:1152::-;24056:4;24047:6;;:13;;;;;;;;;;;;;;;;;;32588:16:::1;32607:45;32629:22;;32607:17;;:21;;:45;;;;:::i;:::-;32588:64;;32690:8;32668:19;;:30;32665:42;;;32700:7;;;32665:42;32719:25;32761:1;32747:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32719:44;;32796:4;32774:8;32783:1;32774:11;;;;;;;;;;;;;:27;;;;;;;;;::::0;::::1;32826:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;32812:8;32821:1;32812:11;;;;;;;;;;;;;:27;;;;;;;;;::::0;::::1;32859:21;32883;32859:45;;32917:50;32934:4;32949:6;;;;;;;;;;;32958:8;32917;:50::i;:::-;32978:6;;;;;;;;;;;:57;;;33050:8;33073:1;33089:8;33120:4;33140:15;32978:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33179:17;33199:40;33225:13;33199:21;:25;;:40;;;;:::i;:::-;33179:60;;33260:23;33286:51;33328:8;33286:37;33300:22;;33286:9;:13;;:37;;;;:::i;:::-;:41;;:51;;;;:::i;:::-;33260:77;;33369:1;33351:15;:19;33348:74;;;33380:15;;;;;;;;;;;33372:33;;:50;33406:15;33372:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33348:74;33435:18;33456:21;33435:42;;33504:1;33491:10;:14;33488:75;;;33515:15;;;;;;;;;;;33507:33;;:56;33541:21;33507:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33488:75;33609:1;33584:22;:26;;;;33641:1;33621:17;:21;;;;33660:25;33665:8;33675:9;33660:25;;;;;;;;;;;;;;;;;;;;;;;;24071:1;;;;;;;24092:5:::0;24083:6;;:14;;;;;;;;;;;;;;;;;;32541:1152::o;31590:943::-;31747:7;31767:22;31792:6;31767:31;;31812:14;31828:16;31848:44;31861:3;:22;;31871:4;:12;;31882:1;31871:12;;;31878:1;31871:12;31861:22;;;31867:1;31861:22;31848:44;;31885:6;31848:12;:44::i;:::-;31811:81;;;;31918:1;31906:8;:13;31903:424;;31963:28;31982:8;31963:14;:18;;:28;;;;:::i;:::-;31946:45;;32042:57;32080:18;32093:4;32080:8;:12;;:18;;;;:::i;:::-;32042;:33;32069:4;32042:33;;;;;;;;;;;;;;;;:37;;:57;;;;:::i;:::-;32006:18;:33;32033:4;32006:33;;;;;;;;;;;;;;;:93;;;;32118:11;:26;32138:4;32118:26;;;;;;;;;;;;;;;;;;;;;;;;;32114:140;;;32196:42;32229:8;32196:13;:28;32218:4;32196:28;;;;;;;;;;;;;;;;:32;;:42;;;;:::i;:::-;32165:13;:28;32187:4;32165:28;;;;;;;;;;;;;;;:73;;;;32114:140;32299:4;32273:42;;32282:7;32273:42;;;32306:8;32273:42;;;;;;;;;;;;;;;;;;31903:424;32350:1;32340:6;:11;32337:99;;32386:38;32407:16;32418:4;32407:6;:10;;:16;;;;:::i;:::-;32386;;:20;;:38;;;;:::i;:::-;32367:16;:57;;;;32337:99;32458:35;32484:8;32458:21;32472:6;32458:9;;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;32446:9;:47;;;;32511:14;32504:21;;;;;31590:943;;;;;;;:::o;31017:565::-;31090:7;31099;31119:14;31136:56;31189:1;31175:11;;:15;31170:2;:21;31136:29;31147:7;31155:8;31147:17;;;;;;;;;;;;;;;;31136:6;:10;;:29;;;;:::i;:::-;:33;;:56;;;;:::i;:::-;31119:73;;31203:20;31226:62;31285:1;31271:11;;:15;31266:2;:21;31226:35;31237:13;31251:8;31237:23;;;;;;;;;;;;;;;;31226:6;:10;;:35;;;;:::i;:::-;:39;;:62;;;;:::i;:::-;31203:85;;31299:15;31317:57;31371:1;31357:11;;:15;31352:2;:21;31317:30;31328:8;31337;31328:18;;;;;;;;;;;;;;;;31317:6;:10;;:30;;;;:::i;:::-;:34;;:57;;;;:::i;:::-;31299:75;;31420:40;31447:12;31420:22;;:26;;:40;;;;:::i;:::-;31395:22;:65;;;;31491:30;31513:7;31491:17;;:21;;:30;;;;:::i;:::-;31471:17;:50;;;;31540:6;31548:25;31565:7;31548:12;:16;;:25;;;;:::i;:::-;31532:42;;;;;;;31017:565;;;;;:::o

Swarm Source

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