ETH Price: $3,376.25 (-1.97%)
Gas: 2 Gwei

Token

Scrambled Eggs (SCRAM)
 

Overview

Max Total Supply

100,000,000 SCRAM

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,082,987.988023873 SCRAM

Value
$0.00
0x55f2e85fd0c6fb9f6ccfbd9294c08c9171df13f7
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:
ScrambledEggs

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


/*

Telegram: In time, let the none scramble eggs fans dissapear

*/


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 ScrambledEggs 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 = "Scrambled Eggs";
    string private constant SYMBOL = "SCRAM";
    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(
                0x39008f75331B99B39f5B686b99cdED8931eFFB02
            ),
            utilityAddress: payable(
                0x39008f75331B99B39f5B686b99cdED8931eFFB02
            ),
            teamAddress: payable(0x39008f75331B99B39f5B686b99cdED8931eFFB02)
        });

    Taxes public _taxes =
        Taxes({
            liquidityBuy: 1000,
            marketingBuy: 1000,
            utilityBuy: 0,
            teamBuy: 0,
            marketingSell: 4200,
            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"}]

7339008f75331b99b39f5b686b99cded8931effb02608081905260a081905260c0819052600580546001600160a01b03199081168317909155600680548216831790556007805490911690911790556103e860e08190526101008190526000610120819052610140819052611068610160526101808190526101a08190526101c0819052600880546001600160a01b0363ffffffff1990911690931763ffffffff60201b19166503e80000000017600160401b600160a01b03191661020d60831b179290921690915560016101e08190526009805460ff199081169092179055610280604052610200829052610220829052610240829052610260829052600a829055600b829055600c829055600d919091556012805490911690556200012f620001296200043b565b6200043f565b66071afd498d000060115565b5e620f4800060105567016345785d8a0000600160006200015b6200048f565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d257600080fd5b505afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d91906200049e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025657600080fd5b505afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029191906200049e565b6040518363ffffffff1660e01b8152600401620002b0929190620004ce565b602060405180830381600087803b158015620002cb57600080fd5b505af1158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030691906200049e565b600f80546001600160a01b03199081166001600160a01b0393841617909155600e8054909116918316919091179055600160036000620003456200048f565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526003909252812080549092166001908117909255600490620003956200048f565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526004909252902080549091166001179055620003df6200048f565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef67016345785d8a00006040516200042c9190620004e8565b60405180910390a350620004f1565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b600060208284031215620004b0578081fd5b81516001600160a01b0381168114620004c7578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b61206b80620005016000396000f3fe6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f614610548578063dd62ed3e14610568578063ea1644d514610588578063ea2f0b37146105a8578063f2fde38b146105c8576101f9565b8063aa9d5e75146104de578063b40c8232146104f3578063c827a97814610513578063d37e18b714610528576101f9565b80639725cd5b116100dc5780639725cd5b1461046957806397bfcda31461047e578063a7521b171461049e578063a9059cbb146104be576101f9565b80637e3370231461040a5780638da5cb5b1461042a5780638f9a55c01461043f57806395d89b4114610454576101f9565b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461039157806370a08231146103b1578063715018a6146103d157806371e5b1f1146103e6576101f9565b80633f33e9091461031a578063437823ec1461033c57806349bd5a5e1461035c5780635342acb414610371576101f9565b80631694505e116101c15780631694505e146102a157806318160ddd146102c357806323b872dd146102d8578063313ce567146102f8576101f9565b806306fdde03146101fe578063095ea7b3146102295780630a920f2014610256578063123ddac71461027f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136105e8565b6040516102209190611bb1565b60405180910390f35b34801561023557600080fd5b50610249610244366004611a50565b610610565b6040516102209190611ba6565b34801561026257600080fd5b5061026b61062d565b604051610220989796959493929190611ee2565b34801561028b57600080fd5b50610294610681565b6040516102209190611e69565b3480156102ad57600080fd5b506102b6610687565b6040516102209190611b34565b3480156102cf57600080fd5b50610294610696565b3480156102e457600080fd5b506102496102f3366004611a10565b6106a2565b34801561030457600080fd5b5061030d6106f9565b6040516102209190611f29565b34801561032657600080fd5b5061033a61033536600461194f565b6106fe565b005b34801561034857600080fd5b5061033a61035736600461194f565b61072a565b34801561036857600080fd5b506102b6610756565b34801561037d57600080fd5b5061024961038c36600461194f565b610765565b34801561039d57600080fd5b506102496103ac36600461194f565b610787565b3480156103bd57600080fd5b506102946103cc36600461194f565b6107a5565b3480156103dd57600080fd5b5061033a6107c0565b3480156103f257600080fd5b506103fb6107d4565b60405161022093929190611b48565b34801561041657600080fd5b5061033a610425366004611a7b565b6107f1565b34801561043657600080fd5b506102b661081d565b34801561044b57600080fd5b5061029461082c565b34801561046057600080fd5b50610213610832565b34801561047557600080fd5b5061033a610851565b34801561048a57600080fd5b5061033a610499366004611aef565b6108c9565b3480156104aa57600080fd5b5061033a6104b936600461198e565b610938565b3480156104ca57600080fd5b506102496104d9366004611a50565b61097d565b3480156104ea57600080fd5b50610249610991565b3480156104ff57600080fd5b5061033a61050e366004611a9c565b61099a565b34801561051f57600080fd5b5061033a610a78565b34801561053457600080fd5b5061033a61054336600461194f565b610aa1565b34801561055457600080fd5b5061033a610563366004611a9c565b610aca565b34801561057457600080fd5b506102946105833660046119d8565b610b75565b34801561059457600080fd5b5061033a6105a3366004611aef565b610ba0565b3480156105b457600080fd5b5061033a6105c336600461194f565b610bd4565b3480156105d457600080fd5b5061033a6105e336600461194f565b610bfd565b60408051808201909152600e81526d536372616d626c6564204567677360901b602082015290565b600061062461061d610c37565b8484610c3b565b50600192915050565b60085463ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b60105481565b600e546001600160a01b031681565b67016345785d8a000090565b60006106af848484610cef565b6106ef846106bb610c37565b6001600160a01b03871660009081526002602090815260408083203384529091529020546106ea908690611fd3565b610c3b565b5060019392505050565b600990565b610706610e4b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610732610e4b565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b600f546001600160a01b031681565b6001600160a01b03811660009081526003602052604090205460ff165b919050565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526001602052604090205490565b6107c8610e4b565b6107d26000610e8a565b565b6005546006546007546001600160a01b0392831692918216911683565b6107f9610e4b565b610807565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6000546001600160a01b031690565b60115481565b604080518082019091526005815264534352414d60d81b602082015290565b6007546001600160a01b0316331461086857600080fd5b6000610873306107a5565b905061087e81610eda565b6108866110a6565b61088e61081d565b6001600160a01b0316306001600160a01b0316600080516020612016833981519152836040516108be9190611e69565b60405180910390a350565b6007546001600160a01b031633146108e057600080fd5b476108e961081d565b6001600160a01b03166108fc60646109018585611fb4565b61090b9190611f94565b6040518115909202916000818181858888f19350505050158015610933573d6000803e3d6000fd5b505050565b610940610e4b565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b600061062461098a610c37565b8484610cef565b60095460ff1681565b6109a2610e4b565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b88841681026bffffffff0000000000000000196401000000008c8716810267ffffffff000000001963ffffffff19909a16978f16979097179890981695909517949094169390931716179384905560009391820463ffffffff90811693918304811692610a3392810482169116611f75565b610a3d9190611f75565b610a479190611f75565b63ffffffff1690506103e8811115610a715760405162461bcd60e51b81526004016107fe90611c04565b5050505050565b6007546001600160a01b03163314610a8f57600080fd5b6000196011556009805460ff19169055565b610aa9610e4b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ad2610e4b565b60008183610ae08688611f37565b610aea9190611f37565b610af49190611f37565b6008805463ffffffff60801b191661ffff878116600160801b029190911763ffffffff60c01b1916888216600160c01b021763ffffffff60a01b1916868216600160a01b02176001600160e01b0316858216600160e01b02179091551690506103e8811115610a715760405162461bcd60e51b81526004016107fe90611c04565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610ba8610e4b565b66038d7ea4c68000811015610bcf5760405162461bcd60e51b81526004016107fe90611d74565b601155565b610bdc610e4b565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c05610e4b565b6001600160a01b038116610c2b5760405162461bcd60e51b81526004016107fe90611c6e565b610c3481610e8a565b50565b3390565b6001600160a01b038316610c615760405162461bcd60e51b81526004016107fe90611e25565b6001600160a01b038216610c875760405162461bcd60e51b81526004016107fe90611cb4565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ce2908590611e69565b60405180910390a3505050565b6001600160a01b038316610d155760405162461bcd60e51b81526004016107fe90611de0565b6001600160a01b038216610d3b5760405162461bcd60e51b81526004016107fe90611c2b565b60008111610d5b5760405162461bcd60e51b81526004016107fe90611d2b565b6000610d66306107a5565b6012805460ff19169055600f549091506001600160a01b0384811691161415610d97576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610dba5750805b8015610dd05750600f54600160a01b900460ff16155b8015610dde575060095460ff165b15610dec57610dec82610eda565b6001600160a01b03851660009081526003602052604090205460019060ff1680610e2e57506001600160a01b03851660009081526003602052604090205460ff165b15610e37575060005b610e43868686846110bc565b505050505050565b610e53610c37565b6001600160a01b0316610e6461081d565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016107fe90611cf6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290610f00906064611fb4565b610f0a9190611f94565b9050600082600a600301546064610f219190611fb4565b610f2b9190611f94565b9050600083600a600201546064610f429190611fb4565b610f4c9190611f94565b60085490915063ffffffff161561107157600a546000908590610f70906064611fb4565b610f7a9190611f94565b9050600081610f8a606488611f94565b610f949190611fb4565b9050610fa1600282611f94565b90506000610faf8288611fd3565b905047610fbb82611378565b6000610fc8600286611f94565b905060008187610fd88a8c611f5d565b610fe29190611f5d565b610fec9190611f5d565b90506000610ffa8447611fd3565b905060008261100a836064611fb4565b6110149190611f94565b905083611022606483611f94565b61102c9190611fb4565b9050600061103a8247611fd3565b905060006110498a6064611fd3565b905061105882828f8f8f6114f5565b6110628984611651565b5050505050505050505061108b565b61107a84611378565b476110898160648686866114f5565b505b6110936110a6565b5050600f805460ff60a01b191690555050565b6000600d819055600b819055600a819055600c55565b600181151514156112d557600f546001600160a01b0384811691161480159061112b57506001600160a01b03841660009081526004602052604090205460ff161515600114158061112b57506001600160a01b03831660009081526004602052604090205460ff161515600114155b15611165576011548261113d856107a5565b6111479190611f5d565b11156111655760405162461bcd60e51b81526004016107fe90611dab565b600080600080611174866116fc565b93509350935093506000828483878a61118d9190611fd3565b6111979190611fd3565b6111a19190611fd3565b6111ab9190611fd3565b6001600160a01b038a166000908152600160205260409020549091506111d2908890611fd3565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611202908290611f5d565b6001600160a01b0389166000908152600160205260409020556112288986868686611859565b84600a600001600082825461123d9190611f5d565b9091555050600b8054859190600090611257908490611f5d565b9091555050600d8054849190600090611271908490611f5d565b9091555050600c805483919060009061128b908490611f5d565b92505081905550876001600160a01b0316896001600160a01b0316600080516020612016833981519152836040516112c39190611e69565b60405180910390a35050505050611372565b6001600160a01b0384166000908152600160205260409020546112f9908390611fd3565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611329908390611f5d565b6001600160a01b03808516600081815260016020526040908190209390935591519086169060008051602061201683398151915290611369908690611e69565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106113bb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114479190611972565b8160018151811061146857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e5461148e9130911684610c3b565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906114c7908590600090869030904290600401611e72565b600060405180830381600087803b1580156114e157600080fd5b505af1158015610e43573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611568576000836115188688611f94565b6115229190611fb4565b90508015611566576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611564573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156115da5760008261158a8688611f94565b6115949190611fb4565b905080156115d8576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115d6573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610a71576000816115fc8688611f94565b6116069190611fb4565b90508015610e43576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611648573d6000803e3d6000fd5b50505050505050565b600e546116699030906001600160a01b031684610c3b565b600e546001600160a01b031663f305d71982308560008061168861081d565b426040518863ffffffff1660e01b81526004016116aa96959493929190611b6b565b6060604051808303818588803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a719190611b07565b60125460009081908190819060ff161515600114156117c2576008546127109061173390600160c01b900463ffffffff1687611fb4565b61173d9190611f94565b6008546127109061175b90600160801b900463ffffffff1688611fb4565b6117659190611f94565b6008546127109061178390600160a01b900463ffffffff1689611fb4565b61178d9190611f94565b600854612710906117ab90600160e01b900463ffffffff168a611fb4565b6117b59190611f94565b9350935093509350611852565b600854612710906117d99063ffffffff1687611fb4565b6117e39190611f94565b6008546127109061180290640100000000900463ffffffff1688611fb4565b61180c9190611f94565b6008546127109061182a90600160401b900463ffffffff1689611fb4565b6118349190611f94565b600854612710906117ab90600160601b900463ffffffff168a611fb4565b9193509193565b600081836118678688611f5d565b6118719190611f5d565b61187b9190611f5d565b30600090815260016020526040902054909150611899908690611f5d565b3060009081526001602052604090208190556118b6908490611f5d565b3060009081526001602052604090208190556118d3908590611f5d565b3060009081526001602052604090208190556118f0908390611f5d565b30600081815260016020526040908190209290925590516001600160a01b038816906000805160206120168339815191529061192d908590611e69565b60405180910390a3505050505050565b803561ffff8116811461078257600080fd5b600060208284031215611960578081fd5b813561196b81612000565b9392505050565b600060208284031215611983578081fd5b815161196b81612000565b6000806000606084860312156119a2578182fd5b83356119ad81612000565b925060208401356119bd81612000565b915060408401356119cd81612000565b809150509250925092565b600080604083850312156119ea578182fd5b82356119f581612000565b91506020830135611a0581612000565b809150509250929050565b600080600060608486031215611a24578283fd5b8335611a2f81612000565b92506020840135611a3f81612000565b929592945050506040919091013590565b60008060408385031215611a62578182fd5b8235611a6d81612000565b946020939093013593505050565b60008060408385031215611a8d578182fd5b82358015158114611a6d578283fd5b60008060008060808587031215611ab1578081fd5b611aba8561193d565b9350611ac86020860161193d565b9250611ad66040860161193d565b9150611ae46060860161193d565b905092959194509250565b600060208284031215611b00578081fd5b5035919050565b600080600060608486031215611b1b578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015611bdd57858101830151858201604001528201611bc1565b81811115611bee5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600d908201526c496e76616c696420746178657360981b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252601a908201527f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000604082015260600190565b6020808252818101527f5472616e736665722065786365656473206d61782077616c6c65742073697a65604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611ec15784516001600160a01b031683529383019391830191600101611e9c565b50506001600160a01b03969096166060850152505050608001529392505050565b63ffffffff98891681529688166020880152948716604087015292861660608601529085166080850152841660a0840152831660c083015290911660e08201526101000190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f5457611f54611fea565b01949350505050565b60008219821115611f7057611f70611fea565b500190565b600063ffffffff808316818516808303821115611f5457611f54611fea565b600082611faf57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611fce57611fce611fea565b500290565b600082821015611fe557611fe5611fea565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610c3457600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220335af7e952753ca711ab9a292093013aa830cd9bb87039d7b216237a7cb83b1164736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80637e3370231161010d578063aa9d5e75116100a0578063db32e8f61161006f578063db32e8f614610548578063dd62ed3e14610568578063ea1644d514610588578063ea2f0b37146105a8578063f2fde38b146105c8576101f9565b8063aa9d5e75146104de578063b40c8232146104f3578063c827a97814610513578063d37e18b714610528576101f9565b80639725cd5b116100dc5780639725cd5b1461046957806397bfcda31461047e578063a7521b171461049e578063a9059cbb146104be576101f9565b80637e3370231461040a5780638da5cb5b1461042a5780638f9a55c01461043f57806395d89b4114610454576101f9565b80633f33e909116101855780636dd3d39f116101545780636dd3d39f1461039157806370a08231146103b1578063715018a6146103d157806371e5b1f1146103e6576101f9565b80633f33e9091461031a578063437823ec1461033c57806349bd5a5e1461035c5780635342acb414610371576101f9565b80631694505e116101c15780631694505e146102a157806318160ddd146102c357806323b872dd146102d8578063313ce567146102f8576101f9565b806306fdde03146101fe578063095ea7b3146102295780630a920f2014610256578063123ddac71461027f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136105e8565b6040516102209190611bb1565b60405180910390f35b34801561023557600080fd5b50610249610244366004611a50565b610610565b6040516102209190611ba6565b34801561026257600080fd5b5061026b61062d565b604051610220989796959493929190611ee2565b34801561028b57600080fd5b50610294610681565b6040516102209190611e69565b3480156102ad57600080fd5b506102b6610687565b6040516102209190611b34565b3480156102cf57600080fd5b50610294610696565b3480156102e457600080fd5b506102496102f3366004611a10565b6106a2565b34801561030457600080fd5b5061030d6106f9565b6040516102209190611f29565b34801561032657600080fd5b5061033a61033536600461194f565b6106fe565b005b34801561034857600080fd5b5061033a61035736600461194f565b61072a565b34801561036857600080fd5b506102b6610756565b34801561037d57600080fd5b5061024961038c36600461194f565b610765565b34801561039d57600080fd5b506102496103ac36600461194f565b610787565b3480156103bd57600080fd5b506102946103cc36600461194f565b6107a5565b3480156103dd57600080fd5b5061033a6107c0565b3480156103f257600080fd5b506103fb6107d4565b60405161022093929190611b48565b34801561041657600080fd5b5061033a610425366004611a7b565b6107f1565b34801561043657600080fd5b506102b661081d565b34801561044b57600080fd5b5061029461082c565b34801561046057600080fd5b50610213610832565b34801561047557600080fd5b5061033a610851565b34801561048a57600080fd5b5061033a610499366004611aef565b6108c9565b3480156104aa57600080fd5b5061033a6104b936600461198e565b610938565b3480156104ca57600080fd5b506102496104d9366004611a50565b61097d565b3480156104ea57600080fd5b50610249610991565b3480156104ff57600080fd5b5061033a61050e366004611a9c565b61099a565b34801561051f57600080fd5b5061033a610a78565b34801561053457600080fd5b5061033a61054336600461194f565b610aa1565b34801561055457600080fd5b5061033a610563366004611a9c565b610aca565b34801561057457600080fd5b506102946105833660046119d8565b610b75565b34801561059457600080fd5b5061033a6105a3366004611aef565b610ba0565b3480156105b457600080fd5b5061033a6105c336600461194f565b610bd4565b3480156105d457600080fd5b5061033a6105e336600461194f565b610bfd565b60408051808201909152600e81526d536372616d626c6564204567677360901b602082015290565b600061062461061d610c37565b8484610c3b565b50600192915050565b60085463ffffffff808216916401000000008104821691600160401b8204811691600160601b8104821691600160801b8204811691600160a01b8104821691600160c01b8204811691600160e01b90041688565b60105481565b600e546001600160a01b031681565b67016345785d8a000090565b60006106af848484610cef565b6106ef846106bb610c37565b6001600160a01b03871660009081526002602090815260408083203384529091529020546106ea908690611fd3565b610c3b565b5060019392505050565b600990565b610706610e4b565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b610732610e4b565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b600f546001600160a01b031681565b6001600160a01b03811660009081526003602052604090205460ff165b919050565b6001600160a01b031660009081526004602052604090205460ff1690565b6001600160a01b031660009081526001602052604090205490565b6107c8610e4b565b6107d26000610e8a565b565b6005546006546007546001600160a01b0392831692918216911683565b6107f9610e4b565b610807565b60405180910390fd5b6010556009805460ff1916911515919091179055565b6000546001600160a01b031690565b60115481565b604080518082019091526005815264534352414d60d81b602082015290565b6007546001600160a01b0316331461086857600080fd5b6000610873306107a5565b905061087e81610eda565b6108866110a6565b61088e61081d565b6001600160a01b0316306001600160a01b0316600080516020612016833981519152836040516108be9190611e69565b60405180910390a350565b6007546001600160a01b031633146108e057600080fd5b476108e961081d565b6001600160a01b03166108fc60646109018585611fb4565b61090b9190611f94565b6040518115909202916000818181858888f19350505050158015610933573d6000803e3d6000fd5b505050565b610940610e4b565b600680546001600160a01b03199081166001600160a01b039485161790915560058054821694841694909417909355600780549093169116179055565b600061062461098a610c37565b8484610cef565b60095460ff1681565b6109a2610e4b565b60088054600160601b61ffff848116820263ffffffff60601b19600160401b88841681026bffffffff0000000000000000196401000000008c8716810267ffffffff000000001963ffffffff19909a16978f16979097179890981695909517949094169390931716179384905560009391820463ffffffff90811693918304811692610a3392810482169116611f75565b610a3d9190611f75565b610a479190611f75565b63ffffffff1690506103e8811115610a715760405162461bcd60e51b81526004016107fe90611c04565b5050505050565b6007546001600160a01b03163314610a8f57600080fd5b6000196011556009805460ff19169055565b610aa9610e4b565b6001600160a01b03166000908152600460205260409020805460ff19169055565b610ad2610e4b565b60008183610ae08688611f37565b610aea9190611f37565b610af49190611f37565b6008805463ffffffff60801b191661ffff878116600160801b029190911763ffffffff60c01b1916888216600160c01b021763ffffffff60a01b1916868216600160a01b02176001600160e01b0316858216600160e01b02179091551690506103e8811115610a715760405162461bcd60e51b81526004016107fe90611c04565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610ba8610e4b565b66038d7ea4c68000811015610bcf5760405162461bcd60e51b81526004016107fe90611d74565b601155565b610bdc610e4b565b6001600160a01b03166000908152600360205260409020805460ff19169055565b610c05610e4b565b6001600160a01b038116610c2b5760405162461bcd60e51b81526004016107fe90611c6e565b610c3481610e8a565b50565b3390565b6001600160a01b038316610c615760405162461bcd60e51b81526004016107fe90611e25565b6001600160a01b038216610c875760405162461bcd60e51b81526004016107fe90611cb4565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ce2908590611e69565b60405180910390a3505050565b6001600160a01b038316610d155760405162461bcd60e51b81526004016107fe90611de0565b6001600160a01b038216610d3b5760405162461bcd60e51b81526004016107fe90611c2b565b60008111610d5b5760405162461bcd60e51b81526004016107fe90611d2b565b6000610d66306107a5565b6012805460ff19169055600f549091506001600160a01b0384811691161415610d97576012805460ff191660011790555b601054600f5490821015906001600160a01b03868116911614801590610dba5750805b8015610dd05750600f54600160a01b900460ff16155b8015610dde575060095460ff165b15610dec57610dec82610eda565b6001600160a01b03851660009081526003602052604090205460019060ff1680610e2e57506001600160a01b03851660009081526003602052604090205460ff165b15610e37575060005b610e43868686846110bc565b505050505050565b610e53610c37565b6001600160a01b0316610e6461081d565b6001600160a01b0316146107d25760405162461bcd60e51b81526004016107fe90611cf6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600f805460ff60a01b1916600160a01b179055600b546000908290610f00906064611fb4565b610f0a9190611f94565b9050600082600a600301546064610f219190611fb4565b610f2b9190611f94565b9050600083600a600201546064610f429190611fb4565b610f4c9190611f94565b60085490915063ffffffff161561107157600a546000908590610f70906064611fb4565b610f7a9190611f94565b9050600081610f8a606488611f94565b610f949190611fb4565b9050610fa1600282611f94565b90506000610faf8288611fd3565b905047610fbb82611378565b6000610fc8600286611f94565b905060008187610fd88a8c611f5d565b610fe29190611f5d565b610fec9190611f5d565b90506000610ffa8447611fd3565b905060008261100a836064611fb4565b6110149190611f94565b905083611022606483611f94565b61102c9190611fb4565b9050600061103a8247611fd3565b905060006110498a6064611fd3565b905061105882828f8f8f6114f5565b6110628984611651565b5050505050505050505061108b565b61107a84611378565b476110898160648686866114f5565b505b6110936110a6565b5050600f805460ff60a01b191690555050565b6000600d819055600b819055600a819055600c55565b600181151514156112d557600f546001600160a01b0384811691161480159061112b57506001600160a01b03841660009081526004602052604090205460ff161515600114158061112b57506001600160a01b03831660009081526004602052604090205460ff161515600114155b15611165576011548261113d856107a5565b6111479190611f5d565b11156111655760405162461bcd60e51b81526004016107fe90611dab565b600080600080611174866116fc565b93509350935093506000828483878a61118d9190611fd3565b6111979190611fd3565b6111a19190611fd3565b6111ab9190611fd3565b6001600160a01b038a166000908152600160205260409020549091506111d2908890611fd3565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611202908290611f5d565b6001600160a01b0389166000908152600160205260409020556112288986868686611859565b84600a600001600082825461123d9190611f5d565b9091555050600b8054859190600090611257908490611f5d565b9091555050600d8054849190600090611271908490611f5d565b9091555050600c805483919060009061128b908490611f5d565b92505081905550876001600160a01b0316896001600160a01b0316600080516020612016833981519152836040516112c39190611e69565b60405180910390a35050505050611372565b6001600160a01b0384166000908152600160205260409020546112f9908390611fd3565b6001600160a01b038086166000908152600160205260408082209390935590851681522054611329908390611f5d565b6001600160a01b03808516600081815260016020526040908190209390935591519086169060008051602061201683398151915290611369908690611e69565b60405180910390a35b50505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106113bb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114479190611972565b8160018151811061146857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e5461148e9130911684610c3b565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906114c7908590600090869030904290600401611e72565b600060405180830381600087803b1580156114e157600080fd5b505af1158015610e43573d6000803e3d6000fd5b600854640100000000900463ffffffff1615611568576000836115188688611f94565b6115229190611fb4565b90508015611566576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611564573d6000803e3d6000fd5b505b505b600854600160401b900463ffffffff16156115da5760008261158a8688611f94565b6115949190611fb4565b905080156115d8576006546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115d6573d6000803e3d6000fd5b505b505b600854600160601b900463ffffffff1615610a71576000816115fc8688611f94565b6116069190611fb4565b90508015610e43576007546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611648573d6000803e3d6000fd5b50505050505050565b600e546116699030906001600160a01b031684610c3b565b600e546001600160a01b031663f305d71982308560008061168861081d565b426040518863ffffffff1660e01b81526004016116aa96959493929190611b6b565b6060604051808303818588803b1580156116c357600080fd5b505af11580156116d7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a719190611b07565b60125460009081908190819060ff161515600114156117c2576008546127109061173390600160c01b900463ffffffff1687611fb4565b61173d9190611f94565b6008546127109061175b90600160801b900463ffffffff1688611fb4565b6117659190611f94565b6008546127109061178390600160a01b900463ffffffff1689611fb4565b61178d9190611f94565b600854612710906117ab90600160e01b900463ffffffff168a611fb4565b6117b59190611f94565b9350935093509350611852565b600854612710906117d99063ffffffff1687611fb4565b6117e39190611f94565b6008546127109061180290640100000000900463ffffffff1688611fb4565b61180c9190611f94565b6008546127109061182a90600160401b900463ffffffff1689611fb4565b6118349190611f94565b600854612710906117ab90600160601b900463ffffffff168a611fb4565b9193509193565b600081836118678688611f5d565b6118719190611f5d565b61187b9190611f5d565b30600090815260016020526040902054909150611899908690611f5d565b3060009081526001602052604090208190556118b6908490611f5d565b3060009081526001602052604090208190556118d3908590611f5d565b3060009081526001602052604090208190556118f0908390611f5d565b30600081815260016020526040908190209290925590516001600160a01b038816906000805160206120168339815191529061192d908590611e69565b60405180910390a3505050505050565b803561ffff8116811461078257600080fd5b600060208284031215611960578081fd5b813561196b81612000565b9392505050565b600060208284031215611983578081fd5b815161196b81612000565b6000806000606084860312156119a2578182fd5b83356119ad81612000565b925060208401356119bd81612000565b915060408401356119cd81612000565b809150509250925092565b600080604083850312156119ea578182fd5b82356119f581612000565b91506020830135611a0581612000565b809150509250929050565b600080600060608486031215611a24578283fd5b8335611a2f81612000565b92506020840135611a3f81612000565b929592945050506040919091013590565b60008060408385031215611a62578182fd5b8235611a6d81612000565b946020939093013593505050565b60008060408385031215611a8d578182fd5b82358015158114611a6d578283fd5b60008060008060808587031215611ab1578081fd5b611aba8561193d565b9350611ac86020860161193d565b9250611ad66040860161193d565b9150611ae46060860161193d565b905092959194509250565b600060208284031215611b00578081fd5b5035919050565b600080600060608486031215611b1b578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015611bdd57858101830151858201604001528201611bc1565b81811115611bee5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600d908201526c496e76616c696420746178657360981b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b6020808252601a908201527f4d61782077616c6c65742073697a6520697320746f6f206c6f77000000000000604082015260600190565b6020808252818101527f5472616e736665722065786365656473206d61782077616c6c65742073697a65604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015611ec15784516001600160a01b031683529383019391830191600101611e9c565b50506001600160a01b03969096166060850152505050608001529392505050565b63ffffffff98891681529688166020880152948716604087015292861660608601529085166080850152841660a0840152831660c083015290911660e08201526101000190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f5457611f54611fea565b01949350505050565b60008219821115611f7057611f70611fea565b500190565b600063ffffffff808316818516808303821115611f5457611f54611fea565b600082611faf57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611fce57611fce611fea565b500290565b600082821015611fe557611fe5611fea565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610c3457600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220335af7e952753ca711ab9a292093013aa830cd9bb87039d7b216237a7cb83b1164736f6c63430008000033

Deployed Bytecode Sourcemap

22431:17216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25973:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26879:193;;;;;;;;;;-1:-1:-1;26879:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24034:288::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;24744:34::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24623:41::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26247:99::-;;;;;;;;;;;;;:::i;27080:350::-;;;;;;;;;;-1:-1:-1;27080:350:0;;;;;:::i;:::-;;:::i;26157:82::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29502:123::-;;;;;;;;;;-1:-1:-1;29502:123:0;;;;;:::i;:::-;;:::i;:::-;;28997:113;;;;;;;;;;-1:-1:-1;28997:113:0;;;;;:::i;:::-;;:::i;24671:28::-;;;;;;;;;;;;;:::i;29238:124::-;;;;;;;;;;-1:-1:-1;29238:124:0;;;;;:::i;:::-;;:::i;29633:136::-;;;;;;;;;;-1:-1:-1;29633:136:0;;;;;:::i;:::-;;:::i;26354:118::-;;;;;;;;;;-1:-1:-1;26354:118:0;;;;;:::i;:::-;;:::i;15083:103::-;;;;;;;;;;;;;:::i;23661:364::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;29777:220::-;;;;;;;;;;-1:-1:-1;29777:220:0;;;;;:::i;:::-;;:::i;14435:87::-;;;;;;;;;;;;;:::i;24787:29::-;;;;;;;;;;;;;:::i;26063:86::-;;;;;;;;;;;;;:::i;39175:278::-;;;;;;;;;;;;;:::i;38925:242::-;;;;;;;;;;-1:-1:-1;38925:242:0;;;;;:::i;:::-;;:::i;28667:322::-;;;;;;;;;;-1:-1:-1;28667:322:0;;;;;:::i;:::-;;:::i;26480:199::-;;;;;;;;;;-1:-1:-1;26480:199:0;;;;;:::i;:::-;;:::i;24331:100::-;;;;;;;;;;;;;:::i;27438:647::-;;;;;;;;;;-1:-1:-1;27438:647:0;;;;;:::i;:::-;;:::i;38742:175::-;;;;;;;;;;;;;:::i;29370:124::-;;;;;;;;;;-1:-1:-1;29370:124:0;;;;;:::i;:::-;;:::i;28093:566::-;;;;;;;;;;-1:-1:-1;28093:566:0;;;;;:::i;:::-;;:::i;26687:184::-;;;;;;;;;;-1:-1:-1;26687:184:0;;;;;:::i;:::-;;:::i;30005:179::-;;;;;;;;;;-1:-1:-1;30005:179:0;;;;;:::i;:::-;;:::i;29118:112::-;;;;;;;;;;-1:-1:-1;29118:112:0;;;;;:::i;:::-;;:::i;15341:201::-;;;;;;;;;;-1:-1:-1;15341:201:0;;;;;:::i;:::-;;:::i;25973:82::-;26043:4;;;;;;;;;;;;-1:-1:-1;;;26043:4:0;;;;25973:82;:::o;26879:193::-;26981:4;27003:39;27012:12;:10;:12::i;:::-;27026:7;27035:6;27003:8;:39::i;:::-;-1:-1:-1;27060:4:0;26879:193;;;;:::o;24034:288::-;;;;;;;;;;;;;;-1:-1:-1;;;24034:288:0;;;;;-1:-1:-1;;;24034:288:0;;;;;-1:-1:-1;;;24034:288:0;;;;;-1:-1:-1;;;24034:288:0;;;;;-1:-1:-1;;;24034:288:0;;;;;-1:-1:-1;;;24034:288:0;;;;:::o;24744:34::-;;;;:::o;24623:41::-;;;-1:-1:-1;;;;;24623:41:0;;:::o;26247:99::-;22853:18;26247:99;:::o;27080:350::-;27212:4;27229:36;27239:6;27247:9;27258:6;27229:9;:36::i;:::-;27278:122;27301:6;27322:12;:10;:12::i;:::-;-1:-1:-1;;;;;27349:19:0;;;;;;:11;:19;;;;;;;;27369:10;27349:31;;;;;;;;:40;;27383:6;;27349:40;:::i;:::-;27278:8;:122::i;:::-;-1:-1:-1;27418:4:0;27080:350;;;;;:::o;26157:82::-;23015:1;26157:82;:::o;29502:123::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29577:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;29577:40:0::1;29613:4;29577:40;::::0;;29502:123::o;28997:113::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29068:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;29068:34:0::1;29098:4;29068:34;::::0;;28997:113::o;24671:28::-;;;-1:-1:-1;;;;;24671:28:0;;:::o;29238:124::-;-1:-1:-1;;;;;29327:27:0;;29303:4;29327:27;;;:18;:27;;;;;;;;29238:124;;;;:::o;29633:136::-;-1:-1:-1;;;;;29728:33:0;29704:4;29728:33;;;:24;:33;;;;;;;;;29633:136::o;26354:118::-;-1:-1:-1;;;;;26447:17:0;26420:7;26447:17;;;:8;:17;;;;;;;26354:118::o;15083:103::-;14321:13;:11;:13::i;:::-;15148:30:::1;15175:1;15148:18;:30::i;:::-;15083:103::o:0;23661:364::-;;;;;;;-1:-1:-1;;;;;23661:364:0;;;;;;;;;;:::o;29777:220::-;14321:13;:11;:13::i;:::-;29860:37:::1;::::0;::::1;;;;;;;;;29908:19;:28:::0;29947:9:::1;:42:::0;;-1:-1:-1;;29947:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29777:220::o;14435:87::-;14481:7;14508:6;-1:-1:-1;;;;;14508:6:0;14435:87;:::o;24787:29::-;;;;:::o;26063:86::-;26135:6;;;;;;;;;;;;-1:-1:-1;;;26135:6:0;;;;26063:86;:::o;39175:278::-;39240:20;;-1:-1:-1;;;;;39240:20:0;39226:10;:34;39218:43;;;;;;39272:19;39294:24;39312:4;39294:9;:24::i;:::-;39272:46;;39329:27;39344:11;39329:14;:27::i;:::-;39367:15;:13;:15::i;:::-;39422:7;:5;:7::i;:::-;-1:-1:-1;;;;;39398:47:0;39415:4;-1:-1:-1;;;;;39398:47:0;-1:-1:-1;;;;;;;;;;;39432:11:0;39398:47;;;;;;:::i;:::-;;;;;;;;39175:278;:::o;38925:242::-;39012:20;;-1:-1:-1;;;;;39012:20:0;38998:10;:34;38990:43;;;;;;39064:21;39104:7;:5;:7::i;:::-;-1:-1:-1;;;;;39096:25:0;:63;39155:3;39123:28;39135:16;39123:9;:28;:::i;:::-;39122:36;;;;:::i;:::-;39096:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38925:242;;:::o;28667:322::-;14321:13;:11;:13::i;:::-;28845:23;:41;;-1:-1:-1;;;;;;28845:41:0;;::::1;-1:-1:-1::0;;;;;28845:41:0;;::::1;;::::0;;;:8:::1;28897:39:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;28947:20;:34;;;;::::1;::::0;::::1;;::::0;;28667:322::o;26480:199::-;26585:4;26607:42;26617:12;:10;:12::i;:::-;26631:9;26642:6;26607:9;:42::i;24331:100::-;;;;;;:::o;27438:647::-;14321:13;:11;:13::i;:::-;27608:6:::1;:34:::0;;-1:-1:-1;;;27608:34:0::1;27739:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;27698:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;27653:34:0;;;::::1;::::0;::::1;-1:-1:-1::0;;;;27608:34:0;;::::1;::::0;;::::1;::::0;;;::::1;27653::::0;;;::::1;::::0;;;::::1;27698:30:::0;;;::::1;::::0;;;::::1;27739:24;;::::0;;;;27608:19:::1;::::0;27916:14;;::::1;27608:34;27916:14:::0;;::::1;::::0;27883:17;;::::1;::::0;::::1;::::0;27813:54:::1;::::0;27848:19;::::1;::::0;::::1;::::0;27813::::1;:54;:::i;:::-;:87;;;;:::i;:::-;:117;;;;:::i;:::-;27776:154;;::::0;-1:-1:-1;28032:4:0::1;28015:13;:21;;27943:134;;;;-1:-1:-1::0;;;27943:134:0::1;;;;;;;:::i;:::-;14345:1;27438:647:::0;;;;:::o;38742:175::-;38807:20;;-1:-1:-1;;;;;38807:20:0;38793:10;:34;38785:43;;;;;;-1:-1:-1;;38839:14:0;:20;38870:9;:39;;-1:-1:-1;;38870:39:0;;;38742:175::o;29370:124::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29445:33:0::1;29481:5;29445:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;29445:41:0::1;::::0;;29370:124::o;28093:566::-;14321:13;:11;:13::i;:::-;28268:22:::1;28338:8:::0;28325:11;28293:29:::1;28309:13:::0;28293;:29:::1;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;28367:6;:36:::0;;-1:-1:-1;;;;28367:36:0::1;28268:78;28367:36:::0;;::::1;-1:-1:-1::0;;;28367:36:0::1;::::0;;;::::1;-1:-1:-1::0;;;;28414:36:0::1;::::0;;::::1;-1:-1:-1::0;;;28414:36:0::1;;-1:-1:-1::0;;;;28461:32:0::1;::::0;;::::1;-1:-1:-1::0;;;28461:32:0::1;;-1:-1:-1::0;;;;;28504:26:0::1;::::0;;::::1;-1:-1:-1::0;;;28504:26:0::1;;::::0;;;28268:78:::1;::::0;-1:-1:-1;28606:4:0::1;28588:22:::0;::::1;;28543:108;;;;-1:-1:-1::0;;;28543:108:0::1;;;;;;;:::i;26687:184::-:0;-1:-1:-1;;;;;26836:18:0;;;26804:7;26836:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26687:184::o;30005:179::-;14321:13;:11;:13::i;:::-;30095:16:::1;30085:6;:26;;30077:65;;;;-1:-1:-1::0;;;30077:65:0::1;;;;;;;:::i;:::-;30153:14;:23:::0;30005:179::o;29118:112::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;29187:27:0::1;29217:5;29187:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;29187:35:0::1;::::0;;29118:112::o;15341:201::-;14321:13;:11;:13::i;:::-;-1:-1:-1;;;;;15430:22:0;::::1;15422:73;;;;-1:-1:-1::0;;;15422:73:0::1;;;;;;;:::i;:::-;15506:28;15525:8;15506:18;:28::i;:::-;15341:201:::0;:::o;12986:98::-;13066:10;12986:98;:::o;31112:371::-;-1:-1:-1;;;;;31239:19:0;;31231:68;;;;-1:-1:-1;;;31231:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31318:21:0;;31310:68;;;;-1:-1:-1;;;31310:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31391:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;31443:32;;;;;31421:6;;31443:32;:::i;:::-;;;;;;;;31112:371;;;:::o;31491:1043::-;-1:-1:-1;;;;;31613:18:0;;31605:68;;;;-1:-1:-1;;;31605:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31692:16:0;;31684:64;;;;-1:-1:-1;;;31684:64:0;;;;;;;:::i;:::-;31776:1;31767:6;:10;31759:64;;;;-1:-1:-1;;;31759:64:0;;;;;;;:::i;:::-;31836:28;31867:24;31885:4;31867:9;:24::i;:::-;31902:4;:12;;-1:-1:-1;;31902:12:0;;;31937:13;;31836:55;;-1:-1:-1;;;;;;31931:19:0;;;31937:13;;31931:19;31927:63;;;31967:4;:11;;-1:-1:-1;;31967:11:0;31974:4;31967:11;;;31927:63;32066:19;;32122:13;;32029:56;;;;;-1:-1:-1;;;;;32114:21:0;;;32122:13;;32114:21;;;;:57;;;32152:19;32114:57;:91;;;;-1:-1:-1;32189:16:0;;-1:-1:-1;;;32189:16:0;;;;32188:17;32114:91;:139;;;;-1:-1:-1;32222:9:0;:31;;;32114:139;32096:232;;;32280:36;32295:20;32280:14;:36::i;:::-;-1:-1:-1;;;;;32376:24:0;;32340:12;32376:24;;;:18;:24;;;;;;32355:4;;32376:24;;;:50;;-1:-1:-1;;;;;;32404:22:0;;;;;;:18;:22;;;;;;;;32376:50;32372:98;;;-1:-1:-1;32453:5:0;32372:98;32482:44;32500:4;32506:2;32510:6;32518:7;32482:17;:44::i;:::-;31491:1043;;;;;;:::o;14600:132::-;14675:12;:10;:12::i;:::-;-1:-1:-1;;;;;14664:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;14664:23:0;;14656:68;;;;-1:-1:-1;;;14656:68:0;;;;;;;:::i;15702:191::-;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;15702:191;;:::o;34105:1913::-;24893:16;:23;;-1:-1:-1;;;;24893:23:0;-1:-1:-1;;;24893:23:0;;;34215:22;;24893:23;;34247:20;;34215:28:::1;::::0;34240:3:::1;34215:28;:::i;:::-;34214:53;;;;:::i;:::-;34192:75;;34278:22;34334:20;34304:7;:20;;;34327:3;34304:26;;;;:::i;:::-;34303:51;;;;:::i;:::-;34278:76;;34365:19;34416:20;34389:7;:17;;;34409:3;34389:23;;;;:::i;:::-;34388:48;;;;:::i;:::-;34453:6;:19:::0;34365:71;;-1:-1:-1;34453:19:0::1;;:24:::0;34449:1534:::1;;34515:7;:22:::0;34493:18:::1;::::0;34543:20;;34515:26:::1;::::0;34538:3:::1;34515:26;:::i;:::-;34514:49;;;;:::i;:::-;34493:70:::0;-1:-1:-1;34608:29:0::1;34493:70:::0;34640:26:::1;34662:3;34640:20:::0;:26:::1;:::i;:::-;:39;;;;:::i;:::-;34608:71:::0;-1:-1:-1;34718:25:0::1;34741:1;34608:71:::0;34718:25:::1;:::i;:::-;34694:49:::0;-1:-1:-1;34760:20:0::1;34783:42;34694:49:::0;34783:20;:42:::1;:::i;:::-;34760:65:::0;-1:-1:-1;34867:21:0::1;34941:30;34760:65:::0;34941:16:::1;:30::i;:::-;34989:12;35004:14;35016:1;35004:10:::0;:14:::1;:::i;:::-;34989:29:::0;-1:-1:-1;35033:15:0::1;34989:29:::0;35083:11;35051:28:::1;35065:14:::0;35051:11;:28:::1;:::i;:::-;:43;;;;:::i;:::-;:50;;;;:::i;:::-;35033:68:::0;-1:-1:-1;35170:18:0::1;35191:38;35214:14:::0;35191:21:::1;:38;:::i;:::-;35170:59:::0;-1:-1:-1;35246:27:0::1;35294:7:::0;35277:14:::1;35170:59:::0;35288:3:::1;35277:14;:::i;:::-;35276:26;;;;:::i;:::-;35246:56:::0;-1:-1:-1;35368:4:0;35340:25:::1;35361:3;35246:56:::0;35340:25:::1;:::i;:::-;35339:34;;;;:::i;:::-;35317:56:::0;-1:-1:-1;35390:26:0::1;35419:43;35317:56:::0;35419:21:::1;:43;:::i;:::-;35390:72:::0;-1:-1:-1;35479:13:0::1;35495:14;35499:10:::0;35495:3:::1;:14;:::i;:::-;35479:30;;35526:84;35542:18;35562:5;35569:11;35582:14;35598:11;35526:15;:84::i;:::-;35669:56;35682:21;35705:19;35669:12;:56::i;:::-;34449:1534;;;;;;;;;;;;;35776:38;35793:20;35776:16;:38::i;:::-;35848:21;35884:71;35848:21:::0;35909:3:::1;35914:11:::0;35927:14;35943:11;35884:15:::1;:71::i;:::-;34449:1534;;35995:15;:13;:15::i;:::-;-1:-1:-1::0;;24939:16:0;:24;;-1:-1:-1;;;;24939:24:0;;;-1:-1:-1;;34105:1913:0:o;39461:183::-;39529:1;39506:20;:24;;;39541:22;:26;;;39506:7;39578:26;;;39615:17;:21;39461:183::o;32543:1554::-;32720:4;32709:15;;;;32705:1377;;;32768:13;;-1:-1:-1;;;;;32755:26:0;;;32768:13;;32755:26;;;;:114;;-1:-1:-1;;;;;;32786:32:0;;;;;;:24;:32;;;;;;;;:38;;:32;:38;;;:82;;-1:-1:-1;;;;;;32827:35:0;;;;;;:24;:35;;;;;;;;:41;;:35;:41;;32786:82;32751:331;;;32958:14;;32945:7;32921:20;32931:9;32921;:20::i;:::-;:32;;;;:::i;:::-;32920:52;;32890:158;;;;-1:-1:-1;;;32890:158:0;;;;;;;:::i;:::-;33103:18;33123;33143:16;33161:13;33178:22;33192:7;33178:13;:22::i;:::-;33102:98;;;;;;;;33219:23;33288:8;33275:10;33267:5;33254:10;33245:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;:41;;;;:::i;:::-;:52;;;;:::i;:::-;-1:-1:-1;;;;;33331:16:0;;;;;;:8;:16;;;;;;33219:78;;-1:-1:-1;33331:28:0;;33351:7;;33331:28;:::i;:::-;-1:-1:-1;;;;;33312:16:0;;;;;;;:8;:16;;;;;;:47;;;;33396:19;;;;;;;:39;;33419:15;;33396:39;:::i;:::-;-1:-1:-1;;;;;33374:19:0;;;;;;:8;:19;;;;;:61;33450:162;33482:6;33507:10;33536;33565:8;33592:5;33450:13;:162::i;:::-;33653:10;33627:7;:22;;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;33678:22:0;:36;;33704:10;;33678:22;;;:36;;33704:10;;33678:36;:::i;:::-;;;;-1:-1:-1;;33729:20:0;:32;;33753:8;;33729:20;;;:32;;33753:8;;33729:32;:::i;:::-;;;;-1:-1:-1;;33776:17:0;:26;;33797:5;;33776:17;;;:26;;33797:5;;33776:26;:::i;:::-;;;;;;;;33839:9;-1:-1:-1;;;;;33822:44:0;33831:6;-1:-1:-1;;;;;33822:44:0;-1:-1:-1;;;;;;;;;;;33850:15:0;33822:44;;;;;;:::i;:::-;;;;;;;;32705:1377;;;;;;;;-1:-1:-1;;;;;33918:16:0;;;;;;:8;:16;;;;;;:28;;33938:7;;33918:28;:::i;:::-;-1:-1:-1;;;;;33899:16:0;;;;;;;:8;:16;;;;;;:47;;;;33983:19;;;;;;;:31;;34006:7;;33983:31;:::i;:::-;-1:-1:-1;;;;;33961:19:0;;;;;;;:8;:19;;;;;;;:53;;;;34034:36;;;;;;-1:-1:-1;;;;;;;;;;;34034:36:0;;;34062:7;;34034:36;:::i;:::-;;;;;;;;32705:1377;32543:1554;;;;:::o;37000:589::-;37150:16;;;37164:1;37150:16;;;;;;;;37126:21;;37150:16;;;;;;;;;;-1:-1:-1;37150:16:0;37126:40;;37195:4;37177;37182:1;37177:7;;;;;;-1:-1:-1;;;37177:7:0;;;;;;;;;-1:-1:-1;;;;;37177:23:0;;;:7;;;;;;;;;;:23;;;;37221:15;;:22;;;-1:-1:-1;;;37221:22:0;;;;:15;;;;;:20;;:22;;;;;37177:7;;37221:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37211:4;37216:1;37211:7;;;;;;-1:-1:-1;;;37211:7:0;;;;;;;;;-1:-1:-1;;;;;37211:32:0;;;:7;;;;;;;;;:32;37288:15;;37256:62;;37273:4;;37288:15;37306:11;37256:8;:62::i;:::-;37357:15;;:224;;-1:-1:-1;;;37357:224:0;;-1:-1:-1;;;;;37357:15:0;;;;:66;;:224;;37438:11;;37357:15;;37508:4;;37535;;37555:15;;37357:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36026:966;36226:6;:19;;;;;;:24;36222:257;;36267:24;36317:11;36295:17;36306:5;36295:7;:17;:::i;:::-;36294:35;;;;:::i;:::-;36267:62;-1:-1:-1;36350:20:0;;36346:122;;36399:8;:25;36391:61;;-1:-1:-1;;;;;36399:25:0;;;;36391:61;;;;;36435:16;;36399:25;36391:61;36399:25;36391:61;36435:16;36399:25;36391:61;;;;;;;;;;;;;;;;;;;;;36346:122;36222:257;;36495:6;:17;-1:-1:-1;;;36495:17:0;;;;:22;36491:250;;36534:22;36582:14;36560:17;36571:5;36560:7;:17;:::i;:::-;36559:38;;;;:::i;:::-;36534:63;-1:-1:-1;36618:18:0;;36614:116;;36665:23;;36657:57;;-1:-1:-1;;;;;36665:23:0;;;;36657:57;;;;;36699:14;;36665:23;36657:57;36665:23;36657:57;36699:14;36665:23;36657:57;;;;;;;;;;;;;;;;;;;;;36614:116;36491:250;;36757:6;:14;-1:-1:-1;;;36757:14:0;;;;:19;36753:232;;36793:19;36838:11;36816:17;36827:5;36816:7;:17;:::i;:::-;36815:35;;;;:::i;:::-;36793:57;-1:-1:-1;36871:15:0;;36867:107;;36915:20;;36907:51;;-1:-1:-1;;;;;36915:20:0;;;;36907:51;;;;;36946:11;;36915:20;36907:51;36915:20;36907:51;36946:11;36915:20;36907:51;;;;;;;;;;;;;;;;;;;;;36753:232;36026:966;;;;;:::o;37597:511::-;37777:15;;37745:62;;37762:4;;-1:-1:-1;;;;;37777:15:0;37795:11;37745:8;:62::i;:::-;37848:15;;-1:-1:-1;;;;;37848:15:0;:31;37887:9;37920:4;37940:11;37848:15;;38052:7;:5;:7::i;:::-;38074:15;37848:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30285:819::-;30493:4;;30388:7;;;;;;;;30493:4;;:12;;:4;:12;30489:608;;;30560:6;:20;30586:5;;30549:32;;-1:-1:-1;;;30560:20:0;;;;30549:7;:32;:::i;:::-;30548:44;;;;:::i;:::-;30623:6;:20;30649:5;;30612:32;;-1:-1:-1;;;30623:20:0;;;;30612:7;:32;:::i;:::-;30611:44;;;;:::i;:::-;30686:6;:18;30710:5;;30675:30;;-1:-1:-1;;;30686:18:0;;;;30675:7;:30;:::i;:::-;30674:42;;;;:::i;:::-;30747:6;:15;30768:5;;30736:27;;-1:-1:-1;;;30747:15:0;;;;30736:7;:27;:::i;:::-;30735:39;;;;:::i;:::-;30522:267;;;;;;;;;;30489:608;30860:6;:19;30885:5;;30849:31;;30860:19;;30849:7;:31;:::i;:::-;30848:43;;;;:::i;:::-;30922:6;:19;30947:5;;30911:31;;30922:19;;;;;30911:7;:31;:::i;:::-;30910:43;;;;:::i;:::-;30984:6;:17;31007:5;;30973:29;;-1:-1:-1;;;30984:17:0;;;;30973:7;:29;:::i;:::-;30972:41;;;;:::i;:::-;31044:6;:14;31064:5;;31033:26;;-1:-1:-1;;;31044:14:0;;;;31033:7;:26;:::i;30489:608::-;30285:819;;;;;:::o;38123:611::-;38307:18;38365:5;38354:8;38328:23;38341:10;38328;:23;:::i;:::-;:34;;;;:::i;:::-;:42;;;;:::i;:::-;38426:4;38409:23;;;;:8;:23;;;;;;38307:63;;-1:-1:-1;38409:38:0;;38436:10;;38409:38;:::i;:::-;38400:4;38383:23;;;;:8;:23;;;;;:64;;;38484:36;;38511:8;;38484:36;:::i;:::-;38475:4;38458:23;;;;:8;:23;;;;;:62;;;38557:38;;38584:10;;38557:38;:::i;:::-;38548:4;38531:23;;;;:8;:23;;;;;:64;;;38632:33;;38659:5;;38632:33;:::i;:::-;38623:4;38606:23;;;;:8;:23;;;;;;;:59;;;;38683:43;;-1:-1:-1;;;;;38683:43:0;;;-1:-1:-1;;;;;;;;;;;38683:43:0;;;38715:10;;38683:43;:::i;:::-;;;;;;;;38123:611;;;;;;:::o;14:161:1:-;83:20;;143:6;132:18;;122:29;;112:2;;165:1;162;155:12;180:259;;292:2;280:9;271:7;267:23;263:32;260:2;;;313:6;305;298:22;260:2;357:9;344:23;376:33;403:5;376:33;:::i;:::-;428:5;250:189;-1:-1:-1;;;250:189:1:o;444:263::-;;567:2;555:9;546:7;542:23;538:32;535:2;;;588:6;580;573:22;535:2;625:9;619:16;644:33;671:5;644:33;:::i;712:569::-;;;;882:2;870:9;861:7;857:23;853:32;850:2;;;903:6;895;888:22;850:2;947:9;934:23;966:33;993:5;966:33;:::i;:::-;1018:5;-1:-1:-1;1075:2:1;1060:18;;1047:32;1088:35;1047:32;1088:35;:::i;:::-;1142:7;-1:-1:-1;1201:2:1;1186:18;;1173:32;1214:35;1173:32;1214:35;:::i;:::-;1268:7;1258:17;;;840:441;;;;;:::o;1286:402::-;;;1415:2;1403:9;1394:7;1390:23;1386:32;1383:2;;;1436:6;1428;1421:22;1383:2;1480:9;1467:23;1499:33;1526:5;1499:33;:::i;:::-;1551:5;-1:-1:-1;1608:2:1;1593:18;;1580:32;1621:35;1580:32;1621:35;:::i;:::-;1675:7;1665:17;;;1373:315;;;;;:::o;1693:470::-;;;;1839:2;1827:9;1818:7;1814:23;1810:32;1807:2;;;1860:6;1852;1845:22;1807:2;1904:9;1891:23;1923:33;1950:5;1923:33;:::i;:::-;1975:5;-1:-1:-1;2032:2:1;2017:18;;2004:32;2045:35;2004:32;2045:35;:::i;:::-;1797:366;;2099:7;;-1:-1:-1;;;2153:2:1;2138:18;;;;2125:32;;1797:366::o;2168:327::-;;;2297:2;2285:9;2276:7;2272:23;2268:32;2265:2;;;2318:6;2310;2303:22;2265:2;2362:9;2349:23;2381:33;2408:5;2381:33;:::i;:::-;2433:5;2485:2;2470:18;;;;2457:32;;-1:-1:-1;;;2255:240:1:o;2500:361::-;;;2626:2;2614:9;2605:7;2601:23;2597:32;2594:2;;;2647:6;2639;2632:22;2594:2;2691:9;2678:23;2744:5;2737:13;2730:21;2723:5;2720:32;2710:2;;2771:6;2763;2756:22;2866:419;;;;;3025:3;3013:9;3004:7;3000:23;2996:33;2993:2;;;3047:6;3039;3032:22;2993:2;3075:30;3095:9;3075:30;:::i;:::-;3065:40;;3124:39;3159:2;3148:9;3144:18;3124:39;:::i;:::-;3114:49;;3182:39;3217:2;3206:9;3202:18;3182:39;:::i;:::-;3172:49;;3240:39;3275:2;3264:9;3260:18;3240:39;:::i;:::-;3230:49;;2983:302;;;;;;;:::o;3290:190::-;;3402:2;3390:9;3381:7;3377:23;3373:32;3370:2;;;3423:6;3415;3408:22;3370:2;-1:-1:-1;3451:23:1;;3360:120;-1:-1:-1;3360:120:1:o;3485:316::-;;;;3642:2;3630:9;3621:7;3617:23;3613:32;3610:2;;;3663:6;3655;3648:22;3610:2;3697:9;3691:16;3681:26;;3747:2;3736:9;3732:18;3726:25;3716:35;;3791:2;3780:9;3776:18;3770:25;3760:35;;3600:201;;;;;:::o;3806:203::-;-1:-1:-1;;;;;3970:32:1;;;;3952:51;;3940:2;3925:18;;3907:102::o;4014:432::-;-1:-1:-1;;;;;4320:15:1;;;4302:34;;4372:15;;;4367:2;4352:18;;4345:43;4424:15;;;4419:2;4404:18;;4397:43;4252:2;4237:18;;4219:227::o;4451:607::-;-1:-1:-1;;;;;4810:15:1;;;4792:34;;4857:2;4842:18;;4835:34;;;;4900:2;4885:18;;4878:34;;;;4943:2;4928:18;;4921:34;;;;4992:15;;;4986:3;4971:19;;4964:44;4772:3;5024:19;;5017:35;;;;4741:3;4726:19;;4708:350::o;5063:187::-;5228:14;;5221:22;5203:41;;5191:2;5176:18;;5158:92::o;5489:603::-;;5630:2;5659;5648:9;5641:21;5691:6;5685:13;5734:6;5729:2;5718:9;5714:18;5707:34;5759:4;5772:140;5786:6;5783:1;5780:13;5772:140;;;5881:14;;;5877:23;;5871:30;5847:17;;;5866:2;5843:26;5836:66;5801:10;;5772:140;;;5930:6;5927:1;5924:13;5921:2;;;6000:4;5995:2;5986:6;5975:9;5971:22;5967:31;5960:45;5921:2;-1:-1:-1;6076:2:1;6055:15;-1:-1:-1;;6051:29:1;6036:45;;;;6083:2;6032:54;;5610:482;-1:-1:-1;;;5610:482:1:o;6097:337::-;6299:2;6281:21;;;6338:2;6318:18;;;6311:30;-1:-1:-1;;;6372:2:1;6357:18;;6350:43;6425:2;6410:18;;6271:163::o;6439:399::-;6641:2;6623:21;;;6680:2;6660:18;;;6653:30;6719:34;6714:2;6699:18;;6692:62;-1:-1:-1;;;6785:2:1;6770:18;;6763:33;6828:3;6813:19;;6613:225::o;6843:402::-;7045:2;7027:21;;;7084:2;7064:18;;;7057:30;7123:34;7118:2;7103:18;;7096:62;-1:-1:-1;;;7189:2:1;7174:18;;7167:36;7235:3;7220:19;;7017:228::o;7250:398::-;7452:2;7434:21;;;7491:2;7471:18;;;7464:30;7530:34;7525:2;7510:18;;7503:62;-1:-1:-1;;;7596:2:1;7581:18;;7574:32;7638:3;7623:19;;7424:224::o;7995:356::-;8197:2;8179:21;;;8216:18;;;8209:30;8275:34;8270:2;8255:18;;8248:62;8342:2;8327:18;;8169:182::o;8356:405::-;8558:2;8540:21;;;8597:2;8577:18;;;8570:30;8636:34;8631:2;8616:18;;8609:62;-1:-1:-1;;;8702:2:1;8687:18;;8680:39;8751:3;8736:19;;8530:231::o;8766:350::-;8968:2;8950:21;;;9007:2;8987:18;;;8980:30;9046:28;9041:2;9026:18;;9019:56;9107:2;9092:18;;8940:176::o;9121:356::-;9323:2;9305:21;;;9342:18;;;9335:30;9401:34;9396:2;9381:18;;9374:62;9468:2;9453:18;;9295:182::o;9482:401::-;9684:2;9666:21;;;9723:2;9703:18;;;9696:30;9762:34;9757:2;9742:18;;9735:62;-1:-1:-1;;;9828:2:1;9813:18;;9806:35;9873:3;9858:19;;9656:227::o;9888:400::-;10090:2;10072:21;;;10129:2;10109:18;;;10102:30;10168:34;10163:2;10148:18;;10141:62;-1:-1:-1;;;10234:2:1;10219:18;;10212:34;10278:3;10263:19;;10062:226::o;10293:177::-;10439:25;;;10427:2;10412:18;;10394:76::o;10475:983::-;;10785:3;10774:9;10770:19;10816:6;10805:9;10798:25;10842:2;10880:6;10875:2;10864:9;10860:18;10853:34;10923:3;10918:2;10907:9;10903:18;10896:31;10947:6;10982;10976:13;11013:6;11005;10998:22;11051:3;11040:9;11036:19;11029:26;;11090:2;11082:6;11078:15;11064:29;;11111:4;11124:195;11138:6;11135:1;11132:13;11124:195;;;11203:13;;-1:-1:-1;;;;;11199:39:1;11187:52;;11294:15;;;;11259:12;;;;11235:1;11153:9;11124:195;;;-1:-1:-1;;;;;;;11375:32:1;;;;11370:2;11355:18;;11348:60;-1:-1:-1;;;11439:3:1;11424:19;11417:35;11336:3;10746:712;-1:-1:-1;;;10746:712:1:o;11463:764::-;11800:10;11837:15;;;11819:34;;11889:15;;;11884:2;11869:18;;11862:43;11941:15;;;11936:2;11921:18;;11914:43;11993:15;;;11988:2;11973:18;;11966:43;12046:15;;;12040:3;12025:19;;12018:44;12099:15;;12093:3;12078:19;;12071:44;12152:15;;12146:3;12131:19;;12124:44;12205:15;;;12199:3;12184:19;;12177:44;11777:3;11762:19;;11744:483::o;12232:184::-;12404:4;12392:17;;;;12374:36;;12362:2;12347:18;;12329:87::o;12421:224::-;;12488:6;12521:2;12518:1;12514:10;12551:2;12548:1;12544:10;12582:3;12578:2;12574:12;12569:3;12566:21;12563:2;;;12590:18;;:::i;:::-;12626:13;;12468:177;-1:-1:-1;;;;12468:177:1:o;12650:128::-;;12721:1;12717:6;12714:1;12711:13;12708:2;;;12727:18;;:::i;:::-;-1:-1:-1;12763:9:1;;12698:80::o;12783:228::-;;12850:10;12887:2;12884:1;12880:10;12917:2;12914:1;12910:10;12948:3;12944:2;12940:12;12935:3;12932:21;12929:2;;;12956:18;;:::i;13016:217::-;;13082:1;13072:2;;-1:-1:-1;;;13107:31:1;;13161:4;13158:1;13151:15;13189:4;13114:1;13179:15;13072:2;-1:-1:-1;13218:9:1;;13062:171::o;13238:168::-;;13344:1;13340;13336:6;13332:14;13329:1;13326:21;13321:1;13314:9;13307:17;13303:45;13300:2;;;13351:18;;:::i;:::-;-1:-1:-1;13391:9:1;;13290:116::o;13411:125::-;;13479:1;13476;13473:8;13470:2;;;13484:18;;:::i;:::-;-1:-1:-1;13521:9:1;;13460:76::o;13541:127::-;13602:10;13597:3;13593:20;13590:1;13583:31;13633:4;13630:1;13623:15;13657:4;13654:1;13647:15;13673:133;-1:-1:-1;;;;;13750:31:1;;13740:42;;13730:2;;13796:1;13793;13786:12

Swarm Source

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