ETH Price: $3,232.61 (-1.70%)

Contract

0x3f022a29A2Db9dD25596f73cB33AeA35Bb5B957E
 

Overview

ETH Balance

0.000009353515631613 ETH

Eth Value

$0.03 (@ $3,232.61/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve203468992024-07-20 9:39:11116 days ago1721468351IN
0x3f022a29...5Bb5B957E
0 ETH0.000152143.26734864
Approve128769002021-07-22 15:01:091209 days ago1626966069IN
0x3f022a29...5Bb5B957E
0 ETH0.0008392618
Approve128768822021-07-22 14:56:551209 days ago1626965815IN
0x3f022a29...5Bb5B957E
0 ETH0.0007926417
Approve127725692021-07-06 7:26:541226 days ago1625556414IN
0x3f022a29...5Bb5B957E
0 ETH0.0008392618
Transfer127698962021-07-05 21:23:441226 days ago1625520224IN
0x3f022a29...5Bb5B957E
0 ETH0.002265975.5
Approve127692392021-07-05 18:54:061226 days ago1625511246IN
0x3f022a29...5Bb5B957E
0 ETH0.0004662610
Transfer127691282021-07-05 18:31:541226 days ago1625509914IN
0x3f022a29...5Bb5B957E
0 ETH0.0061799415
Approve127691242021-07-05 18:31:021226 days ago1625509862IN
0x3f022a29...5Bb5B957E
0 ETH0.000282086.05
Approve127690892021-07-05 18:24:361226 days ago1625509476IN
0x3f022a29...5Bb5B957E
0 ETH0.0005128811
Approve127690342021-07-05 18:12:351226 days ago1625508755IN
0x3f022a29...5Bb5B957E
0 ETH0.0005641712.1
Approve127690022021-07-05 18:06:221226 days ago1625508382IN
0x3f022a29...5Bb5B957E
0 ETH0.0008279617.7575
Transfer127689922021-07-05 18:04:541226 days ago1625508294IN
0x3f022a29...5Bb5B957E
0 ETH0.0098689323
Approve127689892021-07-05 18:04:091226 days ago1625508249IN
0x3f022a29...5Bb5B957E
0 ETH0.0010257722
Transfer127689882021-07-05 18:04:041226 days ago1625508244IN
0x3f022a29...5Bb5B957E
0 ETH0.0091801723
Approve127689652021-07-05 17:58:331226 days ago1625507913IN
0x3f022a29...5Bb5B957E
0 ETH0.0008279617.7575
Transfer127689632021-07-05 17:58:211226 days ago1625507901IN
0x3f022a29...5Bb5B957E
0 ETH0.0096689723
Approve127689442021-07-05 17:54:081226 days ago1625507648IN
0x3f022a29...5Bb5B957E
0 ETH0.0007926417
Approve127689422021-07-05 17:53:181226 days ago1625507598IN
0x3f022a29...5Bb5B957E
0 ETH0.0010257722
Approve127689362021-07-05 17:52:291226 days ago1625507549IN
0x3f022a29...5Bb5B957E
0 ETH0.0010257722
Transfer127689302021-07-05 17:50:391226 days ago1625507439IN
0x3f022a29...5Bb5B957E
0 ETH0.005739814
Renounce Ownersh...127689192021-07-05 17:48:411226 days ago1625507321IN
0x3f022a29...5Bb5B957E
0 ETH0.0001968214
Approve127689182021-07-05 17:48:301226 days ago1625507310IN
0x3f022a29...5Bb5B957E
0 ETH0.0006527614
Remove Sniper127689172021-07-05 17:48:261226 days ago1625507306IN
0x3f022a29...5Bb5B957E
0 ETH0.0002044914
Remove Sniper127689172021-07-05 17:48:261226 days ago1625507306IN
0x3f022a29...5Bb5B957E
0 ETH0.0002045814
Remove Sniper127689162021-07-05 17:48:101226 days ago1625507290IN
0x3f022a29...5Bb5B957E
0 ETH0.0002484217
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203469022024-07-20 9:39:47116 days ago1721468387
0x3f022a29...5Bb5B957E
0.00000935 ETH
203469022024-07-20 9:39:47116 days ago1721468387
0x3f022a29...5Bb5B957E
0.00237386 ETH
203469022024-07-20 9:39:47116 days ago1721468387
0x3f022a29...5Bb5B957E
0.00237386 ETH
129614492021-08-04 22:57:111196 days ago1628117831
0x3f022a29...5Bb5B957E
0.00249735 ETH
129614492021-08-04 22:57:111196 days ago1628117831
0x3f022a29...5Bb5B957E
0.00249735 ETH
129542562021-08-03 19:43:351197 days ago1628019815
0x3f022a29...5Bb5B957E
0.00261287 ETH
129542562021-08-03 19:43:351197 days ago1628019815
0x3f022a29...5Bb5B957E
0.00261287 ETH
129542242021-08-03 19:36:281197 days ago1628019388
0x3f022a29...5Bb5B957E
0.00318451 ETH
129542242021-08-03 19:36:281197 days ago1628019388
0x3f022a29...5Bb5B957E
0.00318451 ETH
128868592021-07-24 4:23:331208 days ago1627100613
0x3f022a29...5Bb5B957E
0.00324516 ETH
128868592021-07-24 4:23:331208 days ago1627100613
0x3f022a29...5Bb5B957E
0.00324516 ETH
128768932021-07-22 14:59:481209 days ago1626965988
0x3f022a29...5Bb5B957E
0.0034144 ETH
128768932021-07-22 14:59:481209 days ago1626965988
0x3f022a29...5Bb5B957E
0.0034144 ETH
128257502021-07-14 14:50:061217 days ago1626274206
0x3f022a29...5Bb5B957E
0.00343458 ETH
128257502021-07-14 14:50:061217 days ago1626274206
0x3f022a29...5Bb5B957E
0.00343458 ETH
127857142021-07-08 8:41:311224 days ago1625733691
0x3f022a29...5Bb5B957E
0.00348057 ETH
127857142021-07-08 8:41:311224 days ago1625733691
0x3f022a29...5Bb5B957E
0.00348057 ETH
127725792021-07-06 7:29:071226 days ago1625556547
0x3f022a29...5Bb5B957E
0.00355495 ETH
127725792021-07-06 7:29:071226 days ago1625556547
0x3f022a29...5Bb5B957E
0.00355495 ETH
127713072021-07-06 2:45:441226 days ago1625539544
0x3f022a29...5Bb5B957E
0.00357693 ETH
127713072021-07-06 2:45:441226 days ago1625539544
0x3f022a29...5Bb5B957E
0.00357693 ETH
127710602021-07-06 1:48:231226 days ago1625536103
0x3f022a29...5Bb5B957E
0.00366212 ETH
127710602021-07-06 1:48:231226 days ago1625536103
0x3f022a29...5Bb5B957E
0.00366212 ETH
127708442021-07-06 0:55:331226 days ago1625532933
0x3f022a29...5Bb5B957E
0.00359995 ETH
127708442021-07-06 0:55:331226 days ago1625532933
0x3f022a29...5Bb5B957E
0.00359995 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenContract

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-05
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity >=0.8.0 <0.9.0;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by 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;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by 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);
            }
        }
    }
}

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

abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
}

