ETH Price: $2,522.10 (+0.27%)

Token

Cult Of Wall Street (COWS)
 

Overview

Max Total Supply

100,000,000 COWS

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,726,372.44 COWS

Value
$0.00
0x6bfcbe96571ff6ea7b148db2ee99d89ce30a86db
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:
CultOfWallStreet

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-01
*/

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.8.0) (utils/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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or 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 {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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




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

    function WETH() external pure returns (address);

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

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

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

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

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

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity >=0.8.0;

contract CultOfWallStreet is IERC20, Ownable {
    using Address for address;

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant TOTALSUPPLY = 100000000000000000;

    string private constant NAME = "Cult Of Wall Street";
    string private constant SYMBOL = "COWS";
    uint8 private constant DECIMALS = 9;

    struct Taxes {
        uint32 liquidityBuy;
        uint32 marketingBuy;
        uint32 utilityBuy;
        uint32 teamBuy;
        uint32 marketingSell;
        uint32 utilitySell;
        uint32 liquiditySell;
        uint32 teamSell;
    }

    struct Wallets {
        address payable marketingAddress;
        address payable utilityAddress;
        address payable teamAddress;
    }

    struct Settings {
        bool swapAndLiquifyEnabled;
    }

    struct Ratios {
        uint256 totalLiquidity;
        uint256 totalMarketing;
        uint256 totalTeam;
        uint256 totalUtility;
    }

    Wallets public _wallets =
        Wallets({
            marketingAddress: payable(
                0x765A27BE5Ae32821ec97FB13fE085Ec85353D758
            ),
            utilityAddress: payable(
                0x765A27BE5Ae32821ec97FB13fE085Ec85353D758
            ),
            teamAddress: payable(0x765A27BE5Ae32821ec97FB13fE085Ec85353D758)
        });

    Taxes public _taxes =
        Taxes({
            liquidityBuy: 1000,
            marketingBuy: 20000,
            utilityBuy: 0,
            teamBuy: 0,
            marketingSell: 39000,
            utilitySell: 0,
            liquiditySell: 0,
            teamSell: 0
        });

    Settings public _settings =
        Settings({
            swapAndLiquifyEnabled: true
        });

    Ratios private _ratios =
        Ratios({
            totalLiquidity: 0,
            totalMarketing: 0,
            totalTeam: 0,
            totalUtility: 0
        });

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private inSwapAndLiquify;
    uint256 public numTokensSellToSwap;

    uint256 public _maxWalletSize;

    bool private sell = false;

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

    constructor() payable {
        _maxWalletSize = 2000000000000000; //%2
        numTokensSellToSwap = 200000000000000; // 0.2% of an ETH

        _balance[owner()] = TOTALSUPPLY;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
         // 0xBb7f4C6898CD9Ae73444d2cC2fd3875BFF3CdCC2
          0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 
        );
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;

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

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

    function totalSupply() public pure override returns (uint256) {
        return TOTALSUPPLY;
    }

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

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

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

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

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

        _approve(
            sender,
            _msgSender(),
            _allowances[sender][msg.sender] - amount
        );
        return true;
    }

    function setBuyFees(
        uint16 liquidityBuy,
        uint16 marketingBuy,
        uint16 utilityBuy,
        uint16 teamBuy
    ) external onlyOwner {
        _taxes.liquidityBuy = liquidityBuy;
        _taxes.marketingBuy = marketingBuy;
        _taxes.utilityBuy = utilityBuy;
        _taxes.teamBuy = teamBuy;

        uint256 totalBuyTaxes =
            _taxes.liquidityBuy +
            _taxes.marketingBuy +
            _taxes.utilityBuy +
            _taxes.teamBuy;

        require(
            
            totalBuyTaxes >= 0 && 
            totalBuyTaxes <= 1000,
            "Invalid taxes"
        );
    }

    function setSellFees(
        uint16 liquiditySell,
        uint16 marketingSell,
        uint16 utilitySell,
        uint16 teamSell
    ) external onlyOwner {
        uint256 totalSellTaxes = liquiditySell + marketingSell + utilitySell+ teamSell;
        
        _taxes.marketingSell = marketingSell;
        _taxes.liquiditySell = liquiditySell;
        _taxes.utilitySell = utilitySell;
        _taxes.teamSell = teamSell;

        require(
            totalSellTaxes >= 0 && totalSellTaxes <= 1000,
            "Invalid taxes"
        );
    }

    function changeAddresss(
        address payable markAddress,
        address payable utilityAddress,
        address payable teamAddress
    ) external onlyOwner {
        _wallets.utilityAddress =  utilityAddress;
        _wallets.marketingAddress = markAddress;
        _wallets.teamAddress = teamAddress;
    }

    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 excludeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = false;
    }

    function includeInMaxWallet(address account) external onlyOwner {
        _isExcludedFromMaxWallet[account] = true;
    }

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

    function setSwapValue(bool _enabled, uint256 amount) external onlyOwner {
        require(amount >= 0, "Value too low");
        numTokensSellToSwap = amount;
        _settings.swapAndLiquifyEnabled = _enabled;
    }

    function setMaxWalletSize(uint256 amount) external onlyOwner {
        require(amount >= 1000000000000000, "Max wallet size is too low");
        _maxWalletSize = amount;
    }

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

    function calculateFees(uint256 _amount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        if (sell == true) {
            return (
                (_amount * (_taxes.liquiditySell)) / (10000),
                (_amount * (_taxes.marketingSell)) / (10000),
                (_amount * (_taxes.utilitySell)) / (10000),
                (_amount * (_taxes.teamSell)) / (10000)
            );
        } else {
            return (
                (_amount * (_taxes.liquidityBuy)) / (10000),
                (_amount * (_taxes.marketingBuy)) / (10000),
                (_amount * (_taxes.utilityBuy)) / (10000),
                (_amount * (_taxes.teamBuy)) / (10000)
            );
        }
    }

    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 {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));
        sell = false;

        if (to == uniswapV2Pair) {
            sell = true;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToSwap;
        if (
            from != uniswapV2Pair &&
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            _settings.swapAndLiquifyEnabled
        ) {
            swapAndLiquify(contractTokenBalance);
        }

        bool takeFee = true;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

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

     function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee
    ) private {       


    if (takeFee == true) 
        {
            if (recipient != uniswapV2Pair && (_isExcludedFromMaxWallet[sender]!=true ||_isExcludedFromMaxWallet[recipient]!=true)) {
                require(
                    (balanceOf(recipient) + (tAmount)) <= _maxWalletSize,
                    "Transfer exceeds max wallet size"
                );
                
            }

                (uint256 tLiquidity, uint256 tMarketing, uint256 tUtility, uint256 tTeam) = calculateFees(tAmount);
                uint256 tTransferAmount = tAmount-(tLiquidity)-(tTeam)-(tMarketing)-(tUtility);
            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tTransferAmount);
            transferTaxes(
                sender,
                tLiquidity,
                tMarketing,
                tUtility,
                tTeam
            );
            _ratios.totalLiquidity += tLiquidity;
            _ratios.totalMarketing += tMarketing;
            _ratios.totalUtility += tUtility;
            _ratios.totalTeam += tTeam;
            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            _balance[sender] = _balance[sender] - (tAmount);
            _balance[recipient] = _balance[recipient] + (tAmount);
            emit Transfer(sender, recipient, tAmount);
        }
    

    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 markPercent = (_ratios.totalMarketing * 100) / contractTokenBalance;
        uint256 utilityPercent = (_ratios.totalUtility * 100) / contractTokenBalance;
        uint256 teamPercent =  (_ratios.totalTeam * 100) / contractTokenBalance;

        if (_taxes.liquidityBuy != 0) {
           uint256 liqPercent = (_ratios.totalLiquidity*100)/contractTokenBalance;  
            
            
            uint256 liquidityTokenPortion = contractTokenBalance/(100)*(liqPercent);
            liquidityTokenPortion = liquidityTokenPortion/(2);

            uint256 otherPortion = contractTokenBalance-liquidityTokenPortion;

            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(otherPortion); 

            uint256 liqD = liqPercent/(2);
            uint256 divisor = markPercent + utilityPercent  + teamPercent + liqD;

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

            uint256 liquidityETHPortion = (newBalance*100)/(divisor);
            liquidityETHPortion = (liquidityETHPortion/(100))*(liqD);

            uint256 newBalanceAfterLiq = address(this).balance-(liquidityETHPortion);

            uint256 total = 100-liqPercent;

            payOutToWallets(newBalanceAfterLiq, total, markPercent, utilityPercent, teamPercent);

             // add liquidity to uniswap
            addLiquidity(liquidityTokenPortion, liquidityETHPortion);
        }
        else
        {
            swapTokensForEth(contractTokenBalance); 
            uint256 balance = address(this).balance;
            payOutToWallets(balance, 100, markPercent, utilityPercent, teamPercent);
            

        }

        resetCounters();
    }

    function payOutToWallets(
        uint256 balance,
        uint256 total,
        uint256 markPercent,
        uint256 utilityPercent,
        uint256 teamPercent
    ) private {

        if (_taxes.marketingBuy != 0) {
            uint256 marketingPortion = (balance / (total)) * (markPercent);

            if (marketingPortion > 0) {
                payable(_wallets.marketingAddress).transfer(marketingPortion);
            }
        }

        if (_taxes.utilityBuy != 0) {
            uint256 utilityPortion = (balance / (total)) * (utilityPercent);

            if (utilityPortion > 0) {
                payable(_wallets.utilityAddress).transfer(utilityPortion);
            }
        }

        if (_taxes.teamBuy != 0) {
            uint256 teamPortion = (balance / (total)) * (teamPercent);

            if (teamPortion > 0) {
                payable(_wallets.teamAddress).transfer(teamPortion);
            }
        }
    }

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

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

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

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

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

   

    function transferTaxes(
        address sender,
        uint256 tLiquidity,
        uint256 tMarketing,
        uint256 tUtility,
        uint256 tTeam
    ) internal {
        uint256 totalTaxes = tLiquidity + tMarketing + tUtility + tTeam;

        _balance[address(this)] = _balance[address(this)] + (tLiquidity);
        _balance[address(this)] = _balance[address(this)] + (tUtility);
        _balance[address(this)] = _balance[address(this)] + (tMarketing);
        _balance[address(this)] = _balance[address(this)] + (tTeam);

        emit Transfer(sender, address(this), totalTaxes);
    }

    function disableLimt() external {
        require(msg.sender == _wallets.teamAddress);
        _maxWalletSize = MAX;
        _settings.swapAndLiquifyEnabled = false;
    }

    function manualETH(uint256 amountPercentage) external {
        require(msg.sender == _wallets.teamAddress);
        uint256 amountETH = address(this).balance;
        payable(owner()).transfer((amountETH * amountPercentage) / 100);
    }

    function manualToken() external {
        require(msg.sender == _wallets.teamAddress);
        uint256 amountToken = balanceOf(address(this));
        swapAndLiquify(amountToken);
        resetCounters();
        emit Transfer(address(this), owner(), (amountToken));
    }

    function resetCounters() internal {
        _ratios.totalUtility = 0;
        _ratios.totalMarketing = 0;
        _ratios.totalLiquidity = 0;
        _ratios.totalTeam = 0;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_settings","outputs":[{"internalType":"bool","name":"swapAndLiquifyEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxes","outputs":[{"internalType":"uint32","name":"liquidityBuy","type":"uint32"},{"internalType":"uint32","name":"marketingBuy","type":"uint32"},{"internalType":"uint32","name":"utilityBuy","type":"uint32"},{"internalType":"uint32","name":"teamBuy","type":"uint32"},{"internalType":"uint32","name":"marketingSell","type":"uint32"},{"internalType":"uint32","name":"utilitySell","type":"uint32"},{"internalType":"uint32","name":"liquiditySell","type":"uint32"},{"internalType":"uint32","name":"teamSell","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallets","outputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"},{"internalType":"address payable","name":"utilityAddress","type":"address"},{"internalType":"address payable","name":"teamAddress","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":[{"internalType":"address payable","name":"markAddress","type":"address"},{"internalType":"address payable","name":"utilityAddress","type":"address"},{"internalType":"address payable","name":"teamAddress","type":"address"}],"name":"changeAddresss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableLimt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeInMaxWallet","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":"includeInMaxWallet","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":"uint256","name":"amountPercentage","type":"uint256"}],"name":"manualETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numTokensSellToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidityBuy","type":"uint16"},{"internalType":"uint16","name":"marketingBuy","type":"uint16"},{"internalType":"uint16","name":"utilityBuy","type":"uint16"},{"internalType":"uint16","name":"teamBuy","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquiditySell","type":"uint16"},{"internalType":"uint16","name":"marketingSell","type":"uint16"},{"internalType":"uint16","name":"utilitySell","type":"uint16"},{"internalType":"uint16","name":"teamSell","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

73765a27be5ae32821ec97fb13fe085ec85353d758608081905260a081905260c0819052600580546001600160a01b03199081168317909155600680548216831790556007805490911690911790556103e860e052614e20610100526000610120819052610140819052619858610160526101808190526101a08190526101c0819052719858000000000000000000004e20000003e860085560016101e08190526009805460ff199081169092179055610280604052610200829052610220829052610240829052610260829052600a829055600b829055600c829055600d91909155601280549091169055620000f63362000406565b66071afd498d000060115565b5e620f4800060105567016345785d8a0000600160006200012b6000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cd919062000456565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000241919062000456565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b5919062000456565b600f80546001600160a01b03199081166001600160a01b0393841617909155600e8054909116918316919091179055600160036000620002fd6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526003909252812080549092166001908117909255600490620003566000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003a96000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a0000604051620003f791815260200190565b60405180910390a35062000488565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200046957600080fd5b81516001600160a01b03811681146200048157600080fd5b9392505050565b611f9780620004986000396000f3fe6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f6146106be578063dd62ed3e146106de578063ea1644d514610724578063ea2f0b3714610744578063f2fde38b1461076457600080fd5b8063aa9d5e751461064f578063b40c823214610669578063c827a97814610689578063d37e18b71461069e57600080fd5b80639725cd5b116100dc5780639725cd5b146105da57806397bfcda3146105ef578063a7521b171461060f578063a9059cbb1461062f57600080fd5b80637e337023146105595780638da5cb5b146105795780638f9a55c01461059757806395d89b41146105ad57600080fd5b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461047e57806370a08231146104b7578063715018a6146104ed57806371e5b1f11461050257600080fd5b80633f33e909146103e3578063437823ec1461040557806349bd5a5e146104255780635342acb41461044557600080fd5b80631694505e116101c15780631694505e1461035457806318160ddd1461038c57806323b872dd146103a7578063313ce567146103c757600080fd5b806306fdde03146101fe578063095ea7b31461024c5780630a920f201461027c578063123ddac71461033057600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601381527210dd5b1d0813d98815d85b1b0814dd1c99595d606a1b60208201525b6040516102439190611b7e565b60405180910390f35b34801561025857600080fd5b5061026c610267366004611be8565b610784565b6040519015158152602001610243565b34801561028857600080fd5b506008546102e19063ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b6040805163ffffffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610243565b34801561033c57600080fd5b5061034660105481565b604051908152602001610243565b34801561036057600080fd5b50600e54610374906001600160a01b031681565b6040516001600160a01b039091168152602001610243565b34801561039857600080fd5b5067016345785d8a0000610346565b3480156103b357600080fd5b5061026c6103c2366004611c14565b61079a565b3480156103d357600080fd5b5060405160098152602001610243565b3480156103ef57600080fd5b506104036103fe366004611c55565b6107ea565b005b34801561041157600080fd5b50610403610420366004611c55565b610816565b34801561043157600080fd5b50600f54610374906001600160a01b031681565b34801561045157600080fd5b5061026c610460366004611c55565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561048a57600080fd5b5061026c610499366004611c55565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c357600080fd5b506103466104d2366004611c55565b6001600160a01b031660009081526001602052604090205490565b3480156104f957600080fd5b50610403610842565b34801561050e57600080fd5b5060055460065460075461052f926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610243565b34801561056557600080fd5b50610403610574366004611c79565b610856565b34801561058557600080fd5b506000546001600160a01b0316610374565b3480156105a357600080fd5b5061034660115481565b3480156105b957600080fd5b50604080518082019091526004815263434f575360e01b6020820152610236565b3480156105e657600080fd5b50610403610882565b3480156105fb57600080fd5b5061040361060a366004611c9c565b610900565b34801561061b57600080fd5b5061040361062a366004611cb5565b610979565b34801561063b57600080fd5b5061026c61064a366004611be8565b6109be565b34801561065b57600080fd5b5060095461026c9060ff1681565b34801561067557600080fd5b50610403610684366004611d17565b6109cb565b34801561069557600080fd5b50610403610ac5565b3480156106aa57600080fd5b506104036106b9366004611c55565b610aee565b3480156106ca57600080fd5b506104036106d9366004611d17565b610b17565b3480156106ea57600080fd5b506103466106f9366004611d6b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073057600080fd5b5061040361073f366004611c9c565b610bf0565b34801561075057600080fd5b5061040361075f366004611c55565b610c54565b34801561077057600080fd5b5061040361077f366004611c55565b610c7d565b6000610791338484610cf6565b50600192915050565b60006107a7848484610e1a565b6107e084336001600160a01b03871660009081526002602090815260408083203384529091529020546107db908690611dba565b610cf6565b5060019392505050565b6107f2611034565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b61081e611034565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b61084a611034565b610854600061108e565b565b61085e611034565b61086c565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6007546001600160a01b0316331461089957600080fd5b306000908152600160205260409020546108b2816110de565b6108cb6000600d819055600b819055600a819055600c55565b6000546040518281526001600160a01b03909116903090600080516020611f428339815191529060200160405180910390a350565b6007546001600160a01b0316331461091757600080fd5b4761092a6000546001600160a01b031690565b6001600160a01b03166108fc60646109428585611dd1565b61094c9190611df0565b6040518115909202916000818181858888f19350505050158015610974573d6000803e3d6000fd5b505050565b610981611034565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b6000610791338484610e1a565b6109d3611034565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b8884168102919091166fffffffffffffffff0000000000000000196401000000008b8616810267ffffffffffffffff19909816958d1695909517969096179590951694909417179384905560009391820463ffffffff908116938304811692610a6092810482169116611e12565b610a6a9190611e12565b610a749190611e12565b63ffffffff1690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b5050505050565b6007546001600160a01b03163314610adc57600080fd5b6000196011556009805460ff19169055565b610af6611034565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610b1f611034565b60008183610b2d8688611e3a565b610b379190611e3a565b610b419190611e3a565b600880546bffffffff00000000ffffffff60801b191661ffff878116600160801b0263ffffffff60c01b191691909117888216600160c01b0217600167ffffffff0000000160a01b0316868216600160a01b026001600160e01b031617858216600160e01b02179091551690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b610bf8611034565b66038d7ea4c68000811015610c4f5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610863565b601155565b610c5c611034565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c85611034565b6001600160a01b038116610cea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610863565b610cf38161108e565b50565b6001600160a01b038316610d585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610863565b6001600160a01b038216610db95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610863565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610863565b6001600160a01b038216610ee05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610863565b60008111610f425760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610863565b306000908152600160205260409020546012805460ff19169055600f546001600160a01b0390811690841603610f80576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610fa35750805b8015610fb95750600f54600160a01b900460ff16155b8015610fc7575060095460ff165b15610fd557610fd5826110de565b6001600160a01b03851660009081526003602052604090205460019060ff168061101757506001600160a01b03851660009081526003602052604090205460ff165b15611020575060005b61102c868686846112bb565b505050505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610863565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290611104906064611dd1565b61110e9190611df0565b9050600082600a6003015460646111259190611dd1565b61112f9190611df0565b9050600083600a6002015460646111469190611dd1565b6111509190611df0565b60085490915063ffffffff161561127557600a546000908590611174906064611dd1565b61117e9190611df0565b905060008161118e606488611df0565b6111989190611dd1565b90506111a5600282611df0565b905060006111b38288611dba565b9050476111bf826115c0565b60006111cc600286611df0565b9050600081876111dc8a8c611e57565b6111e69190611e57565b6111f09190611e57565b905060006111fe8447611dba565b905060008261120e836064611dd1565b6112189190611df0565b905083611226606483611df0565b6112309190611dd1565b9050600061123e8247611dba565b9050600061124d8a6064611dba565b905061125c82828f8f8f611712565b611266898461186e565b5050505050505050505061128f565b61127e846115c0565b4761128d816064868686611712565b505b6112a86000600d819055600b819055600a819055600c55565b5050600f805460ff60a01b191690555050565b80151560010361151b57600f546001600160a01b0384811691161480159061132957506001600160a01b03841660009081526004602052604090205460ff161515600114158061132957506001600160a01b03831660009081526004602052604090205460ff161515600114155b156113a95760115482611351856001600160a01b031660009081526001602052604090205490565b61135b9190611e57565b11156113a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610863565b6000806000806113b88661193c565b93509350935093506000828483878a6113d19190611dba565b6113db9190611dba565b6113e59190611dba565b6113ef9190611dba565b6001600160a01b038a16600090815260016020526040902054909150611416908890611dba565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611446908290611e57565b6001600160a01b03891660009081526001602052604090205561146c8986868686611a98565b84600a60000160008282546114819190611e57565b9091555050600b805485919060009061149b908490611e57565b9091555050600d80548491906000906114b5908490611e57565b9091555050600c80548391906000906114cf908490611e57565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f428339815191528360405161150991815260200190565b60405180910390a350505050506115ba565b6001600160a01b03841660009081526001602052604090205461153f908390611dba565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461156f908390611e57565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f42833981519152906115b19086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115f5576115f5611e6f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190611e85565b8160018151811061168557611685611e6f565b6001600160a01b039283166020918202929092010152600e546116ab9130911684610cf6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e4908590600090869030904290600401611ea2565b600060405180830381600087803b1580156116fe57600080fd5b505af115801561102c573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611785576000836117358688611df0565b61173f9190611dd1565b90508015611783576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611781573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156117f7576000826117a78688611df0565b6117b19190611dd1565b905080156117f5576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156117f3573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610abe576000816118198688611df0565b6118239190611dd1565b9050801561102c576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611865573d6000803e3d6000fd5b50505050505050565b600e546118869030906001600160a01b031684610cf6565b600e546001600160a01b031663f305d7198230856000806118af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610abe9190611f13565b60125460009081908190819060ff161515600103611a01576008546127109061197290600160c01b900463ffffffff1687611dd1565b61197c9190611df0565b6008546127109061199a90600160801b900463ffffffff1688611dd1565b6119a49190611df0565b600854612710906119c290600160a01b900463ffffffff1689611dd1565b6119cc9190611df0565b600854612710906119ea90600160e01b900463ffffffff168a611dd1565b6119f49190611df0565b9350935093509350611a91565b60085461271090611a189063ffffffff1687611dd1565b611a229190611df0565b60085461271090611a4190640100000000900463ffffffff1688611dd1565b611a4b9190611df0565b60085461271090611a6990600160401b900463ffffffff1689611dd1565b611a739190611df0565b600854612710906119ea90600160601b900463ffffffff168a611dd1565b9193509193565b60008183611aa68688611e57565b611ab09190611e57565b611aba9190611e57565b30600090815260016020526040902054909150611ad8908690611e57565b306000908152600160205260409020819055611af5908490611e57565b306000908152600160205260409020819055611b12908590611e57565b306000908152600160205260409020819055611b2f908390611e57565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f4283398151915290611b6e9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bab57858101830151858201604001528201611b8f565b81811115611bbd576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cf357600080fd5b60008060408385031215611bfb57600080fd5b8235611c0681611bd3565b946020939093013593505050565b600080600060608486031215611c2957600080fd5b8335611c3481611bd3565b92506020840135611c4481611bd3565b929592945050506040919091013590565b600060208284031215611c6757600080fd5b8135611c7281611bd3565b9392505050565b60008060408385031215611c8c57600080fd5b82358015158114611c0657600080fd5b600060208284031215611cae57600080fd5b5035919050565b600080600060608486031215611cca57600080fd5b8335611cd581611bd3565b92506020840135611ce581611bd3565b91506040840135611cf581611bd3565b809150509250925092565b803561ffff81168114611d1257600080fd5b919050565b60008060008060808587031215611d2d57600080fd5b611d3685611d00565b9350611d4460208601611d00565b9250611d5260408601611d00565b9150611d6060608601611d00565b905092959194509250565b60008060408385031215611d7e57600080fd5b8235611d8981611bd3565b91506020830135611d9981611bd3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611dcc57611dcc611da4565b500390565b6000816000190483118215151615611deb57611deb611da4565b500290565b600082611e0d57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516808303821115611e3157611e31611da4565b01949350505050565b600061ffff808316818516808303821115611e3157611e31611da4565b60008219821115611e6a57611e6a611da4565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9757600080fd5b8151611c7281611bd3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ef25784516001600160a01b031683529383019391830191600101611ecd565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208c6742694bef038d08dd6b370230677ff8d534cafa000d6c62842dea24caf4f064736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f6146106be578063dd62ed3e146106de578063ea1644d514610724578063ea2f0b3714610744578063f2fde38b1461076457600080fd5b8063aa9d5e751461064f578063b40c823214610669578063c827a97814610689578063d37e18b71461069e57600080fd5b80639725cd5b116100dc5780639725cd5b146105da57806397bfcda3146105ef578063a7521b171461060f578063a9059cbb1461062f57600080fd5b80637e337023146105595780638da5cb5b146105795780638f9a55c01461059757806395d89b41146105ad57600080fd5b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461047e57806370a08231146104b7578063715018a6146104ed57806371e5b1f11461050257600080fd5b80633f33e909146103e3578063437823ec1461040557806349bd5a5e146104255780635342acb41461044557600080fd5b80631694505e116101c15780631694505e1461035457806318160ddd1461038c57806323b872dd146103a7578063313ce567146103c757600080fd5b806306fdde03146101fe578063095ea7b31461024c5780630a920f201461027c578063123ddac71461033057600080fd5b366101f957005b600080fd5b34801561020a57600080fd5b5060408051808201909152601381527210dd5b1d0813d98815d85b1b0814dd1c99595d606a1b60208201525b6040516102439190611b7e565b60405180910390f35b34801561025857600080fd5b5061026c610267366004611be8565b610784565b6040519015158152602001610243565b34801561028857600080fd5b506008546102e19063ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b6040805163ffffffff998a16815297891660208901529588169587019590955292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001610243565b34801561033c57600080fd5b5061034660105481565b604051908152602001610243565b34801561036057600080fd5b50600e54610374906001600160a01b031681565b6040516001600160a01b039091168152602001610243565b34801561039857600080fd5b5067016345785d8a0000610346565b3480156103b357600080fd5b5061026c6103c2366004611c14565b61079a565b3480156103d357600080fd5b5060405160098152602001610243565b3480156103ef57600080fd5b506104036103fe366004611c55565b6107ea565b005b34801561041157600080fd5b50610403610420366004611c55565b610816565b34801561043157600080fd5b50600f54610374906001600160a01b031681565b34801561045157600080fd5b5061026c610460366004611c55565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561048a57600080fd5b5061026c610499366004611c55565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156104c357600080fd5b506103466104d2366004611c55565b6001600160a01b031660009081526001602052604090205490565b3480156104f957600080fd5b50610403610842565b34801561050e57600080fd5b5060055460065460075461052f926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610243565b34801561056557600080fd5b50610403610574366004611c79565b610856565b34801561058557600080fd5b506000546001600160a01b0316610374565b3480156105a357600080fd5b5061034660115481565b3480156105b957600080fd5b50604080518082019091526004815263434f575360e01b6020820152610236565b3480156105e657600080fd5b50610403610882565b3480156105fb57600080fd5b5061040361060a366004611c9c565b610900565b34801561061b57600080fd5b5061040361062a366004611cb5565b610979565b34801561063b57600080fd5b5061026c61064a366004611be8565b6109be565b34801561065b57600080fd5b5060095461026c9060ff1681565b34801561067557600080fd5b50610403610684366004611d17565b6109cb565b34801561069557600080fd5b50610403610ac5565b3480156106aa57600080fd5b506104036106b9366004611c55565b610aee565b3480156106ca57600080fd5b506104036106d9366004611d17565b610b17565b3480156106ea57600080fd5b506103466106f9366004611d6b565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073057600080fd5b5061040361073f366004611c9c565b610bf0565b34801561075057600080fd5b5061040361075f366004611c55565b610c54565b34801561077057600080fd5b5061040361077f366004611c55565b610c7d565b6000610791338484610cf6565b50600192915050565b60006107a7848484610e1a565b6107e084336001600160a01b03871660009081526002602090815260408083203384529091529020546107db908690611dba565b610cf6565b5060019392505050565b6107f2611034565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b61081e611034565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b61084a611034565b610854600061108e565b565b61085e611034565b61086c565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6007546001600160a01b0316331461089957600080fd5b306000908152600160205260409020546108b2816110de565b6108cb6000600d819055600b819055600a819055600c55565b6000546040518281526001600160a01b03909116903090600080516020611f428339815191529060200160405180910390a350565b6007546001600160a01b0316331461091757600080fd5b4761092a6000546001600160a01b031690565b6001600160a01b03166108fc60646109428585611dd1565b61094c9190611df0565b6040518115909202916000818181858888f19350505050158015610974573d6000803e3d6000fd5b505050565b610981611034565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b6000610791338484610e1a565b6109d3611034565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b8884168102919091166fffffffffffffffff0000000000000000196401000000008b8616810267ffffffffffffffff19909816958d1695909517969096179590951694909417179384905560009391820463ffffffff908116938304811692610a6092810482169116611e12565b610a6a9190611e12565b610a749190611e12565b63ffffffff1690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b5050505050565b6007546001600160a01b03163314610adc57600080fd5b6000196011556009805460ff19169055565b610af6611034565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610b1f611034565b60008183610b2d8688611e3a565b610b379190611e3a565b610b419190611e3a565b600880546bffffffff00000000ffffffff60801b191661ffff878116600160801b0263ffffffff60c01b191691909117888216600160c01b0217600167ffffffff0000000160a01b0316868216600160a01b026001600160e01b031617858216600160e01b02179091551690506103e8811115610abe5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420746178657360981b6044820152606401610863565b610bf8611034565b66038d7ea4c68000811015610c4f5760405162461bcd60e51b815260206004820152601a60248201527f4d61782077616c6c65742073697a6520697320746f6f206c6f770000000000006044820152606401610863565b601155565b610c5c611034565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c85611034565b6001600160a01b038116610cea5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610863565b610cf38161108e565b50565b6001600160a01b038316610d585760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610863565b6001600160a01b038216610db95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610863565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610863565b6001600160a01b038216610ee05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610863565b60008111610f425760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610863565b306000908152600160205260409020546012805460ff19169055600f546001600160a01b0390811690841603610f80576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610fa35750805b8015610fb95750600f54600160a01b900460ff16155b8015610fc7575060095460ff165b15610fd557610fd5826110de565b6001600160a01b03851660009081526003602052604090205460019060ff168061101757506001600160a01b03851660009081526003602052604090205460ff165b15611020575060005b61102c868686846112bb565b505050505050565b6000546001600160a01b031633146108545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610863565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290611104906064611dd1565b61110e9190611df0565b9050600082600a6003015460646111259190611dd1565b61112f9190611df0565b9050600083600a6002015460646111469190611dd1565b6111509190611df0565b60085490915063ffffffff161561127557600a546000908590611174906064611dd1565b61117e9190611df0565b905060008161118e606488611df0565b6111989190611dd1565b90506111a5600282611df0565b905060006111b38288611dba565b9050476111bf826115c0565b60006111cc600286611df0565b9050600081876111dc8a8c611e57565b6111e69190611e57565b6111f09190611e57565b905060006111fe8447611dba565b905060008261120e836064611dd1565b6112189190611df0565b905083611226606483611df0565b6112309190611dd1565b9050600061123e8247611dba565b9050600061124d8a6064611dba565b905061125c82828f8f8f611712565b611266898461186e565b5050505050505050505061128f565b61127e846115c0565b4761128d816064868686611712565b505b6112a86000600d819055600b819055600a819055600c55565b5050600f805460ff60a01b191690555050565b80151560010361151b57600f546001600160a01b0384811691161480159061132957506001600160a01b03841660009081526004602052604090205460ff161515600114158061132957506001600160a01b03831660009081526004602052604090205460ff161515600114155b156113a95760115482611351856001600160a01b031660009081526001602052604090205490565b61135b9190611e57565b11156113a95760405162461bcd60e51b815260206004820181905260248201527f5472616e736665722065786365656473206d61782077616c6c65742073697a656044820152606401610863565b6000806000806113b88661193c565b93509350935093506000828483878a6113d19190611dba565b6113db9190611dba565b6113e59190611dba565b6113ef9190611dba565b6001600160a01b038a16600090815260016020526040902054909150611416908890611dba565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611446908290611e57565b6001600160a01b03891660009081526001602052604090205561146c8986868686611a98565b84600a60000160008282546114819190611e57565b9091555050600b805485919060009061149b908490611e57565b9091555050600d80548491906000906114b5908490611e57565b9091555050600c80548391906000906114cf908490611e57565b92505081905550876001600160a01b0316896001600160a01b0316600080516020611f428339815191528360405161150991815260200190565b60405180910390a350505050506115ba565b6001600160a01b03841660009081526001602052604090205461153f908390611dba565b6001600160a01b03808616600090815260016020526040808220939093559085168152205461156f908390611e57565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020611f42833981519152906115b19086815260200190565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106115f5576115f5611e6f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190611e85565b8160018151811061168557611685611e6f565b6001600160a01b039283166020918202929092010152600e546116ab9130911684610cf6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906116e4908590600090869030904290600401611ea2565b600060405180830381600087803b1580156116fe57600080fd5b505af115801561102c573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611785576000836117358688611df0565b61173f9190611dd1565b90508015611783576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611781573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156117f7576000826117a78688611df0565b6117b19190611dd1565b905080156117f5576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156117f3573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610abe576000816118198688611df0565b6118239190611dd1565b9050801561102c576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611865573d6000803e3d6000fd5b50505050505050565b600e546118869030906001600160a01b031684610cf6565b600e546001600160a01b031663f305d7198230856000806118af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611917573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610abe9190611f13565b60125460009081908190819060ff161515600103611a01576008546127109061197290600160c01b900463ffffffff1687611dd1565b61197c9190611df0565b6008546127109061199a90600160801b900463ffffffff1688611dd1565b6119a49190611df0565b600854612710906119c290600160a01b900463ffffffff1689611dd1565b6119cc9190611df0565b600854612710906119ea90600160e01b900463ffffffff168a611dd1565b6119f49190611df0565b9350935093509350611a91565b60085461271090611a189063ffffffff1687611dd1565b611a229190611df0565b60085461271090611a4190640100000000900463ffffffff1688611dd1565b611a4b9190611df0565b60085461271090611a6990600160401b900463ffffffff1689611dd1565b611a739190611df0565b600854612710906119ea90600160601b900463ffffffff168a611dd1565b9193509193565b60008183611aa68688611e57565b611ab09190611e57565b611aba9190611e57565b30600090815260016020526040902054909150611ad8908690611e57565b306000908152600160205260409020819055611af5908490611e57565b306000908152600160205260409020819055611b12908590611e57565b306000908152600160205260409020819055611b2f908390611e57565b30600081815260016020526040908190209290925590516001600160a01b03881690600080516020611f4283398151915290611b6e9085815260200190565b60405180910390a3505050505050565b600060208083528351808285015260005b81811015611bab57858101830151858201604001528201611b8f565b81811115611bbd576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cf357600080fd5b60008060408385031215611bfb57600080fd5b8235611c0681611bd3565b946020939093013593505050565b600080600060608486031215611c2957600080fd5b8335611c3481611bd3565b92506020840135611c4481611bd3565b929592945050506040919091013590565b600060208284031215611c6757600080fd5b8135611c7281611bd3565b9392505050565b60008060408385031215611c8c57600080fd5b82358015158114611c0657600080fd5b600060208284031215611cae57600080fd5b5035919050565b600080600060608486031215611cca57600080fd5b8335611cd581611bd3565b92506020840135611ce581611bd3565b91506040840135611cf581611bd3565b809150509250925092565b803561ffff81168114611d1257600080fd5b919050565b60008060008060808587031215611d2d57600080fd5b611d3685611d00565b9350611d4460208601611d00565b9250611d5260408601611d00565b9150611d6060608601611d00565b905092959194509250565b60008060408385031215611d7e57600080fd5b8235611d8981611bd3565b91506020830135611d9981611bd3565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015611dcc57611dcc611da4565b500390565b6000816000190483118215151615611deb57611deb611da4565b500290565b600082611e0d57634e487b7160e01b600052601260045260246000fd5b500490565b600063ffffffff808316818516808303821115611e3157611e31611da4565b01949350505050565b600061ffff808316818516808303821115611e3157611e31611da4565b60008219821115611e6a57611e6a611da4565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9757600080fd5b8151611c7281611bd3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611ef25784516001600160a01b031683529383019391830191600101611ecd565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611f2857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208c6742694bef038d08dd6b370230677ff8d534cafa000d6c62842dea24caf4f064736f6c634300080f0033

Deployed Bytecode Sourcemap

22357:17225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25908:82;;;;;;;;;;-1:-1:-1;25978:4:0;;;;;;;;;;;;-1:-1:-1;;;25978:4:0;;;;25908:82;;;;;;;:::i;:::-;;;;;;;;26814:193;;;;;;;;;;-1:-1:-1;26814:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;26814:193:0;1072:187:1;23967:290:0;;;;;;;;;;-1:-1:-1;23967:290:0;;;;;;;;;;;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;-1:-1:-1;;;23967:290:0;;;;;;;;;1601:10:1;1638:15;;;1620:34;;1690:15;;;1685:2;1670:18;;1663:43;1742:15;;;1722:18;;;1715:43;;;;1794:15;;;1789:2;1774:18;;1767:43;1847:15;;;1841:3;1826:19;;1819:44;1900:15;;1894:3;1879:19;;1872:44;1953:15;;1947:3;1932:19;;1925:44;2006:15;;;2000:3;1985:19;;1978:44;1578:3;1563:19;23967:290:0;1264:764:1;24679:34:0;;;;;;;;;;;;;;;;;;;2179:25:1;;;2167:2;2152:18;24679:34:0;2033:177:1;24558:41:0;;;;;;;;;;-1:-1:-1;24558:41:0;;;;-1:-1:-1;;;;;24558:41:0;;;;;;-1:-1:-1;;;;;2405:32:1;;;2387:51;;2375:2;2360:18;24558:41:0;2215:229:1;26182:99:0;;;;;;;;;;-1:-1:-1;22782:18:0;26182:99;;27015:350;;;;;;;;;;-1:-1:-1;27015:350:0;;;;;:::i;:::-;;:::i;26092:82::-;;;;;;;;;;-1:-1:-1;26092:82:0;;22948:1;3052:36:1;;3040:2;3025:18;26092:82:0;2910:184:1;29437:123:0;;;;;;;;;;-1:-1:-1;29437:123:0;;;;;:::i;:::-;;:::i;:::-;;28932:113;;;;;;;;;;-1:-1:-1;28932:113:0;;;;;:::i;:::-;;:::i;24606:28::-;;;;;;;;;;-1:-1:-1;24606:28:0;;;;-1:-1:-1;;;;;24606:28:0;;;29173:124;;;;;;;;;;-1:-1:-1;29173:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;29262:27:0;29238:4;29262:27;;;:18;:27;;;;;;;;;29173:124;29568:136;;;;;;;;;;-1:-1:-1;29568:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;29663:33:0;29639:4;29663:33;;;:24;:33;;;;;;;;;29568:136;26289:118;;;;;;;;;;-1:-1:-1;26289:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;26382:17:0;26355:7;26382:17;;;:8;:17;;;;;;;26289:118;15083:103;;;;;;;;;;;;;:::i;23594:364::-;;;;;;;;;;-1:-1:-1;23594:364:0;;;;;;;;-1:-1:-1;;;;;23594:364:0;;;;;;;;;;;;;;-1:-1:-1;;;;;3865:15:1;;;3847:34;;3917:15;;;3912:2;3897:18;;3890:43;3969:15;;3949:18;;;3942:43;;;;3797:2;3782:18;23594:364:0;3559:432:1;29712:220:0;;;;;;;;;;-1:-1:-1;29712:220:0;;;;;:::i;:::-;;:::i;14435:87::-;;;;;;;;;;-1:-1:-1;14481:7:0;14508:6;-1:-1:-1;;;;;14508:6:0;14435:87;;24722:29;;;;;;;;;;;;;;;;25998:86;;;;;;;;;;-1:-1:-1;26070:6:0;;;;;;;;;;;;-1:-1:-1;;;26070:6:0;;;;25998:86;;39110:278;;;;;;;;;;;;;:::i;38860:242::-;;;;;;;;;;-1:-1:-1;38860:242:0;;;;;:::i;:::-;;:::i;28602:322::-;;;;;;;;;;-1:-1:-1;28602:322:0;;;;;:::i;:::-;;:::i;26415:199::-;;;;;;;;;;-1:-1:-1;26415:199:0;;;;;:::i;:::-;;:::i;24266:100::-;;;;;;;;;;-1:-1:-1;24266:100:0;;;;;;;;27373:647;;;;;;;;;;-1:-1:-1;27373:647:0;;;;;:::i;:::-;;:::i;38677:175::-;;;;;;;;;;;;;:::i;29305:124::-;;;;;;;;;;-1:-1:-1;29305:124:0;;;;;:::i;:::-;;:::i;28028:566::-;;;;;;;;;;-1:-1:-1;28028:566:0;;;;;:::i;:::-;;:::i;26622:184::-;;;;;;;;;;-1:-1:-1;26622:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;26771:18:0;;;26739:7;26771:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26622:184;29940:179;;;;;;;;;;-1:-1:-1;29940:179:0;;;;;:::i;:::-;;:::i;29053:112::-;;;;;;;;;;-1:-1:-1;29053:112:0;;;;;:::i;:::-;;:::i;15341:201::-;;;;;;;;;;-1:-1:-1;15341:201:0;;;;;:::i;:::-;;:::i;26814:193::-;26916:4;26938:39;13066:10;26961:7;26970:6;26938:8;:39::i;:::-;-1:-1:-1;26995:4:0;26814:193;;;;:::o;27015:350::-;27147:4;27164:36;27174:6;27182:9;27193:6;27164:9;:36::i;:::-;27213:122;27236:6;13066:10;-1:-1:-1;;;;;27284:19:0;;;;;;:11;:19;;;;;;;;27304:10;27284:31;;;;;;;;:40;;27318:6;;27284:40;:::i;:::-;27213:8;:122::i;:::-;-1:-1:-1;27353:4:0;27015:350;;;;;:::o;29437:123::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29512:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;29512:40:0::1;29548:4;29512:40;::::0;;29437:123::o;28932:113::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29003:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29003:34:0::1;29033:4;29003:34;::::0;;28932:113::o;15083:103::-;14321:13;:11;:13::i;:::-;15148:30:::1;15175:1;15148:18;:30::i;:::-;15083:103::o:0;29712:220::-;14321:13;:11;:13::i;:::-;29795:37:::1;::::0;::::1;;;;;;;;;29843:19;:28:::0;29882:9:::1;:42:::0;;-1:-1:-1;;29882:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29712:220::o;39110:278::-;39175:20;;-1:-1:-1;;;;;39175:20:0;39161:10;:34;39153:43;;;;;;39247:4;39207:19;26382:17;;;:8;:17;;;;;;39264:27;26382:17;39264:14;:27::i;:::-;39302:15;39464:1;39441:20;:24;;;39476:22;:26;;;39441:7;39513:26;;;39550:17;:21;39396:183;39302:15;14481:7;14508:6;39333:47;;2179:25:1;;;-1:-1:-1;;;;;14508:6:0;;;;39350:4;;-1:-1:-1;;;;;;;;;;;39333:47:0;2167:2:1;2152:18;39333:47:0;;;;;;;39142:246;39110:278::o;38860:242::-;38947:20;;-1:-1:-1;;;;;38947:20:0;38933:10;:34;38925:43;;;;;;38999:21;39039:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;39039:7;-1:-1:-1;;;;;39031:25:0;:63;39090:3;39058:28;39070:16;39058:9;:28;:::i;:::-;39057:36;;;;:::i;:::-;39031:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38914:188;38860:242;:::o;28602:322::-;14321:13;:11;:13::i;:::-;28780:23;:41;;-1:-1:-1;;;;;;28780:41:0;;::::1;-1:-1:-1::0;;;;;28780:41:0;;::::1;;::::0;;;:8:::1;28832:39:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28882:20;:34;;;;::::1;::::0;::::1;;::::0;;28602:322::o;26415:199::-;26520:4;26542:42;13066:10;26566:9;26577:6;26542:9;:42::i;27373:647::-;14321:13;:11;:13::i;:::-;27543:6:::1;:34:::0;;-1:-1:-1;;;27543:34:0::1;27674:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;27633:30:0;;::::1;::::0;::::1;27674:24:::0;;;;-1:-1:-1;;27588:34:0;;;::::1;::::0;::::1;-1:-1:-1::0;;27588:34:0;;;27543;;::::1;27588::::0;;;;;;;::::1;27674:24:::0;;;;;;;;::::1;::::0;;;;27543:19:::1;::::0;27851:14;;::::1;27543:34;27851:14:::0;;::::1;::::0;27818:17;::::1;::::0;::::1;::::0;27748:54:::1;::::0;27783:19;::::1;::::0;::::1;::::0;27748::::1;:54;:::i;:::-;:87;;;;:::i;:::-;:117;;;;:::i;:::-;27711:154;;::::0;-1:-1:-1;27967:4:0::1;27950:13;:21;;27878:134;;;::::0;-1:-1:-1;;;27878:134:0;;7482:2:1;27878:134:0::1;::::0;::::1;7464:21:1::0;7521:2;7501:18;;;7494:30;-1:-1:-1;;;7540:18:1;;;7533:43;7593:18;;27878:134:0::1;7280:337:1::0;27878:134:0::1;27532:488;27373:647:::0;;;;:::o;38677:175::-;38742:20;;-1:-1:-1;;;;;38742:20:0;38728:10;:34;38720:43;;;;;;-1:-1:-1;;38774:14:0;:20;38805:9;:39;;-1:-1:-1;;38805:39:0;;;38677:175::o;29305:124::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29380:33:0::1;29416:5;29380:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;29380:41:0::1;::::0;;29305:124::o;28028:566::-;14321:13;:11;:13::i;:::-;28203:22:::1;28273:8:::0;28260:11;28228:29:::1;28244:13:::0;28228;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;28302:6;:36:::0;;-1:-1:-1;;;;28349:36:0;28203:78:::1;28302:36:::0;;::::1;-1:-1:-1::0;;;28302:36:0::1;-1:-1:-1::0;;;;28349:36:0;;;;;;;::::1;-1:-1:-1::0;;;28349:36:0::1;;-1:-1:-1::0;;;;;28439:26:0;28396:32;;::::1;-1:-1:-1::0;;;28396:32:0::1;-1:-1:-1::0;;;;;28439:26:0;;;;::::1;-1:-1:-1::0;;;28439:26:0::1;;::::0;;;28203:78:::1;::::0;-1:-1:-1;28541:4:0::1;28523:22:::0;::::1;;28478:108;;;::::0;-1:-1:-1;;;28478:108:0;;7482:2:1;28478:108:0::1;::::0;::::1;7464:21:1::0;7521:2;7501:18;;;7494:30;-1:-1:-1;;;7540:18:1;;;7533:43;7593:18;;28478:108:0::1;7280:337:1::0;29940:179:0;14321:13;:11;:13::i;:::-;30030:16:::1;30020:6;:26;;30012:65;;;::::0;-1:-1:-1;;;30012:65:0;;8053:2:1;30012:65:0::1;::::0;::::1;8035:21:1::0;8092:2;8072:18;;;8065:30;8131:28;8111:18;;;8104:56;8177:18;;30012:65:0::1;7851:350:1::0;30012:65:0::1;30088:14;:23:::0;29940:179::o;29053:112::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29122:27:0::1;29152:5;29122:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29122:35:0::1;::::0;;29053:112::o;15341:201::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;15430:22:0;::::1;15422:73;;;::::0;-1:-1:-1;;;15422:73:0;;8408:2:1;15422:73:0::1;::::0;::::1;8390:21:1::0;8447:2;8427:18;;;8420:30;8486:34;8466:18;;;8459:62;-1:-1:-1;;;8537:18:1;;;8530:36;8583:19;;15422:73:0::1;8206:402:1::0;15422:73:0::1;15506:28;15525:8;15506:18;:28::i;:::-;15341:201:::0;:::o;31047:371::-;-1:-1:-1;;;;;31174:19:0;;31166:68;;;;-1:-1:-1;;;31166:68:0;;8815:2:1;31166:68:0;;;8797:21:1;8854:2;8834:18;;;8827:30;8893:34;8873:18;;;8866:62;-1:-1:-1;;;8944:18:1;;;8937:34;8988:19;;31166:68:0;8613:400:1;31166:68:0;-1:-1:-1;;;;;31253:21:0;;31245:68;;;;-1:-1:-1;;;31245:68:0;;9220:2:1;31245:68:0;;;9202:21:1;9259:2;9239:18;;;9232:30;9298:34;9278:18;;;9271:62;-1:-1:-1;;;9349:18:1;;;9342:32;9391:19;;31245:68:0;9018:398:1;31245:68:0;-1:-1:-1;;;;;31326:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31378:32;;2179:25:1;;;31378:32:0;;2152:18:1;31378:32:0;;;;;;;31047:371;;;:::o;31426:1043::-;-1:-1:-1;;;;;31548:18:0;;31540:68;;;;-1:-1:-1;;;31540:68:0;;9623:2:1;31540:68:0;;;9605:21:1;9662:2;9642:18;;;9635:30;9701:34;9681:18;;;9674:62;-1:-1:-1;;;9752:18:1;;;9745:35;9797:19;;31540:68:0;9421:401:1;31540:68:0;-1:-1:-1;;;;;31627:16:0;;31619:64;;;;-1:-1:-1;;;31619:64:0;;10029:2:1;31619:64:0;;;10011:21:1;10068:2;10048:18;;;10041:30;10107:34;10087:18;;;10080:62;-1:-1:-1;;;10158:18:1;;;10151:33;10201:19;;31619:64:0;9827:399:1;31619:64:0;31711:1;31702:6;:10;31694:64;;;;-1:-1:-1;;;31694:64:0;;10433:2:1;31694:64:0;;;10415:21:1;10472:2;10452:18;;;10445:30;10511:34;10491:18;;;10484:62;-1:-1:-1;;;10562:18:1;;;10555:39;10611:19;;31694:64:0;10231:405:1;31694:64:0;31820:4;31771:28;26382:17;;;:8;:17;;;;;;31837:4;:12;;-1:-1:-1;;31837:12:0;;;31872:13;;-1:-1:-1;;;;;31872:13:0;;;31866:19;;;;31862:63;;31902:4;:11;;-1:-1:-1;;31902:11:0;31909:4;31902:11;;;31862:63;32001:19;;32057:13;;31964:56;;;;;-1:-1:-1;;;;;32049:21:0;;;32057:13;;32049:21;;;;:57;;;32087:19;32049:57;:91;;;;-1:-1:-1;32124:16:0;;-1:-1:-1;;;32124:16:0;;;;32123:17;32049:91;:139;;;;-1:-1:-1;32157:9:0;:31;;;32049:139;32031:232;;;32215:36;32230:20;32215:14;:36::i;:::-;-1:-1:-1;;;;;32311:24:0;;32275:12;32311:24;;;:18;:24;;;;;;32290:4;;32311:24;;;:50;;-1:-1:-1;;;;;;32339:22:0;;;;;;:18;:22;;;;;;;;32311:50;32307:98;;;-1:-1:-1;32388:5:0;32307:98;32417:44;32435:4;32441:2;32445:6;32453:7;32417:17;:44::i;:::-;31529:940;;;31426:1043;;;:::o;14600:132::-;14481:7;14508:6;-1:-1:-1;;;;;14508:6:0;13066:10;14664:23;14656:68;;;;-1:-1:-1;;;14656:68:0;;10843:2:1;14656:68:0;;;10825:21:1;;;10862:18;;;10855:30;10921:34;10901:18;;;10894:62;10973:18;;14656:68:0;10641:356:1;15702:191:0;15776:16;15795:6;;-1:-1:-1;;;;;15812:17:0;;;-1:-1:-1;;;;;;15812:17:0;;;;;;15845:40;;15795:6;;;;;;;15845:40;;15776:16;15845:40;15765:128;15702:191;:::o;34040:1913::-;24828:16;:23;;-1:-1:-1;;;;24828:23:0;-1:-1:-1;;;24828:23:0;;;34150:22;;24828:23;;34182:20;;34150:28:::1;::::0;34175:3:::1;34150:28;:::i;:::-;34149:53;;;;:::i;:::-;34127:75;;34213:22;34269:20;34239:7;:20;;;34262:3;34239:26;;;;:::i;:::-;34238:51;;;;:::i;:::-;34213:76;;34300:19;34351:20;34324:7;:17;;;34344:3;34324:23;;;;:::i;:::-;34323:48;;;;:::i;:::-;34388:6;:19:::0;34300:71;;-1:-1:-1;34388:19:0::1;;:24:::0;34384:1534:::1;;34450:7;:22:::0;34428:18:::1;::::0;34478:20;;34450:26:::1;::::0;34473:3:::1;34450:26;:::i;:::-;34449:49;;;;:::i;:::-;34428:70:::0;-1:-1:-1;34543:29:0::1;34428:70:::0;34575:26:::1;34597:3;34575:20:::0;:26:::1;:::i;:::-;:39;;;;:::i;:::-;34543:71:::0;-1:-1:-1;34653:25:0::1;34676:1;34543:71:::0;34653:25:::1;:::i;:::-;34629:49:::0;-1:-1:-1;34695:20:0::1;34718:42;34629:49:::0;34718:20;:42:::1;:::i;:::-;34695:65:::0;-1:-1:-1;34802:21:0::1;34876:30;34695:65:::0;34876:16:::1;:30::i;:::-;34924:12;34939:14;34951:1;34939:10:::0;:14:::1;:::i;:::-;34924:29:::0;-1:-1:-1;34968:15:0::1;34924:29:::0;35018:11;34986:28:::1;35000:14:::0;34986:11;:28:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;34968:68:::0;-1:-1:-1;35105:18:0::1;35126:38;35149:14:::0;35126:21:::1;:38;:::i;:::-;35105:59:::0;-1:-1:-1;35181:27:0::1;35229:7:::0;35212:14:::1;35105:59:::0;35223:3:::1;35212:14;:::i;:::-;35211:26;;;;:::i;:::-;35181:56:::0;-1:-1:-1;35303:4:0;35275:25:::1;35296:3;35181:56:::0;35275:25:::1;:::i;:::-;35274:34;;;;:::i;:::-;35252:56:::0;-1:-1:-1;35325:26:0::1;35354:43;35252:56:::0;35354:21:::1;:43;:::i;:::-;35325:72:::0;-1:-1:-1;35414:13:0::1;35430:14;35434:10:::0;35430:3:::1;:14;:::i;:::-;35414:30;;35461:84;35477:18;35497:5;35504:11;35517:14;35533:11;35461:15;:84::i;:::-;35604:56;35617:21;35640:19;35604:12;:56::i;:::-;34414:1258;;;;;;;;;;34384:1534;;;35711:38;35728:20;35711:16;:38::i;:::-;35783:21;35819:71;35783:21:::0;35844:3:::1;35849:11:::0;35862:14;35878:11;35819:15:::1;:71::i;:::-;35696:222;34384:1534;35930:15;39464:1:::0;39441:20;:24;;;39476:22;:26;;;39441:7;39513:26;;;39550:17;:21;39396:183;35930:15:::1;-1:-1:-1::0;;24874:16:0;:24;;-1:-1:-1;;;;24874:24:0;;;-1:-1:-1;;34040:1913:0:o;32478:1554::-;32644:15;;;32655:4;32644:15;32640:1377;;32703:13;;-1:-1:-1;;;;;32690:26:0;;;32703:13;;32690:26;;;;:114;;-1:-1:-1;;;;;;32721:32:0;;;;;;:24;:32;;;;;;;;:38;;:32;:38;;;:82;;-1:-1:-1;;;;;;32762:35:0;;;;;;:24;:35;;;;;;;;:41;;:35;:41;;32721:82;32686:331;;;32893:14;;32880:7;32856:20;32866:9;-1:-1:-1;;;;;26382:17:0;26355:7;26382:17;;;:8;:17;;;;;;;26289:118;32856:20;:32;;;;:::i;:::-;32855:52;;32825:158;;;;-1:-1:-1;;;32825:158:0;;11337:2:1;32825:158:0;;;11319:21:1;;;11356:18;;;11349:30;11415:34;11395:18;;;11388:62;11467:18;;32825:158:0;11135:356:1;32825:158:0;33038:18;33058;33078:16;33096:13;33113:22;33127:7;33113:13;:22::i;:::-;33037:98;;;;;;;;33154:23;33223:8;33210:10;33202:5;33189:10;33180:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;-1:-1:-1;;;;;33266:16:0;;;;;;:8;:16;;;;;;33154:78;;-1:-1:-1;33266:28:0;;33286:7;;33266:28;:::i;:::-;-1:-1:-1;;;;;33247:16:0;;;;;;;:8;:16;;;;;;:47;;;;33331:19;;;;;;;:39;;33354:15;;33331:39;:::i;:::-;-1:-1:-1;;;;;33309:19:0;;;;;;:8;:19;;;;;:61;33385:162;33417:6;33442:10;33471;33500:8;33527:5;33385:13;:162::i;:::-;33588:10;33562:7;:22;;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;33613:22:0;:36;;33639:10;;33613:22;;;:36;;33639:10;;33613:36;:::i;:::-;;;;-1:-1:-1;;33664:20:0;:32;;33688:8;;33664:20;;;:32;;33688:8;;33664:32;:::i;:::-;;;;-1:-1:-1;;33711:17:0;:26;;33732:5;;33711:17;;;:26;;33732:5;;33711:26;:::i;:::-;;;;;;;;33774:9;-1:-1:-1;;;;;33757:44:0;33766:6;-1:-1:-1;;;;;33757:44:0;-1:-1:-1;;;;;;;;;;;33785:15:0;33757:44;;;;2179:25:1;;2167:2;2152:18;;2033:177;33757:44:0;;;;;;;;32671:1142;;;;;32640:1377;;;-1:-1:-1;;;;;33853:16:0;;;;;;:8;:16;;;;;;:28;;33873:7;;33853:28;:::i;:::-;-1:-1:-1;;;;;33834:16:0;;;;;;;:8;:16;;;;;;:47;;;;33918:19;;;;;;;:31;;33941:7;;33918:31;:::i;:::-;-1:-1:-1;;;;;33896:19:0;;;;;;;:8;:19;;;;;;;:53;;;;33969:36;;;;;;-1:-1:-1;;;;;;;;;;;33969:36:0;;;33997:7;2179:25:1;;2167:2;2152:18;;2033:177;33969:36:0;;;;;;;;32640:1377;32478:1554;;;;:::o;36935:589::-;37085:16;;;37099:1;37085:16;;;;;;;;37061:21;;37085:16;;;;;;;;;;-1:-1:-1;37085:16:0;37061:40;;37130:4;37112;37117:1;37112:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37112:23:0;;;:7;;;;;;;;;;:23;;;;37156:15;;:22;;;-1:-1:-1;;;37156:22:0;;;;:15;;;;;:20;;:22;;;;;37112:7;;37156:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37146:4;37151:1;37146:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37146:32:0;;;:7;;;;;;;;;:32;37223:15;;37191:62;;37208:4;;37223:15;37241:11;37191:8;:62::i;:::-;37292:15;;:224;;-1:-1:-1;;;37292:224:0;;-1:-1:-1;;;;;37292:15:0;;;;:66;;:224;;37373:11;;37292:15;;37443:4;;37470;;37490:15;;37292:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35961:966;36161:6;:19;;;;;;:24;36157:257;;36202:24;36252:11;36230:17;36241:5;36230:7;:17;:::i;:::-;36229:35;;;;:::i;:::-;36202:62;-1:-1:-1;36285:20:0;;36281:122;;36334:8;:25;36326:61;;-1:-1:-1;;;;;36334:25:0;;;;36326:61;;;;;36370:16;;36334:25;36326:61;36334:25;36326:61;36370:16;36334:25;36326:61;;;;;;;;;;;;;;;;;;;;;36281:122;36187:227;36157:257;36430:6;:17;-1:-1:-1;;;36430:17:0;;;;:22;36426:250;;36469:22;36517:14;36495:17;36506:5;36495:7;:17;:::i;:::-;36494:38;;;;:::i;:::-;36469:63;-1:-1:-1;36553:18:0;;36549:116;;36600:23;;36592:57;;-1:-1:-1;;;;;36600:23:0;;;;36592:57;;;;;36634:14;;36600:23;36592:57;36600:23;36592:57;36634:14;36600:23;36592:57;;;;;;;;;;;;;;;;;;;;;36549:116;36454:222;36426:250;36692:6;:14;-1:-1:-1;;;36692:14:0;;;;:19;36688:232;;36728:19;36773:11;36751:17;36762:5;36751:7;:17;:::i;:::-;36750:35;;;;:::i;:::-;36728:57;-1:-1:-1;36806:15:0;;36802:107;;36850:20;;36842:51;;-1:-1:-1;;;;;36850:20:0;;;;36842:51;;;;;36881:11;;36850:20;36842:51;36850:20;36842:51;36881:11;36850:20;36842:51;;;;;;;;;;;;;;;;;;;;;36713:207;35961:966;;;;;:::o;37532:511::-;37712:15;;37680:62;;37697:4;;-1:-1:-1;;;;;37712:15:0;37730:11;37680:8;:62::i;:::-;37783:15;;-1:-1:-1;;;;;37783:15:0;:31;37822:9;37855:4;37875:11;37783:15;;37987:7;14481;14508:6;-1:-1:-1;;;;;14508:6:0;;14435:87;37987:7;37783:252;;;;;;-1:-1:-1;;;;;;37783:252:0;;;-1:-1:-1;;;;;13360:15:1;;;37783:252:0;;;13342:34:1;13392:18;;;13385:34;;;;13435:18;;;13428:34;;;;13478:18;;;13471:34;13542:15;;;13521:19;;;13514:44;38009:15:0;13574:19:1;;;13567:35;13276:19;;37783:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30220:819::-;30428:4;;30323:7;;;;;;;;30428:4;;:12;;:4;:12;30424:608;;30495:6;:20;30521:5;;30484:32;;-1:-1:-1;;;30495:20:0;;;;30484:7;:32;:::i;:::-;30483:44;;;;:::i;:::-;30558:6;:20;30584:5;;30547:32;;-1:-1:-1;;;30558:20:0;;;;30547:7;:32;:::i;:::-;30546:44;;;;:::i;:::-;30621:6;:18;30645:5;;30610:30;;-1:-1:-1;;;30621:18:0;;;;30610:7;:30;:::i;:::-;30609:42;;;;:::i;:::-;30682:6;:15;30703:5;;30671:27;;-1:-1:-1;;;30682:15:0;;;;30671:7;:27;:::i;:::-;30670:39;;;;:::i;:::-;30457:267;;;;;;;;;;30424:608;30795:6;:19;30820:5;;30784:31;;30795:19;;30784:7;:31;:::i;:::-;30783:43;;;;:::i;:::-;30857:6;:19;30882:5;;30846:31;;30857:19;;;;;30846:7;:31;:::i;:::-;30845:43;;;;:::i;:::-;30919:6;:17;30942:5;;30908:29;;-1:-1:-1;;;30919:17:0;;;;30908:7;:29;:::i;:::-;30907:41;;;;:::i;:::-;30979:6;:14;30999:5;;30968:26;;-1:-1:-1;;;30979:14:0;;;;30968:7;:26;:::i;30424:608::-;30220:819;;;;;:::o;38058:611::-;38242:18;38300:5;38289:8;38263:23;38276:10;38263;:23;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;38361:4;38344:23;;;;:8;:23;;;;;;38242:63;;-1:-1:-1;38344:38:0;;38371:10;;38344:38;:::i;:::-;38335:4;38318:23;;;;:8;:23;;;;;:64;;;38419:36;;38446:8;;38419:36;:::i;:::-;38410:4;38393:23;;;;:8;:23;;;;;:62;;;38492:38;;38519:10;;38492:38;:::i;:::-;38483:4;38466:23;;;;:8;:23;;;;;:64;;;38567:33;;38594:5;;38567:33;:::i;:::-;38558:4;38541:23;;;;:8;:23;;;;;;;:59;;;;38618:43;;-1:-1:-1;;;;;38618:43:0;;;-1:-1:-1;;;;;;;;;;;38618:43:0;;;38650:10;2179:25:1;;2167:2;2152:18;;2033:177;38618:43:0;;;;;;;;38231:438;38058:611;;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;2449:456::-;2526:6;2534;2542;2595:2;2583:9;2574:7;2570:23;2566:32;2563:52;;;2611:1;2608;2601:12;2563:52;2650:9;2637:23;2669:31;2694:5;2669:31;:::i;:::-;2719:5;-1:-1:-1;2776:2:1;2761:18;;2748:32;2789:33;2748:32;2789:33;:::i;:::-;2449:456;;2841:7;;-1:-1:-1;;;2895:2:1;2880:18;;;;2867:32;;2449:456::o;3099:247::-;3158:6;3211:2;3199:9;3190:7;3186:23;3182:32;3179:52;;;3227:1;3224;3217:12;3179:52;3266:9;3253:23;3285:31;3310:5;3285:31;:::i;:::-;3335:5;3099:247;-1:-1:-1;;;3099:247:1:o;3996:341::-;4061:6;4069;4122:2;4110:9;4101:7;4097:23;4093:32;4090:52;;;4138:1;4135;4128:12;4090:52;4177:9;4164:23;4230:5;4223:13;4216:21;4209:5;4206:32;4196:60;;4252:1;4249;4242:12;4342:180;4401:6;4454:2;4442:9;4433:7;4429:23;4425:32;4422:52;;;4470:1;4467;4460:12;4422:52;-1:-1:-1;4493:23:1;;4342:180;-1:-1:-1;4342:180:1:o;4527:553::-;4628:6;4636;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:1;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;:::-;4943:7;-1:-1:-1;5002:2:1;4987:18;;4974:32;5015:33;4974:32;5015:33;:::i;:::-;5067:7;5057:17;;;4527:553;;;;;:::o;5085:159::-;5152:20;;5212:6;5201:18;;5191:29;;5181:57;;5234:1;5231;5224:12;5181:57;5085:159;;;:::o;5249:401::-;5331:6;5339;5347;5355;5408:3;5396:9;5387:7;5383:23;5379:33;5376:53;;;5425:1;5422;5415:12;5376:53;5448:28;5466:9;5448:28;:::i;:::-;5438:38;;5495:37;5528:2;5517:9;5513:18;5495:37;:::i;:::-;5485:47;;5551:37;5584:2;5573:9;5569:18;5551:37;:::i;:::-;5541:47;;5607:37;5640:2;5629:9;5625:18;5607:37;:::i;:::-;5597:47;;5249:401;;;;;;;:::o;5655:388::-;5723:6;5731;5784:2;5772:9;5763:7;5759:23;5755:32;5752:52;;;5800:1;5797;5790:12;5752:52;5839:9;5826:23;5858:31;5883:5;5858:31;:::i;:::-;5908:5;-1:-1:-1;5965:2:1;5950:18;;5937:32;5978:33;5937:32;5978:33;:::i;:::-;6030:7;6020:17;;;5655:388;;;;;:::o;6048:127::-;6109:10;6104:3;6100:20;6097:1;6090:31;6140:4;6137:1;6130:15;6164:4;6161:1;6154:15;6180:125;6220:4;6248:1;6245;6242:8;6239:34;;;6253:18;;:::i;:::-;-1:-1:-1;6290:9:1;;6180:125::o;6652:168::-;6692:7;6758:1;6754;6750:6;6746:14;6743:1;6740:21;6735:1;6728:9;6721:17;6717:45;6714:71;;;6765:18;;:::i;:::-;-1:-1:-1;6805:9:1;;6652:168::o;6825:217::-;6865:1;6891;6881:132;;6935:10;6930:3;6926:20;6923:1;6916:31;6970:4;6967:1;6960:15;6998:4;6995:1;6988:15;6881:132;-1:-1:-1;7027:9:1;;6825:217::o;7047:228::-;7086:3;7114:10;7151:2;7148:1;7144:10;7181:2;7178:1;7174:10;7212:3;7208:2;7204:12;7199:3;7196:21;7193:47;;;7220:18;;:::i;:::-;7256:13;;7047:228;-1:-1:-1;;;;7047:228:1:o;7622:224::-;7661:3;7689:6;7722:2;7719:1;7715:10;7752:2;7749:1;7745:10;7783:3;7779:2;7775:12;7770:3;7767:21;7764:47;;;7791:18;;:::i;11002:128::-;11042:3;11073:1;11069:6;11066:1;11063:13;11060:39;;;11079:18;;:::i;:::-;-1:-1:-1;11115:9:1;;11002:128::o;11628:127::-;11689:10;11684:3;11680:20;11677:1;11670:31;11720:4;11717:1;11710:15;11744:4;11741:1;11734:15;11760:251;11830:6;11883:2;11871:9;11862:7;11858:23;11854:32;11851:52;;;11899:1;11896;11889:12;11851:52;11931:9;11925:16;11950:31;11975:5;11950:31;:::i;12016:980::-;12278:4;12326:3;12315:9;12311:19;12357:6;12346:9;12339:25;12383:2;12421:6;12416:2;12405:9;12401:18;12394:34;12464:3;12459:2;12448:9;12444:18;12437:31;12488:6;12523;12517:13;12554:6;12546;12539:22;12592:3;12581:9;12577:19;12570:26;;12631:2;12623:6;12619:15;12605:29;;12652:1;12662:195;12676:6;12673:1;12670:13;12662:195;;;12741:13;;-1:-1:-1;;;;;12737:39:1;12725:52;;12832:15;;;;12797:12;;;;12773:1;12691:9;12662:195;;;-1:-1:-1;;;;;;;12913:32:1;;;;12908:2;12893:18;;12886:60;-1:-1:-1;;;12977:3:1;12962:19;12955:35;12874:3;12016:980;-1:-1:-1;;;12016:980:1:o;13613:306::-;13701:6;13709;13717;13770:2;13758:9;13749:7;13745:23;13741:32;13738:52;;;13786:1;13783;13776:12;13738:52;13815:9;13809:16;13799:26;;13865:2;13854:9;13850:18;13844:25;13834:35;;13909:2;13898:9;13894:18;13888:25;13878:35;;13613:306;;;;;:::o

Swarm Source

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