ETH Price: $2,444.91 (-1.00%)

Token

AMATERASU (Sun Goddest)
 

Overview

Max Total Supply

1,000,000,000 Sun Goddest

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
19,104,000 Sun Goddest

Value
$0.00
0x5666ba60d132edf7341166edb2e733d79b4bcde2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AMATERASU

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-02
*/

/**
 *Submitted for verification at Etherscan.io on 2022-09-02
*/

/**

    TG:https://t.me/Amaterasuerc20

*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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


// File contracts/Ownable.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/IERC20.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File contracts/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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


// File contracts/IUniswapV2Router02.sol

pragma solidity >=0.6.2;

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

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


// File contracts/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/Address.sol

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File contracts
pragma solidity ^0.8.0;

contract AMATERASU is Context, IERC20, Ownable {
    
    using Address for address payable;
    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;
    mapping(address => bool) private _isExcludedFromMaxWallet;


    mapping(address => bool) public isBot;

    address[] private _excluded;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public maxTxAmountBuy = _tTotal * 3 / 100; // 2% of supply
    uint256 public maxTxAmountSell = _tTotal * 3 / 100; // 2% of supply
    uint256 public maxWalletAmount = _tTotal * 3 / 100; // 2% of supply
    uint256 public maxBuyFee = 15; 
    uint256 public maxSellFee = 15; 

    //antisnipers
    uint256 public liqAddedBlockNumber;
    uint256 public blocksToWait = 0;

    address payable public treasuryAddress;
    address payable public devAddress;
    mapping(address => bool) public isAutomatedMarketMakerPair;

    string private constant _name = "AMATERASU";
    string private constant _symbol = "Sun Goddest";
    bool private inSwapAndLiquify;

    IUniswapV2Router02 public UniswapV2Router;
    address public uniswapPair;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = _tTotal * 4 / 1000; //0.4%

    struct feeRatesStruct {
        uint8 rfi;
        uint8 treasury;
        uint8 dev;
        uint8 lp;
        uint8 toSwap;
    }

    //Tax
    feeRatesStruct public buyRates =
        feeRatesStruct({
            rfi: 0, // 0 RFI rate, in %
            dev: 2, // dev team fee in %
            treasury: 2, // treasury fee in %
            lp: 0, // lp rate in %
            toSwap: 4 // treasury + dev + lp
        });

    feeRatesStruct public sellRates =
        feeRatesStruct({
            rfi: 0, // 0 RFI rate, in %
            dev: 2, // dev team fee in %
            treasury: 2, // treasury fee in %
            lp: 0, // lp rate in %
            toSwap: 4 // treasury + dev + lp
        });

    feeRatesStruct private appliedRates = buyRates;

    struct TotFeesPaidStruct {
        uint256 rfi;
        uint256 toSwap;
    }
    TotFeesPaidStruct public totFeesPaid;

    struct valuesFromGetValues {
        uint256 rAmount;
        uint256 rTransferAmount;
        uint256 rRfi;
        uint256 rToSwap;
        uint256 tTransferAmount;
        uint256 tRfi;
        uint256 tToSwap;
    }

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ETHReceived,
        uint256 tokensIntotoSwap
    );
    event LiquidityAdded(uint256 tokenAmount, uint256 ETHAmount);
    event TreasuryAndDevFeesAdded(uint256 devFee, uint256 treasuryFee);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BlacklistedUser(address botAddress, bool indexed value);
    event MaxWalletAmountUpdated(uint256 amount);
    event ExcludeFromMaxWallet(address account, bool indexed isExcluded);

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

    constructor() {
        IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapPair = IUniswapV2Factory(_UniswapV2Router.factory()).createPair(address(this), _UniswapV2Router.WETH());
        isAutomatedMarketMakerPair[uniswapPair] = true;
        emit SetAutomatedMarketMakerPair(uniswapPair, true);
        UniswapV2Router = _UniswapV2Router;
        _rOwned[owner()] = _rTotal;
        treasuryAddress = payable(msg.sender);
        devAddress = payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[treasuryAddress] = true;
        _isExcludedFromMaxWallet[devAddress] = true;
        _isExcludedFromMaxWallet[address(this)] = true;

        _isExcludedFromMaxWallet[uniswapPair] = true;

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

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }

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

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

    //override ERC20:
    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);

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

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

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

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

    //No current rfi - Tiered Rewarding Feature Applied at APP Launch
    function excludeFromReward(address account) external onlyOwner {
        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 not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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


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

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

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

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

    //  @dev receive ETH from UniswapV2Router when swapping
    receive() external payable {}

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -= rRfi;
        totFeesPaid.rfi += tRfi;
    }

    function _takeToSwap(uint256 rToSwap, uint256 tToSwap) private {
        _rOwned[address(this)] += rToSwap;
        if (_isExcluded[address(this)]) _tOwned[address(this)] += tToSwap;
        totFeesPaid.toSwap += tToSwap;
    }

    function _getValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory to_return)
    {
        to_return = _getTValues(tAmount, takeFee);
        (
            to_return.rAmount,
            to_return.rTransferAmount,
            to_return.rRfi,
            to_return.rToSwap
        ) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee)
        private
        view
        returns (valuesFromGetValues memory s)
    {
        if (!takeFee) {
            s.tTransferAmount = tAmount;
            return s;
        }
        s.tRfi = (tAmount * appliedRates.rfi) / 100;
        s.tToSwap = (tAmount * appliedRates.toSwap) / 100;
        s.tTransferAmount = tAmount - s.tRfi - s.tToSwap;
        return s;
    }

    function _getRValues(
        valuesFromGetValues memory s,
        uint256 tAmount,
        bool takeFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rRfi,
            uint256 rToSwap
        )
    {
        rAmount = tAmount * currentRate;

        if (!takeFee) {
            return (rAmount, rAmount, 0, 0);
        }

        rRfi = s.tRfi * currentRate;
        rToSwap = s.tToSwap * currentRate;
        rTransferAmount = rAmount - rRfi - rToSwap;
        return (rAmount, rTransferAmount, rRfi, rToSwap);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 -= _rOwned[_excluded[i]];
            tSupply -= _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        if (liqAddedBlockNumber == 0 && isAutomatedMarketMakerPair[to]) {
            liqAddedBlockNumber = block.number;
        }

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBot[from], "ERC20: address is a bot/sniper");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            amount <= balanceOf(from),
            "You are trying to transfer more than your balance"
        );
        bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]);

        if (takeFee) {
            if (isAutomatedMarketMakerPair[from]) {
                if (block.number < liqAddedBlockNumber + blocksToWait) {
                    isBot[to] = true;
                    emit BlacklistedUser(to, true);
                }

                appliedRates = buyRates;
                require(
                    amount <= maxTxAmountBuy,
                    "amount must be <= maxTxAmountBuy"
                );
            } else {
                appliedRates = sellRates;
                require(
                    amount <= maxTxAmountSell,
                    "amount must be <= maxTxAmountSell"
                );
            }
        }

        if (
            balanceOf(address(this)) >= numTokensSellToAddToLiquidity &&
            !inSwapAndLiquify &&
            !isAutomatedMarketMakerPair[from] &&
            swapAndLiquifyEnabled
        ) {
            //add liquidity
            swapAndLiquify(numTokensSellToAddToLiquidity);
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender]) {
            _tOwned[sender] -= tAmount;
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] += s.tTransferAmount;
        }

        _rOwned[sender] -= s.rAmount;
        _rOwned[recipient] += s.rTransferAmount;
        if (takeFee) {
            _reflectRfi(s.rRfi, s.tRfi);
            _takeToSwap(s.rToSwap, s.tToSwap);
            emit Transfer(sender, address(this), s.tToSwap);
        }
        require(
            _isExcludedFromMaxWallet[recipient] ||
                balanceOf(recipient) <= maxWalletAmount,
            "Recipient cannot hold more than maxWalletAmount"
        );
        emit Transfer(sender, recipient, s.tTransferAmount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 denominator = appliedRates.toSwap * 2;
        uint256 tokensToAddLiquidityWith = (contractTokenBalance *
            appliedRates.lp) / denominator;
        uint256 toSwap = contractTokenBalance - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 ETHToAddLiquidityWith = (deltaBalance * appliedRates.lp) /
            (denominator - appliedRates.lp);

        // add liquidity
        if (tokensToAddLiquidityWith >0 && ETHToAddLiquidityWith>0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }
        // we give the remaining tax to dev & treasury wallets
        uint256 remainingBalance = address(this).balance;
        uint256 devFee = (remainingBalance * appliedRates.dev) /
            (denominator - appliedRates.dev);
        uint256 treasuryFee = (remainingBalance * appliedRates.treasury) /
            (denominator - appliedRates.treasury);
        devAddress.sendValue(devFee);
        treasuryAddress.sendValue(treasuryFee);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pair path of token
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UniswapV2Router.WETH();

        if (allowance(address(this), address(UniswapV2Router)) < tokenAmount) {
            _approve(address(this), address(UniswapV2Router), ~uint256(0));
        }

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

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        // add the liquidity
        UniswapV2Router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devAddress,
            block.timestamp
        );
        emit LiquidityAdded(tokenAmount, ETHAmount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool value)
        external
        onlyOwner
    {
        require(
            isAutomatedMarketMakerPair[_pair] != value,
            "Automated market maker pair is already set to that value"
        );
        isAutomatedMarketMakerPair[_pair] = value;
        if (value) {
            _isExcludedFromMaxWallet[_pair] = true;
            emit ExcludeFromMaxWallet(_pair, value);
        }
        emit SetAutomatedMarketMakerPair(_pair, value);
    }

    function setBuyFees(
        uint8 _rfi,
        uint8 _treasury,
        uint8 _dev,
        uint8 _lp
    ) external onlyOwner {
        uint256 totalBuyFee = _rfi+_treasury+_dev+_lp;
        require(totalBuyFee <= maxBuyFee, "Fees cannot be higher than Maxfee");
        buyRates.rfi = _rfi;
        buyRates.treasury = _treasury;
        buyRates.dev = _dev;
        buyRates.lp = _lp;
        buyRates.toSwap = _treasury + _dev + _lp;
    }

    function setSellFees(
        uint8 _rfi,
        uint8 _treasury,
        uint8 _dev,
        uint8 _lp
    ) external onlyOwner {
        uint256 totalSellFee = _rfi+_treasury+_dev+_lp;
        require(totalSellFee <= maxSellFee, "Fees cannot be higher than Maxfee");
        sellRates.rfi = _rfi;
        sellRates.treasury = _treasury;
        sellRates.dev = _dev;
        sellRates.lp = _lp;
        sellRates.toSwap = _treasury + _dev + _lp;
    }

    function setMaxTransactionAmount(
        uint256 _maxTxAmountBuyPct,
        uint256 _maxTxAmountSellPct
    ) external onlyOwner {
        maxTxAmountBuy = _tTotal * _maxTxAmountBuyPct /1000; // 1 = 0.1%, 10 = 1% etc.
        maxTxAmountSell = _tTotal *_maxTxAmountSellPct /1000; // 1 = 0.1%, 10 = 1% etc.
    }

    function setNumTokensSellToAddToLiq(uint256 amountTokens)
        external
        onlyOwner
    {
        numTokensSellToAddToLiquidity = amountTokens * 10**_decimals;
    }

    function setTreasuryAddress(address payable _treasuryAddress)
        external
        onlyOwner
    {
        treasuryAddress = _treasuryAddress;
    }

    function setDevAddress(address payable _devAddress) external onlyOwner {
        devAddress = _devAddress;
    }

    function manualSwapAll() external onlyOwner {
        swapAndLiquify(balanceOf(address(this)));
    }

    //Manual swap percent of outstanding token
    function manualSwapPercentage(uint256 tokenpercentage) external onlyOwner {
        uint256 tokenstosell = (balanceOf(address(this))*tokenpercentage)/1000;
  	    swapTokensForETH(tokenstosell);
        payable(devAddress).sendValue(address(this).balance);
    }
     //Use this in case ETH are sent to the contract by mistake
    function rescueETH() external {
        devAddress.sendValue(address(this).balance);
    }
    
    function rescueAnyBEP20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }

    // To exclude bots & snipers
    function isBots(address botAddress, bool isban) external onlyOwner {      
        isBot[botAddress] = isban;
    }

    function setMaxWalletAmount(uint256 _maxWalletAmountPct) external onlyOwner {
        maxWalletAmount = _tTotal * _maxWalletAmountPct/1000; // 1 = 0.1%, 10 = 1% etc.
        emit MaxWalletAmountUpdated(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWallet[account] != excluded,
            "_isExcludedFromMaxWallet already set to that value"
        );
        _isExcludedFromMaxWallet[account] = excluded;

        emit ExcludeFromMaxWallet(account, excluded);
    }
}

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":"address","name":"botAddress","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistedUser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ETHReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntotoSwap","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"TreasuryAndDevFeesAdded","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blocksToWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","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":"","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"isban","type":"bool"}],"name":"isBots","outputs":[],"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":"isExcludedFromMaxWallet","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":[],"name":"liqAddedBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenpercentage","type":"uint256"}],"name":"manualSwapPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyBEP20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"dev","type":"uint8"},{"internalType":"uint8","name":"lp","type":"uint8"},{"internalType":"uint8","name":"toSwap","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_treasury","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmountBuyPct","type":"uint256"},{"internalType":"uint256","name":"_maxTxAmountSellPct","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmountPct","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"setNumTokensSellToAddToLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_rfi","type":"uint8"},{"internalType":"uint8","name":"_treasury","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_lp","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"toSwap","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":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620006c0565b6200002290633b9aca0062000781565b60098190556200003590600019620007bd565b6200004390600019620007a3565b600a556064600954600362000059919062000781565b62000065919062000660565b600b55606460095460036200007b919062000781565b62000087919062000660565b600c55606460095460036200009d919062000781565b620000a9919062000660565b600d55600f600e819055805560006011556016805460ff60a01b1916600160a01b1790556009546103e890620000e190600462000781565b620000ed919062000660565b6017556040805160a080820183526000808352600260208085018290528486018290526060808601849052600460809687018190526018805464ffffffffff19908116640400020200908117928390558a519889018b52878952948801869052988701949094529085019390935292909301526019805490931617909155601a805462ffffff191662ff00001961010080850460ff9081169091029190911691909117620100008085048316021764ffff000000191660ff60201b19630100000080860484160216176401000000009384900491909116909202919091179055348015620001da57600080fd5b50620001e633620005de565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023957600080fd5b505afa1580156200024e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027491906200062e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bd57600080fd5b505afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f891906200062e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200034157600080fd5b505af115801562000356573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037c91906200062e565b601680546001600160a01b0319166001600160a01b039283169081178255600090815260146020526040808220805460ff1916600190811790915592549051929316917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab9190a360158054610100600160a81b0319166101006001600160a01b03841602179055600a54600160006200041d6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160009081209190915560128054336001600160a01b03199182168117909255601380549091169091179055600190600490620004776000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556012548216815260049093528183208054851660019081179091556013549091168352818320805485168217905530835290822080549093168117909255600690620004f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556012548216815260069093528183208054851660019081179091556013548216845282842080548616821790553084528284208054861682179055601654909116835291208054909216179055620005876000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005cf91815260200190565b60405180910390a35062000800565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200064157600080fd5b81516001600160a01b03811681146200065957600080fd5b9392505050565b600082620006725762000672620007ea565b500490565b600181815b80851115620006b85781600019048211156200069c576200069c620007d4565b80851615620006aa57918102915b93841c93908002906200067c565b509250929050565b60006200065960ff841683600082620006dc575060016200077b565b81620006eb575060006200077b565b81600181146200070457600281146200070f576200072f565b60019150506200077b565b60ff841115620007235762000723620007d4565b50506001821b6200077b565b5060208310610133831016604e8410600b841016171562000754575081810a6200077b565b62000760838362000677565b8060001904821115620007775762000777620007d4565b0290505b92915050565b60008160001904831182151516156200079e576200079e620007d4565b500290565b600082821015620007b857620007b8620007d4565b500390565b600082620007cf57620007cf620007ea565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6133a580620008106000396000f3fe60806040526004361061036f5760003560e01c806373cafdc2116101c6578063c5f956af116100f7578063d6c180bf11610095578063dd62ed3e1161006f578063dd62ed3e14610ae2578063ea2f0b3714610b28578063efe25ad214610b48578063f2fde38b14610b5e57600080fd5b8063d6c180bf14610a96578063d8dcac4f14610aac578063dcf4242414610ac257600080fd5b8063d0d41fe1116100d1578063d0d41fe114610a2a578063d12a768814610a4a578063d2fcc00114610a60578063d44e586e14610a8057600080fd5b8063c5f956af146109ca578063c816841b146109ea578063d05b5a0014610a0a57600080fd5b80639ba5e4d511610164578063aa4bde281161013e578063aa4bde2814610954578063ba1866a91461096a578063c08679f21461098a578063c49b9a80146109aa57600080fd5b80639ba5e4d5146108e4578063a457c2d714610914578063a9059cbb1461093457600080fd5b80638a0eef5a116101a05780638a0eef5a1461085c5780638da5cb5b1461087257806395d89b41146108905780639a7a23d6146108c457600080fd5b806373cafdc2146107b25780637949a403146107f357806388f820201461082357600080fd5b80633bbac579116102a05780635d4db3971161023e57806370a082311161021857806370a08231146106f257806370add8b814610712578063713898cd14610728578063715018a61461079d57600080fd5b80635d4db397146106795780636605bfda146106995780636dd3d39f146106b957600080fd5b806347c230921161027a57806347c23092146105df5780634a74bb02146105ff57806352390c02146106205780635342acb41461064057600080fd5b80633bbac5791461056f578063437823ec1461059f5780634549b039146105bf57600080fd5b806327a14fc21161030d57806332454f3f116102e757806332454f3f146104fa5780633685d4191461050f578063395093511461052f5780633ad10ef61461054f57600080fd5b806327a14fc21461049e5780632d838119146104be578063313ce567146104de57600080fd5b8063095ea7b311610349578063095ea7b31461041a57806318160ddd1461044a57806320800a001461046957806323b872dd1461047e57600080fd5b8063046797801461037b578063055add0d1461039d57806306fdde03146103df57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612f2d565b610b7e565b005b3480156103a957600080fd5b506015546103c29061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103eb57600080fd5b50604080518082019091526009815268414d4154455241535560b81b60208201525b6040516103d6919061300f565b34801561042657600080fd5b5061043a610435366004612ec7565b610bcd565b60405190151581526020016103d6565b34801561045657600080fd5b506009545b6040519081526020016103d6565b34801561047557600080fd5b5061039b610be4565b34801561048a57600080fd5b5061043a610499366004612e58565b610bfc565b3480156104aa57600080fd5b5061039b6104b9366004612f2d565b610ca6565b3480156104ca57600080fd5b5061045b6104d9366004612f2d565b610d27565b3480156104ea57600080fd5b50604051600981526020016103d6565b34801561050657600080fd5b5061039b610dab565b34801561051b57600080fd5b5061039b61052a366004612de5565b610de6565b34801561053b57600080fd5b5061043a61054a366004612ec7565b610f9d565b34801561055b57600080fd5b506013546103c2906001600160a01b031681565b34801561057b57600080fd5b5061043a61058a366004612de5565b60076020526000908152604090205460ff1681565b3480156105ab57600080fd5b5061039b6105ba366004612de5565b610fd9565b3480156105cb57600080fd5b5061045b6105da366004612f46565b611027565b3480156105eb57600080fd5b5061039b6105fa366004612e58565b6110b1565b34801561060b57600080fd5b5060165461043a90600160a01b900460ff1681565b34801561062c57600080fd5b5061039b61063b366004612de5565b611163565b34801561064c57600080fd5b5061043a61065b366004612de5565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561068557600080fd5b5061039b610694366004612fbb565b6112b6565b3480156106a557600080fd5b5061039b6106b4366004612de5565b6113a7565b3480156106c557600080fd5b5061043a6106d4366004612de5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106fe57600080fd5b5061045b61070d366004612de5565b6113f3565b34801561071e57600080fd5b5061045b600e5481565b34801561073457600080fd5b506019546107699060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d6565b3480156107a957600080fd5b5061039b611452565b3480156107be57600080fd5b506018546107699060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107ff57600080fd5b5061043a61080e366004612de5565b60146020526000908152604090205460ff1681565b34801561082f57600080fd5b5061043a61083e366004612de5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561086857600080fd5b5061045b60105481565b34801561087e57600080fd5b506000546001600160a01b03166103c2565b34801561089c57600080fd5b5060408051808201909152600b81526a14dd5b8811dbd919195cdd60aa1b602082015261040d565b3480156108d057600080fd5b5061039b6108df366004612e99565b611486565b3480156108f057600080fd5b50601b54601c546108ff919082565b604080519283526020830191909152016103d6565b34801561092057600080fd5b5061043a61092f366004612ec7565b61160a565b34801561094057600080fd5b5061043a61094f366004612ec7565b6116a3565b34801561096057600080fd5b5061045b600d5481565b34801561097657600080fd5b5061039b610985366004612f2d565b6116b0565b34801561099657600080fd5b5061039b6109a5366004612fbb565b61171e565b3480156109b657600080fd5b5061039b6109c5366004612ef3565b61180f565b3480156109d657600080fd5b506012546103c2906001600160a01b031681565b3480156109f657600080fd5b506016546103c2906001600160a01b031681565b348015610a1657600080fd5b5061039b610a25366004612e99565b611886565b348015610a3657600080fd5b5061039b610a45366004612de5565b6118db565b348015610a5657600080fd5b5061045b60175481565b348015610a6c57600080fd5b5061039b610a7b366004612e99565b611927565b348015610a8c57600080fd5b5061045b600c5481565b348015610aa257600080fd5b5061045b600b5481565b348015610ab857600080fd5b5061045b60115481565b348015610ace57600080fd5b5061039b610add366004612f6b565b611a3c565b348015610aee57600080fd5b5061045b610afd366004612e1f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b3457600080fd5b5061039b610b43366004612de5565b611aa7565b348015610b5457600080fd5b5061045b600f5481565b348015610b6a57600080fd5b5061039b610b79366004612de5565b611af2565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613064565b60405180910390fd5b610bbd6009600a6131ed565b610bc79082613298565b60175550565b6000610bda338484611b8d565b5060015b92915050565b601354610bfa906001600160a01b031647611cb1565b565b6000610c09848484611dcf565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ba8565b610c9b8533858403611b8d565b506001949350505050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610ba890613064565b6103e881600954610ce19190613298565b610ceb9190613188565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a54821115610d8e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b6000610d986122cf565b9050610da48184613188565b9392505050565b6000546001600160a01b03163314610dd55760405162461bcd60e51b8152600401610ba890613064565b610bfa610de1306113f3565b6122f2565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03811660009081526005602052604090205460ff16610e785760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ba8565b60005b600854811015610f9957816001600160a01b031660088281548110610ea257610ea2613336565b6000918252602090912001546001600160a01b03161415610f875760088054610ecd906001906132d8565b81548110610edd57610edd613336565b600091825260209091200154600880546001600160a01b039092169183908110610f0957610f09613336565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f6157610f61613320565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f91816132ef565b915050610e7b565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bda918590610fd490869061314b565b611b8d565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600060095483111561107b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba8565b8161109757600061108d846001612485565b519150610bde9050565b60006110a4846001612485565b602001519150610bde9050565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610ba890613064565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561112557600080fd5b505af1158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190612f10565b50505050565b6000546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03811660009081526005602052604090205460ff16156111f65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba8565b6001600160a01b03811660009081526001602052604090205415611250576001600160a01b03811660009081526001602052604090205461123690610d27565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610ba890613064565b600081836112ee8688613163565b6112f89190613163565b6113029190613163565b60ff169050600f548111156113295760405162461bcd60e51b8152600401610ba890613099565b6019805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff000000191617630100000091851691909102179055816113768486613163565b6113809190613163565b6019805460ff92909216600160201b0264ff00000000199092169190911790555050505050565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610ba890613064565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561143057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bde90610d27565b6000546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610ba890613064565b610bfa60006124fb565b6000546001600160a01b031633146114b05760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03821660009081526014602052604090205460ff16151581151514156115455760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610ba8565b6001600160a01b0382166000908152601460205260409020805460ff191682158015919091179091556115ce576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561168c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba8565b6116993385858403611b8d565b5060019392505050565b6000610bda338484611dcf565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610ba890613064565b60006103e8826116e9306113f3565b6116f39190613298565b6116fd9190613188565b90506117088161254b565b601354610f99906001600160a01b031647611cb1565b6000546001600160a01b031633146117485760405162461bcd60e51b8152600401610ba890613064565b600081836117568688613163565b6117609190613163565b61176a9190613163565b60ff169050600e548111156117915760405162461bcd60e51b8152600401610ba890613099565b6018805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff000000191617630100000091851691909102179055816117de8486613163565b6117e89190613163565b6018805460ff92909216600160201b0264ff00000000199092169190911790555050505050565b6000546001600160a01b031633146118395760405162461bcd60e51b8152600401610ba890613064565b60168054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610d1c90831515815260200190565b6000546001600160a01b031633146118b05760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119055760405162461bcd60e51b8152600401610ba890613064565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119515760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156119db5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610ba8565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611a665760405162461bcd60e51b8152600401610ba890613064565b6103e882600954611a779190613298565b611a819190613188565b600b556009546103e890611a96908390613298565b611aa09190613188565b600c555050565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba8565b611b8a816124fb565b50565b6001600160a01b038316611bef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b038216611c505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b80471015611d015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ba8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d4e576040519150601f19603f3d011682016040523d82523d6000602084013e611d53565b606091505b5050905080611dca5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ba8565b505050565b601054158015611df757506001600160a01b03821660009081526014602052604090205460ff165b15611e0157436010555b6001600160a01b038316611e655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba8565b6001600160a01b038216611ec75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b6001600160a01b03831660009081526007602052604090205460ff1615611f305760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2061646472657373206973206120626f742f736e6970657200006044820152606401610ba8565b60008111611f925760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b611f9b836113f3565b8111156120045760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610ba8565b6001600160a01b03831660009081526004602052604081205460ff168061204357506001600160a01b03831660009081526004602052604090205460ff165b159050801561225c576001600160a01b03841660009081526014602052604090205460ff161561219c5760115460105461207d919061314b565b4310156120e1576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601854601a805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156121975760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610ba8565b61225c565b601954601a805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561225c5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610ba8565b601754612268306113f3565b10158015612279575060155460ff16155b801561229e57506001600160a01b03841660009081526014602052604090205460ff16155b80156122b35750601654600160a01b900460ff165b156122c3576122c36017546122f2565b61115d8484848461270d565b60008060006122dc61298b565b90925090506122eb8183613188565b9250505090565b6015805460ff19166001179055601a5460009061231a90600160201b900460ff1660026132b7565b601a5460ff9182169250600091839161233c9163010000009091041685613298565b6123469190613188565b9050600061235482856132d8565b9050476123608261254b565b600061236c82476132d8565b601a54909150600090612389906301000000900460ff16876132d8565b601a546123a0906301000000900460ff1684613298565b6123aa9190613188565b90506000851180156123bc5750600081115b156123cb576123cb8582612b0e565b601a5447906000906123e69062010000900460ff16896132d8565b601a546123fc9062010000900460ff1684613298565b6124069190613188565b601a5490915060009061242190610100900460ff168a6132d8565b601a5461243690610100900460ff1685613298565b6124409190613188565b601354909150612459906001600160a01b031683611cb1565b60125461246f906001600160a01b031682611cb1565b50506015805460ff191690555050505050505050565b6124c56040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6124cf8383612bf7565b90506124e48184846124df6122cf565b612cb9565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061258057612580613336565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190612e02565b8160018151811061263957612639613336565b6001600160a01b0392831660209182029290920181019190915260155430600090815260038352604080822061010090930490941681529152205482111561269a5760155461269a90309061010090046001600160a01b0316600019611b8d565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126d79085906000908690309042906004016130da565b600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505050505050565b60006127198383612485565b6001600160a01b03861660009081526005602052604090205490915060ff161561276b576001600160a01b038516600090815260026020526040812080548592906127659084906132d8565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127bf5760808101516001600160a01b038516600090815260026020526040812080549091906127b990849061314b565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127e99084906132d8565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161281d90849061314b565b9091555050811561289e5761283a81604001518260a00151612d24565b61284c81606001518260c00151612d59565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161289591815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128cf5750600d546128cc856113f3565b11155b6129335760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610ba8565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161297c91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612add578260016000600884815481106129ba576129ba613336565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2557508160026000600884815481106129fe576129fe613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3b57600a54600954945094505050509091565b6001600060088381548110612a5257612a52613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a8190846132d8565b92506002600060088381548110612a9a57612a9a613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ac990836132d8565b915080612ad5816132ef565b915050612998565b50600954600a54612aee9190613188565b821015612b0557600a546009549350935050509091565b90939092509050565b60155460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c4016060604051808303818588803b158015612b7e57600080fd5b505af1158015612b92573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb79190612f8d565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c376040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c485760808101839052610bde565b601a54606490612c5b9060ff1685613298565b612c659190613188565b60a0820152601a54606490612c8490600160201b900460ff1685613298565b612c8e9190613188565b60c0820181905260a0820151612ca490856132d8565b612cae91906132d8565b608082015292915050565b6000808080612cc88588613298565b935085612cdd57508291506000905080612d19565b848860a00151612ced9190613298565b9150848860c00151612cff9190613298565b905080612d0c83866132d8565b612d1691906132d8565b92505b945094509450949050565b81600a6000828254612d3691906132d8565b9091555050601b8054829190600090612d5090849061314b565b90915550505050565b3060009081526001602052604081208054849290612d7890849061314b565b90915550503060009081526005602052604090205460ff1615612dba573060009081526002602052604081208054839290612db490849061314b565b90915550505b80601b6001016000828254612d50919061314b565b803560ff81168114612de057600080fd5b919050565b600060208284031215612df757600080fd5b8135610da48161334c565b600060208284031215612e1457600080fd5b8151610da48161334c565b60008060408385031215612e3257600080fd5b8235612e3d8161334c565b91506020830135612e4d8161334c565b809150509250929050565b600080600060608486031215612e6d57600080fd5b8335612e788161334c565b92506020840135612e888161334c565b929592945050506040919091013590565b60008060408385031215612eac57600080fd5b8235612eb78161334c565b91506020830135612e4d81613361565b60008060408385031215612eda57600080fd5b8235612ee58161334c565b946020939093013593505050565b600060208284031215612f0557600080fd5b8135610da481613361565b600060208284031215612f2257600080fd5b8151610da481613361565b600060208284031215612f3f57600080fd5b5035919050565b60008060408385031215612f5957600080fd5b823591506020830135612e4d81613361565b60008060408385031215612f7e57600080fd5b50508035926020909101359150565b600080600060608486031215612fa257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612fd157600080fd5b612fda85612dcf565b9350612fe860208601612dcf565b9250612ff660408601612dcf565b915061300460608601612dcf565b905092959194509250565b600060208083528351808285015260005b8181101561303c57858101830151858201604001528201613020565b8181111561304e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f466565732063616e6e6f7420626520686967686572207468616e204d617866656040820152606560f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561312a5784516001600160a01b031683529383019391830191600101613105565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561315e5761315e61330a565b500190565b600060ff821660ff84168060ff038211156131805761318061330a565b019392505050565b6000826131a557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156131e55781600019048211156131cb576131cb61330a565b808516156131d857918102915b93841c93908002906131af565b509250929050565b6000610da460ff84168360008261320657506001610bde565b8161321357506000610bde565b816001811461322957600281146132335761324f565b6001915050610bde565b60ff8411156132445761324461330a565b50506001821b610bde565b5060208310610133831016604e8410600b8410161715613272575081810a610bde565b61327c83836131aa565b80600019048211156132905761329061330a565b029392505050565b60008160001904831182151516156132b2576132b261330a565b500290565b600060ff821660ff84168160ff04811182151516156132905761329061330a565b6000828210156132ea576132ea61330a565b500390565b60006000198214156133035761330361330a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611b8a57600080fd5b8015158114611b8a57600080fdfea2646970667358221220d68b6c7c8d510a5694d2fec61a68c54f6f7be6a79218ad6f02f8a08d7b63e58964736f6c63430008070033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806373cafdc2116101c6578063c5f956af116100f7578063d6c180bf11610095578063dd62ed3e1161006f578063dd62ed3e14610ae2578063ea2f0b3714610b28578063efe25ad214610b48578063f2fde38b14610b5e57600080fd5b8063d6c180bf14610a96578063d8dcac4f14610aac578063dcf4242414610ac257600080fd5b8063d0d41fe1116100d1578063d0d41fe114610a2a578063d12a768814610a4a578063d2fcc00114610a60578063d44e586e14610a8057600080fd5b8063c5f956af146109ca578063c816841b146109ea578063d05b5a0014610a0a57600080fd5b80639ba5e4d511610164578063aa4bde281161013e578063aa4bde2814610954578063ba1866a91461096a578063c08679f21461098a578063c49b9a80146109aa57600080fd5b80639ba5e4d5146108e4578063a457c2d714610914578063a9059cbb1461093457600080fd5b80638a0eef5a116101a05780638a0eef5a1461085c5780638da5cb5b1461087257806395d89b41146108905780639a7a23d6146108c457600080fd5b806373cafdc2146107b25780637949a403146107f357806388f820201461082357600080fd5b80633bbac579116102a05780635d4db3971161023e57806370a082311161021857806370a08231146106f257806370add8b814610712578063713898cd14610728578063715018a61461079d57600080fd5b80635d4db397146106795780636605bfda146106995780636dd3d39f146106b957600080fd5b806347c230921161027a57806347c23092146105df5780634a74bb02146105ff57806352390c02146106205780635342acb41461064057600080fd5b80633bbac5791461056f578063437823ec1461059f5780634549b039146105bf57600080fd5b806327a14fc21161030d57806332454f3f116102e757806332454f3f146104fa5780633685d4191461050f578063395093511461052f5780633ad10ef61461054f57600080fd5b806327a14fc21461049e5780632d838119146104be578063313ce567146104de57600080fd5b8063095ea7b311610349578063095ea7b31461041a57806318160ddd1461044a57806320800a001461046957806323b872dd1461047e57600080fd5b8063046797801461037b578063055add0d1461039d57806306fdde03146103df57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004612f2d565b610b7e565b005b3480156103a957600080fd5b506015546103c29061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103eb57600080fd5b50604080518082019091526009815268414d4154455241535560b81b60208201525b6040516103d6919061300f565b34801561042657600080fd5b5061043a610435366004612ec7565b610bcd565b60405190151581526020016103d6565b34801561045657600080fd5b506009545b6040519081526020016103d6565b34801561047557600080fd5b5061039b610be4565b34801561048a57600080fd5b5061043a610499366004612e58565b610bfc565b3480156104aa57600080fd5b5061039b6104b9366004612f2d565b610ca6565b3480156104ca57600080fd5b5061045b6104d9366004612f2d565b610d27565b3480156104ea57600080fd5b50604051600981526020016103d6565b34801561050657600080fd5b5061039b610dab565b34801561051b57600080fd5b5061039b61052a366004612de5565b610de6565b34801561053b57600080fd5b5061043a61054a366004612ec7565b610f9d565b34801561055b57600080fd5b506013546103c2906001600160a01b031681565b34801561057b57600080fd5b5061043a61058a366004612de5565b60076020526000908152604090205460ff1681565b3480156105ab57600080fd5b5061039b6105ba366004612de5565b610fd9565b3480156105cb57600080fd5b5061045b6105da366004612f46565b611027565b3480156105eb57600080fd5b5061039b6105fa366004612e58565b6110b1565b34801561060b57600080fd5b5060165461043a90600160a01b900460ff1681565b34801561062c57600080fd5b5061039b61063b366004612de5565b611163565b34801561064c57600080fd5b5061043a61065b366004612de5565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561068557600080fd5b5061039b610694366004612fbb565b6112b6565b3480156106a557600080fd5b5061039b6106b4366004612de5565b6113a7565b3480156106c557600080fd5b5061043a6106d4366004612de5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106fe57600080fd5b5061045b61070d366004612de5565b6113f3565b34801561071e57600080fd5b5061045b600e5481565b34801561073457600080fd5b506019546107699060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103d6565b3480156107a957600080fd5b5061039b611452565b3480156107be57600080fd5b506018546107699060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156107ff57600080fd5b5061043a61080e366004612de5565b60146020526000908152604090205460ff1681565b34801561082f57600080fd5b5061043a61083e366004612de5565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561086857600080fd5b5061045b60105481565b34801561087e57600080fd5b506000546001600160a01b03166103c2565b34801561089c57600080fd5b5060408051808201909152600b81526a14dd5b8811dbd919195cdd60aa1b602082015261040d565b3480156108d057600080fd5b5061039b6108df366004612e99565b611486565b3480156108f057600080fd5b50601b54601c546108ff919082565b604080519283526020830191909152016103d6565b34801561092057600080fd5b5061043a61092f366004612ec7565b61160a565b34801561094057600080fd5b5061043a61094f366004612ec7565b6116a3565b34801561096057600080fd5b5061045b600d5481565b34801561097657600080fd5b5061039b610985366004612f2d565b6116b0565b34801561099657600080fd5b5061039b6109a5366004612fbb565b61171e565b3480156109b657600080fd5b5061039b6109c5366004612ef3565b61180f565b3480156109d657600080fd5b506012546103c2906001600160a01b031681565b3480156109f657600080fd5b506016546103c2906001600160a01b031681565b348015610a1657600080fd5b5061039b610a25366004612e99565b611886565b348015610a3657600080fd5b5061039b610a45366004612de5565b6118db565b348015610a5657600080fd5b5061045b60175481565b348015610a6c57600080fd5b5061039b610a7b366004612e99565b611927565b348015610a8c57600080fd5b5061045b600c5481565b348015610aa257600080fd5b5061045b600b5481565b348015610ab857600080fd5b5061045b60115481565b348015610ace57600080fd5b5061039b610add366004612f6b565b611a3c565b348015610aee57600080fd5b5061045b610afd366004612e1f565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b3457600080fd5b5061039b610b43366004612de5565b611aa7565b348015610b5457600080fd5b5061045b600f5481565b348015610b6a57600080fd5b5061039b610b79366004612de5565b611af2565b6000546001600160a01b03163314610bb15760405162461bcd60e51b8152600401610ba890613064565b60405180910390fd5b610bbd6009600a6131ed565b610bc79082613298565b60175550565b6000610bda338484611b8d565b5060015b92915050565b601354610bfa906001600160a01b031647611cb1565b565b6000610c09848484611dcf565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610c8e5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ba8565b610c9b8533858403611b8d565b506001949350505050565b6000546001600160a01b03163314610cd05760405162461bcd60e51b8152600401610ba890613064565b6103e881600954610ce19190613298565b610ceb9190613188565b600d8190556040519081527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b6000600a54821115610d8e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ba8565b6000610d986122cf565b9050610da48184613188565b9392505050565b6000546001600160a01b03163314610dd55760405162461bcd60e51b8152600401610ba890613064565b610bfa610de1306113f3565b6122f2565b6000546001600160a01b03163314610e105760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03811660009081526005602052604090205460ff16610e785760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610ba8565b60005b600854811015610f9957816001600160a01b031660088281548110610ea257610ea2613336565b6000918252602090912001546001600160a01b03161415610f875760088054610ecd906001906132d8565b81548110610edd57610edd613336565b600091825260209091200154600880546001600160a01b039092169183908110610f0957610f09613336565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556008805480610f6157610f61613320565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f91816132ef565b915050610e7b565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610bda918590610fd490869061314b565b611b8d565b6000546001600160a01b031633146110035760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600060095483111561107b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610ba8565b8161109757600061108d846001612485565b519150610bde9050565b60006110a4846001612485565b602001519150610bde9050565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610ba890613064565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561112557600080fd5b505af1158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190612f10565b50505050565b6000546001600160a01b0316331461118d5760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03811660009081526005602052604090205460ff16156111f65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610ba8565b6001600160a01b03811660009081526001602052604090205415611250576001600160a01b03811660009081526001602052604090205461123690610d27565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146112e05760405162461bcd60e51b8152600401610ba890613064565b600081836112ee8688613163565b6112f89190613163565b6113029190613163565b60ff169050600f548111156113295760405162461bcd60e51b8152600401610ba890613099565b6019805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff000000191617630100000091851691909102179055816113768486613163565b6113809190613163565b6019805460ff92909216600160201b0264ff00000000199092169190911790555050505050565b6000546001600160a01b031633146113d15760405162461bcd60e51b8152600401610ba890613064565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526005602052604081205460ff161561143057506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bde90610d27565b6000546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610ba890613064565b610bfa60006124fb565b6000546001600160a01b031633146114b05760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03821660009081526014602052604090205460ff16151581151514156115455760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c756500000000000000006064820152608401610ba8565b6001600160a01b0382166000908152601460205260409020805460ff191682158015919091179091556115ce576001600160a01b038216600081815260066020908152604091829020805460ff191660011790559051918252821515917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561168c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba8565b6116993385858403611b8d565b5060019392505050565b6000610bda338484611dcf565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610ba890613064565b60006103e8826116e9306113f3565b6116f39190613298565b6116fd9190613188565b90506117088161254b565b601354610f99906001600160a01b031647611cb1565b6000546001600160a01b031633146117485760405162461bcd60e51b8152600401610ba890613064565b600081836117568688613163565b6117609190613163565b61176a9190613163565b60ff169050600e548111156117915760405162461bcd60e51b8152600401610ba890613099565b6018805460ff87811661ffff1990921691909117610100878316021763ffff00001916620100008683160263ff000000191617630100000091851691909102179055816117de8486613163565b6117e89190613163565b6018805460ff92909216600160201b0264ff00000000199092169190911790555050505050565b6000546001600160a01b031633146118395760405162461bcd60e51b8152600401610ba890613064565b60168054821515600160a01b0260ff60a01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610d1c90831515815260200190565b6000546001600160a01b031633146118b05760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119055760405162461bcd60e51b8152600401610ba890613064565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119515760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03821660009081526006602052604090205460ff16151581151514156119db5760405162461bcd60e51b815260206004820152603260248201527f5f69734578636c7564656446726f6d4d617857616c6c657420616c72656164796044820152712073657420746f20746861742076616c756560701b6064820152608401610ba8565b6001600160a01b038216600081815260066020908152604091829020805460ff1916851515908117909155915192835290917f4a8452f723db48bf05f301f94d62a2cf7a72976cde77d83e3646584858b8f4b2910160405180910390a25050565b6000546001600160a01b03163314611a665760405162461bcd60e51b8152600401610ba890613064565b6103e882600954611a779190613298565b611a819190613188565b600b556009546103e890611a96908390613298565b611aa09190613188565b600c555050565b6000546001600160a01b03163314611ad15760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611b1c5760405162461bcd60e51b8152600401610ba890613064565b6001600160a01b038116611b815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba8565b611b8a816124fb565b50565b6001600160a01b038316611bef5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba8565b6001600160a01b038216611c505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba8565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b80471015611d015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ba8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611d4e576040519150601f19603f3d011682016040523d82523d6000602084013e611d53565b606091505b5050905080611dca5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ba8565b505050565b601054158015611df757506001600160a01b03821660009081526014602052604090205460ff165b15611e0157436010555b6001600160a01b038316611e655760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba8565b6001600160a01b038216611ec75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba8565b6001600160a01b03831660009081526007602052604090205460ff1615611f305760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2061646472657373206973206120626f742f736e6970657200006044820152606401610ba8565b60008111611f925760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ba8565b611f9b836113f3565b8111156120045760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610ba8565b6001600160a01b03831660009081526004602052604081205460ff168061204357506001600160a01b03831660009081526004602052604090205460ff165b159050801561225c576001600160a01b03841660009081526014602052604090205460ff161561219c5760115460105461207d919061314b565b4310156120e1576001600160a01b038316600081815260076020908152604091829020805460ff19166001908117909155915192835290917f3159dadbd8e2d720a851b412e3358e7e44bb11734c9bfd5715340e21798e8b25910160405180910390a25b601854601a805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600b548211156121975760405162461bcd60e51b815260206004820181905260248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e744275796044820152606401610ba8565b61225c565b601954601a805460ff80841661ffff19909216919091176101008085048316021763ffff000019166201000080850483160263ff00000019161763010000008085048316021764ff000000001916600160201b9384900491909116909202919091179055600c5482111561225c5760405162461bcd60e51b815260206004820152602160248201527f616d6f756e74206d757374206265203c3d206d61785478416d6f756e7453656c6044820152601b60fa1b6064820152608401610ba8565b601754612268306113f3565b10158015612279575060155460ff16155b801561229e57506001600160a01b03841660009081526014602052604090205460ff16155b80156122b35750601654600160a01b900460ff165b156122c3576122c36017546122f2565b61115d8484848461270d565b60008060006122dc61298b565b90925090506122eb8183613188565b9250505090565b6015805460ff19166001179055601a5460009061231a90600160201b900460ff1660026132b7565b601a5460ff9182169250600091839161233c9163010000009091041685613298565b6123469190613188565b9050600061235482856132d8565b9050476123608261254b565b600061236c82476132d8565b601a54909150600090612389906301000000900460ff16876132d8565b601a546123a0906301000000900460ff1684613298565b6123aa9190613188565b90506000851180156123bc5750600081115b156123cb576123cb8582612b0e565b601a5447906000906123e69062010000900460ff16896132d8565b601a546123fc9062010000900460ff1684613298565b6124069190613188565b601a5490915060009061242190610100900460ff168a6132d8565b601a5461243690610100900460ff1685613298565b6124409190613188565b601354909150612459906001600160a01b031683611cb1565b60125461246f906001600160a01b031682611cb1565b50506015805460ff191690555050505050505050565b6124c56040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6124cf8383612bf7565b90506124e48184846124df6122cf565b612cb9565b606085015260408401526020830152815292915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061258057612580613336565b60200260200101906001600160a01b031690816001600160a01b031681525050601560019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ee57600080fd5b505afa158015612602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126269190612e02565b8160018151811061263957612639613336565b6001600160a01b0392831660209182029290920181019190915260155430600090815260038352604080822061010090930490941681529152205482111561269a5760155461269a90309061010090046001600160a01b0316600019611b8d565b60155460405163791ac94760e01b81526101009091046001600160a01b03169063791ac947906126d79085906000908690309042906004016130da565b600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505050505050565b60006127198383612485565b6001600160a01b03861660009081526005602052604090205490915060ff161561276b576001600160a01b038516600090815260026020526040812080548592906127659084906132d8565b90915550505b6001600160a01b03841660009081526005602052604090205460ff16156127bf5760808101516001600160a01b038516600090815260026020526040812080549091906127b990849061314b565b90915550505b80516001600160a01b038616600090815260016020526040812080549091906127e99084906132d8565b90915550506020808201516001600160a01b038616600090815260019092526040822080549192909161281d90849061314b565b9091555050811561289e5761283a81604001518260a00151612d24565b61284c81606001518260c00151612d59565b306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161289591815260200190565b60405180910390a35b6001600160a01b03841660009081526006602052604090205460ff16806128cf5750600d546128cc856113f3565b11155b6129335760405162461bcd60e51b815260206004820152602f60248201527f526563697069656e742063616e6e6f7420686f6c64206d6f7265207468616e2060448201526e1b585e15d85b1b195d105b5bdd5b9d608a1b6064820152608401610ba8565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836080015160405161297c91815260200190565b60405180910390a35050505050565b600a546009546000918291825b600854811015612add578260016000600884815481106129ba576129ba613336565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a2557508160026000600884815481106129fe576129fe613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a3b57600a54600954945094505050509091565b6001600060088381548110612a5257612a52613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612a8190846132d8565b92506002600060088381548110612a9a57612a9a613336565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612ac990836132d8565b915080612ad5816132ef565b915050612998565b50600954600a54612aee9190613188565b821015612b0557600a546009549350935050509091565b90939092509050565b60155460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a4820152610100909204169063f305d71990839060c4016060604051808303818588803b158015612b7e57600080fd5b505af1158015612b92573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bb79190612f8d565b505060408051848152602081018490527f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b92500160405180910390a15050565b612c376040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81612c485760808101839052610bde565b601a54606490612c5b9060ff1685613298565b612c659190613188565b60a0820152601a54606490612c8490600160201b900460ff1685613298565b612c8e9190613188565b60c0820181905260a0820151612ca490856132d8565b612cae91906132d8565b608082015292915050565b6000808080612cc88588613298565b935085612cdd57508291506000905080612d19565b848860a00151612ced9190613298565b9150848860c00151612cff9190613298565b905080612d0c83866132d8565b612d1691906132d8565b92505b945094509450949050565b81600a6000828254612d3691906132d8565b9091555050601b8054829190600090612d5090849061314b565b90915550505050565b3060009081526001602052604081208054849290612d7890849061314b565b90915550503060009081526005602052604090205460ff1615612dba573060009081526002602052604081208054839290612db490849061314b565b90915550505b80601b6001016000828254612d50919061314b565b803560ff81168114612de057600080fd5b919050565b600060208284031215612df757600080fd5b8135610da48161334c565b600060208284031215612e1457600080fd5b8151610da48161334c565b60008060408385031215612e3257600080fd5b8235612e3d8161334c565b91506020830135612e4d8161334c565b809150509250929050565b600080600060608486031215612e6d57600080fd5b8335612e788161334c565b92506020840135612e888161334c565b929592945050506040919091013590565b60008060408385031215612eac57600080fd5b8235612eb78161334c565b91506020830135612e4d81613361565b60008060408385031215612eda57600080fd5b8235612ee58161334c565b946020939093013593505050565b600060208284031215612f0557600080fd5b8135610da481613361565b600060208284031215612f2257600080fd5b8151610da481613361565b600060208284031215612f3f57600080fd5b5035919050565b60008060408385031215612f5957600080fd5b823591506020830135612e4d81613361565b60008060408385031215612f7e57600080fd5b50508035926020909101359150565b600080600060608486031215612fa257600080fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215612fd157600080fd5b612fda85612dcf565b9350612fe860208601612dcf565b9250612ff660408601612dcf565b915061300460608601612dcf565b905092959194509250565b600060208083528351808285015260005b8181101561303c57858101830151858201604001528201613020565b8181111561304e576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f466565732063616e6e6f7420626520686967686572207468616e204d617866656040820152606560f81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561312a5784516001600160a01b031683529383019391830191600101613105565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561315e5761315e61330a565b500190565b600060ff821660ff84168060ff038211156131805761318061330a565b019392505050565b6000826131a557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156131e55781600019048211156131cb576131cb61330a565b808516156131d857918102915b93841c93908002906131af565b509250929050565b6000610da460ff84168360008261320657506001610bde565b8161321357506000610bde565b816001811461322957600281146132335761324f565b6001915050610bde565b60ff8411156132445761324461330a565b50506001821b610bde565b5060208310610133831016604e8410600b8410161715613272575081810a610bde565b61327c83836131aa565b80600019048211156132905761329061330a565b029392505050565b60008160001904831182151516156132b2576132b261330a565b500290565b600060ff821660ff84168160ff04811182151516156132905761329061330a565b6000828210156132ea576132ea61330a565b500390565b60006000198214156133035761330361330a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611b8a57600080fd5b8015158114611b8a57600080fdfea2646970667358221220d68b6c7c8d510a5694d2fec61a68c54f6f7be6a79218ad6f02f8a08d7b63e58964736f6c63430008070033

Deployed Bytecode Sourcemap

19849:22033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39868:179;;;;;;;;;;-1:-1:-1;39868:179:0;;;;;:::i;:::-;;:::i;:::-;;21285:41;;;;;;;;;;-1:-1:-1;21285:41:0;;;;;;;-1:-1:-1;;;;;21285:41:0;;;;;;-1:-1:-1;;;;;4835:32:1;;;4817:51;;4805:2;4790:18;21285:41:0;;;;;;;;24507:83;;;;;;;;;;-1:-1:-1;24577:5:0;;;;;;;;;;;;-1:-1:-1;;;24577:5:0;;;;24507:83;;;;;;;:::i;25515:193::-;;;;;;;;;;-1:-1:-1;25515:193:0;;;;;:::i;:::-;;:::i;:::-;;;6167:14:1;;6160:22;6142:41;;6130:2;6115:18;25515:193:0;6002:187:1;24807:95:0;;;;;;;;;;-1:-1:-1;24887:7:0;;24807:95;;;16253:25:1;;;16241:2;16226:18;24807:95:0;16107:177:1;40838:92:0;;;;;;;;;;;;;:::i;25716:521::-;;;;;;;;;;-1:-1:-1;25716:521:0;;;;;:::i;:::-;;:::i;41263:228::-;;;;;;;;;;-1:-1:-1;41263:228:0;;;;;:::i;:::-;;:::i;27665:319::-;;;;;;;;;;-1:-1:-1;27665:319:0;;;;;:::i;:::-;;:::i;24693:83::-;;;;;;;;;;-1:-1:-1;24693:83:0;;20417:1;17669:36:1;;17657:2;17642:18;24693:83:0;17527:184:1;40342:103:0;;;;;;;;;;;;;:::i;28405:473::-;;;;;;;;;;-1:-1:-1;28405:473:0;;;;;:::i;:::-;;:::i;26245:297::-;;;;;;;;;;-1:-1:-1;26245:297:0;;;;;:::i;:::-;;:::i;21036:33::-;;;;;;;;;;-1:-1:-1;21036:33:0;;;;-1:-1:-1;;;;;21036:33:0;;;20300:37;;;;;;;;;;-1:-1:-1;20300:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28886:113;;;;;;;;;;-1:-1:-1;28886:113:0;;;;;:::i;:::-;;:::i;27168:489::-;;;;;;;;;;-1:-1:-1;27168:489:0;;;;;:::i;:::-;;:::i;40942:154::-;;;;;;;;;;-1:-1:-1;40942:154:0;;;;;:::i;:::-;;:::i;21366:40::-;;;;;;;;;;-1:-1:-1;21366:40:0;;;;-1:-1:-1;;;21366:40:0;;;;;;28063:334;;;;;;;;;;-1:-1:-1;28063:334:0;;;;;:::i;:::-;;:::i;29129:124::-;;;;;;;;;;-1:-1:-1;29129:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29218:27:0;29194:4;29218:27;;;:18;:27;;;;;;;;;29129:124;39066:467;;;;;;;;;;-1:-1:-1;39066:467:0;;;;;:::i;:::-;;:::i;40055:157::-;;;;;;;;;;-1:-1:-1;40055:157:0;;;;;:::i;:::-;;:::i;29261:168::-;;;;;;;;;;-1:-1:-1;29261:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;29388:33:0;29359:4;29388:33;;;:24;:33;;;;;;;;;29261:168;24910:198;;;;;;;;;;-1:-1:-1;24910:198:0;;;;;:::i;:::-;;:::i;20814:29::-;;;;;;;;;;;;;;;;21941:283;;;;;;;;;;-1:-1:-1;21941:283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21941:283:0;;;;;;;;;;17985:4:1;17973:17;;;17955:36;;18027:17;;;18022:2;18007:18;;18000:45;18081:17;;;18061:18;;;18054:45;;;;18135:17;;18130:2;18115:18;;18108:45;18190:17;;;18184:3;18169:19;;18162:46;17942:3;17927:19;21941:283:0;17716:498:1;2556:94:0;;;;;;;;;;;;;:::i;21650:282::-;;;;;;;;;;-1:-1:-1;21650:282:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21650:282:0;;;;;;21076:58;;;;;;;;;;-1:-1:-1;21076:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27040:120;;;;;;;;;;-1:-1:-1;27040:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;27132:20:0;27108:4;27132:20;;;:11;:20;;;;;;;;;27040:120;20910:34;;;;;;;;;;;;;;;;1905:87;;;;;;;;;;-1:-1:-1;1951:7:0;1978:6;-1:-1:-1;;;;;1978:6:0;1905:87;;24598;;;;;;;;;;-1:-1:-1;24670:7:0;;;;;;;;;;;;-1:-1:-1;;;24670:7:0;;;;24598:87;;38070:522;;;;;;;;;;-1:-1:-1;38070:522:0;;;;;:::i;:::-;;:::i;22374:36::-;;;;;;;;;;-1:-1:-1;22374:36:0;;;;;;;;;;;;;17448:25:1;;;17504:2;17489:18;;17482:34;;;;17421:18;22374:36:0;17274:248:1;26550:482:0;;;;;;;;;;-1:-1:-1;26550:482:0;;;;;:::i;:::-;;:::i;25116:199::-;;;;;;;;;;-1:-1:-1;25116:199:0;;;;;:::i;:::-;;:::i;20741:50::-;;;;;;;;;;;;;;;;40501:266;;;;;;;;;;-1:-1:-1;40501:266:0;;;;;:::i;:::-;;:::i;38600:458::-;;;;;;;;;;-1:-1:-1;38600:458:0;;;;;:::i;:::-;;:::i;29437:171::-;;;;;;;;;;-1:-1:-1;29437:171:0;;;;;:::i;:::-;;:::i;20991:38::-;;;;;;;;;;-1:-1:-1;20991:38:0;;;;-1:-1:-1;;;;;20991:38:0;;;21333:26;;;;;;;;;;-1:-1:-1;21333:26:0;;;;-1:-1:-1;;;;;21333:26:0;;;41138:117;;;;;;;;;;-1:-1:-1;41138:117:0;;;;;:::i;:::-;;:::i;40220:114::-;;;;;;;;;;-1:-1:-1;40220:114:0;;;;;:::i;:::-;;:::i;21413:65::-;;;;;;;;;;;;;;;;41499:380;;;;;;;;;;-1:-1:-1;41499:380:0;;;;;:::i;:::-;;:::i;20668:50::-;;;;;;;;;;;;;;;;20596:49;;;;;;;;;;;;;;;;20951:31;;;;;;;;;;;;;;;;39541:319;;;;;;;;;;-1:-1:-1;39541:319:0;;;;;:::i;:::-;;:::i;25323:184::-;;;;;;;;;;-1:-1:-1;25323:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;25472:18:0;;;25440:7;25472:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25323:184;29009:112;;;;;;;;;;-1:-1:-1;29009:112:0;;;;;:::i;:::-;;:::i;20851:30::-;;;;;;;;;;;;;;;;2805:192;;;;;;;;;;-1:-1:-1;2805:192:0;;;;;:::i;:::-;;:::i;39868:179::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;;;;;;;;;40026:13:::1;20417:1;40026:2;:13;:::i;:::-;40011:28;::::0;:12;:28:::1;:::i;:::-;39979:29;:60:::0;-1:-1:-1;39868:179:0:o;25515:193::-;25617:4;25639:39;799:10;25662:7;25671:6;25639:8;:39::i;:::-;-1:-1:-1;25696:4:0;25515:193;;;;;:::o;40838:92::-;40879:10;;:43;;-1:-1:-1;;;;;40879:10:0;40900:21;40879:20;:43::i;:::-;40838:92::o;25716:521::-;25848:4;25865:36;25875:6;25883:9;25894:6;25865:9;:36::i;:::-;-1:-1:-1;;;;;25941:19:0;;25914:24;25941:19;;;:11;:19;;;;;;;;799:10;25941:33;;;;;;;;26007:26;;;;25985:116;;;;-1:-1:-1;;;25985:116:0;;13094:2:1;25985:116:0;;;13076:21:1;13133:2;13113:18;;;13106:30;13172:34;13152:18;;;13145:62;-1:-1:-1;;;13223:18:1;;;13216:38;13271:19;;25985:116:0;12892:404:1;25985:116:0;26137:57;26146:6;799:10;26187:6;26168:16;:25;26137:8;:57::i;:::-;-1:-1:-1;26225:4:0;;25716:521;-1:-1:-1;;;;25716:521:0:o;41263:228::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;41398:4:::1;41378:19;41368:7;;:29;;;;:::i;:::-;:34;;;;:::i;:::-;41350:15;:52:::0;;;41444:39:::1;::::0;16253:25:1;;;41444:39:0::1;::::0;16241:2:1;16226:18;41444:39:0::1;;;;;;;;41263:228:::0;:::o;27665:319::-;27759:7;27817;;27806;:18;;27784:110;;;;-1:-1:-1;;;27784:110:0;;8054:2:1;27784:110:0;;;8036:21:1;8093:2;8073:18;;;8066:30;8132:34;8112:18;;;8105:62;-1:-1:-1;;;8183:18:1;;;8176:40;8233:19;;27784:110:0;7852:406:1;27784:110:0;27905:19;27927:10;:8;:10::i;:::-;27905:32;-1:-1:-1;27955:21:0;27905:32;27955:7;:21;:::i;:::-;27948:28;27665:319;-1:-1:-1;;;27665:319:0:o;40342:103::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;40397:40:::1;40412:24;40430:4;40412:9;:24::i;:::-;40397:14;:40::i;28405:473::-:0;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28485:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28477:56;;;::::0;-1:-1:-1;;;28477:56:0;;11665:2:1;28477:56:0::1;::::0;::::1;11647:21:1::0;11704:2;11684:18;;;11677:30;11743:25;11723:18;;;11716:53;11786:18;;28477:56:0::1;11463:347:1::0;28477:56:0::1;28549:9;28544:327;28568:9;:16:::0;28564:20;::::1;28544:327;;;28626:7;-1:-1:-1::0;;;;;28610:23:0::1;:9;28620:1;28610:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28610:12:0::1;:23;28606:254;;;28669:9;28679:16:::0;;:20:::1;::::0;28698:1:::1;::::0;28679:20:::1;:::i;:::-;28669:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28654:9:::1;:12:::0;;-1:-1:-1;;;;;28669:31:0;;::::1;::::0;28664:1;;28654:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28654:46:0::1;-1:-1:-1::0;;;;;28654:46:0;;::::1;;::::0;;28719:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28758:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28758:28:0::1;::::0;;28805:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;28805:15:0;;;;;-1:-1:-1;;;;;;28805:15:0::1;::::0;;;;;28544:327:::1;28405:473:::0;:::o;28606:254::-:1;28586:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28544:327;;;;28405:473:::0;:::o;26245:297::-;799:10;26360:4;26454:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26454:34:0;;;;;;;;;;26360:4;;26382:130;;26432:7;;26454:47;;26491:10;;26454:47;:::i;:::-;26382:8;:130::i;28886:113::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28957:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;28957:34:0::1;28987:4;28957:34;::::0;;28886:113::o;27168:489::-;27286:7;27330;;27319;:18;;27311:62;;;;-1:-1:-1;;;27311:62:0;;12375:2:1;27311:62:0;;;12357:21:1;12414:2;12394:18;;;12387:30;12453:33;12433:18;;;12426:61;12504:18;;27311:62:0;12173:355:1;27311:62:0;27389:17;27384:266;;27423:28;27454:25;27465:7;27474:4;27454:10;:25::i;:::-;27501:9;;-1:-1:-1;27494:16:0;;-1:-1:-1;27494:16:0;27384:266;27543:28;27574:25;27585:7;27594:4;27574:10;:25::i;:::-;27621:17;;;;-1:-1:-1;27614:24:0;;-1:-1:-1;27614:24:0;40942:154;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;41047:41:::1;::::0;-1:-1:-1;;;41047:41:0;;-1:-1:-1;;;;;5295:32:1;;;41047:41:0::1;::::0;::::1;5277:51:1::0;5344:18;;;5337:34;;;41047:27:0;::::1;::::0;::::1;::::0;5250:18:1;;41047:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40942:154:::0;;;:::o;28063:334::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28146:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28145:21;28137:61;;;::::0;-1:-1:-1;;;28137:61:0;;10463:2:1;28137:61:0::1;::::0;::::1;10445:21:1::0;10502:2;10482:18;;;10475:30;10541:29;10521:18;;;10514:57;10588:18;;28137:61:0::1;10261:351:1::0;28137:61:0::1;-1:-1:-1::0;;;;;28213:16:0;::::1;28232:1;28213:16:::0;;;:7:::1;:16;::::0;;;;;:20;28209:109:::1;;-1:-1:-1::0;;;;;28289:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28269:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28250:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28209:109:::1;-1:-1:-1::0;;;;;28328:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28328:27:0::1;28351:4;28328:27:::0;;::::1;::::0;;;28366:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28366:23:0::1;::::0;;::::1;::::0;;28063:334::o;39066:467::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;39212:20:::1;39255:3:::0;39250:4;39235:14:::1;39240:9:::0;39235:4;:14:::1;:::i;:::-;:19;;;;:::i;:::-;:23;;;;:::i;:::-;39212:46;;;;39293:10;;39277:12;:26;;39269:72;;;;-1:-1:-1::0;;;39269:72:0::1;;;;;;;:::i;:::-;39352:9;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;39383:30:0;;;;;;;39352:20:::1;39383:30:::0;;::::1;;;-1:-1:-1::0;;39455:18:0;39424:20;;;::::1;;-1:-1:-1::0;;39455:18:0;;;;;::::1;::::0;;;::::1;;::::0;;;39503:16:::1;39424:20:::0;39383:30;39503:16:::1;:::i;:::-;:22;;;;:::i;:::-;39484:9;:41:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39484:41:0::1;-1:-1:-1::0;;39484:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;39066:467:0:o;40055:157::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;40170:15:::1;:34:::0;;-1:-1:-1;;;;;;40170:34:0::1;-1:-1:-1::0;;;;;40170:34:0;;;::::1;::::0;;;::::1;::::0;;40055:157::o;24910:198::-;-1:-1:-1;;;;;25000:20:0;;24976:7;25000:20;;;:11;:20;;;;;;;;24996:49;;;-1:-1:-1;;;;;;25029:16:0;;;;;:7;:16;;;;;;;24910:198::o;24996:49::-;-1:-1:-1;;;;;25083:16:0;;;;;;:7;:16;;;;;;25063:37;;:19;:37::i;2556:94::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;2621:21:::1;2639:1;2621:9;:21::i;38070:522::-:0;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38209:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;;::::1;;:42;;::::0;::::1;;;;38187:148;;;::::0;-1:-1:-1;;;38187:148:0;;9275:2:1;38187:148:0::1;::::0;::::1;9257:21:1::0;9314:2;9294:18;;;9287:30;9353:34;9333:18;;;9326:62;9424:26;9404:18;;;9397:54;9468:19;;38187:148:0::1;9073:420:1::0;38187:148:0::1;-1:-1:-1::0;;;;;38346:33:0;::::1;;::::0;;;:26:::1;:33;::::0;;;;:41;;-1:-1:-1;;38346:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;38398:130:::1;;-1:-1:-1::0;;;;;38424:31:0;::::1;;::::0;;;:24:::1;:31;::::0;;;;;;;;:38;;-1:-1:-1;;38424:38:0::1;38458:4;38424:38;::::0;;38482:34;;4817:51:1;;;38482:34:0;::::1;;::::0;::::1;::::0;4790:18:1;38482:34:0::1;;;;;;;38398:130;38543:41;::::0;;::::1;;::::0;-1:-1:-1;;;;;38543:41:0;::::1;::::0;::::1;::::0;;;::::1;38070:522:::0;;:::o;26550:482::-;799:10;26670:4;26719:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;26719:34:0;;;;;;;;;;26786:35;;;;26764:122;;;;-1:-1:-1;;;26764:122:0;;15903:2:1;26764:122:0;;;15885:21:1;15942:2;15922:18;;;15915:30;15981:34;15961:18;;;15954:62;-1:-1:-1;;;16032:18:1;;;16025:35;16077:19;;26764:122:0;15701:401:1;26764:122:0;26922:67;799:10;26945:7;26973:15;26954:16;:34;26922:8;:67::i;:::-;-1:-1:-1;27020:4:0;;26550:482;-1:-1:-1;;;26550:482:0:o;25116:199::-;25221:4;25243:42;799:10;25267:9;25278:6;25243:9;:42::i;40501:266::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;40586:20:::1;40652:4;40635:15;40610:24;40628:4;40610:9;:24::i;:::-;:40;;;;:::i;:::-;40609:47;;;;:::i;:::-;40586:70;;40666:30;40683:12;40666:16;:30::i;:::-;40715:10;::::0;40707:52:::1;::::0;-1:-1:-1;;;;;40715:10:0::1;40737:21;40707:29;:52::i;38600:458::-:0;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;38745:19:::1;38787:3:::0;38782:4;38767:14:::1;38772:9:::0;38767:4;:14:::1;:::i;:::-;:19;;;;:::i;:::-;:23;;;;:::i;:::-;38745:45;;;;38824:9;;38809:11;:24;;38801:70;;;;-1:-1:-1::0;;;38801:70:0::1;;;;;;;:::i;:::-;38882:8;:19:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;38912:29:0;;;;;;;38882:19:::1;38912:29:::0;;::::1;;;-1:-1:-1::0;;38982:17:0;38952:19;;;::::1;;-1:-1:-1::0;;38982:17:0;;;;;::::1;::::0;;;::::1;;::::0;;;39028:16:::1;38952:19:::0;38912:29;39028:16:::1;:::i;:::-;:22;;;;:::i;:::-;39010:8;:40:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;39010:40:0::1;-1:-1:-1::0;;39010:40:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;38600:458:0:o;29437:171::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;29514:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;29514:32:0::1;-1:-1:-1::0;;;;29514:32:0;;::::1;;::::0;;29562:38:::1;::::0;::::1;::::0;::::1;::::0;29538:8;6167:14:1;6160:22;6142:41;;6130:2;6115:18;;6002:187;41138:117:0;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41222:17:0;;;::::1;;::::0;;;:5:::1;:17;::::0;;;;:25;;-1:-1:-1;;41222:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41138:117::o;40220:114::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;40302:10:::1;:24:::0;;-1:-1:-1;;;;;;40302:24:0::1;-1:-1:-1::0;;;;;40302:24:0;;;::::1;::::0;;;::::1;::::0;;40220:114::o;41499:380::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41636:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;::::1;;:45;;::::0;::::1;;;;41614:145;;;::::0;-1:-1:-1;;;41614:145:0;;10819:2:1;41614:145:0::1;::::0;::::1;10801:21:1::0;10858:2;10838:18;;;10831:30;10897:34;10877:18;;;10870:62;-1:-1:-1;;;10948:18:1;;;10941:48;11006:19;;41614:145:0::1;10617:414:1::0;41614:145:0::1;-1:-1:-1::0;;;;;41770:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;;;;:44;;-1:-1:-1;;41770:44:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41832:39;;4817:51:1;;;41770:44:0;;41832:39:::1;::::0;4790:18:1;41832:39:0::1;;;;;;;41499:380:::0;;:::o;39541:319::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;39733:4:::1;39713:18;39703:7;;:28;;;;:::i;:::-;:34;;;;:::i;:::-;39686:14;:51:::0;39792:7:::1;::::0;39822:4:::1;::::0;39792:28:::1;::::0;39801:19;;39792:28:::1;:::i;:::-;:34;;;;:::i;:::-;39774:15;:52:::0;-1:-1:-1;;39541:319:0:o;29009:112::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29078:27:0::1;29108:5;29078:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29078:35:0::1;::::0;;29009:112::o;2805:192::-;1951:7;1978:6;-1:-1:-1;;;;;1978:6:0;799:10;2125:23;2117:68;;;;-1:-1:-1;;;2117:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2894:22:0;::::1;2886:73;;;::::0;-1:-1:-1;;;2886:73:0;;8465:2:1;2886:73:0::1;::::0;::::1;8447:21:1::0;8504:2;8484:18;;;8477:30;8543:34;8523:18;;;8516:62;-1:-1:-1;;;8594:18:1;;;8587:36;8640:19;;2886:73:0::1;8263:402:1::0;2886:73:0::1;2970:19;2980:8;2970:9;:19::i;:::-;2805:192:::0;:::o;32408:369::-;-1:-1:-1;;;;;32535:19:0;;32527:68;;;;-1:-1:-1;;;32527:68:0;;15096:2:1;32527:68:0;;;15078:21:1;15135:2;15115:18;;;15108:30;15174:34;15154:18;;;15147:62;-1:-1:-1;;;15225:18:1;;;15218:34;15269:19;;32527:68:0;14894:400:1;32527:68:0;-1:-1:-1;;;;;32614:21:0;;32606:68;;;;-1:-1:-1;;;32606:68:0;;8872:2:1;32606:68:0;;;8854:21:1;8911:2;8891:18;;;8884:30;8950:34;8930:18;;;8923:62;-1:-1:-1;;;9001:18:1;;;8994:32;9043:19;;32606:68:0;8670:398:1;32606:68:0;-1:-1:-1;;;;;32685:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32737:32;;16253:25:1;;;32737:32:0;;16226:18:1;32737:32:0;;;;;;;32408:369;;;:::o;13792:317::-;13907:6;13882:21;:31;;13874:73;;;;-1:-1:-1;;;13874:73:0;;12017:2:1;13874:73:0;;;11999:21:1;12056:2;12036:18;;;12029:30;12095:31;12075:18;;;12068:59;12144:18;;13874:73:0;11815:353:1;13874:73:0;13961:12;13979:9;-1:-1:-1;;;;;13979:14:0;14001:6;13979:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13960:52;;;14031:7;14023:78;;;;-1:-1:-1;;;14023:78:0;;11238:2:1;14023:78:0;;;11220:21:1;11277:2;11257:18;;;11250:30;11316:34;11296:18;;;11289:62;11387:28;11367:18;;;11360:56;11433:19;;14023:78:0;11036:422:1;14023:78:0;13863:246;13792:317;;:::o;32785:1832::-;32903:19;;:24;:58;;;;-1:-1:-1;;;;;;32931:30:0;;;;;;:26;:30;;;;;;;;32903:58;32899:125;;;33000:12;32978:19;:34;32899:125;-1:-1:-1;;;;;33044:18:0;;33036:68;;;;-1:-1:-1;;;33036:68:0;;14690:2:1;33036:68:0;;;14672:21:1;14729:2;14709:18;;;14702:30;14768:34;14748:18;;;14741:62;-1:-1:-1;;;14819:18:1;;;14812:35;14864:19;;33036:68:0;14488:401:1;33036:68:0;-1:-1:-1;;;;;33123:16:0;;33115:64;;;;-1:-1:-1;;;33115:64:0;;7232:2:1;33115:64:0;;;7214:21:1;7271:2;7251:18;;;7244:30;7310:34;7290:18;;;7283:62;-1:-1:-1;;;7361:18:1;;;7354:33;7404:19;;33115:64:0;7030:399:1;33115:64:0;-1:-1:-1;;;;;33199:11:0;;;;;;:5;:11;;;;;;;;33198:12;33190:55;;;;-1:-1:-1;;;33190:55:0;;12735:2:1;33190:55:0;;;12717:21:1;12774:2;12754:18;;;12747:30;12813:32;12793:18;;;12786:60;12863:18;;33190:55:0;12533:354:1;33190:55:0;33273:1;33264:6;:10;33256:64;;;;-1:-1:-1;;;33256:64:0;;13864:2:1;33256:64:0;;;13846:21:1;13903:2;13883:18;;;13876:30;13942:34;13922:18;;;13915:62;-1:-1:-1;;;13993:18:1;;;13986:39;14042:19;;33256:64:0;13662:405:1;33256:64:0;33363:15;33373:4;33363:9;:15::i;:::-;33353:6;:25;;33331:124;;;;-1:-1:-1;;;33331:124:0;;7636:2:1;33331:124:0;;;7618:21:1;7675:2;7655:18;;;7648:30;7714:34;7694:18;;;7687:62;-1:-1:-1;;;7765:18:1;;;7758:47;7822:19;;33331:124:0;7434:413:1;33331:124:0;-1:-1:-1;;;;;33483:24:0;;33466:12;33483:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;33511:22:0;;;;;;:18;:22;;;;;;;;33483:50;33481:53;33466:68;;33551:7;33547:687;;;-1:-1:-1;;;;;33579:32:0;;;;;;:26;:32;;;;;;;;33575:648;;;33673:12;;33651:19;;:34;;;;:::i;:::-;33636:12;:49;33632:167;;;-1:-1:-1;;;;;33710:9:0;;;;;;:5;:9;;;;;;;;;:16;;-1:-1:-1;;33710:16:0;33722:4;33710:16;;;;;;33754:25;;4817:51:1;;;33722:4:0;;33754:25;;4790:18:1;33754:25:0;;;;;;;33632:167;33834:8;33819:23;:12;:23;;;;;;-1:-1:-1;;33819:23:0;;;;;;;;;;;;;;;-1:-1:-1;;33819:23:0;;;;;;;;-1:-1:-1;;33819:23:0;;;;;;;;;;-1:-1:-1;;33819:23:0;-1:-1:-1;;;33819:23:0;;;;;;;;;;;;;;;;;33901:14;;33891:24;;;33861:130;;;;-1:-1:-1;;;33861:130:0;;10102:2:1;33861:130:0;;;10084:21:1;;;10121:18;;;10114:30;10180:34;10160:18;;;10153:62;10232:18;;33861:130:0;9900:356:1;33861:130:0;33575:648;;;34047:9;34032:24;:12;:24;;;;;;-1:-1:-1;;34032:24:0;;;;;;;;;;;;;;;-1:-1:-1;;34032:24:0;;;;;;;;-1:-1:-1;;34032:24:0;;;;;;;;;;-1:-1:-1;;34032:24:0;-1:-1:-1;;;34032:24:0;;;;;;;;;;;;;;;;;34115:15;;34105:25;;;34075:132;;;;-1:-1:-1;;;34075:132:0;;9700:2:1;34075:132:0;;;9682:21:1;9739:2;9719:18;;;9712:30;9778:34;9758:18;;;9751:62;-1:-1:-1;;;9829:18:1;;;9822:31;9870:19;;34075:132:0;9498:397:1;34075:132:0;34292:29;;34264:24;34282:4;34264:9;:24::i;:::-;:57;;:91;;;;-1:-1:-1;34339:16:0;;;;34338:17;34264:91;:141;;;;-1:-1:-1;;;;;;34373:32:0;;;;;;:26;:32;;;;;;;;34372:33;34264:141;:179;;;;-1:-1:-1;34422:21:0;;-1:-1:-1;;;34422:21:0;;;;34264:179;34246:310;;;34499:45;34514:29;;34499:14;:45::i;:::-;34568:41;34583:4;34589:2;34593:6;34601:7;34568:14;:41::i;31653:161::-;31695:7;31716:15;31733;31752:19;:17;:19::i;:::-;31715:56;;-1:-1:-1;31715:56:0;-1:-1:-1;31789:17:0;31715:56;;31789:17;:::i;:::-;31782:24;;;;31653:161;:::o;35662:1287::-;23292:16;:23;;-1:-1:-1;;23292:23:0;23311:4;23292:23;;;35769:12:::1;:19:::0;23292:16;;35769:23:::1;::::0;-1:-1:-1;;;35769:19:0;::::1;23292:23:::0;35769:19:::1;35791:1;35769:23;:::i;:::-;35875:12;:15:::0;35747:45:::1;::::0;;::::1;::::0;-1:-1:-1;35803:32:0::1;::::0;35747:45;;35839:51:::1;::::0;35875:15;;;::::1;;35839:20:::0;:51:::1;:::i;:::-;35838:67;;;;:::i;:::-;35803:102:::0;-1:-1:-1;35916:14:0::1;35933:47;35803:102:::0;35933:20;:47:::1;:::i;:::-;35916:64:::0;-1:-1:-1;36018:21:0::1;36084:24;35916:64:::0;36084:16:::1;:24::i;:::-;36121:20;36144:38;36168:14:::0;36144:21:::1;:38;:::i;:::-;36288:12;:15:::0;36121:61;;-1:-1:-1;36193:29:0::1;::::0;36274::::1;::::0;36288:15;;::::1;;;36274:11:::0;:29:::1;:::i;:::-;36241:12;:15:::0;36226:30:::1;::::0;36241:15;;::::1;;;36226:12:::0;:30:::1;:::i;:::-;36225:79;;;;:::i;:::-;36193:111;;36373:1;36347:24;:27;:54;;;;;36400:1;36378:21;:23;36347:54;36343:147;;;36417:61;36430:24;36456:21;36417:12;:61::i;:::-;36708:12;:16:::0;36591:21:::1;::::0;36564:24:::1;::::0;36694:30:::1;::::0;36708:16;;::::1;;;36694:11:::0;:30:::1;:::i;:::-;36660:12;:16:::0;36641:35:::1;::::0;36660:16;;::::1;;;36641::::0;:35:::1;:::i;:::-;36640:85;;;;:::i;:::-;36831:12;:21:::0;36623:102;;-1:-1:-1;36736:19:0::1;::::0;36817:35:::1;::::0;36831:21:::1;::::0;::::1;;;36817:11:::0;:35:::1;:::i;:::-;36778:12;:21:::0;36759:40:::1;::::0;36778:21:::1;::::0;::::1;;;36759:16:::0;:40:::1;:::i;:::-;36758:95;;;;:::i;:::-;36864:10;::::0;36736:117;;-1:-1:-1;36864:28:0::1;::::0;-1:-1:-1;;;;;36864:10:0::1;36885:6:::0;36864:20:::1;:28::i;:::-;36903:15;::::0;:38:::1;::::0;-1:-1:-1;;;;;36903:15:0::1;36929:11:::0;36903:25:::1;:38::i;:::-;-1:-1:-1::0;;23338:16:0;:24;;-1:-1:-1;;23338:24:0;;;-1:-1:-1;;;;;;;;35662:1287:0:o;30086:440::-;30186:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30186:36:0;30252:29;30264:7;30273;30252:11;:29::i;:::-;30240:41;;30439:52;30451:9;30462:7;30471;30480:10;:8;:10::i;:::-;30439:11;:52::i;:::-;30408:17;;;30292:199;30379:14;;;30292:199;30339:25;;;30292:199;;;30086:440;;;;:::o;3005:173::-;3061:16;3080:6;;-1:-1:-1;;;;;3097:17:0;;;-1:-1:-1;;;;;;3097:17:0;;;;;;3130:40;;3080:6;;;;;;;3130:40;;3061:16;3130:40;3050:128;3005:173;:::o;36957:669::-;37091:16;;;37105:1;37091:16;;;;;;;;37067:21;;37091:16;;;;;;;;;;-1:-1:-1;37091:16:0;37067:40;;37136:4;37118;37123:1;37118:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;37118:23:0;;;-1:-1:-1;;;;;37118:23:0;;;;;37162:15;;;;;;;;;-1:-1:-1;;;;;37162:15:0;-1:-1:-1;;;;;37162:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37152:4;37157:1;37152:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37152:32:0;;;:7;;;;;;;;;;:32;;;;37234:15;;37219:4;25440:7;25472:18;;;:11;:18;;;;;;37234:15;;;;;;;25472:27;;;;;;37254:11;-1:-1:-1;37197:159:0;;;37314:15;;37282:62;;37299:4;;37314:15;;;-1:-1:-1;;;;;37314:15:0;-1:-1:-1;;37282:8:0;:62::i;:::-;37394:15;;:224;;-1:-1:-1;;;37394:224:0;;:15;;;;-1:-1:-1;;;;;37394:15:0;;:66;;:224;;37475:11;;37501:1;;37545:4;;37572;;37592:15;;37394:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37012:614;36957:669;:::o;34698:956::-;34850:28;34881;34892:7;34901;34881:10;:28::i;:::-;-1:-1:-1;;;;;34926:19:0;;;;;;:11;:19;;;;;;34850:59;;-1:-1:-1;34926:19:0;;34922:78;;;-1:-1:-1;;;;;34962:15:0;;;;;;:7;:15;;;;;:26;;34981:7;;34962:15;:26;;34981:7;;34962:26;:::i;:::-;;;;-1:-1:-1;;34922:78:0;-1:-1:-1;;;;;35014:22:0;;;;;;:11;:22;;;;;;;;35010:94;;;35075:17;;;;-1:-1:-1;;;;;35053:18:0;;;;;;:7;:18;;;;;:39;;:18;;;:39;;35075:17;;35053:39;:::i;:::-;;;;-1:-1:-1;;35010:94:0;35135:9;;-1:-1:-1;;;;;35116:15:0;;35135:9;35116:15;;;:7;:15;;;;;:28;;:15;;35135:9;35116:28;;35135:9;;35116:28;:::i;:::-;;;;-1:-1:-1;;35177:17:0;;;;;-1:-1:-1;;;;;35155:18:0;;;;;;:7;:18;;;;;;:39;;35177:17;;35155:18;;:39;;35177:17;;35155:39;:::i;:::-;;;;-1:-1:-1;;35205:177:0;;;;35233:27;35245:1;:6;;;35253:1;:6;;;35233:11;:27::i;:::-;35275:33;35287:1;:9;;;35298:1;:9;;;35275:11;:33::i;:::-;35353:4;-1:-1:-1;;;;;35328:42:0;35337:6;-1:-1:-1;;;;;35328:42:0;;35360:1;:9;;;35328:42;;;;16253:25:1;;16241:2;16226:18;;16107:177;35328:42:0;;;;;;;;35205:177;-1:-1:-1;;;;;35414:35:0;;;;;;:24;:35;;;;;;;;;:95;;;35494:15;;35470:20;35480:9;35470;:20::i;:::-;:39;;35414:95;35392:192;;;;-1:-1:-1;;;35392:192:0;;14274:2:1;35392:192:0;;;14256:21:1;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;-1:-1:-1;;;14403:18:1;;;14396:45;14458:19;;35392:192:0;14072:411:1;35392:192:0;35617:9;-1:-1:-1;;;;;35600:46:0;35609:6;-1:-1:-1;;;;;35600:46:0;;35628:1;:17;;;35600:46;;;;16253:25:1;;16241:2;16226:18;;16107:177;35600:46:0;;;;;;;;34839:815;34698:956;;;;:::o;31822:578::-;31920:7;;31956;;31873;;;;;31974:314;31998:9;:16;31994:20;;31974:314;;;32082:7;32058;:21;32066:9;32076:1;32066:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32066:12:0;32058:21;;;;;;;;;;;;;:31;;:83;;;32134:7;32110;:21;32118:9;32128:1;32118:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32118:12:0;32110:21;;;;;;;;;;;;;:31;32058:83;32036:146;;;32165:7;;32174;;32157:25;;;;;;;31822:578;;:::o;32036:146::-;32208:7;:21;32216:9;32226:1;32216:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32216:12:0;32208:21;;;;;;;;;;;;;32197:32;;;;:::i;:::-;;;32255:7;:21;32263:9;32273:1;32263:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32263:12:0;32255:21;;;;;;;;;;;;;32244:32;;;;:::i;:::-;;-1:-1:-1;32016:3:0;;;;:::i;:::-;;;;31974:314;;;;32322:7;;32312;;:17;;;;:::i;:::-;32302:7;:27;32298:58;;;32339:7;;32348;;32331:25;;;;;;31822:578;;:::o;32298:58::-;32375:7;;32384;;-1:-1:-1;31822:578:0;-1:-1:-1;31822:578:0:o;37634:428::-;37745:15;;37949:10;;37745:255;;-1:-1:-1;;;37745:255:0;;37817:4;37745:255;;;5731:34:1;5781:18;;;5774:34;;;37863:1:0;5824:18:1;;;5817:34;;;5867:18;;;5860:34;-1:-1:-1;;;;;37949:10:0;;;5910:19:1;;;5903:44;37974:15:0;5963:19:1;;;5956:35;37745:15:0;;;;;;:31;;37784:9;;5665:19:1;;37745:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;38016:38:0;;;17448:25:1;;;17504:2;17489:18;;17482:34;;;38016:38:0;;-1:-1:-1;17421:18:1;38016:38:0;;;;;;;37634:428;;:::o;30534:437::-;30635:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30635:28:0;30686:7;30681:91;;30710:17;;;:27;;;30752:8;;30681:91;30802:12;:16;30822:3;;30792:26;;30802:16;;30792:7;:26;:::i;:::-;30791:34;;;;:::i;:::-;30782:6;;;:43;30859:12;:19;30882:3;;30849:29;;-1:-1:-1;;;30859:19:0;;;;30849:7;:29;:::i;:::-;30848:37;;;;:::i;:::-;30836:9;;;:49;;;30926:6;;;;30916:16;;:7;:16;:::i;:::-;:28;;;;:::i;:::-;30896:17;;;:48;30534:437;;;;:::o;30979:666::-;31188:15;;;;31336:21;31346:11;31336:7;:21;:::i;:::-;31326:31;;31375:7;31370:72;;-1:-1:-1;31407:7:0;;-1:-1:-1;31425:1:0;;-1:-1:-1;31425:1:0;31399:31;;31370:72;31470:11;31461:1;:6;;;:20;;;;:::i;:::-;31454:27;;31514:11;31502:1;:9;;;:23;;;;:::i;:::-;31492:33;-1:-1:-1;31492:33:0;31554:14;31564:4;31554:7;:14;:::i;:::-;:24;;;;:::i;:::-;31536:42;;30979:666;;;;;;;;;;:::o;29714:125::-;29793:4;29782:7;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;29808:11:0;:23;;29827:4;;29808:11;:15;;:23;;29827:4;;29808:23;:::i;:::-;;;;-1:-1:-1;;;;29714:125:0:o;29847:231::-;29937:4;29921:22;;;;:7;:22;;;;;:33;;29947:7;;29921:22;:33;;29947:7;;29921:33;:::i;:::-;;;;-1:-1:-1;;29989:4:0;29969:26;;;;:11;:26;;;;;;;;29965:65;;;30013:4;29997:22;;;;:7;:22;;;;;:33;;30023:7;;29997:22;:33;;30023:7;;29997:33;:::i;:::-;;;;-1:-1:-1;;29965:65:0;30063:7;30041:11;:18;;;:29;;;;;;;:::i;14:156:1:-;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;109:55;14:156;;;:::o;175:247::-;234:6;287:2;275:9;266:7;262:23;258:32;255:52;;;303:1;300;293:12;255:52;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;598:9;592:16;617:31;642:5;617:31;:::i;943:388::-;1011:6;1019;1072:2;1060:9;1051:7;1047:23;1043:32;1040:52;;;1088:1;1085;1078:12;1040:52;1127:9;1114:23;1146:31;1171:5;1146:31;:::i;:::-;1196:5;-1:-1:-1;1253:2:1;1238:18;;1225:32;1266:33;1225:32;1266:33;:::i;:::-;1318:7;1308:17;;;943:388;;;;;:::o;1336:456::-;1413:6;1421;1429;1482:2;1470:9;1461:7;1457:23;1453:32;1450:52;;;1498:1;1495;1488:12;1450:52;1537:9;1524:23;1556:31;1581:5;1556:31;:::i;:::-;1606:5;-1:-1:-1;1663:2:1;1648:18;;1635:32;1676:33;1635:32;1676:33;:::i;:::-;1336:456;;1728:7;;-1:-1:-1;;;1782:2:1;1767:18;;;;1754:32;;1336:456::o;1797:382::-;1862:6;1870;1923:2;1911:9;1902:7;1898:23;1894:32;1891:52;;;1939:1;1936;1929:12;1891:52;1978:9;1965:23;1997:31;2022:5;1997:31;:::i;:::-;2047:5;-1:-1:-1;2104:2:1;2089:18;;2076:32;2117:30;2076:32;2117:30;:::i;2184:315::-;2252:6;2260;2313:2;2301:9;2292:7;2288:23;2284:32;2281:52;;;2329:1;2326;2319:12;2281:52;2368:9;2355:23;2387:31;2412:5;2387:31;:::i;:::-;2437:5;2489:2;2474:18;;;;2461:32;;-1:-1:-1;;;2184:315:1:o;2504:241::-;2560:6;2613:2;2601:9;2592:7;2588:23;2584:32;2581:52;;;2629:1;2626;2619:12;2581:52;2668:9;2655:23;2687:28;2709:5;2687:28;:::i;2750:245::-;2817:6;2870:2;2858:9;2849:7;2845:23;2841:32;2838:52;;;2886:1;2883;2876:12;2838:52;2918:9;2912:16;2937:28;2959:5;2937:28;:::i;3000:180::-;3059:6;3112:2;3100:9;3091:7;3087:23;3083:32;3080:52;;;3128:1;3125;3118:12;3080:52;-1:-1:-1;3151:23:1;;3000:180;-1:-1:-1;3000:180:1:o;3185:309::-;3250:6;3258;3311:2;3299:9;3290:7;3286:23;3282:32;3279:52;;;3327:1;3324;3317:12;3279:52;3363:9;3350:23;3340:33;;3423:2;3412:9;3408:18;3395:32;3436:28;3458:5;3436:28;:::i;3499:248::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;-1:-1:-1;;3667:23:1;;;3737:2;3722:18;;;3709:32;;-1:-1:-1;3499:248:1:o;3752:306::-;3840:6;3848;3856;3909:2;3897:9;3888:7;3884:23;3880:32;3877:52;;;3925:1;3922;3915:12;3877:52;3954:9;3948:16;3938:26;;4004:2;3993:9;3989:18;3983:25;3973:35;;4048:2;4037:9;4033:18;4027:25;4017:35;;3752:306;;;;;:::o;4063:393::-;4141:6;4149;4157;4165;4218:3;4206:9;4197:7;4193:23;4189:33;4186:53;;;4235:1;4232;4225:12;4186:53;4258:27;4275:9;4258:27;:::i;:::-;4248:37;;4304:36;4336:2;4325:9;4321:18;4304:36;:::i;:::-;4294:46;;4359:36;4391:2;4380:9;4376:18;4359:36;:::i;:::-;4349:46;;4414:36;4446:2;4435:9;4431:18;4414:36;:::i;:::-;4404:46;;4063:393;;;;;;;:::o;6428:597::-;6540:4;6569:2;6598;6587:9;6580:21;6630:6;6624:13;6673:6;6668:2;6657:9;6653:18;6646:34;6698:1;6708:140;6722:6;6719:1;6716:13;6708:140;;;6817:14;;;6813:23;;6807:30;6783:17;;;6802:2;6779:26;6772:66;6737:10;;6708:140;;;6866:6;6863:1;6860:13;6857:91;;;6936:1;6931:2;6922:6;6911:9;6907:22;6903:31;6896:42;6857:91;-1:-1:-1;7009:2:1;6988:15;-1:-1:-1;;6984:29:1;6969:45;;;;7016:2;6965:54;;6428:597;-1:-1:-1;;;6428:597:1:o;13301:356::-;13503:2;13485:21;;;13522:18;;;13515:30;13581:34;13576:2;13561:18;;13554:62;13648:2;13633:18;;13301:356::o;15299:397::-;15501:2;15483:21;;;15540:2;15520:18;;;15513:30;15579:34;15574:2;15559:18;;15552:62;-1:-1:-1;;;15645:2:1;15630:18;;15623:31;15686:3;15671:19;;15299:397::o;16289:980::-;16551:4;16599:3;16588:9;16584:19;16630:6;16619:9;16612:25;16656:2;16694:6;16689:2;16678:9;16674:18;16667:34;16737:3;16732:2;16721:9;16717:18;16710:31;16761:6;16796;16790:13;16827:6;16819;16812:22;16865:3;16854:9;16850:19;16843:26;;16904:2;16896:6;16892:15;16878:29;;16925:1;16935:195;16949:6;16946:1;16943:13;16935:195;;;17014:13;;-1:-1:-1;;;;;17010:39:1;16998:52;;17105:15;;;;17070:12;;;;17046:1;16964:9;16935:195;;;-1:-1:-1;;;;;;;17186:32:1;;;;17181:2;17166:18;;17159:60;-1:-1:-1;;;17250:3:1;17235:19;17228:35;17147:3;16289:980;-1:-1:-1;;;16289:980:1:o;18219:128::-;18259:3;18290:1;18286:6;18283:1;18280:13;18277:39;;;18296:18;;:::i;:::-;-1:-1:-1;18332:9:1;;18219:128::o;18352:204::-;18390:3;18426:4;18423:1;18419:12;18458:4;18455:1;18451:12;18493:3;18487:4;18483:14;18478:3;18475:23;18472:49;;;18501:18;;:::i;:::-;18537:13;;18352:204;-1:-1:-1;;;18352:204:1:o;18561:217::-;18601:1;18627;18617:132;;18671:10;18666:3;18662:20;18659:1;18652:31;18706:4;18703:1;18696:15;18734:4;18731:1;18724:15;18617:132;-1:-1:-1;18763:9:1;;18561:217::o;18783:422::-;18872:1;18915:5;18872:1;18929:270;18950:7;18940:8;18937:21;18929:270;;;19009:4;19005:1;19001:6;18997:17;18991:4;18988:27;18985:53;;;19018:18;;:::i;:::-;19068:7;19058:8;19054:22;19051:55;;;19088:16;;;;19051:55;19167:22;;;;19127:15;;;;18929:270;;;18933:3;18783:422;;;;;:::o;19210:140::-;19268:5;19297:47;19338:4;19328:8;19324:19;19318:4;19404:5;19434:8;19424:80;;-1:-1:-1;19475:1:1;19489:5;;19424:80;19523:4;19513:76;;-1:-1:-1;19560:1:1;19574:5;;19513:76;19605:4;19623:1;19618:59;;;;19691:1;19686:130;;;;19598:218;;19618:59;19648:1;19639:10;;19662:5;;;19686:130;19723:3;19713:8;19710:17;19707:43;;;19730:18;;:::i;:::-;-1:-1:-1;;19786:1:1;19772:16;;19801:5;;19598:218;;19900:2;19890:8;19887:16;19881:3;19875:4;19872:13;19868:36;19862:2;19852:8;19849:16;19844:2;19838:4;19835:12;19831:35;19828:77;19825:159;;;-1:-1:-1;19937:19:1;;;19969:5;;19825:159;20016:34;20041:8;20035:4;20016:34;:::i;:::-;20086:6;20082:1;20078:6;20074:19;20065:7;20062:32;20059:58;;;20097:18;;:::i;:::-;20135:20;;19355:806;-1:-1:-1;;;19355:806:1:o;20166:168::-;20206:7;20272:1;20268;20264:6;20260:14;20257:1;20254:21;20249:1;20242:9;20235:17;20231:45;20228:71;;;20279:18;;:::i;:::-;-1:-1:-1;20319:9:1;;20166:168::o;20339:238::-;20377:7;20417:4;20414:1;20410:12;20449:4;20446:1;20442:12;20509:3;20503:4;20499:14;20494:3;20491:23;20484:3;20477:11;20470:19;20466:49;20463:75;;;20518:18;;:::i;20582:125::-;20622:4;20650:1;20647;20644:8;20641:34;;;20655:18;;:::i;:::-;-1:-1:-1;20692:9:1;;20582:125::o;20712:135::-;20751:3;-1:-1:-1;;20772:17:1;;20769:43;;;20792:18;;:::i;:::-;-1:-1:-1;20839:1:1;20828:13;;20712:135::o;20852:127::-;20913:10;20908:3;20904:20;20901:1;20894:31;20944:4;20941:1;20934:15;20968:4;20965:1;20958:15;20984:127;21045:10;21040:3;21036:20;21033:1;21026:31;21076:4;21073:1;21066:15;21100:4;21097:1;21090:15;21116:127;21177:10;21172:3;21168:20;21165:1;21158:31;21208:4;21205:1;21198:15;21232:4;21229:1;21222:15;21380:131;-1:-1:-1;;;;;21455:31:1;;21445:42;;21435:70;;21501:1;21498;21491:12;21516:118;21602:5;21595:13;21588:21;21581:5;21578:32;21568:60;;21624:1;21621;21614:12

Swarm Source

ipfs://d68b6c7c8d510a5694d2fec61a68c54f6f7be6a79218ad6f02f8a08d7b63e589
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.