contract TokenContract is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isSniper;
    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;
   
    uint private startingSupply = 1_000_000_000_000; //1 Trillion, underscores aid readability
   
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals = 9;
    uint256 private _decimalsMul = _decimals;
    uint256 private _tTotal = startingSupply * 10**_decimalsMul;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Heavenly Emperor Inu";
    string private _symbol = "HEINU";
    
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 7;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;

    // UNI ROUTER
    address private _v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


    address public uniswapV2Pair;
    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    // Max TX amount is 1% of the total supply.
    uint256 private maxTxPercent = 5; // Starting value, managed by changingMaxTxAmt.
    uint256 private maxTxDivisor = 1000;
    uint256 private _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
    uint256 private _previousMaxTxAmount = _maxTxAmount;
    uint256 public maxTxAmountUI = (startingSupply * maxTxPercent) / maxTxDivisor; // Actual amount for UI's
    uint256 public amountOfTxs = 0;
    // 0.05% of Total Supply
    uint256 private numTokensSellToAddToLiquidity = (_tTotal * 5) / 10000;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private snipeBlockAmt = 2;
    uint256 public snipersCaught = 0;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _tOwned[_msgSender()] = _tTotal;
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_v2Router);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;
        _isExcluded[address(this)] = true;
        _excluded.push(address(this));
        _isExcluded[owner()] = true;
        _excluded.push(owner());
        _isExcluded[burnAddress] = true;
        _excluded.push(burnAddress);
        _isExcluded[uniswapV2Pair] = true;
        _excluded.push(uniswapV2Pair);

        // BLACKLIST
        _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function removeSniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not a recorded sniper.");
        _isSniper[account] = false;
    }

    function setSniperProtectionEnabled(bool enabled) external onlyOwner() {
        sniperProtection = enabled;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require(taxFee <= 8); // Prevents owner from abusing fees.
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= 8); // Prevents owner from abusing fees.
        _liquidityFee = liquidityFee;
    }

    // Adjusted to allow for smaller than 1%'s, as low as 0.1%
    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner() {
        require(divisor <= 10000); // Cannot set lower than 0.01%
        _maxTxAmount = _tTotal.mul(percent).div(
            divisor // Division by divisor, makes it mutable.
        );
        maxTxAmountUI = startingSupply.mul(percent).div(divisor);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

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

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    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) public 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;
            }
        }
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        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 _takeLiquidity(address sender, uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _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 changingMaxTxAmt() internal {
        uint256 percent;
        uint256 divisor;
        if (amountOfTxs <=50) {
            percent = 5;
            divisor = 1000;
        }
        else if (amountOfTxs <=100) {
            percent = 1;
            divisor = 100;
        }
        else if (amountOfTxs <=150) {
            percent = 2;
            divisor = 100;
        }
        else {
            percent = 100;
            divisor = 100;
        }
        _maxTxAmount = _tTotal.mul(percent).div(divisor); // Division by divisor, makes it mutable.
        maxTxAmountUI = startingSupply.mul(percent).div(divisor);
    }

    function _transfer(
        address from
,        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[from], "You have no power here!");
        require(!_isBlackListedBot[to], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");
        if (amountOfTxs <=155) {
            if(!_liquidityHolders[from] && !_liquidityHolders[to]  && from == uniswapV2Pair) {
                changingMaxTxAmt();
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
        }


        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount && amountOfTxs <= 151)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance 
            && !inSwapAndLiquify
            && from != uniswapV2Pair
            && swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

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

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

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

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

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (_liquidityHolders[from] && to == uniswapV2Pair) {
            _hasLiqBeenAdded = true;
            _liqAddBlock = block.number;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        // Failsafe, disable the whole system if needed.
        if (sniperProtection){
            // If sender is a sniper address, reject the sell.
            if (isSniper(sender)) {
                revert("Sniper rejected.");
            }

            // Check if this is the liquidity adding tx to startup.
            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(sender, recipient);
            } else {
                if (_liqAddBlock > 0 
                    && sender == uniswapV2Pair 
                    && !_liquidityHolders[sender]
                    && !_liquidityHolders[recipient]
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniper[recipient] = true;
                        snipersCaught ++;
                        emit SniperCaught(recipient);
                    }
                }
            }
        }

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

        if (amountOfTxs < 155 && _hasLiqBeenAdded && sender == uniswapV2Pair) {
            amountOfTxs++;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(sender, tLiquidity);
        _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 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(sender, tLiquidity);
        _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 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(sender, tLiquidity);
        _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 tLiquidity) = _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);        
        _takeLiquidity(sender, tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","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":[],"name":"amountOfTxs","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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"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":"includeInFee","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":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405264e8d4a51000600d55600e805460ff19166009908117909155600f8190556200002f90600a6200092c565b600d546200003e9190620009ea565b6010819055620000519060001962000a63565b6200005f9060001962000a0c565b6011556040805180820190915260148082527f48656176656e6c7920456d7065726f7220496e750000000000000000000000006020909201918252620000a891601391620007f6565b50604080518082019091526005808252644845494e5560d81b6020909201918252620000d791601491620007f6565b506002601581905560165560076017819055601855601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055601b8054600161ff0160a01b03191661dead1790556005601c8190556103e8601d81905560105490916200014691620009ea565b620001529190620008cc565b601e55601e54601f55601d54601c54600d54620001709190620009ea565b6200017c9190620008cc565b60205560006021556127106010546005620001989190620009ea565b620001a49190620008cc565b6022556023805461ffff19166001179055600060248190556002602555602655348015620001d157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060105433600090815260046020818152604080842094909455601154600382529284902092909255601954835163c45a015560e01b815293516001600160a01b0390911693849363c45a015593828101939192829003018186803b1580156200027b57600080fd5b505afa15801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b691906200089c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ff57600080fd5b505afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200089c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200038357600080fd5b505af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200089c565b601a80546001600160a01b03199081166001600160a01b03938416178255606084901b6001600160601b0319166080526000805484168152600660209081526040808320805460ff1990811660019081179092553080865283862080548316841790558554891686526009855283862080548316841790558086526007855283862080548316841790556008805480850182557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390810180548a1690931790925586548a168752848720805484168517905586548154808601835583018054918c16918a16919091179055601b80548b16885285882080548516861790555481548086018355830180548a16918c1691909117905588548a16875293862080548316841790559654835480840190945592909601805486169290971691909117909555600b90527f74d7fc0a45c6928cce922f294b8bf5e7fff3f89771e2114b18a5cd1d1f4577358054841685179055600c805480860182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79081018054851673e031b36b53e53a292a20c5f08fd1658cddf74fce1790557f0f1b60510ca1e1bf00eec02fea41847afc989fbd83852cdb3ca91ce622a1d54d80548616871790558154808701835581018054851673e516bdee55b0b4e9bacaf6285130de15589b13451790557ff8ebe5e7623ca891e5bb8ce5e72b0c5ddeae8c7d8c0932740de908fdac44ec0080548616871790558154808701835581018054851673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557f16a15fb2aa0b66ff4f4234d97be437d134114b368ffd745d8de6e6838f9fba3a80548616871790558154808701835581018054851673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557f287292fc49b5d73ef6d6f7f228ef3fe49c8cd2ac6e9c89064eb61fd7fb9f519a80548616871790558154808701835581018054851673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557f66504bab4295e88d515a9325b1909b99559a398602c86c64fe2ad7b94e0f761680548616871790558154808701835581018054851673dc81a3450817a58d00f45c86d0368290088db8481790557f4c88ad78a60fb4355141b4ac46c8f7af9256d7dcebaf319200612bf767c0bd8a8054861687179055815480870183558101805485167345fd07c63e5c316540f14b2002b085aee78e38811790557f509f0c09776cdc3f0041fbef622c53cd68b7fdb9a9aa03b44d173795d33d9a2c80549095168617909455805494850181559052910180549091167327f9adb26d532a41d97e00206114e429ad58c679179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601054604051620007e791815260200190565b60405180910390a35062000aa6565b828054620008049062000a26565b90600052602060002090601f01602090048101928262000828576000855562000873565b82601f106200084357805160ff191683800117855562000873565b8280016001018555821562000873579182015b828111156200087357825182559160200191906001019062000856565b506200088192915062000885565b5090565b5b8082111562000881576000815560010162000886565b600060208284031215620008ae578081fd5b81516001600160a01b0381168114620008c5578182fd5b9392505050565b600082620008de57620008de62000a90565b500490565b600181815b808511156200092457816000190482111562000908576200090862000a7a565b808516156200091657918102915b93841c9390800290620008e8565b509250929050565b6000620008c583836000826200094557506001620009e4565b816200095457506000620009e4565b81600181146200096d5760028114620009785762000998565b6001915050620009e4565b60ff8411156200098c576200098c62000a7a565b50506001821b620009e4565b5060208310610133831016604e8410600b8410161715620009bd575081810a620009e4565b620009c98383620008e3565b8060001904821115620009e057620009e062000a7a565b0290505b92915050565b600081600019048311821515161562000a075762000a0762000a7a565b500290565b60008282101562000a215762000a2162000a7a565b500390565b600181811c9082168062000a3b57607f821691505b6020821081141562000a5d57634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a755762000a7562000a90565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c61309962000ae86000396000818161035301528181612507015281816125dd015281816126190152818161268b01526126f301526130996000f3fe6080604052600436106102605760003560e01c806350a8e016116101445780638ee88c53116100b6578063c49b9a801161007a578063c49b9a8014610756578063d7124d9f14610776578063dd62ed3e14610796578063e79d4160146107dc578063ea2f0b37146107f2578063f2fde38b1461081257600080fd5b80638ee88c53146106cb57806395d89b41146106eb5780639ab24e4b14610700578063a457c2d714610716578063a9059cbb1461073657600080fd5b806370a082311161010857806370a08231146105ff57806370d5ae051461061f578063715018a61461063f5780637ded4d6a1461065457806388f82020146106745780638da5cb5b146106ad57600080fd5b806350a8e0161461055b57806352390c021461057a5780635342acb41461059a57806364038409146105d35780636bc87c3a146105e957600080fd5b806333251a0b116101dd5780633f3cf56c116101a15780633f3cf56c1461049a5780634303443d146104ba578063437823ec146104da5780634549b039146104fa57806349bd5a5e1461051a5780634a74bb021461053a57600080fd5b806333251a0b146104045780633685d4191461042457806339509351146104445780633b124fe7146104645780633bd5d1731461047a57600080fd5b80631694505e116102245780631694505e1461034157806318160ddd1461038d57806323b872dd146103a25780632d838119146103c2578063313ce567146103e257600080fd5b8063061c82d01461026c57806306fdde031461028e578063095ea7b3146102b95780630f3a325f146102e957806313114a9d1461032257600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004612d64565b610832565b005b34801561029a57600080fd5b506102a3610878565b6040516102b09190612df5565b60405180910390f35b3480156102c557600080fd5b506102d96102d4366004612d1f565b61090a565b60405190151581526020016102b0565b3480156102f557600080fd5b506102d9610304366004612c6f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561032e57600080fd5b506012545b6040519081526020016102b0565b34801561034d57600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b0565b34801561039957600080fd5b50601054610333565b3480156103ae57600080fd5b506102d96103bd366004612cdf565b610921565b3480156103ce57600080fd5b506103336103dd366004612d64565b61098a565b3480156103ee57600080fd5b50600e5460405160ff90911681526020016102b0565b34801561041057600080fd5b5061028c61041f366004612c6f565b610a0e565b34801561043057600080fd5b5061028c61043f366004612c6f565b610acb565b34801561045057600080fd5b506102d961045f366004612d1f565b610cba565b34801561047057600080fd5b5061033360155481565b34801561048657600080fd5b5061028c610495366004612d64565b610cf0565b3480156104a657600080fd5b5061028c6104b5366004612da7565b610dda565b3480156104c657600080fd5b5061028c6104d5366004612c6f565b610e4f565b3480156104e657600080fd5b5061028c6104f5366004612c6f565b610fc1565b34801561050657600080fd5b50610333610515366004612d7c565b61100f565b34801561052657600080fd5b50601a54610375906001600160a01b031681565b34801561054657600080fd5b50601b546102d990600160a81b900460ff1681565b34801561056757600080fd5b506023546102d990610100900460ff1681565b34801561058657600080fd5b5061028c610595366004612c6f565b61109c565b3480156105a657600080fd5b506102d96105b5366004612c6f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105df57600080fd5b5061033360205481565b3480156105f557600080fd5b5061033360175481565b34801561060b57600080fd5b5061033361061a366004612c6f565b6111ef565b34801561062b57600080fd5b50601b54610375906001600160a01b031681565b34801561064b57600080fd5b5061028c61124e565b34801561066057600080fd5b5061028c61066f366004612c6f565b6112c2565b34801561068057600080fd5b506102d961068f366004612c6f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106b957600080fd5b506000546001600160a01b0316610375565b3480156106d757600080fd5b5061028c6106e6366004612d64565b61147e565b3480156106f757600080fd5b506102a36114bb565b34801561070c57600080fd5b5061033360215481565b34801561072257600080fd5b506102d9610731366004612d1f565b6114ca565b34801561074257600080fd5b506102d9610751366004612d1f565b611519565b34801561076257600080fd5b5061028c610771366004612d4a565b611526565b34801561078257600080fd5b5061028c610791366004612d4a565b6115a8565b3480156107a257600080fd5b506103336107b1366004612ca7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107e857600080fd5b5061033360265481565b3480156107fe57600080fd5b5061028c61080d366004612c6f565b6115e5565b34801561081e57600080fd5b5061028c61082d366004612c6f565b611630565b6000546001600160a01b031633146108655760405162461bcd60e51b815260040161085c90612e48565b60405180910390fd5b600881111561087357600080fd5b601555565b60606013805461088790612f92565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390612f92565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b600061091733848461171a565b5060015b92915050565b600061092e84848461183e565b610980843361097b85604051806060016040528060288152602001613017602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bc8565b61171a565b5060019392505050565b60006011548211156109f15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161085c565b60006109fb611c02565b9050610a078382611c25565b9392505050565b6000546001600160a01b03163314610a385760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600a602052604090205460ff16610aaa5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b606482015260840161085c565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff16610b5d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b60005b600854811015610cb657816001600160a01b031660088281548110610b9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ca45760088054610bc090600190612f7b565b81548110610bde57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610c1857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c7e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cae81612fcd565b915050610b60565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161091791859061097b9086611c67565b3360008181526007602052604090205460ff1615610d655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161085c565b6000610d7083611cc6565b505050506001600160a01b038416600090815260036020526040902054919250610d9c91905082611d15565b6001600160a01b038316600090815260036020526040902055601154610dc29082611d15565b601155601254610dd29084611c67565b601255505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b815260040161085c90612e48565b612710811115610e1357600080fd5b610e3281610e2c84601054611d5790919063ffffffff16565b90611c25565b601e55600d54610e48908290610e2c9085611d57565b6020555050565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161085c90612e48565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610ef25760405162461bcd60e51b8152602060048201526024808201527f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f756044820152633a32b91760e11b606482015260840161085c565b6001600160a01b0381166000908152600b602052604090205460ff1615610f5b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161085c565b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314610feb5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006010548311156110635760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161085c565b8161108257600061107384611cc6565b5093955061091b945050505050565b600061108d84611cc6565b5092955061091b945050505050565b6000546001600160a01b031633146110c65760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff161561112f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b6001600160a01b03811660009081526003602052604090205415611189576001600160a01b03811660009081526003602052604090205461116f9061098a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561122c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091b9061098a565b6000546001600160a01b031633146112785760405162461bcd60e51b815260040161085c90612e48565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600b602052604090205460ff166113545760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161085c565b60005b600c54811015610cb657816001600160a01b0316600c828154811061138c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561146c57600c80546113b790600190612f7b565b815481106113d557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061140f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c7e57634e487b7160e01b600052603160045260246000fd5b8061147681612fcd565b915050611357565b6000546001600160a01b031633146114a85760405162461bcd60e51b815260040161085c90612e48565b60088111156114b657600080fd5b601755565b60606014805461088790612f92565b6000610917338461097b8560405180606001604052806025815260200161303f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bc8565b600061091733848461183e565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161085c90612e48565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061159d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161085c90612e48565b6023805460ff1916911515919091179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461165a5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166116bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661177c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161085c565b6001600160a01b0382166117dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161085c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161085c565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161085c565b600081116119665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161085c565b6001600160a01b0383166000908152600b602052604090205460ff161561199f5760405162461bcd60e51b815260040161085c90612e7d565b6001600160a01b0382166000908152600b602052604090205460ff16156119d85760405162461bcd60e51b815260040161085c90612e7d565b326000908152600b602052604090205460ff1615611a085760405162461bcd60e51b815260040161085c90612e7d565b609b60215411611add576001600160a01b03831660009081526009602052604090205460ff16158015611a5457506001600160a01b03821660009081526009602052604090205460ff16155b8015611a6d5750601a546001600160a01b038481169116145b15611add57611a7a611dd6565b601e54811115611add5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161085c565b6000611ae8306111ef565b9050601e548110158015611aff5750609760215411155b15611b095750601e545b60225481108015908190611b275750601b54600160a01b900460ff16155b8015611b415750601a546001600160a01b03868116911614155b8015611b565750601b54600160a81b900460ff165b15611b69576022549150611b6982611e3b565b6001600160a01b03851660009081526006602052604090205460019060ff1680611bab57506001600160a01b03851660009081526006602052604090205460ff165b15611bb4575060005b611bc086868684611ee2565b505050505050565b60008184841115611bec5760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f7b565b95945050505050565b6000806000611c0f612228565b9092509050611c1e8282611c25565b9250505090565b6000610a0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123e2565b600080611c748385612f24565b905083811015610a075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161085c565b6000806000806000806000806000611cdd8a612410565b9250925092506000806000611cfb8d8686611cf6611c02565b612452565b919f909e50909c50959a5093985091965092945050505050565b6000610a0783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bc8565b600082611d665750600061091b565b6000611d728385612f5c565b905082611d7f8583612f3c565b14610a075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161085c565b600080603260215411611df05750600590506103e8610e13565b606460215411611e065750600190506064610e13565b609660215411611e1c5750600290506064610e13565b506064905080610e3281610e2c84601054611d5790919063ffffffff16565b601b805460ff60a01b1916600160a01b1790556000611e5b826002611c25565b90506000611e698383611d15565b905047611e75836124a2565b6000611e814783611d15565b9050611e8d8382612685565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff60a01b19169055505050565b60235460ff161561205e576001600160a01b0384166000908152600a602052604090205460ff1615611f495760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161085c565b602354610100900460ff16611f6757611f62848461277a565b61205e565b6000602454118015611f865750601a546001600160a01b038581169116145b8015611fab57506001600160a01b03841660009081526009602052604090205460ff16155b8015611fd057506001600160a01b03831660009081526009602052604090205460ff16155b1561205e57602554602454611fe59043612f7b565b101561205e576001600160a01b0383166000908152600a60205260408120805460ff19166001179055602680549161201c83612fcd565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061206b5761206b61287f565b6001600160a01b03841660009081526007602052604090205460ff1680156120ac57506001600160a01b03831660009081526007602052604090205460ff16155b156120c1576120bc8484846128ad565b6121bf565b6001600160a01b03841660009081526007602052604090205460ff1615801561210257506001600160a01b03831660009081526007602052604090205460ff165b15612112576120bc8484846129d4565b6001600160a01b03841660009081526007602052604090205460ff1615801561215457506001600160a01b03831660009081526007602052604090205460ff16155b15612164576120bc848484612a7d565b6001600160a01b03841660009081526007602052604090205460ff1680156121a457506001600160a01b03831660009081526007602052604090205460ff165b156121b4576120bc848484612ac1565b6121bf848484612a7d565b806121d5576121d5601654601555601854601755565b609b6021541080156121ee5750602354610100900460ff165b80156122075750601a546001600160a01b038581169116145b15612222576021805490600061221c83612fcd565b91905055505b50505050565b6011546010546000918291825b6008548110156123b25782600360006008848154811061226557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122de57508160046000600884815481106122b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122f457601154601054945094505050509091565b612348600360006008848154811061231c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d15565b925061239e600460006008848154811061237257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d15565b9150806123aa81612fcd565b915050612235565b506010546011546123c291611c25565b8210156123d9576011546010549350935050509091565b90939092509050565b600081836124035760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f3c565b60008060008061241f85612b34565b9050600061242c86612b50565b905060006124448261243e8986611d15565b90611d15565b979296509094509092505050565b60008080806124618886611d57565b9050600061246f8887611d57565b9050600061247d8888611d57565b9050600061248f8261243e8686611d15565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190612c8b565b816001815181106125b757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612602307f00000000000000000000000000000000000000000000000000000000000000008461171a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612657908590600090869030904290600401612eb4565b600060405180830381600087803b15801561267157600080fd5b505af1158015611bc0573d6000803e3d6000fd5b6126b0307f00000000000000000000000000000000000000000000000000000000000000008461171a565b601b5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612dc8565b5050505050565b602354610100900460ff16156127de5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161085c565b6001600160a01b03821660009081526009602052604090205460ff1680156128135750601a546001600160a01b038281169116145b15610cb6576023805461ff00191661010017905543602455601b805460ff60a81b1916600160a81b1790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906128739060011515815260200190565b60405180910390a15050565b60155415801561288f5750601754155b1561289657565b601580546016556017805460185560009182905555565b6000806000806000806128bf87611cc6565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f19088611d15565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129209087611d15565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461294f9086611c67565b6001600160a01b0389166000908152600360205260409020556129728982612b6c565b61297c8483612c36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e687611cc6565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a189087611d15565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a4e9084611c67565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461294f9086611c67565b600080600080600080612a8f87611cc6565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129209087611d15565b600080600080600080612ad387611cc6565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b059088611d15565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a189087611d15565b600061091b6064610e2c60155485611d5790919063ffffffff16565b600061091b6064610e2c60175485611d5790919063ffffffff16565b6000612b76611c02565b90506000612b848383611d57565b30600090815260036020526040902054909150612ba19082611c67565b3060009081526003602090815260408083209390935560079052205460ff1615612bf05730600090815260046020526040902054612bdf9084611c67565b306000908152600460205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b601154612c439083611d15565b601155601254612c539082611c67565b6012555050565b80358015158114612c6a57600080fd5b919050565b600060208284031215612c80578081fd5b8135610a0781612ffe565b600060208284031215612c9c578081fd5b8151610a0781612ffe565b60008060408385031215612cb9578081fd5b8235612cc481612ffe565b91506020830135612cd481612ffe565b809150509250929050565b600080600060608486031215612cf3578081fd5b8335612cfe81612ffe565b92506020840135612d0e81612ffe565b929592945050506040919091013590565b60008060408385031215612d31578182fd5b8235612d3c81612ffe565b946020939093013593505050565b600060208284031215612d5b578081fd5b610a0782612c5a565b600060208284031215612d75578081fd5b5035919050565b60008060408385031215612d8e578182fd5b82359150612d9e60208401612c5a565b90509250929050565b60008060408385031215612db9578182fd5b50508035926020909101359150565b600080600060608486031215612ddc578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612e2157858101830151858201604001528201612e05565b81811115612e325783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f035784516001600160a01b031683529383019391830191600101612ede565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3757612f37612fe8565b500190565b600082612f5757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7657612f76612fe8565b500290565b600082821015612f8d57612f8d612fe8565b500390565b600181811c90821680612fa657607f821691505b60208210811415612fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe157612fe1612fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a06171264736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806350a8e016116101445780638ee88c53116100b6578063c49b9a801161007a578063c49b9a8014610756578063d7124d9f14610776578063dd62ed3e14610796578063e79d4160146107dc578063ea2f0b37146107f2578063f2fde38b1461081257600080fd5b80638ee88c53146106cb57806395d89b41146106eb5780639ab24e4b14610700578063a457c2d714610716578063a9059cbb1461073657600080fd5b806370a082311161010857806370a08231146105ff57806370d5ae051461061f578063715018a61461063f5780637ded4d6a1461065457806388f82020146106745780638da5cb5b146106ad57600080fd5b806350a8e0161461055b57806352390c021461057a5780635342acb41461059a57806364038409146105d35780636bc87c3a146105e957600080fd5b806333251a0b116101dd5780633f3cf56c116101a15780633f3cf56c1461049a5780634303443d146104ba578063437823ec146104da5780634549b039146104fa57806349bd5a5e1461051a5780634a74bb021461053a57600080fd5b806333251a0b146104045780633685d4191461042457806339509351146104445780633b124fe7146104645780633bd5d1731461047a57600080fd5b80631694505e116102245780631694505e1461034157806318160ddd1461038d57806323b872dd146103a25780632d838119146103c2578063313ce567146103e257600080fd5b8063061c82d01461026c57806306fdde031461028e578063095ea7b3146102b95780630f3a325f146102e957806313114a9d1461032257600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004612d64565b610832565b005b34801561029a57600080fd5b506102a3610878565b6040516102b09190612df5565b60405180910390f35b3480156102c557600080fd5b506102d96102d4366004612d1f565b61090a565b60405190151581526020016102b0565b3480156102f557600080fd5b506102d9610304366004612c6f565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561032e57600080fd5b506012545b6040519081526020016102b0565b34801561034d57600080fd5b506103757f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102b0565b34801561039957600080fd5b50601054610333565b3480156103ae57600080fd5b506102d96103bd366004612cdf565b610921565b3480156103ce57600080fd5b506103336103dd366004612d64565b61098a565b3480156103ee57600080fd5b50600e5460405160ff90911681526020016102b0565b34801561041057600080fd5b5061028c61041f366004612c6f565b610a0e565b34801561043057600080fd5b5061028c61043f366004612c6f565b610acb565b34801561045057600080fd5b506102d961045f366004612d1f565b610cba565b34801561047057600080fd5b5061033360155481565b34801561048657600080fd5b5061028c610495366004612d64565b610cf0565b3480156104a657600080fd5b5061028c6104b5366004612da7565b610dda565b3480156104c657600080fd5b5061028c6104d5366004612c6f565b610e4f565b3480156104e657600080fd5b5061028c6104f5366004612c6f565b610fc1565b34801561050657600080fd5b50610333610515366004612d7c565b61100f565b34801561052657600080fd5b50601a54610375906001600160a01b031681565b34801561054657600080fd5b50601b546102d990600160a81b900460ff1681565b34801561056757600080fd5b506023546102d990610100900460ff1681565b34801561058657600080fd5b5061028c610595366004612c6f565b61109c565b3480156105a657600080fd5b506102d96105b5366004612c6f565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105df57600080fd5b5061033360205481565b3480156105f557600080fd5b5061033360175481565b34801561060b57600080fd5b5061033361061a366004612c6f565b6111ef565b34801561062b57600080fd5b50601b54610375906001600160a01b031681565b34801561064b57600080fd5b5061028c61124e565b34801561066057600080fd5b5061028c61066f366004612c6f565b6112c2565b34801561068057600080fd5b506102d961068f366004612c6f565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156106b957600080fd5b506000546001600160a01b0316610375565b3480156106d757600080fd5b5061028c6106e6366004612d64565b61147e565b3480156106f757600080fd5b506102a36114bb565b34801561070c57600080fd5b5061033360215481565b34801561072257600080fd5b506102d9610731366004612d1f565b6114ca565b34801561074257600080fd5b506102d9610751366004612d1f565b611519565b34801561076257600080fd5b5061028c610771366004612d4a565b611526565b34801561078257600080fd5b5061028c610791366004612d4a565b6115a8565b3480156107a257600080fd5b506103336107b1366004612ca7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156107e857600080fd5b5061033360265481565b3480156107fe57600080fd5b5061028c61080d366004612c6f565b6115e5565b34801561081e57600080fd5b5061028c61082d366004612c6f565b611630565b6000546001600160a01b031633146108655760405162461bcd60e51b815260040161085c90612e48565b60405180910390fd5b600881111561087357600080fd5b601555565b60606013805461088790612f92565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390612f92565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b600061091733848461171a565b5060015b92915050565b600061092e84848461183e565b610980843361097b85604051806060016040528060288152602001613017602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611bc8565b61171a565b5060019392505050565b60006011548211156109f15760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161085c565b60006109fb611c02565b9050610a078382611c25565b9392505050565b6000546001600160a01b03163314610a385760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600a602052604090205460ff16610aaa5760405162461bcd60e51b815260206004820152602160248201527f4163636f756e74206973206e6f742061207265636f7264656420736e697065726044820152601760f91b606482015260840161085c565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314610af55760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff16610b5d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b60005b600854811015610cb657816001600160a01b031660088281548110610b9557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ca45760088054610bc090600190612f7b565b81548110610bde57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610c1857634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610c7e57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cae81612fcd565b915050610b60565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161091791859061097b9086611c67565b3360008181526007602052604090205460ff1615610d655760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161085c565b6000610d7083611cc6565b505050506001600160a01b038416600090815260036020526040902054919250610d9c91905082611d15565b6001600160a01b038316600090815260036020526040902055601154610dc29082611d15565b601155601254610dd29084611c67565b601255505050565b6000546001600160a01b03163314610e045760405162461bcd60e51b815260040161085c90612e48565b612710811115610e1357600080fd5b610e3281610e2c84601054611d5790919063ffffffff16565b90611c25565b601e55600d54610e48908290610e2c9085611d57565b6020555050565b6000546001600160a01b03163314610e795760405162461bcd60e51b815260040161085c90612e48565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415610ef25760405162461bcd60e51b8152602060048201526024808201527f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f756044820152633a32b91760e11b606482015260840161085c565b6001600160a01b0381166000908152600b602052604090205460ff1615610f5b5760405162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015260640161085c565b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314610feb5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006010548311156110635760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161085c565b8161108257600061107384611cc6565b5093955061091b945050505050565b600061108d84611cc6565b5092955061091b945050505050565b6000546001600160a01b031633146110c65760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03811660009081526007602052604090205460ff161561112f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161085c565b6001600160a01b03811660009081526003602052604090205415611189576001600160a01b03811660009081526003602052604090205461116f9061098a565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561122c57506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461091b9061098a565b6000546001600160a01b031633146112785760405162461bcd60e51b815260040161085c90612e48565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112ec5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166000908152600b602052604090205460ff166113545760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015260640161085c565b60005b600c54811015610cb657816001600160a01b0316600c828154811061138c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561146c57600c80546113b790600190612f7b565b815481106113d557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600c80546001600160a01b03909216918390811061140f57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600b90915260409020805460ff19169055600c805480610c7e57634e487b7160e01b600052603160045260246000fd5b8061147681612fcd565b915050611357565b6000546001600160a01b031633146114a85760405162461bcd60e51b815260040161085c90612e48565b60088111156114b657600080fd5b601755565b60606014805461088790612f92565b6000610917338461097b8560405180606001604052806025815260200161303f602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611bc8565b600061091733848461183e565b6000546001600160a01b031633146115505760405162461bcd60e51b815260040161085c90612e48565b601b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061159d90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161085c90612e48565b6023805460ff1916911515919091179055565b6000546001600160a01b0316331461160f5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461165a5760405162461bcd60e51b815260040161085c90612e48565b6001600160a01b0381166116bf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161085c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661177c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161085c565b6001600160a01b0382166117dd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161085c565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161085c565b6001600160a01b0382166119045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161085c565b600081116119665760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161085c565b6001600160a01b0383166000908152600b602052604090205460ff161561199f5760405162461bcd60e51b815260040161085c90612e7d565b6001600160a01b0382166000908152600b602052604090205460ff16156119d85760405162461bcd60e51b815260040161085c90612e7d565b326000908152600b602052604090205460ff1615611a085760405162461bcd60e51b815260040161085c90612e7d565b609b60215411611add576001600160a01b03831660009081526009602052604090205460ff16158015611a5457506001600160a01b03821660009081526009602052604090205460ff16155b8015611a6d5750601a546001600160a01b038481169116145b15611add57611a7a611dd6565b601e54811115611add5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161085c565b6000611ae8306111ef565b9050601e548110158015611aff5750609760215411155b15611b095750601e545b60225481108015908190611b275750601b54600160a01b900460ff16155b8015611b415750601a546001600160a01b03868116911614155b8015611b565750601b54600160a81b900460ff165b15611b69576022549150611b6982611e3b565b6001600160a01b03851660009081526006602052604090205460019060ff1680611bab57506001600160a01b03851660009081526006602052604090205460ff165b15611bb4575060005b611bc086868684611ee2565b505050505050565b60008184841115611bec5760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f7b565b95945050505050565b6000806000611c0f612228565b9092509050611c1e8282611c25565b9250505090565b6000610a0783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123e2565b600080611c748385612f24565b905083811015610a075760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161085c565b6000806000806000806000806000611cdd8a612410565b9250925092506000806000611cfb8d8686611cf6611c02565b612452565b919f909e50909c50959a5093985091965092945050505050565b6000610a0783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611bc8565b600082611d665750600061091b565b6000611d728385612f5c565b905082611d7f8583612f3c565b14610a075760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161085c565b600080603260215411611df05750600590506103e8610e13565b606460215411611e065750600190506064610e13565b609660215411611e1c5750600290506064610e13565b506064905080610e3281610e2c84601054611d5790919063ffffffff16565b601b805460ff60a01b1916600160a01b1790556000611e5b826002611c25565b90506000611e698383611d15565b905047611e75836124a2565b6000611e814783611d15565b9050611e8d8382612685565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601b805460ff60a01b19169055505050565b60235460ff161561205e576001600160a01b0384166000908152600a602052604090205460ff1615611f495760405162461bcd60e51b815260206004820152601060248201526f29b734b832b9103932b532b1ba32b21760811b604482015260640161085c565b602354610100900460ff16611f6757611f62848461277a565b61205e565b6000602454118015611f865750601a546001600160a01b038581169116145b8015611fab57506001600160a01b03841660009081526009602052604090205460ff16155b8015611fd057506001600160a01b03831660009081526009602052604090205460ff16155b1561205e57602554602454611fe59043612f7b565b101561205e576001600160a01b0383166000908152600a60205260408120805460ff19166001179055602680549161201c83612fcd565b90915550506040516001600160a01b03841681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b8061206b5761206b61287f565b6001600160a01b03841660009081526007602052604090205460ff1680156120ac57506001600160a01b03831660009081526007602052604090205460ff16155b156120c1576120bc8484846128ad565b6121bf565b6001600160a01b03841660009081526007602052604090205460ff1615801561210257506001600160a01b03831660009081526007602052604090205460ff165b15612112576120bc8484846129d4565b6001600160a01b03841660009081526007602052604090205460ff1615801561215457506001600160a01b03831660009081526007602052604090205460ff16155b15612164576120bc848484612a7d565b6001600160a01b03841660009081526007602052604090205460ff1680156121a457506001600160a01b03831660009081526007602052604090205460ff165b156121b4576120bc848484612ac1565b6121bf848484612a7d565b806121d5576121d5601654601555601854601755565b609b6021541080156121ee5750602354610100900460ff165b80156122075750601a546001600160a01b038581169116145b15612222576021805490600061221c83612fcd565b91905055505b50505050565b6011546010546000918291825b6008548110156123b25782600360006008848154811061226557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806122de57508160046000600884815481106122b757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156122f457601154601054945094505050509091565b612348600360006008848154811061231c57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611d15565b925061239e600460006008848154811061237257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611d15565b9150806123aa81612fcd565b915050612235565b506010546011546123c291611c25565b8210156123d9576011546010549350935050509091565b90939092509050565b600081836124035760405162461bcd60e51b815260040161085c9190612df5565b506000611bf98486612f3c565b60008060008061241f85612b34565b9050600061242c86612b50565b905060006124448261243e8986611d15565b90611d15565b979296509094509092505050565b60008080806124618886611d57565b9050600061246f8887611d57565b9050600061247d8888611d57565b9050600061248f8261243e8686611d15565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124e557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561255e57600080fd5b505afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190612c8b565b816001815181106125b757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050612602307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461171a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612657908590600090869030904290600401612eb4565b600060405180830381600087803b15801561267157600080fd5b505af1158015611bc0573d6000803e3d6000fd5b6126b0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461171a565b601b5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561273a57600080fd5b505af115801561274e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127739190612dc8565b5050505050565b602354610100900460ff16156127de5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840161085c565b6001600160a01b03821660009081526009602052604090205460ff1680156128135750601a546001600160a01b038281169116145b15610cb6576023805461ff00191661010017905543602455601b805460ff60a81b1916600160a81b1790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906128739060011515815260200190565b60405180910390a15050565b60155415801561288f5750601754155b1561289657565b601580546016556017805460185560009182905555565b6000806000806000806128bf87611cc6565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128f19088611d15565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129209087611d15565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461294f9086611c67565b6001600160a01b0389166000908152600360205260409020556129728982612b6c565b61297c8483612c36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516129c191815260200190565b60405180910390a3505050505050505050565b6000806000806000806129e687611cc6565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612a189087611d15565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a4e9084611c67565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461294f9086611c67565b600080600080600080612a8f87611cc6565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129209087611d15565b600080600080600080612ad387611cc6565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b059088611d15565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612a189087611d15565b600061091b6064610e2c60155485611d5790919063ffffffff16565b600061091b6064610e2c60175485611d5790919063ffffffff16565b6000612b76611c02565b90506000612b848383611d57565b30600090815260036020526040902054909150612ba19082611c67565b3060009081526003602090815260408083209390935560079052205460ff1615612bf05730600090815260046020526040902054612bdf9084611c67565b306000908152600460205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b601154612c439083611d15565b601155601254612c539082611c67565b6012555050565b80358015158114612c6a57600080fd5b919050565b600060208284031215612c80578081fd5b8135610a0781612ffe565b600060208284031215612c9c578081fd5b8151610a0781612ffe565b60008060408385031215612cb9578081fd5b8235612cc481612ffe565b91506020830135612cd481612ffe565b809150509250929050565b600080600060608486031215612cf3578081fd5b8335612cfe81612ffe565b92506020840135612d0e81612ffe565b929592945050506040919091013590565b60008060408385031215612d31578182fd5b8235612d3c81612ffe565b946020939093013593505050565b600060208284031215612d5b578081fd5b610a0782612c5a565b600060208284031215612d75578081fd5b5035919050565b60008060408385031215612d8e578182fd5b82359150612d9e60208401612c5a565b90509250929050565b60008060408385031215612db9578182fd5b50508035926020909101359150565b600080600060608486031215612ddc578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612e2157858101830151858201604001528201612e05565b81811115612e325783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f596f752068617665206e6f20706f776572206865726521000000000000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f035784516001600160a01b031683529383019391830191600101612ede565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f3757612f37612fe8565b500190565b600082612f5757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7657612f76612fe8565b500290565b600082821015612f8d57612f8d612fe8565b500390565b600181811c90821680612fa657607f821691505b60208210811415612fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fe157612fe1612fe8565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a06171264736f6c63430008040033

Deployed Bytecode Sourcemap

17818:25647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25634:166;;;;;;;;;;-1:-1:-1;25634:166:0;;;;;:::i;:::-;;:::i;:::-;;23171:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24083:161;;;;;;;;;;-1:-1:-1;24083:161:0;;;;;:::i;:::-;;:::i;:::-;;;4133:14:1;;4126:22;4108:41;;4096:2;4081:18;24083:161:0;4063:92:1;25204:106:0;;;;;;;;;;-1:-1:-1;25204:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;25284:18:0;25260:4;25284:18;;;:9;:18;;;;;;;;;25204:106;27725:87;;;;;;;;;;-1:-1:-1;27794:10:0;;27725:87;;;13274:25:1;;;13262:2;13247:18;27725:87:0;13229:76:1;19155:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3312:32:1;;;3294:51;;3282:2;3267:18;19155:51:0;3249:102:1;23448:95:0;;;;;;;;;;-1:-1:-1;23528:7:0;;23448:95;;24252:313;;;;;;;;;;-1:-1:-1;24252:313:0;;;;;:::i;:::-;;:::i;28649:253::-;;;;;;;;;;-1:-1:-1;28649:253:0;;;;;:::i;:::-;;:::i;23357:83::-;;;;;;;;;;-1:-1:-1;23423:9:0;;23357:83;;23423:9;;;;14764:36:1;;14752:2;14737:18;23357:83:0;14719:87:1;25318:180:0;;;;;;;;;;-1:-1:-1;25318:180:0;;;;;:::i;:::-;;:::i;29365:479::-;;;;;;;;;;-1:-1:-1;29365:479:0;;;;;:::i;:::-;;:::i;24573:218::-;;;;;;;;;;-1:-1:-1;24573:218:0;;;;;:::i;:::-;;:::i;18967:26::-;;;;;;;;;;;;;;;;27820:377;;;;;;;;;;-1:-1:-1;27820:377:0;;;;;:::i;:::-;;:::i;26080:347::-;;;;;;;;;;-1:-1:-1;26080:347:0;;;;;:::i;:::-;;:::i;26857:352::-;;;;;;;;;;-1:-1:-1;26857:352:0;;;;;:::i;:::-;;:::i;26614:111::-;;;;;;;;;;-1:-1:-1;26614:111:0;;;;;:::i;:::-;;:::i;28205:436::-;;;;;;;;;;-1:-1:-1;28205:436:0;;;;;:::i;:::-;;:::i;19315:28::-;;;;;;;;;;-1:-1:-1;19315:28:0;;;;-1:-1:-1;;;;;19315:28:0;;;19462:41;;;;;;;;;;-1:-1:-1;19462:41:0;;;;-1:-1:-1;;;19462:41:0;;;;;;20127:36;;;;;;;;;;-1:-1:-1;20127:36:0;;;;;;;;;;;28910:447;;;;;;;;;;-1:-1:-1;28910:447:0;;;;;:::i;:::-;;:::i;33267:123::-;;;;;;;;;;-1:-1:-1;33267:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33355:27:0;33331:4;33355:27;;;:18;:27;;;;;;;;;33267:123;19829:77;;;;;;;;;;;;;;;;19054:32;;;;;;;;;;;;;;;;23551:198;;;;;;;;;;-1:-1:-1;23551:198:0;;;;;:::i;:::-;;:::i;19350:71::-;;;;;;;;;;-1:-1:-1;19350:71:0;;;;-1:-1:-1;;;;;19350:71:0;;;17405:148;;;;;;;;;;;;;:::i;27217:500::-;;;;;;;;;;-1:-1:-1;27217:500:0;;;;;:::i;:::-;;:::i;25076:120::-;;;;;;;;;;-1:-1:-1;25076:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;25168:20:0;25144:4;25168:20;;;:11;:20;;;;;;;;;25076:120;17191:79;;;;;;;;;;-1:-1:-1;17229:7:0;17256:6;-1:-1:-1;;;;;17256:6:0;17191:79;;25812:196;;;;;;;;;;-1:-1:-1;25812:196:0;;;;;:::i;:::-;;:::i;23262:87::-;;;;;;;;;;;;;:::i;19939:30::-;;;;;;;;;;;;;;;;24799:269;;;;;;;;;;-1:-1:-1;24799:269:0;;;;;:::i;:::-;;:::i;23757:167::-;;;;;;;;;;-1:-1:-1;23757:167:0;;;;;:::i;:::-;;:::i;26435:171::-;;;;;;;;;;-1:-1:-1;26435:171:0;;;;;:::i;:::-;;:::i;25506:116::-;;;;;;;;;;-1:-1:-1;25506:116:0;;;;;:::i;:::-;;:::i;23932:143::-;;;;;;;;;;-1:-1:-1;23932:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24040:18:0;;;24013:7;24040:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23932:143;20249:32;;;;;;;;;;;;;;;;26737:112;;;;;;;;;;-1:-1:-1;26737:112:0;;;;;:::i;:::-;;:::i;17561:244::-;;;;;;;;;;-1:-1:-1;17561:244:0;;;;;:::i;:::-;;:::i;25634:166::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;;;;;;;;;25726:1:::1;25716:6;:11;;25708:20;;;::::0;::::1;;25776:7;:16:::0;25634:166::o;23171:83::-;23208:13;23241:5;23234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23171:83;:::o;24083:161::-;24158:4;24175:39;196:10;24198:7;24207:6;24175:8;:39::i;:::-;-1:-1:-1;24232:4:0;24083:161;;;;;:::o;24252:313::-;24350:4;24367:36;24377:6;24385:9;24396:6;24367:9;:36::i;:::-;24414:121;24423:6;196:10;24445:89;24483:6;24445:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24445:19:0;;;;;;:11;:19;;;;;;;;196:10;24445:33;;;;;;;;;;:37;:89::i;:::-;24414:8;:121::i;:::-;-1:-1:-1;24553:4:0;24252:313;;;;;:::o;28649:253::-;28715:7;28754;;28743;:18;;28735:73;;;;-1:-1:-1;;;28735:73:0;;5609:2:1;28735:73:0;;;5591:21:1;5648:2;5628:18;;;5621:30;5687:34;5667:18;;;5660:62;-1:-1:-1;;;5738:18:1;;;5731:40;5788:19;;28735:73:0;5581:232:1;28735:73:0;28819:19;28842:10;:8;:10::i;:::-;28819:33;-1:-1:-1;28870:24:0;:7;28819:33;28870:11;:24::i;:::-;28863:31;28649:253;-1:-1:-1;;;28649:253:0:o;25318:180::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25397:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;25389:64;;;::::0;-1:-1:-1;;;25389:64:0;;12163:2:1;25389:64:0::1;::::0;::::1;12145:21:1::0;12202:2;12182:18;;;12175:30;12241:34;12221:18;;;12214:62;-1:-1:-1;;;12292:18:1;;;12285:31;12333:19;;25389:64:0::1;12135:223:1::0;25389:64:0::1;-1:-1:-1::0;;;;;25464:18:0::1;25485:5;25464:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;25464:26:0::1;::::0;;25318:180::o;29365:479::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29447:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29439:60;;;::::0;-1:-1:-1;;;29439:60:0;;7590:2:1;29439:60:0::1;::::0;::::1;7572:21:1::0;7629:2;7609:18;;;7602:30;7668:29;7648:18;;;7641:57;7715:18;;29439:60:0::1;7562:177:1::0;29439:60:0::1;29515:9;29510:327;29534:9;:16:::0;29530:20;::::1;29510:327;;;29592:7;-1:-1:-1::0;;;;;29576:23:0::1;:9;29586:1;29576:12;;;;;;-1:-1:-1::0;;;29576:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;29576:12:0::1;:23;29572:254;;;29635:9;29645:16:::0;;:20:::1;::::0;29664:1:::1;::::0;29645:20:::1;:::i;:::-;29635:31;;;;;;-1:-1:-1::0;;;29635:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;29620:9:::1;:12:::0;;-1:-1:-1;;;;;29635:31:0;;::::1;::::0;29630:1;;29620:12;::::1;;;-1:-1:-1::0;;;29620:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;29620:46:0::1;-1:-1:-1::0;;;;;29620:46:0;;::::1;;::::0;;29685:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;29724:11:::1;:20:::0;;;;:28;;-1:-1:-1;;29724:28:0::1;::::0;;29771:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;29771:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29771:15:0;;;;;-1:-1:-1;;;;;;29771:15:0::1;::::0;;;;;29510:327:::1;29365:479:::0;:::o;29572:254::-:1;29552:3:::0;::::1;::::0;::::1;:::i;:::-;;;;29510:327;;;;29365:479:::0;:::o;24573:218::-;196:10;24661:4;24710:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24710:34:0;;;;;;;;;;24661:4;;24678:83;;24701:7;;24710:50;;24749:10;24710:38;:50::i;27820:377::-;196:10;27872:14;27921:19;;;:11;:19;;;;;;;;27920:20;27912:77;;;;-1:-1:-1;;;27912:77:0;;12565:2:1;27912:77:0;;;12547:21:1;12604:2;12584:18;;;12577:30;12643:34;12623:18;;;12616:62;-1:-1:-1;;;12694:18:1;;;12687:42;12746:19;;27912:77:0;12537:234:1;27912:77:0;28001:15;28025:19;28036:7;28025:10;:19::i;:::-;-1:-1:-1;;;;;;;;;28073:15:0;;;;;;:7;:15;;;;;;28000:44;;-1:-1:-1;28073:28:0;;:15;-1:-1:-1;28000:44:0;28073:19;:28::i;:::-;-1:-1:-1;;;;;28055:15:0;;;;;;:7;:15;;;;;:46;28122:7;;:20;;28134:7;28122:11;:20::i;:::-;28112:7;:30;28166:10;;:23;;28181:7;28166:14;:23::i;:::-;28153:10;:36;-1:-1:-1;;;27820:377:0:o;26080:347::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26190:5:::1;26179:7;:16;;26171:25;;;::::0;::::1;;26253:99;26292:7;26253:20;26265:7;26253;;:11;;:20;;;;:::i;:::-;:24:::0;::::1;:99::i;:::-;26238:12;:114:::0;26379:14:::1;::::0;:40:::1;::::0;26411:7;;26379:27:::1;::::0;26398:7;26379:18:::1;:27::i;:40::-;26363:13;:56:::0;-1:-1:-1;;26080:347:0:o;26857:352::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26952:42:::1;-1:-1:-1::0;;;;;26941:53:0;::::1;;;26933:102;;;::::0;-1:-1:-1;;;26933:102:0;;10947:2:1;26933:102:0::1;::::0;::::1;10929:21:1::0;10986:2;10966:18;;;10959:30;11025:34;11005:18;;;10998:62;-1:-1:-1;;;11076:18:1;;;11069:34;11120:19;;26933:102:0::1;10919:226:1::0;26933:102:0::1;-1:-1:-1::0;;;;;27055:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27054:27;27046:70;;;::::0;-1:-1:-1;;;27046:70:0;;7946:2:1;27046:70:0::1;::::0;::::1;7928:21:1::0;7985:2;7965:18;;;7958:30;8024:32;8004:18;;;7997:60;8074:18;;27046:70:0::1;7918:180:1::0;27046:70:0::1;-1:-1:-1::0;;;;;27127:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;27127:33:0::1;27156:4;27127:33:::0;;::::1;::::0;;;27171:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27171:30:0::1;::::0;;::::1;::::0;;26857:352::o;26614:111::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26683:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26683:34:0::1;26713:4;26683:34;::::0;;26614:111::o;28205:436::-;28295:7;28334;;28323;:18;;28315:62;;;;-1:-1:-1;;;28315:62:0;;8305:2:1;28315:62:0;;;8287:21:1;8344:2;8324:18;;;8317:30;8383:33;8363:18;;;8356:61;8434:18;;28315:62:0;8277:181:1;28315:62:0;28393:17;28388:246;;28428:15;28452:19;28463:7;28452:10;:19::i;:::-;-1:-1:-1;28427:44:0;;-1:-1:-1;28486:14:0;;-1:-1:-1;;;;;28486:14:0;28388:246;28535:23;28566:19;28577:7;28566:10;:19::i;:::-;-1:-1:-1;28533:52:0;;-1:-1:-1;28600:22:0;;-1:-1:-1;;;;;28600:22:0;28910:447;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29107:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;29106:21;29098:61;;;::::0;-1:-1:-1;;;29098:61:0;;7590:2:1;29098:61:0::1;::::0;::::1;7572:21:1::0;7629:2;7609:18;;;7602:30;7668:29;7648:18;;;7641:57;7715:18;;29098:61:0::1;7562:177:1::0;29098:61:0::1;-1:-1:-1::0;;;;;29173:16:0;::::1;29192:1;29173:16:::0;;;:7:::1;:16;::::0;;;;;:20;29170:108:::1;;-1:-1:-1::0;;;;;29249:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;29229:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;29210:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;29170:108:::1;-1:-1:-1::0;;;;;29288:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;29288:27:0::1;29311:4;29288:27:::0;;::::1;::::0;;;29326:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;29326:23:0::1;::::0;;::::1;::::0;;28910:447::o;23551:198::-;-1:-1:-1;;;;;23641:20:0;;23617:7;23641:20;;;:11;:20;;;;;;;;23637:49;;;-1:-1:-1;;;;;;23670:16:0;;;;;:7;:16;;;;;;;23551:198::o;23637:49::-;-1:-1:-1;;;;;23724:16:0;;;;;;:7;:16;;;;;;23704:37;;:19;:37::i;17405:148::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;17512:1:::1;17496:6:::0;;17475:40:::1;::::0;-1:-1:-1;;;;;17496:6:0;;::::1;::::0;17475:40:::1;::::0;17512:1;;17475:40:::1;17543:1;17526:19:::0;;-1:-1:-1;;;;;;17526:19:0::1;::::0;;17405:148::o;27217:500::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27306:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;27298:65;;;::::0;-1:-1:-1;;;27298:65:0;;10247:2:1;27298:65:0::1;::::0;::::1;10229:21:1::0;10286:2;10266:18;;;10259:30;10325:28;10305:18;;;10298:56;10371:18;;27298:65:0::1;10219:176:1::0;27298:65:0::1;27379:9;27374:336;27398:16;:23:::0;27394:27;::::1;27374:336;;;27470:7;-1:-1:-1::0;;;;;27447:30:0::1;:16;27464:1;27447:19;;;;;;-1:-1:-1::0;;;27447:19:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27447:19:0::1;:30;27443:256;;;27520:16;27537:23:::0;;:27:::1;::::0;27563:1:::1;::::0;27537:27:::1;:::i;:::-;27520:45;;;;;;-1:-1:-1::0;;;27520:45:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27498:16:::1;:19:::0;;-1:-1:-1;;;;;27520:45:0;;::::1;::::0;27515:1;;27498:19;::::1;;;-1:-1:-1::0;;;27498:19:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;27498:67:0::1;-1:-1:-1::0;;;;;27498:67:0;;::::1;;::::0;;27584:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;27584:34:0::1;::::0;;27637:16:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;27637:22:0::1;;;;;;;;27443:256;27423:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27374:336;;25812:196:::0;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;25922:1:::1;25906:12;:17;;25898:26;;;::::0;::::1;;25972:13;:28:::0;25812:196::o;23262:87::-;23301:13;23334:7;23327:14;;;;;:::i;24799:269::-;24892:4;24909:129;196:10;24932:7;24941:96;24980:15;24941:96;;;;;;;;;;;;;;;;;196:10;24941:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24941:34:0;;;;;;;;;;;;:38;:96::i;23757:167::-;23835:4;23852:42;196:10;23876:9;23887:6;23852:9;:42::i;26435:171::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;26512:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26512:32:0::1;-1:-1:-1::0;;;;26512:32:0;;::::1;;::::0;;26560:38:::1;::::0;::::1;::::0;::::1;::::0;26536:8;4133:14:1;4126:22;4108:41;;4096:2;4081:18;;4063:92;26560:38:0::1;;;;;;;;26435:171:::0;:::o;25506:116::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;25588:16:::1;:26:::0;;-1:-1:-1;;25588:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25506:116::o;26737:112::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26806:27:0::1;26836:5;26806:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26806:35:0::1;::::0;;26737:112::o;17561:244::-;17318:6;;-1:-1:-1;;;;;17318:6:0;196:10;17318:22;17310:67;;;;-1:-1:-1;;;17310:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17650:22:0;::::1;17642:73;;;::::0;-1:-1:-1;;;17642:73:0;;6020:2:1;17642:73:0::1;::::0;::::1;6002:21:1::0;6059:2;6039:18;;;6032:30;6098:34;6078:18;;;6071:62;-1:-1:-1;;;6149:18:1;;;6142:36;6195:19;;17642:73:0::1;5992:228:1::0;17642:73:0::1;17752:6;::::0;;17731:38:::1;::::0;-1:-1:-1;;;;;17731:38:0;;::::1;::::0;17752:6;::::1;::::0;17731:38:::1;::::0;::::1;17780:6;:17:::0;;-1:-1:-1;;;;;;17780:17:0::1;-1:-1:-1::0;;;;;17780:17:0;;;::::1;::::0;;;::::1;::::0;;17561:244::o;33398:337::-;-1:-1:-1;;;;;33491:19:0;;33483:68;;;;-1:-1:-1;;;33483:68:0;;11758:2:1;33483:68:0;;;11740:21:1;11797:2;11777:18;;;11770:30;11836:34;11816:18;;;11809:62;-1:-1:-1;;;11887:18:1;;;11880:34;11931:19;;33483:68:0;11730:226:1;33483:68:0;-1:-1:-1;;;;;33570:21:0;;33562:68;;;;-1:-1:-1;;;33562:68:0;;6427:2:1;33562:68:0;;;6409:21:1;6466:2;6446:18;;;6439:30;6505:34;6485:18;;;6478:62;-1:-1:-1;;;6556:18:1;;;6549:32;6598:19;;33562:68:0;6399:224:1;33562:68:0;-1:-1:-1;;;;;33643:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33695:32;;13274:25:1;;;33695:32:0;;13247:18:1;33695:32:0;;;;;;;33398:337;;;:::o;34406:2191::-;-1:-1:-1;;;;;34528:18:0;;34520:68;;;;-1:-1:-1;;;34520:68:0;;11352:2:1;34520:68:0;;;11334:21:1;11391:2;11371:18;;;11364:30;11430:34;11410:18;;;11403:62;-1:-1:-1;;;11481:18:1;;;11474:35;11526:19;;34520:68:0;11324:227:1;34520:68:0;-1:-1:-1;;;;;34607:16:0;;34599:64;;;;-1:-1:-1;;;34599:64:0;;5205:2:1;34599:64:0;;;5187:21:1;5244:2;5224:18;;;5217:30;5283:34;5263:18;;;5256:62;-1:-1:-1;;;5334:18:1;;;5327:33;5377:19;;34599:64:0;5177:225:1;34599:64:0;34691:1;34682:6;:10;34674:64;;;;-1:-1:-1;;;34674:64:0;;9837:2:1;34674:64:0;;;9819:21:1;9876:2;9856:18;;;9849:30;9915:34;9895:18;;;9888:62;-1:-1:-1;;;9966:18:1;;;9959:39;10015:19;;34674:64:0;9809:231:1;34674:64:0;-1:-1:-1;;;;;34758:23:0;;;;;;:17;:23;;;;;;;;34757:24;34749:60;;;;-1:-1:-1;;;34749:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34829:21:0;;;;;;:17;:21;;;;;;;;34828:22;34820:58;;;;-1:-1:-1;;;34820:58:0;;;;;;;:::i;:::-;34916:9;34898:28;;;;:17;:28;;;;;;;;34897:29;34889:65;;;;-1:-1:-1;;;34889:65:0;;;;;;;:::i;:::-;34983:3;34969:11;;:17;34965:277;;-1:-1:-1;;;;;35007:23:0;;;;;;:17;:23;;;;;;;;35006:24;:50;;;;-1:-1:-1;;;;;;35035:21:0;;;;;;:17;:21;;;;;;;;35034:22;35006:50;:76;;;;-1:-1:-1;35069:13:0;;-1:-1:-1;;;;;35061:21:0;;;35069:13;;35061:21;35006:76;35003:228;;;35103:18;:16;:18::i;:::-;35158:12;;35148:6;:22;;35140:75;;;;-1:-1:-1;;;35140:75:0;;8665:2:1;35140:75:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743:34;8723:18;;;8716:62;-1:-1:-1;;;8794:18:1;;;8787:38;8842:19;;35140:75:0;8637:230:1;35140:75:0;35538:28;35569:24;35587:4;35569:9;:24::i;:::-;35538:55;;35641:12;;35617:20;:36;;:58;;;;;35672:3;35657:11;;:18;;35617:58;35614:134;;;-1:-1:-1;35724:12:0;;35614:134;35819:29;;35795:53;;;;;;;35863:54;;-1:-1:-1;35901:16:0;;-1:-1:-1;;;35901:16:0;;;;35900:17;35863:54;:92;;;;-1:-1:-1;35942:13:0;;-1:-1:-1;;;;;35934:21:0;;;35942:13;;35934:21;;35863:92;:130;;;;-1:-1:-1;35972:21:0;;-1:-1:-1;;;35972:21:0;;;;35863:130;35859:305;;;36043:29;;36020:52;;36116:36;36131:20;36116:14;:36::i;:::-;-1:-1:-1;;;;;36372:24:0;;36245:12;36372:24;;;:18;:24;;;;;;36260:4;;36372:24;;;:50;;-1:-1:-1;;;;;;36400:22:0;;;;;;:18;:22;;;;;;;;36372:50;36369:96;;;-1:-1:-1;36448:5:0;36369:96;36551:38;36566:4;36571:2;36574:6;36581:7;36551:14;:38::i;:::-;34406:2191;;;;;;:::o;1503:192::-;1589:7;1625:12;1617:6;;;;1609:29;;;;-1:-1:-1;;;1609:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1649:9:0;1661:5;1665:1;1661;:5;:::i;:::-;1649:17;1503:192;-1:-1:-1;;;;;1503:192:0:o;31307:163::-;31348:7;31369:15;31386;31405:19;:17;:19::i;:::-;31368:56;;-1:-1:-1;31368:56:0;-1:-1:-1;31442:20:0;31368:56;;31442:11;:20::i;:::-;31435:27;;;;31307:163;:::o;2182:132::-;2240:7;2267:39;2271:1;2274;2267:39;;;;;;;;;;;;;;;;;:3;:39::i;1170:181::-;1228:7;;1260:5;1264:1;1260;:5;:::i;:::-;1248:17;;1289:1;1284;:6;;1276:46;;;;-1:-1:-1;;;1276:46:0;;7234:2:1;1276:46:0;;;7216:21:1;7273:2;7253:18;;;7246:30;7312:29;7292:18;;;7285:57;7359:18;;1276:46:0;7206:177:1;30105:419:0;30164:7;30173;30182;30191;30200;30209;30230:23;30255:12;30269:18;30291:20;30303:7;30291:11;:20::i;:::-;30229:82;;;;;;30323:15;30340:23;30365:12;30381:50;30393:7;30402:4;30408:10;30420;:8;:10::i;:::-;30381:11;:50::i;:::-;30322:109;;;;-1:-1:-1;30322:109:0;;-1:-1:-1;30482:15:0;;-1:-1:-1;30499:4:0;;-1:-1:-1;30505:10:0;;-1:-1:-1;30105:419:0;;-1:-1:-1;;;;;30105:419:0:o;1359:136::-;1417:7;1444:43;1448:1;1451;1444:43;;;;;;;;;;;;;;;;;:3;:43::i;1703:471::-;1761:7;2006:6;2002:47;;-1:-1:-1;2036:1:0;2029:8;;2002:47;2061:9;2073:5;2077:1;2073;:5;:::i;:::-;2061:17;-1:-1:-1;2106:1:0;2097:5;2101:1;2061:17;2097:5;:::i;:::-;:10;2089:56;;;;-1:-1:-1;;;2089:56:0;;9074:2:1;2089:56:0;;;9056:21:1;9113:2;9093:18;;;9086:30;9152:34;9132:18;;;9125:62;-1:-1:-1;;;9203:18:1;;;9196:31;9244:19;;2089:56:0;9046:223:1;33743:655:0;33791:15;33817;33861:2;33847:11;;:16;33843:380;;-1:-1:-1;33890:1:0;;-1:-1:-1;33916:4:0;33843:380;;;33965:3;33951:11;;:17;33947:276;;-1:-1:-1;33995:1:0;;-1:-1:-1;34021:3:0;33947:276;;;34069:3;34055:11;;:17;34051:172;;-1:-1:-1;34099:1:0;;-1:-1:-1;34125:3:0;34051:172;;;-1:-1:-1;34180:3:0;;-1:-1:-1;34180:3:0;34248:33;34273:7;34248:20;34260:7;34248;;:11;;:20;;;;:::i;36605:985::-;20636:16;:23;;-1:-1:-1;;;;20636:23:0;-1:-1:-1;;;20636:23:0;;;;36756:27:::1;:20:::0;36781:1:::1;36756:24;:27::i;:::-;36741:42:::0;-1:-1:-1;36794:17:0::1;36814:30;:20:::0;36741:42;36814:24:::1;:30::i;:::-;36794:50:::0;-1:-1:-1;37147:21:0::1;37213:22;37230:4:::0;37213:16:::1;:22::i;:::-;37366:18;37387:41;:21;37413:14:::0;37387:25:::1;:41::i;:::-;37366:62;;37478:35;37491:9;37502:10;37478:12;:35::i;:::-;37539:43;::::0;;14500:25:1;;;14556:2;14541:18;;14534:34;;;14584:18;;;14577:34;;;37539:43:0::1;::::0;14488:2:1;14473:18;37539:43:0::1;;;;;;;-1:-1:-1::0;;20682:16:0;:24;;-1:-1:-1;;;;20682:24:0;;;-1:-1:-1;;;36605:985:0:o;39200:1902::-;39369:16;;;;39365:876;;;-1:-1:-1;;;;;25284:18:0;;25260:4;25284:18;;;:9;:18;;;;;;;;39465:83;;;39506:26;;-1:-1:-1;;;39506:26:0;;10602:2:1;39506:26:0;;;10584:21:1;10641:2;10621:18;;;10614:30;-1:-1:-1;;;10660:18:1;;;10653:46;10716:18;;39506:26:0;10574:166:1;39465:83:0;39638:16;;;;;;;39633:597;;39675:37;39694:6;39702:9;39675:18;:37::i;:::-;39633:597;;;39772:1;39757:12;;:16;:65;;;;-1:-1:-1;39809:13:0;;-1:-1:-1;;;;;39799:23:0;;;39809:13;;39799:23;39757:65;:117;;;;-1:-1:-1;;;;;;39849:25:0;;;;;;:17;:25;;;;;;;;39848:26;39757:117;:171;;;;-1:-1:-1;;;;;;39900:28:0;;;;;;:17;:28;;;;;;;;39899:29;39757:171;39753:462;;;40005:13;;39990:12;;39975:27;;:12;:27;:::i;:::-;:43;39971:225;;;-1:-1:-1;;;;;40047:20:0;;;;;;:9;:20;;;;;:27;;-1:-1:-1;;40047:27:0;40070:4;40047:27;;;40101:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;40149:23:0;;-1:-1:-1;;;;;3312:32:1;;3294:51;;40149:23:0;;3282:2:1;3267:18;40149:23:0;;;;;;;39971:225;40257:7;40253:40;;40279:14;:12;:14::i;:::-;-1:-1:-1;;;;;40318:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;40342:22:0;;;;;;:11;:22;;;;;;;;40341:23;40318:46;40314:597;;;40381:48;40403:6;40411:9;40422:6;40381:21;:48::i;:::-;40314:597;;;-1:-1:-1;;;;;40452:19:0;;;;;;:11;:19;;;;;;;;40451:20;:46;;;;-1:-1:-1;;;;;;40475:22:0;;;;;;:11;:22;;;;;;;;40451:46;40447:464;;;40514:46;40534:6;40542:9;40553:6;40514:19;:46::i;40447:464::-;-1:-1:-1;;;;;40583:19:0;;;;;;:11;:19;;;;;;;;40582:20;:47;;;;-1:-1:-1;;;;;;40607:22:0;;;;;;:11;:22;;;;;;;;40606:23;40582:47;40578:333;;;40646:44;40664:6;40672:9;40683:6;40646:17;:44::i;40578:333::-;-1:-1:-1;;;;;40712:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40735:22:0;;;;;;:11;:22;;;;;;;;40712:45;40708:203;;;40774:48;40796:6;40804:9;40815:6;40774:21;:48::i;40708:203::-;40855:44;40873:6;40881:9;40892:6;40855:17;:44::i;:::-;40935:7;40931:41;;40957:15;33184;;33174:7;:25;33226:21;;33210:13;:37;33130:125;40957:15;41003:3;40989:11;;:17;:37;;;;-1:-1:-1;41010:16:0;;;;;;;40989:37;:64;;;;-1:-1:-1;41040:13:0;;-1:-1:-1;;;;;41030:23:0;;;41040:13;;41030:23;40989:64;40985:110;;;41070:11;:13;;;:11;:13;;;:::i;:::-;;;;;;40985:110;39200:1902;;;;:::o;31478:561::-;31575:7;;31611;;31528;;;;;31635:289;31659:9;:16;31655:20;;31635:289;;;31725:7;31701;:21;31709:9;31719:1;31709:12;;;;;;-1:-1:-1;;;31709:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31709:12:0;31701:21;;;;;;;;;;;;;:31;;:66;;;31760:7;31736;:21;31744:9;31754:1;31744:12;;;;;;-1:-1:-1;;;31744:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31744:12:0;31736:21;;;;;;;;;;;;;:31;31701:66;31697:97;;;31777:7;;31786;;31769:25;;;;;;;31478:561;;:::o;31697:97::-;31819:34;31831:7;:21;31839:9;31849:1;31839:12;;;;;;-1:-1:-1;;;31839:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31839:12:0;31831:21;;;;;;;;;;;;;31819:7;;:11;:34::i;:::-;31809:44;;31878:34;31890:7;:21;31898:9;31908:1;31898:12;;;;;;-1:-1:-1;;;31898:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31898:12:0;31890:21;;;;;;;;;;;;;31878:7;;:11;:34::i;:::-;31868:44;-1:-1:-1;31677:3:0;;;;:::i;:::-;;;;31635:289;;;-1:-1:-1;31960:7:0;;31948;;:20;;:11;:20::i;:::-;31938:7;:30;31934:61;;;31978:7;;31987;;31970:25;;;;;;31478:561;;:::o;31934:61::-;32014:7;;32023;;-1:-1:-1;31478:561:0;-1:-1:-1;31478:561:0:o;2322:278::-;2408:7;2443:12;2436:5;2428:28;;;;-1:-1:-1;;;2428:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2467:9:0;2479:5;2483:1;2479;:5;:::i;30532:330::-;30592:7;30601;30610;30630:12;30645:24;30661:7;30645:15;:24::i;:::-;30630:39;;30680:18;30701:30;30723:7;30701:21;:30::i;:::-;30680:51;-1:-1:-1;30742:23:0;30768:33;30680:51;30768:17;:7;30780:4;30768:11;:17::i;:::-;:21;;:33::i;:::-;30742:59;30837:4;;-1:-1:-1;30843:10:0;;-1:-1:-1;30532:330:0;;-1:-1:-1;;;30532:330:0:o;30870:429::-;30985:7;;;;31041:24;:7;31053:11;31041;:24::i;:::-;31023:42;-1:-1:-1;31076:12:0;31091:21;:4;31100:11;31091:8;:21::i;:::-;31076:36;-1:-1:-1;31123:18:0;31144:27;:10;31159:11;31144:14;:27::i;:::-;31123:48;-1:-1:-1;31182:23:0;31208:33;31123:48;31208:17;:7;31220:4;31208:11;:17::i;:33::-;31260:7;;;;-1:-1:-1;31286:4:0;;-1:-1:-1;30870:429:0;;-1:-1:-1;;;;;;;30870:429:0:o;37598:589::-;37748:16;;;37762:1;37748:16;;;;;;;;37724:21;;37748:16;;;;;;;;;;-1:-1:-1;37748:16:0;37724:40;;37793:4;37775;37780:1;37775:7;;;;;;-1:-1:-1;;;37775:7:0;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;37775:23:0;;;-1:-1:-1;;;;;37775:23:0;;;;;37819:15;-1:-1:-1;;;;;37819:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37809:4;37814:1;37809:7;;;;;;-1:-1:-1;;;37809:7:0;;;;;;;;;;;;;;:32;-1:-1:-1;;;;;37809:32:0;;;-1:-1:-1;;;;;37809:32:0;;;;;37854:62;37871:4;37886:15;37904:11;37854:8;:62::i;:::-;37955:224;;-1:-1:-1;;;37955:224:0;;-1:-1:-1;;;;;37955:15:0;:66;;;;:224;;38036:11;;38062:1;;38106:4;;38133;;38153:15;;37955:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38195:517;38343:62;38360:4;38375:15;38393:11;38343:8;:62::i;:::-;38652:11;;38448:256;;-1:-1:-1;;;38448:256:0;;38520:4;38448:256;;;3697:34:1;3747:18;;;3740:34;;;38566:1:0;3790:18:1;;;3783:34;;;3833:18;;;3826:34;-1:-1:-1;;;;;38652:11:0;;;3876:19:1;;;3869:44;38678:15:0;3929:19:1;;;3922:35;38448:15:0;:31;;;;;;38487:9;;3631:19:1;;38448:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38195:517;;:::o;38720:399::-;38802:16;;;;;;;38801:17;38793:65;;;;-1:-1:-1;;;38793:65:0;;6830:2:1;38793:65:0;;;6812:21:1;6869:2;6849:18;;;6842:30;6908:34;6888:18;;;6881:62;-1:-1:-1;;;6959:18:1;;;6952:33;7002:19;;38793:65:0;6802:225:1;38793:65:0;-1:-1:-1;;;;;38873:23:0;;;;;;:17;:23;;;;;;;;:46;;;;-1:-1:-1;38906:13:0;;-1:-1:-1;;;;;38900:19:0;;;38906:13;;38900:19;38873:46;38869:243;;;38936:16;:23;;-1:-1:-1;;38936:23:0;;;;;38989:12;38974;:27;39018:21;:28;;-1:-1:-1;;;;39018:28:0;-1:-1:-1;;;39018:28:0;;;39066:34;;;;;;38955:4;4133:14:1;4126:22;4108:41;;4096:2;4081:18;;4063:92;39066:34:0;;;;;;;;38720:399;;:::o;32868:250::-;32914:7;;:12;:34;;;;-1:-1:-1;32930:13:0;;:18;32914:34;32911:46;;;32868:250::o;32911:46::-;32995:7;;;32977:15;:25;33037:13;;;33013:21;:37;-1:-1:-1;33071:11:0;;;;33093:17;32868:250::o;42230:574::-;42333:15;42350:23;42375:12;42389:23;42414:12;42428:18;42450:19;42461:7;42450:10;:19::i;:::-;-1:-1:-1;;;;;42498:15:0;;;;;;:7;:15;;;;;;42332:137;;-1:-1:-1;42332:137:0;;-1:-1:-1;42332:137:0;;-1:-1:-1;42332:137:0;-1:-1:-1;42332:137:0;-1:-1:-1;42332:137:0;-1:-1:-1;42498:28:0;;42518:7;42498:19;:28::i;:::-;-1:-1:-1;;;;;42480:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42555:7;:15;;;;:28;;42575:7;42555:19;:28::i;:::-;-1:-1:-1;;;;;42537:15:0;;;;;;;:7;:15;;;;;;:46;;;;42615:18;;;;;;;:39;;42638:15;42615:22;:39::i;:::-;-1:-1:-1;;;;;42594:18:0;;;;;;:7;:18;;;;;:60;42668:34;42683:6;42691:10;42668:14;:34::i;:::-;42713:23;42725:4;42731;42713:11;:23::i;:::-;42769:9;-1:-1:-1;;;;;42752:44:0;42761:6;-1:-1:-1;;;;;42752:44:0;;42780:15;42752:44;;;;13274:25:1;;13262:2;13247:18;;13229:76;42752:44:0;;;;;;;;42230:574;;;;;;;;;:::o;41628:594::-;41729:15;41746:23;41771:12;41785:23;41810:12;41824:18;41846:19;41857:7;41846:10;:19::i;:::-;-1:-1:-1;;;;;41894:15:0;;;;;;:7;:15;;;;;;41728:137;;-1:-1:-1;41728:137:0;;-1:-1:-1;41728:137:0;;-1:-1:-1;41728:137:0;-1:-1:-1;41728:137:0;-1:-1:-1;41728:137:0;-1:-1:-1;41894:28:0;;41728:137;41894:19;:28::i;:::-;-1:-1:-1;;;;;41876:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;41954:18;;;;;:7;:18;;;;;:39;;41977:15;41954:22;:39::i;:::-;-1:-1:-1;;;;;41933:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42025:7;:18;;;;:39;;42048:15;42025:22;:39::i;41110:510::-;41209:15;41226:23;41251:12;41265:23;41290:12;41304:18;41326:19;41337:7;41326:10;:19::i;:::-;-1:-1:-1;;;;;41374:15:0;;;;;;:7;:15;;;;;;41208:137;;-1:-1:-1;41208:137:0;;-1:-1:-1;41208:137:0;;-1:-1:-1;41208:137:0;-1:-1:-1;41208:137:0;-1:-1:-1;41208:137:0;-1:-1:-1;41374:28:0;;41208:137;41374:19;:28::i;42812:650::-;42915:15;42932:23;42957:12;42971:23;42996:12;43010:18;43032:19;43043:7;43032:10;:19::i;:::-;-1:-1:-1;;;;;43080:15:0;;;;;;:7;:15;;;;;;42914:137;;-1:-1:-1;42914:137:0;;-1:-1:-1;42914:137:0;;-1:-1:-1;42914:137:0;-1:-1:-1;42914:137:0;-1:-1:-1;42914:137:0;-1:-1:-1;43080:28:0;;43100:7;43080:19;:28::i;:::-;-1:-1:-1;;;;;43062:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43137:7;:15;;;;:28;;43157:7;43137:19;:28::i;32532:154::-;32596:7;32623:55;32662:5;32623:20;32635:7;;32623;:11;;:20;;;;:::i;32694:166::-;32764:7;32791:61;32836:5;32791:26;32803:13;;32791:7;:11;;:26;;;;:::i;32051:469::-;32130:19;32153:10;:8;:10::i;:::-;32130:33;-1:-1:-1;32174:18:0;32195:27;:10;32130:33;32195:14;:27::i;:::-;32274:4;32258:22;;;;:7;:22;;;;;;32174:48;;-1:-1:-1;32258:38:0;;32174:48;32258:26;:38::i;:::-;32249:4;32233:22;;;;:7;:22;;;;;;;;:63;;;;32310:11;:26;;;;;;32307:107;;;32392:4;32376:22;;;;:7;:22;;;;;;:38;;32403:10;32376:26;:38::i;:::-;32367:4;32351:22;;;;:7;:22;;;;;:63;32307:107;32430:43;;13274:25:1;;;32455:4:0;;-1:-1:-1;;;;;32430:43:0;;;;;13262:2:1;13247:18;32430:43:0;;;;;;;32051:469;;;;:::o;29950:147::-;30028:7;;:17;;30040:4;30028:11;:17::i;:::-;30018:7;:27;30069:10;;:20;;30084:4;30069:14;:20::i;:::-;30056:10;:33;-1:-1:-1;;29950:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;2165:6;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;2366:6;2374;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:258::-;2632:6;2640;2693:2;2681:9;2672:7;2668:23;2664:32;2661:2;;;2714:6;2706;2699:22;2661:2;-1:-1:-1;;2742:23:1;;;2812:2;2797:18;;;2784:32;;-1:-1:-1;2651:171:1:o;2827:316::-;2915:6;2923;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:2;;;3005:6;2997;2990:22;2952:2;3039:9;3033:16;3023:26;;3089:2;3078:9;3074:18;3068:25;3058:35;;3133:2;3122:9;3118:18;3112:25;3102:35;;2942:201;;;;;:::o;4395:603::-;4507:4;4536:2;4565;4554:9;4547:21;4597:6;4591:13;4640:6;4635:2;4624:9;4620:18;4613:34;4665:4;4678:140;4692:6;4689:1;4686:13;4678:140;;;4787:14;;;4783:23;;4777:30;4753:17;;;4772:2;4749:26;4742:66;4707:10;;4678:140;;;4836:6;4833:1;4830:13;4827:2;;;4906:4;4901:2;4892:6;4881:9;4877:22;4873:31;4866:45;4827:2;-1:-1:-1;4982:2:1;4961:15;-1:-1:-1;;4957:29:1;4942:45;;;;4989:2;4938:54;;4516:482;-1:-1:-1;;;4516:482:1:o;9274:356::-;9476:2;9458:21;;;9495:18;;;9488:30;9554:34;9549:2;9534:18;;9527:62;9621:2;9606:18;;9448:182::o;12776:347::-;12978:2;12960:21;;;13017:2;12997:18;;;12990:30;13056:25;13051:2;13036:18;;13029:53;13114:2;13099:18;;12950:173::o;13310:983::-;13572:4;13620:3;13609:9;13605:19;13651:6;13640:9;13633:25;13677:2;13715:6;13710:2;13699:9;13695:18;13688:34;13758:3;13753:2;13742:9;13738:18;13731:31;13782:6;13817;13811:13;13848:6;13840;13833:22;13886:3;13875:9;13871:19;13864:26;;13925:2;13917:6;13913:15;13899:29;;13946:4;13959:195;13973:6;13970:1;13967:13;13959:195;;;14038:13;;-1:-1:-1;;;;;14034:39:1;14022:52;;14129:15;;;;14094:12;;;;14070:1;13988:9;13959:195;;;-1:-1:-1;;;;;;;14210:32:1;;;;14205:2;14190:18;;14183:60;-1:-1:-1;;;14274:3:1;14259:19;14252:35;14171:3;13581:712;-1:-1:-1;;;13581:712:1:o;14811:128::-;14851:3;14882:1;14878:6;14875:1;14872:13;14869:2;;;14888:18;;:::i;:::-;-1:-1:-1;14924:9:1;;14859:80::o;14944:217::-;14984:1;15010;15000:2;;-1:-1:-1;;;15035:31:1;;15089:4;15086:1;15079:15;15117:4;15042:1;15107:15;15000:2;-1:-1:-1;15146:9:1;;14990:171::o;15166:168::-;15206:7;15272:1;15268;15264:6;15260:14;15257:1;15254:21;15249:1;15242:9;15235:17;15231:45;15228:2;;;15279:18;;:::i;:::-;-1:-1:-1;15319:9:1;;15218:116::o;15339:125::-;15379:4;15407:1;15404;15401:8;15398:2;;;15412:18;;:::i;:::-;-1:-1:-1;15449:9:1;;15388:76::o;15469:380::-;15548:1;15544:12;;;;15591;;;15612:2;;15666:4;15658:6;15654:17;15644:27;;15612:2;15719;15711:6;15708:14;15688:18;15685:38;15682:2;;;15765:10;15760:3;15756:20;15753:1;15746:31;15800:4;15797:1;15790:15;15828:4;15825:1;15818:15;15682:2;;15524:325;;;:::o;15854:135::-;15893:3;-1:-1:-1;;15914:17:1;;15911:2;;;15934:18;;:::i;:::-;-1:-1:-1;15981:1:1;15970:13;;15901:88::o;15994:127::-;16055:10;16050:3;16046:20;16043:1;16036:31;16086:4;16083:1;16076:15;16110:4;16107:1;16100:15;16126:131;-1:-1:-1;;;;;16201:31:1;;16191:42;;16181:2;;16247:1;16244;16237:12;16181:2;16171:86;:::o

Swarm Source

ipfs://ad28e8dcbae1da4fd68ac5b0c05815fc414fc1d684d4b1e288c190907a061712

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.