ETH Price: $2,230.79 (-1.94%)
 

Overview

Max Total Supply

1,000,000,000 ASAKUSA

Holders

2

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
Asakusa

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 9: Asakusa.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";
import "./Address.sol";
import "./Ownable.sol";
import "./IERC20.sol";

import "./IUniswapV2Factory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router01.sol";
import "./IUniswapV2Router02.sol";


/*
 * @author ~ 🅧🅘🅟🅩🅔🅡 ~ (https://twitter.com/Xipzer | https://t.me/Xipzer)
 *
 * ░█████╗░░██████╗░█████╗░██╗░░██╗██╗░░░██╗░██████╗░█████╗░
 * ██╔══██╗██╔════╝██╔══██╗██║░██╔╝██║░░░██║██╔════╝██╔══██╗
 * ███████║╚█████╗░███████║█████═╝░██║░░░██║╚█████╗░███████║
 * ██╔══██║░╚═══██╗██╔══██║██╔═██╗░██║░░░██║░╚═══██╗██╔══██║
 * ██║░░██║██████╔╝██║░░██║██║░╚██╗╚██████╔╝██████╔╝██║░░██║
 * ╚═╝░░╚═╝╚═════╝░╚═╝░░╚═╝╚═╝░░╚═╝░╚═════╝░╚═════╝░╚═╝░░╚═╝
 *
 */

contract Asakusa is Context, IERC20, Ownable
{
    using Address for address;

    string public name = "Asakusa";
    string public symbol = "ASAKUSA";

    uint public decimals = 18;
    uint public totalSupply = 1000000000 * 10 ** decimals;

    uint private maxTXN = (totalSupply * 15) / 1000;
    uint private maxWallet = (totalSupply * 15) / 1000;
    uint public swapThresholdMin = totalSupply / 5000;
    uint public swapThresholdMax = totalSupply / 1000;

    address public dexPair;
    IUniswapV2Router02 public dexRouter;

    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping (address => uint) private balances;
    mapping (address => mapping (address => uint)) private allowances;

    mapping (address => bool) private isCaughtMEV;
    mapping (address => bool) private isFeeExempt;
    mapping (address => bool) private isTxnLimitExempt;
    mapping (address => bool) private isWalletLimitExempt;
    mapping (address => bool) public isMarketPair;

    struct Fees
    {
        uint inFee;
        uint outFee;
        uint transferFee;
    }

    struct FeeSplit
    {
        uint marketing;
        uint development;
    }

    struct FeeReceivers
    {
        address payable marketing;
        address payable development;
    }

    Fees public fees;
    FeeSplit public feeSplit;
    FeeReceivers public feeReceivers;

    bool public tradingEnabled;
    bool public protectionRenounced;
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public swapAndLiquifyByLimitOnly;

    event SwapAndLiquifyStatusUpdated(bool status);
    event SwapAndLiquifyByLimitStatusUpdated(bool status);
    event SwapTokensForETH(uint amountIn, address[] path);

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

    constructor(address marketing, address development)
    {
        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexPair = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());

        allowances[address(this)][address(dexRouter)] = type(uint).max;

        fees.inFee = 2000;
        fees.outFee = 4000;
        fees.transferFee = 4000;

        feeReceivers.marketing = payable(marketing);
        feeReceivers.development = payable(development);

        feeSplit.marketing = 6000;
        feeSplit.development = 4000;

        isFeeExempt[owner()] = true;
        isFeeExempt[address(0)] = true;
        isFeeExempt[DEAD] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[feeReceivers.marketing] = true;
        isFeeExempt[feeReceivers.development] = true;

        isTxnLimitExempt[owner()] = true;
        isTxnLimitExempt[address(0)] = true;
        isTxnLimitExempt[DEAD] = true;
        isTxnLimitExempt[address(this)] = true;
        isTxnLimitExempt[feeReceivers.marketing] = true;
        isTxnLimitExempt[feeReceivers.development] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(0)] = true;
        isWalletLimitExempt[DEAD] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[feeReceivers.marketing] = true;
        isWalletLimitExempt[feeReceivers.development] = true;

        isWalletLimitExempt[address(dexPair)] = true;
        isMarketPair[address(dexPair)] = true;

        swapAndLiquifyEnabled = true;
        swapAndLiquifyByLimitOnly = true;

        balances[_msgSender()] = totalSupply;
        emit Transfer(address(0), _msgSender(), totalSupply);
    }

    function balanceOf(address wallet) public view override returns (uint)
    {
        return balances[wallet];
    }

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

    function getCirculatingSupply() public view returns (uint)
    {
        return totalSupply - balanceOf(address(0)) - balanceOf(DEAD);
    }

    function getMEVStatus(address wallet) public view returns (bool)
    {
        return isCaughtMEV[wallet];
    }

    function setWalletFeeStatus(address wallet, bool status) public onlyOwner()
    {
        isFeeExempt[wallet] = status;
    }

    function setWalletTxnStatus(address wallet, bool status) public onlyOwner()
    {
        isTxnLimitExempt[wallet] = status;
    }

    function setWalletLimitStatus(address wallet, bool status) public onlyOwner()
    {
        isWalletLimitExempt[wallet] = status;
    }

    function setMarketPairStatus(address wallet, bool status) public onlyOwner()
    {
        isMarketPair[wallet] = status;
    }

    function setMaxTXN(uint value) public onlyOwner()
    {
        require(value >= totalSupply / 10000, "ERROR: Minimum txn must be greater than 0.01% of total supply!");

        maxTXN = value;
    }

    function setMaxWallet(uint value) public onlyOwner()
    {
        require(value >= totalSupply / 10000, "ERROR: Minimum wallet size must be greater than 0.01% of total supply!");

        maxWallet = value;
    }

    function enableTrading() public onlyOwner()
    {
        require(!tradingEnabled, "ERROR: Trading is already enabled!");
        tradingEnabled = true;
    }

    function removeMaxTXN() public onlyOwner()
    {
        maxTXN = totalSupply;
    }

    function removeMaxWallet() public onlyOwner()
    {
        maxWallet = totalSupply;
    }

    function renounceMEVProtection() public onlyOwner()
    {
        require(!protectionRenounced, "ERROR: Anti-MEV system is already renounced!");
        protectionRenounced = true;
    }

    function setCaughtMEV(address[] memory wallets, bool status) public onlyOwner()
    {
        require(!protectionRenounced, "ERROR: Anti-MEV system is permanently disabled!");
        require(wallets.length <= 200, "ERROR: Maximum wallets at once is 200!");

        for (uint i = 0; i < wallets.length; i++)
            isCaughtMEV[wallets[i]] = status;
    }

    function setFees(uint inFee, uint outFee, uint transferFee) public onlyOwner()
    {
        require(inFee <= 5000 && outFee <= 5000 && transferFee <= 5000, "ERROR: Maximum directional fee is 50%!");

        fees.inFee = inFee;
        fees.outFee = outFee;
        fees.transferFee = transferFee;
    }

    function setFeeSplit(uint marketing, uint development) public onlyOwner()
    {
        require(marketing <= 10000 && development <= 10000, "ERROR: Fee split must not exceed 100%!");
        require(marketing + development <= 10000, "ERROR: Combined fee must not exceed 100%!");

        feeSplit.marketing = marketing;
        feeSplit.development = development;
    }

    function setFeeReceivers(address marketing, address development) public onlyOwner()
    {
        require(marketing != address(0) && development != address(0), "ERROR: Fee receiver must not be NULL address!");

        isFeeExempt[feeReceivers.marketing] = false;
        isFeeExempt[feeReceivers.development] = false;

        feeReceivers.marketing = payable(marketing);
        feeReceivers.development = payable(development);

        isFeeExempt[feeReceivers.marketing] = true;
        isFeeExempt[feeReceivers.development] = true;
    }

    function setSwapThresholds(uint swapMin, uint swapMax) public onlyOwner()
    {
        swapThresholdMin = swapMin;
        swapThresholdMax = swapMax;
    }

    function setSwapAndLiquifyStatus(bool status) public onlyOwner()
    {
        swapAndLiquifyEnabled = status;
        emit SwapAndLiquifyStatusUpdated(status);
    }

    function setSwapAndLiquifyByLimitStatus(bool status) public onlyOwner()
    {
        swapAndLiquifyByLimitOnly = status;
        emit SwapAndLiquifyByLimitStatusUpdated(status);
    }

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

    function _approve(address owner, address spender, uint amount) private
    {
        require(owner != address(0), "ERROR: Approve from the zero address!");
        require(spender != address(0), "ERROR: Approve to the zero address!");

        allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function transferFrom(address sender, address recipient, uint amount) public override returns (bool)
    {
        if (allowances[sender][_msgSender()] != type(uint256).max)
            allowances[sender][_msgSender()] -= amount;

        return _transfer(sender, recipient, amount);
    }

    function transferToAddressNative(address payable recipient, uint amount) private
    {
        require(recipient != address(0), "SolarGuard: Cannot send to the 0 address!");

        recipient.call{ value: amount }("");
    }

    function _transfer(address sender, address recipient, uint amount) private returns (bool)
    {
        require(sender != address(0), "ERROR: Transfer from the zero address!");
        require(recipient != address(0), "ERROR: Transfer to the zero address!");
        require(!isCaughtMEV[recipient] && !isCaughtMEV[sender], "ERROR: Transfers are not permitted!");

        if (inSwapAndLiquify)
        {
            unchecked
            {
                require(amount <= balances[sender], "ERROR: Insufficient balance!");
                balances[sender] -= amount;
            }

            balances[recipient] += amount;

            emit Transfer(sender, recipient, amount);
            return true;
        }
        else
        {
            if (!isFeeExempt[sender] && !isFeeExempt[recipient])
                require(tradingEnabled, "ERROR: Trading has not yet been enabled!");

            if (!isTxnLimitExempt[sender] && !isTxnLimitExempt[recipient])
                require(amount <= maxTXN, "ERROR: Transfer amount exceeds the maxTXN!");

            uint contractTokenBalance = balanceOf(address(this));
            if (!inSwapAndLiquify && swapAndLiquifyEnabled && !isMarketPair[sender] && contractTokenBalance >= swapThresholdMin)
            {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = min(amount, min(contractTokenBalance, swapThresholdMax));

                swapAndLiquify(contractTokenBalance);
            }

            unchecked
            {
                require(amount <= balances[sender], "ERROR: Insufficient balance!");
                balances[sender] -= amount;
            }

            uint finalAmount = (isFeeExempt[sender] || isFeeExempt[recipient]) ? amount : takeFee(sender, recipient, amount);

            if (!isWalletLimitExempt[recipient])
                require(balanceOf(recipient) + finalAmount <= maxWallet, "ERROR: Transfer amount must not exceed max wallet conditions!");

            balances[recipient] += finalAmount;

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function swapAndLiquify(uint amount) private lockTheSwap
    {
        swapTokensForETH(amount);
        uint amountReceived = address(this).balance;

        uint marketingAmount = (amountReceived * feeSplit.marketing) / 10000;
        uint developmentAmount = (amountReceived * feeSplit.development) / 10000;

        if (marketingAmount > 0)
            transferToAddressNative(feeReceivers.marketing, marketingAmount);
        if (developmentAmount > 0)
            transferToAddressNative(feeReceivers.development, developmentAmount);
    }

    function swapTokensForETH(uint amount) private
    {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(amount, 0, path, address(this), block.timestamp)
        {
            emit SwapTokensForETH(amount, path);
        }
        catch
        {
            return;
        }
    }

    function takeFee(address sender, address recipient, uint amount) internal returns (uint)
    {
        uint feeAmount = 0;

        if (isMarketPair[sender])
            feeAmount = (amount * fees.inFee) / 10000;
        else if (isMarketPair[recipient])
            feeAmount = (amount * fees.outFee) / 10000;
        else
            feeAmount = (amount * fees.transferFee) / 10000;

        if (feeAmount > 0)
        {
            balances[address(this)] += feeAmount;
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount - feeAmount;
    }

    function withdrawStuckNative(address recipient, uint amount) public onlyOwner()
    {
        require(recipient != address(0), "ERROR: Cannot send to the 0 address!");
        payable(recipient).transfer(amount);
    }

    function withdrawForeignToken(address tokenAddress, address recipient, uint amount) public onlyOwner()
    {
        require(recipient != address(0), "ERROR: Cannot send to the 0 address!");
        IERC20(tokenAddress).transfer(recipient, amount);
    }

    function min(uint a, uint b) private pure returns (uint)
    {
        return (a >= b) ? b : a;
    }

    receive() external payable {}
}

File 1 of 9: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [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://consensys.net/diligence/blog/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.8.0/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 3 of 9: Context.sol
// SPDX-License-Identifier: MIT
// 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 4 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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 5 of 9: IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 6 of 9: IUniswapV2Pair.sol
pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 7 of 9: IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

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

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

File 8 of 9: IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 9 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SwapAndLiquifyByLimitStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SwapAndLiquifyStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeReceivers","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSplit","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"inFee","type":"uint256"},{"internalType":"uint256","name":"outFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getMEVStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeMaxTXN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceMEVProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setCaughtMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inFee","type":"uint256"},{"internalType":"uint256","name":"outFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxTXN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setSwapAndLiquifyByLimitStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setSwapAndLiquifyStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapMin","type":"uint256"},{"internalType":"uint256","name":"swapMax","type":"uint256"}],"name":"setSwapThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWalletFeeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWalletLimitStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWalletTxnStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260076080908152664173616b75736160c81b60a0526001906200002890826200067b565b506040805180820190915260078152664153414b55534160c81b60208201526002906200005690826200067b565b50601260038190556200006b90600a6200085c565b6200007b90633b9aca0062000871565b6004556103e8600454600f62000092919062000871565b6200009e91906200088b565b6005556103e8600454600f620000b5919062000871565b620000c191906200088b565b600655611388600454620000d691906200088b565b6007556103e8600454620000eb91906200088b565b600855348015620000fb57600080fd5b5060405162002e6e38038062002e6e8339810160408190526200011e91620008cb565b620001293362000584565b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200018e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b4919062000903565b6001600160a01b031663c9c6539630600a60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d919062000903565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000903565b600980546001600160a01b03199081166001600160a01b03938416178255306000818152600c60209081526040808320600a5488168452825280832060001990556107d0601255610fa0601381905560148190556017805487168b8a16178155601880549097168a8a16178755611770601555601691909155835488168452600e8352818420805460ff1990811660019081179092557fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c80548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a8054821683179055868652838620805482168317905582548a168652838620805482168317905587548a168652838620805482168317905585548a168652600f855283862080548216831790557ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37580548216831790557f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f108054821683179055868652838620805482168317905582548a168652838620805482168317905587548a168652838620805482168317905585548a1686526010855283862080548216831790557f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb0180548216831790557f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b69805482168317905595855282852080548716821790559054881684528184208054861682179055945487168352808320805485168617905585548716835280832080548516861790559454909516815260118552838120805490921690921790556019805464010100000064ffff0000001990911617905560045433808352600b85528383208290559251908152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000921565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ff57607f821691505b6020821081036200062057634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000676576000816000526020600020601f850160051c81016020861015620006515750805b601f850160051c820191505b8181101562000672578281556001016200065d565b5050505b505050565b81516001600160401b03811115620006975762000697620005d4565b620006af81620006a88454620005ea565b8462000626565b602080601f831160018114620006e75760008415620006ce5750858301515b600019600386901b1c1916600185901b17855562000672565b600085815260208120601f198616915b828110156200071857888601518255948401946001909101908401620006f7565b5085821015620007375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200079e57816000190482111562000782576200078262000747565b808516156200079057918102915b93841c939080029062000762565b509250929050565b600082620007b75750600162000856565b81620007c65750600062000856565b8160018114620007df5760028114620007ea576200080a565b600191505062000856565b60ff841115620007fe57620007fe62000747565b50506001821b62000856565b5060208310610133831016604e8410600b84101617156200082f575081810a62000856565b6200083b83836200075d565b806000190482111562000852576200085262000747565b0290505b92915050565b60006200086a8383620007a6565b9392505050565b808202811582820484141762000856576200085662000747565b600082620008a957634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620008c657600080fd5b919050565b60008060408385031215620008df57600080fd5b620008ea83620008ae565b9150620008fa60208401620008ae565b90509250929050565b6000602082840312156200091657600080fd5b6200086a82620008ae565b61253d80620009316000396000f3fe60806040526004361061028c5760003560e01c80637e6335c71161015a578063bbfad5b5116100c1578063dc07b6171161007a578063dc07b617146107e6578063dd62ed3e146107fb578063dd9cdaed14610841578063ee2e5a2e14610888578063f242ab41146108a8578063f2fde38b146108c857600080fd5b8063bbfad5b51461072f578063c3fea9ba1461074f578063cddaf9de14610764578063cec10c1114610784578063d0354d6b146107a4578063da00097d146107c457600080fd5b80639af1d35a116101135780639af1d35a14610647578063a070cb7414610681578063a4b45c00146106a1578063a9059cbb146106c1578063adbdaec2146106e1578063b7c7429c146106f657600080fd5b80637e6335c71461059f578063830d010a146105bf578063844d591c146105df5780638a8c523c146105ff5780638da5cb5b1461061457806395d89b411461063257600080fd5b80632d409179116101fe5780635988f53f116101b75780635988f53f146104ce5780635d0044ca146104e45780636373ea69146105045780636be4432c1461053457806370a0823114610554578063715018a61461058a57600080fd5b80632d4091791461040e578063313ce5671461042e5780633ecad271146104445780634a74bb02146104745780634ada218b146104955780635351de8b146104af57600080fd5b806318160ddd1161025057806318160ddd1461035f5780631afc2b3a1461038357806321917cdc14610399578063220f6696146103b957806323b872dd146103d95780632b112e49146103f957600080fd5b806303fd2a45146102985780630659ce5c146102cb57806306fdde03146102ed5780630758d9241461030f578063095ea7b31461032f57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ae61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d757600080fd5b506102eb6102e6366004612066565b6108e8565b005b3480156102f957600080fd5b50610302610998565b6040516102c291906120a7565b34801561031b57600080fd5b50600a546102ae906001600160a01b031681565b34801561033b57600080fd5b5061034f61034a3660046120f6565b610a26565b60405190151581526020016102c2565b34801561036b57600080fd5b5061037560045481565b6040519081526020016102c2565b34801561038f57600080fd5b5061037560085481565b3480156103a557600080fd5b506102eb6103b436600461213b565b610a3d565b3480156103c557600080fd5b5060195461034f9062010000900460ff1681565b3480156103e557600080fd5b5061034f6103f4366004612066565b610a70565b34801561040557600080fd5b50610375610aea565b34801561041a57600080fd5b506102eb61042936600461213b565b610b57565b34801561043a57600080fd5b5061037560035481565b34801561045057600080fd5b5061034f61045f366004612174565b60116020526000908152604090205460ff1681565b34801561048057600080fd5b5060195461034f906301000000900460ff1681565b3480156104a157600080fd5b5060195461034f9060ff1681565b3480156104bb57600080fd5b5060195461034f90610100900460ff1681565b3480156104da57600080fd5b5061037560075481565b3480156104f057600080fd5b506102eb6104ff366004612191565b610b8a565b34801561051057600080fd5b5060155460165461051f919082565b604080519283526020830191909152016102c2565b34801561054057600080fd5b506102eb61054f3660046121c0565b610c2b565b34801561056057600080fd5b5061037561056f366004612174565b6001600160a01b03166000908152600b602052604090205490565b34801561059657600080fd5b506102eb610d66565b3480156105ab57600080fd5b506102eb6105ba366004612297565b610d7a565b3480156105cb57600080fd5b506102eb6105da3660046120f6565b610e69565b3480156105eb57600080fd5b506102eb6105fa36600461213b565b610ecd565b34801561060b57600080fd5b506102eb610f00565b34801561062057600080fd5b506000546001600160a01b03166102ae565b34801561063e57600080fd5b50610302610f75565b34801561065357600080fd5b5060125460135460145461066692919083565b604080519384526020840192909252908201526060016102c2565b34801561068d57600080fd5b506102eb61069c3660046122b9565b610f82565b3480156106ad57600080fd5b506102eb6106bc3660046122d6565b610fe4565b3480156106cd57600080fd5b5061034f6106dc3660046120f6565b6110f3565b3480156106ed57600080fd5b506102eb61110a565b34801561070257600080fd5b5061034f610711366004612174565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561073b57600080fd5b506102eb61074a366004612297565b61111a565b34801561075b57600080fd5b506102eb61112d565b34801561077057600080fd5b506102eb61077f366004612191565b6111b3565b34801561079057600080fd5b506102eb61079f366004612304565b611245565b3480156107b057600080fd5b506102eb6107bf36600461213b565b6112d8565b3480156107d057600080fd5b5060195461034f90640100000000900460ff1681565b3480156107f257600080fd5b506102eb61130b565b34801561080757600080fd5b506103756108163660046122d6565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b34801561084d57600080fd5b50601754601854610868916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016102c2565b34801561089457600080fd5b506102eb6108a33660046122b9565b61131b565b3480156108b457600080fd5b506009546102ae906001600160a01b031681565b3480156108d457600080fd5b506102eb6108e3366004612174565b611370565b6108f06113e9565b6001600160a01b03821661091f5760405162461bcd60e51b815260040161091690612330565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190612374565b50505050565b600180546109a590612391565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190612391565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505081565b6000610a33338484611443565b5060015b92915050565b610a456113e9565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600c6020908152604080832033845290915281205460001914610ad5576001600160a01b0384166000908152600c6020908152604080832033845290915281208054849290610acf9084906123db565b90915550505b610ae084848461156a565b90505b9392505050565b600b6020527f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac34155460008080527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7654600454919291610b4891906123db565b610b5291906123db565b905090565b610b5f6113e9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b610b926113e9565b612710600454610ba291906123ee565b811015610c265760405162461bcd60e51b815260206004820152604660248201527f4552524f523a204d696e696d756d2077616c6c65742073697a65206d7573742060448201527f62652067726561746572207468616e20302e303125206f6620746f74616c20736064820152657570706c792160d01b608482015260a401610916565b600655565b610c336113e9565b601954610100900460ff1615610ca35760405162461bcd60e51b815260206004820152602f60248201527f4552524f523a20416e74692d4d45562073797374656d206973207065726d616e60448201526e656e746c792064697361626c65642160881b6064820152608401610916565b60c882511115610d045760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204d6178696d756d2077616c6c657473206174206f6e6365206960448201526573203230302160d01b6064820152608401610916565b60005b8251811015610d615781600d6000858481518110610d2757610d27612410565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610d07565b505050565b610d6e6113e9565b610d786000611be8565b565b610d826113e9565b6127108211158015610d9657506127108111155b610df15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204665652073706c6974206d757374206e6f742065786365656460448201526520313030252160d01b6064820152608401610916565b612710610dfe8284612426565b1115610e5e5760405162461bcd60e51b815260206004820152602960248201527f4552524f523a20436f6d62696e656420666565206d757374206e6f742065786360448201526865656420313030252160b81b6064820152608401610916565b601591909155601655565b610e716113e9565b6001600160a01b038216610e975760405162461bcd60e51b815260040161091690612330565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610d61573d6000803e3d6000fd5b610ed56113e9565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610f086113e9565b60195460ff1615610f665760405162461bcd60e51b815260206004820152602260248201527f4552524f523a2054726164696e6720697320616c726561647920656e61626c65604482015261642160f01b6064820152608401610916565b6019805460ff19166001179055565b600280546109a590612391565b610f8a6113e9565b601980548215156401000000000264ff00000000199091161790556040517f2a91bab0ff55298148711f2e71f46774b795fb3d098246292d3a9d288d67730790610fd990831515815260200190565b60405180910390a150565b610fec6113e9565b6001600160a01b0382161580159061100c57506001600160a01b03811615155b61106e5760405162461bcd60e51b815260206004820152602d60248201527f4552524f523a20466565207265636569766572206d757374206e6f742062652060448201526c4e554c4c20616464726573732160981b6064820152608401610916565b601780546001600160a01b039081166000908152600e6020526040808220805460ff19908116909155601880548516845282842080548316905585549785166001600160a01b03199889168117909655805496851696909716959095178655928152828120805485166001908117909155945490911681522080549091169091179055565b600061110033848461156a565b5060019392505050565b6111126113e9565b600454600555565b6111226113e9565b600791909155600855565b6111356113e9565b601954610100900460ff16156111a25760405162461bcd60e51b815260206004820152602c60248201527f4552524f523a20416e74692d4d45562073797374656d20697320616c7265616460448201526b792072656e6f756e6365642160a01b6064820152608401610916565b6019805461ff001916610100179055565b6111bb6113e9565b6127106004546111cb91906123ee565b8110156112405760405162461bcd60e51b815260206004820152603e60248201527f4552524f523a204d696e696d756d2074786e206d75737420626520677265617460448201527f6572207468616e20302e303125206f6620746f74616c20737570706c792100006064820152608401610916565b600555565b61124d6113e9565b611388831115801561126157506113888211155b801561126f57506113888111155b6112ca5760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204d6178696d756d20646972656374696f6e616c20666565206960448201526573203530252160d01b6064820152608401610916565b601292909255601355601455565b6112e06113e9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6113136113e9565b600454600655565b6113236113e9565b6019805482151563010000000263ff000000199091161790556040517f083ec94fdbe7b9156108be7401c9808cd45be92d8bcba03f203523515831146c90610fd990831515815260200190565b6113786113e9565b6001600160a01b0381166113dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610916565b6113e681611be8565b50565b6000546001600160a01b03163314610d785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610916565b6001600160a01b0383166114a75760405162461bcd60e51b815260206004820152602560248201527f4552524f523a20417070726f76652066726f6d20746865207a65726f20616464604482015264726573732160d81b6064820152608401610916565b6001600160a01b0382166115095760405162461bcd60e51b815260206004820152602360248201527f4552524f523a20417070726f766520746f20746865207a65726f20616464726560448201526273732160e81b6064820152608401610916565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115d15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a205472616e736665722066726f6d20746865207a65726f20616460448201526564726573732160d01b6064820152608401610916565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f4552524f523a205472616e7366657220746f20746865207a65726f20616464726044820152636573732160e01b6064820152608401610916565b6001600160a01b0383166000908152600d602052604090205460ff1615801561167557506001600160a01b0384166000908152600d602052604090205460ff16155b6116cd5760405162461bcd60e51b815260206004820152602360248201527f4552524f523a205472616e736665727320617265206e6f74207065726d69747460448201526265642160e81b6064820152608401610916565b60195462010000900460ff16156117db576001600160a01b0384166000908152600b60205260409020548211156117465760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a20496e73756666696369656e742062616c616e636521000000006044820152606401610916565b6001600160a01b038085166000908152600b6020526040808220805486900390559185168152908120805484929061177f908490612426565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117cb91815260200190565b60405180910390a3506001610ae3565b6001600160a01b0384166000908152600e602052604090205460ff1615801561181d57506001600160a01b0383166000908152600e602052604090205460ff16155b156118855760195460ff166118855760405162461bcd60e51b815260206004820152602860248201527f4552524f523a2054726164696e6720686173206e6f7420796574206265656e20604482015267656e61626c65642160c01b6064820152608401610916565b6001600160a01b0384166000908152600f602052604090205460ff161580156118c757506001600160a01b0383166000908152600f602052604090205460ff16155b15611931576005548211156119315760405162461bcd60e51b815260206004820152602a60248201527f4552524f523a205472616e7366657220616d6f756e74206578636565647320746044820152696865206d617854584e2160b01b6064820152608401610916565b306000908152600b602052604090205460195462010000900460ff1615801561196357506019546301000000900460ff165b801561198857506001600160a01b03851660009081526011602052604090205460ff16155b801561199657506007548110155b156119cf57601954640100000000900460ff16156119c6576119c3836119be83600854611c38565b611c38565b90505b6119cf81611c4e565b6001600160a01b0385166000908152600b6020526040902054831115611a375760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a20496e73756666696369656e742062616c616e636521000000006044820152606401610916565b6001600160a01b0385166000908152600b6020908152604080832080548790039055600e90915281205460ff1680611a8757506001600160a01b0385166000908152600e602052604090205460ff165b611a9b57611a96868686611cf6565b611a9d565b835b6001600160a01b03861660009081526010602052604090205490915060ff16611b615760065481611ae3876001600160a01b03166000908152600b602052604090205490565b611aed9190612426565b1115611b615760405162461bcd60e51b815260206004820152603d60248201527f4552524f523a205472616e7366657220616d6f756e74206d757374206e6f742060448201527f657863656564206d61782077616c6c657420636f6e646974696f6e73210000006064820152608401610916565b6001600160a01b0385166000908152600b602052604081208054839290611b89908490612426565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bd591815260200190565b60405180910390a3600192505050610ae3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831015611c485782610ae3565b50919050565b6019805462ff0000191662010000179055611c6881611e09565b601554479060009061271090611c7e9084612439565b611c8891906123ee565b9050600061271060156001015484611ca09190612439565b611caa91906123ee565b90508115611cc857601754611cc8906001600160a01b031683611f84565b8015611ce457601854611ce4906001600160a01b031682611f84565b50506019805462ff0000191690555050565b6001600160a01b038316600090815260116020526040812054819060ff1615611d3b5760125461271090611d2a9085612439565b611d3491906123ee565b9050611d8b565b6001600160a01b03841660009081526011602052604090205460ff1615611d6d5760135461271090611d2a9085612439565b60145461271090611d7e9085612439565b611d8891906123ee565b90505b8015611df657306000908152600b602052604081208054839290611db0908490612426565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b611e0081846123db565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3e57611e3e612410565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190612450565b81600181518110611ece57611ece612410565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac94790611f149085906000908690309042906004016124b2565b600060405180830381600087803b158015611f2e57600080fd5b505af1925050508015611f3f575060015b611f47575050565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611f789291906124ee565b60405180910390a15050565b6001600160a01b038216611fec5760405162461bcd60e51b815260206004820152602960248201527f536f6c617247756172643a2043616e6e6f742073656e6420746f20746865203060448201526820616464726573732160b81b6064820152608401610916565b6040516001600160a01b038316908290600081818185875af1925050503d8060008114612035576040519150601f19603f3d011682016040523d82523d6000602084013e61203a565b606091505b5050505050565b6001600160a01b03811681146113e657600080fd5b803561206181612041565b919050565b60008060006060848603121561207b57600080fd5b833561208681612041565b9250602084013561209681612041565b929592945050506040919091013590565b60006020808352835180602085015260005b818110156120d5578581018301518582016040015282016120b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561210957600080fd5b823561211481612041565b946020939093013593505050565b80151581146113e657600080fd5b803561206181612122565b6000806040838503121561214e57600080fd5b823561215981612041565b9150602083013561216981612122565b809150509250929050565b60006020828403121561218657600080fd5b8135610ae381612041565b6000602082840312156121a357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156121d357600080fd5b823567ffffffffffffffff808211156121eb57600080fd5b818501915085601f8301126121ff57600080fd5b8135602082821115612213576122136121aa565b8160051b604051601f19603f83011681018181108682111715612238576122386121aa565b60405292835281830193508481018201928984111561225657600080fd5b948201945b8386101561227b5761226c86612056565b8552948201949382019361225b565b965061228a9050878201612130565b9450505050509250929050565b600080604083850312156122aa57600080fd5b50508035926020909101359150565b6000602082840312156122cb57600080fd5b8135610ae381612122565b600080604083850312156122e957600080fd5b82356122f481612041565b9150602083013561216981612041565b60008060006060848603121561231957600080fd5b505081359360208301359350604090920135919050565b60208082526024908201527f4552524f523a2043616e6e6f742073656e6420746f20746865203020616464726040820152636573732160e01b606082015260800190565b60006020828403121561238657600080fd5b8151610ae381612122565b600181811c908216806123a557607f821691505b602082108103611c4857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3757610a376123c5565b60008261240b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80820180821115610a3757610a376123c5565b8082028115828204841417610a3757610a376123c5565b60006020828403121561246257600080fd5b8151610ae381612041565b60008151808452602080850194506020840160005b838110156124a75781516001600160a01b031687529582019590820190600101612482565b509495945050505050565b85815284602082015260a0604082015260006124d160a083018661246d565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610ae0604083018461246d56fea2646970667358221220c7643fd8461d1849079c8f2e3beaa2890762b92c1bb1bde3198f0cab5a5ea71964736f6c63430008160033000000000000000000000000b9ff4ba6c638838ad09ba9994a94278e11bffa33000000000000000000000000ff7372ef917f6242c3e71048bda9322ec5da4973

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80637e6335c71161015a578063bbfad5b5116100c1578063dc07b6171161007a578063dc07b617146107e6578063dd62ed3e146107fb578063dd9cdaed14610841578063ee2e5a2e14610888578063f242ab41146108a8578063f2fde38b146108c857600080fd5b8063bbfad5b51461072f578063c3fea9ba1461074f578063cddaf9de14610764578063cec10c1114610784578063d0354d6b146107a4578063da00097d146107c457600080fd5b80639af1d35a116101135780639af1d35a14610647578063a070cb7414610681578063a4b45c00146106a1578063a9059cbb146106c1578063adbdaec2146106e1578063b7c7429c146106f657600080fd5b80637e6335c71461059f578063830d010a146105bf578063844d591c146105df5780638a8c523c146105ff5780638da5cb5b1461061457806395d89b411461063257600080fd5b80632d409179116101fe5780635988f53f116101b75780635988f53f146104ce5780635d0044ca146104e45780636373ea69146105045780636be4432c1461053457806370a0823114610554578063715018a61461058a57600080fd5b80632d4091791461040e578063313ce5671461042e5780633ecad271146104445780634a74bb02146104745780634ada218b146104955780635351de8b146104af57600080fd5b806318160ddd1161025057806318160ddd1461035f5780631afc2b3a1461038357806321917cdc14610399578063220f6696146103b957806323b872dd146103d95780632b112e49146103f957600080fd5b806303fd2a45146102985780630659ce5c146102cb57806306fdde03146102ed5780630758d9241461030f578063095ea7b31461032f57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ae61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d757600080fd5b506102eb6102e6366004612066565b6108e8565b005b3480156102f957600080fd5b50610302610998565b6040516102c291906120a7565b34801561031b57600080fd5b50600a546102ae906001600160a01b031681565b34801561033b57600080fd5b5061034f61034a3660046120f6565b610a26565b60405190151581526020016102c2565b34801561036b57600080fd5b5061037560045481565b6040519081526020016102c2565b34801561038f57600080fd5b5061037560085481565b3480156103a557600080fd5b506102eb6103b436600461213b565b610a3d565b3480156103c557600080fd5b5060195461034f9062010000900460ff1681565b3480156103e557600080fd5b5061034f6103f4366004612066565b610a70565b34801561040557600080fd5b50610375610aea565b34801561041a57600080fd5b506102eb61042936600461213b565b610b57565b34801561043a57600080fd5b5061037560035481565b34801561045057600080fd5b5061034f61045f366004612174565b60116020526000908152604090205460ff1681565b34801561048057600080fd5b5060195461034f906301000000900460ff1681565b3480156104a157600080fd5b5060195461034f9060ff1681565b3480156104bb57600080fd5b5060195461034f90610100900460ff1681565b3480156104da57600080fd5b5061037560075481565b3480156104f057600080fd5b506102eb6104ff366004612191565b610b8a565b34801561051057600080fd5b5060155460165461051f919082565b604080519283526020830191909152016102c2565b34801561054057600080fd5b506102eb61054f3660046121c0565b610c2b565b34801561056057600080fd5b5061037561056f366004612174565b6001600160a01b03166000908152600b602052604090205490565b34801561059657600080fd5b506102eb610d66565b3480156105ab57600080fd5b506102eb6105ba366004612297565b610d7a565b3480156105cb57600080fd5b506102eb6105da3660046120f6565b610e69565b3480156105eb57600080fd5b506102eb6105fa36600461213b565b610ecd565b34801561060b57600080fd5b506102eb610f00565b34801561062057600080fd5b506000546001600160a01b03166102ae565b34801561063e57600080fd5b50610302610f75565b34801561065357600080fd5b5060125460135460145461066692919083565b604080519384526020840192909252908201526060016102c2565b34801561068d57600080fd5b506102eb61069c3660046122b9565b610f82565b3480156106ad57600080fd5b506102eb6106bc3660046122d6565b610fe4565b3480156106cd57600080fd5b5061034f6106dc3660046120f6565b6110f3565b3480156106ed57600080fd5b506102eb61110a565b34801561070257600080fd5b5061034f610711366004612174565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561073b57600080fd5b506102eb61074a366004612297565b61111a565b34801561075b57600080fd5b506102eb61112d565b34801561077057600080fd5b506102eb61077f366004612191565b6111b3565b34801561079057600080fd5b506102eb61079f366004612304565b611245565b3480156107b057600080fd5b506102eb6107bf36600461213b565b6112d8565b3480156107d057600080fd5b5060195461034f90640100000000900460ff1681565b3480156107f257600080fd5b506102eb61130b565b34801561080757600080fd5b506103756108163660046122d6565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b34801561084d57600080fd5b50601754601854610868916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016102c2565b34801561089457600080fd5b506102eb6108a33660046122b9565b61131b565b3480156108b457600080fd5b506009546102ae906001600160a01b031681565b3480156108d457600080fd5b506102eb6108e3366004612174565b611370565b6108f06113e9565b6001600160a01b03821661091f5760405162461bcd60e51b815260040161091690612330565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190612374565b50505050565b600180546109a590612391565b80601f01602080910402602001604051908101604052809291908181526020018280546109d190612391565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505081565b6000610a33338484611443565b5060015b92915050565b610a456113e9565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b0383166000908152600c6020908152604080832033845290915281205460001914610ad5576001600160a01b0384166000908152600c6020908152604080832033845290915281208054849290610acf9084906123db565b90915550505b610ae084848461156a565b90505b9392505050565b600b6020527f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac34155460008080527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7654600454919291610b4891906123db565b610b5291906123db565b905090565b610b5f6113e9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b610b926113e9565b612710600454610ba291906123ee565b811015610c265760405162461bcd60e51b815260206004820152604660248201527f4552524f523a204d696e696d756d2077616c6c65742073697a65206d7573742060448201527f62652067726561746572207468616e20302e303125206f6620746f74616c20736064820152657570706c792160d01b608482015260a401610916565b600655565b610c336113e9565b601954610100900460ff1615610ca35760405162461bcd60e51b815260206004820152602f60248201527f4552524f523a20416e74692d4d45562073797374656d206973207065726d616e60448201526e656e746c792064697361626c65642160881b6064820152608401610916565b60c882511115610d045760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204d6178696d756d2077616c6c657473206174206f6e6365206960448201526573203230302160d01b6064820152608401610916565b60005b8251811015610d615781600d6000858481518110610d2757610d27612410565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610d07565b505050565b610d6e6113e9565b610d786000611be8565b565b610d826113e9565b6127108211158015610d9657506127108111155b610df15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204665652073706c6974206d757374206e6f742065786365656460448201526520313030252160d01b6064820152608401610916565b612710610dfe8284612426565b1115610e5e5760405162461bcd60e51b815260206004820152602960248201527f4552524f523a20436f6d62696e656420666565206d757374206e6f742065786360448201526865656420313030252160b81b6064820152608401610916565b601591909155601655565b610e716113e9565b6001600160a01b038216610e975760405162461bcd60e51b815260040161091690612330565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610d61573d6000803e3d6000fd5b610ed56113e9565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b610f086113e9565b60195460ff1615610f665760405162461bcd60e51b815260206004820152602260248201527f4552524f523a2054726164696e6720697320616c726561647920656e61626c65604482015261642160f01b6064820152608401610916565b6019805460ff19166001179055565b600280546109a590612391565b610f8a6113e9565b601980548215156401000000000264ff00000000199091161790556040517f2a91bab0ff55298148711f2e71f46774b795fb3d098246292d3a9d288d67730790610fd990831515815260200190565b60405180910390a150565b610fec6113e9565b6001600160a01b0382161580159061100c57506001600160a01b03811615155b61106e5760405162461bcd60e51b815260206004820152602d60248201527f4552524f523a20466565207265636569766572206d757374206e6f742062652060448201526c4e554c4c20616464726573732160981b6064820152608401610916565b601780546001600160a01b039081166000908152600e6020526040808220805460ff19908116909155601880548516845282842080548316905585549785166001600160a01b03199889168117909655805496851696909716959095178655928152828120805485166001908117909155945490911681522080549091169091179055565b600061110033848461156a565b5060019392505050565b6111126113e9565b600454600555565b6111226113e9565b600791909155600855565b6111356113e9565b601954610100900460ff16156111a25760405162461bcd60e51b815260206004820152602c60248201527f4552524f523a20416e74692d4d45562073797374656d20697320616c7265616460448201526b792072656e6f756e6365642160a01b6064820152608401610916565b6019805461ff001916610100179055565b6111bb6113e9565b6127106004546111cb91906123ee565b8110156112405760405162461bcd60e51b815260206004820152603e60248201527f4552524f523a204d696e696d756d2074786e206d75737420626520677265617460448201527f6572207468616e20302e303125206f6620746f74616c20737570706c792100006064820152608401610916565b600555565b61124d6113e9565b611388831115801561126157506113888211155b801561126f57506113888111155b6112ca5760405162461bcd60e51b815260206004820152602660248201527f4552524f523a204d6178696d756d20646972656374696f6e616c20666565206960448201526573203530252160d01b6064820152608401610916565b601292909255601355601455565b6112e06113e9565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6113136113e9565b600454600655565b6113236113e9565b6019805482151563010000000263ff000000199091161790556040517f083ec94fdbe7b9156108be7401c9808cd45be92d8bcba03f203523515831146c90610fd990831515815260200190565b6113786113e9565b6001600160a01b0381166113dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610916565b6113e681611be8565b50565b6000546001600160a01b03163314610d785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610916565b6001600160a01b0383166114a75760405162461bcd60e51b815260206004820152602560248201527f4552524f523a20417070726f76652066726f6d20746865207a65726f20616464604482015264726573732160d81b6064820152608401610916565b6001600160a01b0382166115095760405162461bcd60e51b815260206004820152602360248201527f4552524f523a20417070726f766520746f20746865207a65726f20616464726560448201526273732160e81b6064820152608401610916565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166115d15760405162461bcd60e51b815260206004820152602660248201527f4552524f523a205472616e736665722066726f6d20746865207a65726f20616460448201526564726573732160d01b6064820152608401610916565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f4552524f523a205472616e7366657220746f20746865207a65726f20616464726044820152636573732160e01b6064820152608401610916565b6001600160a01b0383166000908152600d602052604090205460ff1615801561167557506001600160a01b0384166000908152600d602052604090205460ff16155b6116cd5760405162461bcd60e51b815260206004820152602360248201527f4552524f523a205472616e736665727320617265206e6f74207065726d69747460448201526265642160e81b6064820152608401610916565b60195462010000900460ff16156117db576001600160a01b0384166000908152600b60205260409020548211156117465760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a20496e73756666696369656e742062616c616e636521000000006044820152606401610916565b6001600160a01b038085166000908152600b6020526040808220805486900390559185168152908120805484929061177f908490612426565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117cb91815260200190565b60405180910390a3506001610ae3565b6001600160a01b0384166000908152600e602052604090205460ff1615801561181d57506001600160a01b0383166000908152600e602052604090205460ff16155b156118855760195460ff166118855760405162461bcd60e51b815260206004820152602860248201527f4552524f523a2054726164696e6720686173206e6f7420796574206265656e20604482015267656e61626c65642160c01b6064820152608401610916565b6001600160a01b0384166000908152600f602052604090205460ff161580156118c757506001600160a01b0383166000908152600f602052604090205460ff16155b15611931576005548211156119315760405162461bcd60e51b815260206004820152602a60248201527f4552524f523a205472616e7366657220616d6f756e74206578636565647320746044820152696865206d617854584e2160b01b6064820152608401610916565b306000908152600b602052604090205460195462010000900460ff1615801561196357506019546301000000900460ff165b801561198857506001600160a01b03851660009081526011602052604090205460ff16155b801561199657506007548110155b156119cf57601954640100000000900460ff16156119c6576119c3836119be83600854611c38565b611c38565b90505b6119cf81611c4e565b6001600160a01b0385166000908152600b6020526040902054831115611a375760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a20496e73756666696369656e742062616c616e636521000000006044820152606401610916565b6001600160a01b0385166000908152600b6020908152604080832080548790039055600e90915281205460ff1680611a8757506001600160a01b0385166000908152600e602052604090205460ff165b611a9b57611a96868686611cf6565b611a9d565b835b6001600160a01b03861660009081526010602052604090205490915060ff16611b615760065481611ae3876001600160a01b03166000908152600b602052604090205490565b611aed9190612426565b1115611b615760405162461bcd60e51b815260206004820152603d60248201527f4552524f523a205472616e7366657220616d6f756e74206d757374206e6f742060448201527f657863656564206d61782077616c6c657420636f6e646974696f6e73210000006064820152608401610916565b6001600160a01b0385166000908152600b602052604081208054839290611b89908490612426565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bd591815260200190565b60405180910390a3600192505050610ae3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831015611c485782610ae3565b50919050565b6019805462ff0000191662010000179055611c6881611e09565b601554479060009061271090611c7e9084612439565b611c8891906123ee565b9050600061271060156001015484611ca09190612439565b611caa91906123ee565b90508115611cc857601754611cc8906001600160a01b031683611f84565b8015611ce457601854611ce4906001600160a01b031682611f84565b50506019805462ff0000191690555050565b6001600160a01b038316600090815260116020526040812054819060ff1615611d3b5760125461271090611d2a9085612439565b611d3491906123ee565b9050611d8b565b6001600160a01b03841660009081526011602052604090205460ff1615611d6d5760135461271090611d2a9085612439565b60145461271090611d7e9085612439565b611d8891906123ee565b90505b8015611df657306000908152600b602052604081208054839290611db0908490612426565b909155505060405181815230906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b611e0081846123db565b95945050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3e57611e3e612410565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb9190612450565b81600181518110611ece57611ece612410565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac94790611f149085906000908690309042906004016124b2565b600060405180830381600087803b158015611f2e57600080fd5b505af1925050508015611f3f575060015b611f47575050565b7f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051611f789291906124ee565b60405180910390a15050565b6001600160a01b038216611fec5760405162461bcd60e51b815260206004820152602960248201527f536f6c617247756172643a2043616e6e6f742073656e6420746f20746865203060448201526820616464726573732160b81b6064820152608401610916565b6040516001600160a01b038316908290600081818185875af1925050503d8060008114612035576040519150601f19603f3d011682016040523d82523d6000602084013e61203a565b606091505b5050505050565b6001600160a01b03811681146113e657600080fd5b803561206181612041565b919050565b60008060006060848603121561207b57600080fd5b833561208681612041565b9250602084013561209681612041565b929592945050506040919091013590565b60006020808352835180602085015260005b818110156120d5578581018301518582016040015282016120b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561210957600080fd5b823561211481612041565b946020939093013593505050565b80151581146113e657600080fd5b803561206181612122565b6000806040838503121561214e57600080fd5b823561215981612041565b9150602083013561216981612122565b809150509250929050565b60006020828403121561218657600080fd5b8135610ae381612041565b6000602082840312156121a357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156121d357600080fd5b823567ffffffffffffffff808211156121eb57600080fd5b818501915085601f8301126121ff57600080fd5b8135602082821115612213576122136121aa565b8160051b604051601f19603f83011681018181108682111715612238576122386121aa565b60405292835281830193508481018201928984111561225657600080fd5b948201945b8386101561227b5761226c86612056565b8552948201949382019361225b565b965061228a9050878201612130565b9450505050509250929050565b600080604083850312156122aa57600080fd5b50508035926020909101359150565b6000602082840312156122cb57600080fd5b8135610ae381612122565b600080604083850312156122e957600080fd5b82356122f481612041565b9150602083013561216981612041565b60008060006060848603121561231957600080fd5b505081359360208301359350604090920135919050565b60208082526024908201527f4552524f523a2043616e6e6f742073656e6420746f20746865203020616464726040820152636573732160e01b606082015260800190565b60006020828403121561238657600080fd5b8151610ae381612122565b600181811c908216806123a557607f821691505b602082108103611c4857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a3757610a376123c5565b60008261240b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b80820180821115610a3757610a376123c5565b8082028115828204841417610a3757610a376123c5565b60006020828403121561246257600080fd5b8151610ae381612041565b60008151808452602080850194506020840160005b838110156124a75781516001600160a01b031687529582019590820190600101612482565b509495945050505050565b85815284602082015260a0604082015260006124d160a083018661246d565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000610ae0604083018461246d56fea2646970667358221220c7643fd8461d1849079c8f2e3beaa2890762b92c1bb1bde3198f0cab5a5ea71964736f6c63430008160033

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

000000000000000000000000b9ff4ba6c638838ad09ba9994a94278e11bffa33000000000000000000000000ff7372ef917f6242c3e71048bda9322ec5da4973

-----Decoded View---------------
Arg [0] : marketing (address): 0xb9Ff4ba6C638838ad09Ba9994a94278E11BFFa33
Arg [1] : development (address): 0xfF7372EF917f6242c3e71048Bda9322ec5da4973

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b9ff4ba6c638838ad09ba9994a94278e11bffa33
Arg [1] : 000000000000000000000000ff7372ef917f6242c3e71048bda9322ec5da4973


Deployed Bytecode Sourcemap

1473:13715:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2030:73;;;;;;;;;;;;2061:42;2030:73;;;;;-1:-1:-1;;;;;178:32:9;;;160:51;;148:2;133:18;2030:73:1;;;;;;;;14778:258;;;;;;;;;;-1:-1:-1;14778:258:1;;;;;:::i;:::-;;:::i;:::-;;1560:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1986:35::-;;;;;;;;;;-1:-1:-1;1986:35:1;;;;-1:-1:-1;;;;;1986:35:1;;;9502:163;;;;;;;;;;-1:-1:-1;9502:163:1;;;;;:::i;:::-;;:::i;:::-;;;2231:14:9;;2224:22;2206:41;;2194:2;2179:18;9502:163:1;2066:187:9;1670:53:1;;;;;;;;;;;;;;;;;;;2404:25:9;;;2392:2;2377:18;1670:53:1;2258:177:9;1899:49:1;;;;;;;;;;;;;;;;5756:128;;;;;;;;;;-1:-1:-1;5756:128:1;;;;;:::i;:::-;;:::i;2983:28::-;;;;;;;;;;-1:-1:-1;2983:28:1;;;;;;;;;;;10198:295;;;;;;;;;;-1:-1:-1;10198:295:1;;;;;:::i;:::-;;:::i;5482:143::-;;;;;;;;;;;;;:::i;5892:133::-;;;;;;;;;;-1:-1:-1;5892:133:1;;;;;:::i;:::-;;:::i;1638:25::-;;;;;;;;;;;;;;;;2456:45;;;;;;;;;;-1:-1:-1;2456:45:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;3018:33;;;;;;;;;;-1:-1:-1;3018:33:1;;;;;;;;;;;2912:26;;;;;;;;;;-1:-1:-1;2912:26:1;;;;;;;;2945:31;;;;;;;;;;-1:-1:-1;2945:31:1;;;;;;;;;;;1843:49;;;;;;;;;;;;;;;;6529:218;;;;;;;;;;-1:-1:-1;6529:218:1;;;;;:::i;:::-;;:::i;2840:24::-;;;;;;;;;;-1:-1:-1;2840:24:1;;;;;;;;;;;;;3694:25:9;;;3750:2;3735:18;;3728:34;;;;3667:18;2840:24:1;3520:248:9;7319:367:1;;;;;;;;;;-1:-1:-1;7319:367:1;;;;;:::i;:::-;;:::i;5204:118::-;;;;;;;;;;-1:-1:-1;5204:118:1;;;;;:::i;:::-;-1:-1:-1;;;;;5298:16:1;5269:4;5298:16;;;:8;:16;;;;;;;5204:118;1817:101:8;;;;;;;;;;;;;:::i;8013:376:1:-;;;;;;;;;;-1:-1:-1;8013:376:1;;;;;:::i;:::-;;:::i;14548:222::-;;;;;;;;;;-1:-1:-1;14548:222:1;;;;;:::i;:::-;;:::i;6179:130::-;;;;;;;;;;-1:-1:-1;6179:130:1;;;;;:::i;:::-;;:::i;6755:162::-;;;;;;;;;;;;;:::i;1194:85:8:-;;;;;;;;;;-1:-1:-1;1240:7:8;1266:6;-1:-1:-1;;;;;1266:6:8;1194:85;;1597:32:1;;;;;;;;;;;;;:::i;2817:16::-;;;;;;;;;;-1:-1:-1;2817:16:1;;;;;;;;;;;;;;;;5556:25:9;;;5612:2;5597:18;;5590:34;;;;5640:18;;;5633:34;5544:2;5529:18;2817:16:1;5354:319:9;9306:188:1;;;;;;;;;;-1:-1:-1;9306:188:1;;;;;:::i;:::-;;:::i;8397:554::-;;;;;;;;;;-1:-1:-1;8397:554:1;;;;;:::i;:::-;;:::i;10021:169::-;;;;;;;;;;-1:-1:-1;10021:169:1;;;;;:::i;:::-;;:::i;6925:87::-;;;;;;;;;;;;;:::i;5633:115::-;;;;;;;;;;-1:-1:-1;5633:115:1;;;;;:::i;:::-;-1:-1:-1;;;;;5721:19:1;5692:4;5721:19;;;:11;:19;;;;;;;;;5633:115;8959:161;;;;;;;;;;-1:-1:-1;8959:161:1;;;;;:::i;:::-;;:::i;7121:190::-;;;;;;;;;;;;;:::i;6317:204::-;;;;;;;;;;-1:-1:-1;6317:204:1;;;;;:::i;:::-;;:::i;7694:311::-;;;;;;;;;;-1:-1:-1;7694:311:1;;;;;:::i;:::-;;:::i;6033:138::-;;;;;;;;;;-1:-1:-1;6033:138:1;;;;;:::i;:::-;;:::i;3058:37::-;;;;;;;;;;-1:-1:-1;3058:37:1;;;;;;;;;;;7020:93;;;;;;;;;;;;;:::i;5330:144::-;;;;;;;;;;-1:-1:-1;5330:144:1;;;;;:::i;:::-;-1:-1:-1;;;;;5440:17:1;;;5411:4;5440:17;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;5330:144;2871:32;;;;;;;;;;-1:-1:-1;2871:32:1;;;;;;-1:-1:-1;;;;;2871:32:1;;;;;;;;;;;-1:-1:-1;;;;;6900:15:9;;;6882:34;;6952:15;;;;6947:2;6932:18;;6925:43;6817:18;2871:32:1;6638:336:9;9128:170:1;;;;;;;;;;-1:-1:-1;9128:170:1;;;;;:::i;:::-;;:::i;1957:22::-;;;;;;;;;;-1:-1:-1;1957:22:1;;;;-1:-1:-1;;;;;1957:22:1;;;2067:198:8;;;;;;;;;;-1:-1:-1;2067:198:8;;;;;:::i;:::-;;:::i;14778:258:1:-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;14905:23:1;::::1;14897:72;;;;-1:-1:-1::0;;;14897:72:1::1;;;;;;;:::i;:::-;;;;;;;;;14980:48;::::0;-1:-1:-1;;;14980:48:1;;-1:-1:-1;;;;;7576:32:9;;;14980:48:1::1;::::0;::::1;7558:51:9::0;7625:18;;;7618:34;;;14980:29:1;::::1;::::0;::::1;::::0;7531:18:9;;14980:48:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14778:258:::0;;;:::o;1560:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9502:163::-;9574:4;9596:39;719:10:2;9619:7:1;9628:6;9596:8;:39::i;:::-;-1:-1:-1;9653:4:1;9502:163;;;;;:::o;5756:128::-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;5848:19:1;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;5848:28:1::1;::::0;::::1;;::::0;;;::::1;::::0;;5756:128::o;10198:295::-;-1:-1:-1;;;;;10319:18:1;;10293:4;10319:18;;;:10;:18;;;;;;;;719:10:2;10319:32:1;;;;;;;;-1:-1:-1;;10319:53:1;10315:114;;-1:-1:-1;;;;;10387:18:1;;;;;;:10;:18;;;;;;;;719:10:2;10387:32:1;;;;;;;:42;;10423:6;;10387:18;:42;;10423:6;;10387:42;:::i;:::-;;;;-1:-1:-1;;10315:114:1;10449:36;10459:6;10467:9;10478:6;10449:9;:36::i;:::-;10442:43;;10198:295;;;;;;:::o;5482:143::-;5298:8;:16;;;;5535:4;5298:16;;;;;5564:11;;5535:4;;5298:16;5564:35;;5298:16;5564:35;:::i;:::-;:53;;;;:::i;:::-;5557:60;;5482:143;:::o;5892:133::-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;5984:24:1;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;5984:33:1::1;::::0;::::1;;::::0;;;::::1;::::0;;5892:133::o;6529:218::-;1087:13:8;:11;:13::i;:::-;6629:5:1::1;6615:11;;:19;;;;:::i;:::-;6606:5;:28;;6598:111;;;::::0;-1:-1:-1;;;6598:111:1;;8987:2:9;6598:111:1::1;::::0;::::1;8969:21:9::0;9026:2;9006:18;;;8999:30;9065:34;9045:18;;;9038:62;9136:34;9116:18;;;9109:62;-1:-1:-1;;;9187:19:9;;;9180:37;9234:19;;6598:111:1::1;8785:474:9::0;6598:111:1::1;6722:9;:17:::0;6529:218::o;7319:367::-;1087:13:8;:11;:13::i;:::-;7424:19:1::1;::::0;::::1;::::0;::::1;;;7423:20;7415:80;;;::::0;-1:-1:-1;;;7415:80:1;;9466:2:9;7415:80:1::1;::::0;::::1;9448:21:9::0;9505:2;9485:18;;;9478:30;9544:34;9524:18;;;9517:62;-1:-1:-1;;;9595:18:9;;;9588:45;9650:19;;7415:80:1::1;9264:411:9::0;7415:80:1::1;7532:3;7514:7;:14;:21;;7506:72;;;::::0;-1:-1:-1;;;7506:72:1;;9882:2:9;7506:72:1::1;::::0;::::1;9864:21:9::0;9921:2;9901:18;;;9894:30;9960:34;9940:18;;;9933:62;-1:-1:-1;;;10011:18:9;;;10004:36;10057:19;;7506:72:1::1;9680:402:9::0;7506:72:1::1;7596:6;7591:87;7612:7;:14;7608:1;:18;7591:87;;;7672:6;7646:11;:23;7658:7;7666:1;7658:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;7646:23:1::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;7646:23:1;:32;;-1:-1:-1;;7646:32:1::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;7628:3:1::1;7591:87;;;;7319:367:::0;;:::o;1817:101:8:-;1087:13;:11;:13::i;:::-;1881:30:::1;1908:1;1881:18;:30::i;:::-;1817:101::o:0;8013:376:1:-;1087:13:8;:11;:13::i;:::-;8124:5:1::1;8111:9;:18;;:42;;;;;8148:5;8133:11;:20;;8111:42;8103:93;;;::::0;-1:-1:-1;;;8103:93:1;;10421:2:9;8103:93:1::1;::::0;::::1;10403:21:9::0;10460:2;10440:18;;;10433:30;10499:34;10479:18;;;10472:62;-1:-1:-1;;;10550:18:9;;;10543:36;10596:19;;8103:93:1::1;10219:402:9::0;8103:93:1::1;8242:5;8215:23;8227:11:::0;8215:9;:23:::1;:::i;:::-;:32;;8207:86;;;::::0;-1:-1:-1;;;8207:86:1;;10958:2:9;8207:86:1::1;::::0;::::1;10940:21:9::0;10997:2;10977:18;;;10970:30;11036:34;11016:18;;;11009:62;-1:-1:-1;;;11087:18:9;;;11080:39;11136:19;;8207:86:1::1;10756:405:9::0;8207:86:1::1;8306:8;:30:::0;;;;8347:20;:34;8013:376::o;14548:222::-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;14652:23:1;::::1;14644:72;;;;-1:-1:-1::0;;;14644:72:1::1;;;;;;;:::i;:::-;14727:35;::::0;-1:-1:-1;;;;;14727:27:1;::::1;::::0;:35;::::1;;;::::0;14755:6;;14727:35:::1;::::0;;;14755:6;14727:27;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;6179:130:::0;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;6272:20:1;;;::::1;;::::0;;;:12:::1;:20;::::0;;;;:29;;-1:-1:-1;;6272:29:1::1;::::0;::::1;;::::0;;;::::1;::::0;;6179:130::o;6755:162::-;1087:13:8;:11;:13::i;:::-;6824:14:1::1;::::0;::::1;;6823:15;6815:62;;;::::0;-1:-1:-1;;;6815:62:1;;11368:2:9;6815:62:1::1;::::0;::::1;11350:21:9::0;11407:2;11387:18;;;11380:30;11446:34;11426:18;;;11419:62;-1:-1:-1;;;11497:18:9;;;11490:32;11539:19;;6815:62:1::1;11166:398:9::0;6815:62:1::1;6888:14;:21:::0;;-1:-1:-1;;6888:21:1::1;6905:4;6888:21;::::0;;6755:162::o;1597:32::-;;;;;;;:::i;9306:188::-;1087:13:8;:11;:13::i;:::-;9394:25:1::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;9394:34:1;;::::1;;::::0;;9444:42:::1;::::0;::::1;::::0;::::1;::::0;9422:6;2231:14:9;2224:22;2206:41;;2194:2;2179:18;;2066:187;9444:42:1::1;;;;;;;;9306:188:::0;:::o;8397:554::-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;8505:23:1;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;8532:25:1;::::1;::::0;::::1;8505:52;8497:110;;;::::0;-1:-1:-1;;;8497:110:1;;11771:2:9;8497:110:1::1;::::0;::::1;11753:21:9::0;11810:2;11790:18;;;11783:30;11849:34;11829:18;;;11822:62;-1:-1:-1;;;11900:18:9;;;11893:43;11953:19;;8497:110:1::1;11569:409:9::0;8497:110:1::1;8632:12;:22:::0;;-1:-1:-1;;;;;8632:22:1;;::::1;8658:5;8620:35:::0;;;:11:::1;:35;::::0;;;;;:43;;-1:-1:-1;;8620:43:1;;::::1;::::0;;;8686:24;;;;::::1;8674:37:::0;;;;;:45;;;::::1;::::0;;8732:43;;;;::::1;-1:-1:-1::0;;;;;;8732:43:1;;::::1;::::0;::::1;::::0;;;8786:47;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;8846:35;;;;;;:42;;;::::1;8632:22:::0;8846:42;;::::1;::::0;;;8911:24;;;;::::1;8899:37:::0;;;:44;;;;::::1;::::0;;::::1;::::0;;8397:554::o;10021:169::-;10096:4;10118:42;719:10:2;10142:9:1;10153:6;10118:9;:42::i;:::-;-1:-1:-1;10178:4:1;;10021:169;-1:-1:-1;;;10021:169:1:o;6925:87::-;1087:13:8;:11;:13::i;:::-;6993:11:1::1;::::0;6984:6:::1;:20:::0;6925:87::o;8959:161::-;1087:13:8;:11;:13::i;:::-;9049:16:1::1;:26:::0;;;;9086:16:::1;:26:::0;8959:161::o;7121:190::-;1087:13:8;:11;:13::i;:::-;7198:19:1::1;::::0;::::1;::::0;::::1;;;7197:20;7189:77;;;::::0;-1:-1:-1;;;7189:77:1;;12185:2:9;7189:77:1::1;::::0;::::1;12167:21:9::0;12224:2;12204:18;;;12197:30;12263:34;12243:18;;;12236:62;-1:-1:-1;;;12314:18:9;;;12307:42;12366:19;;7189:77:1::1;11983:408:9::0;7189:77:1::1;7277:19;:26:::0;;-1:-1:-1;;7277:26:1::1;;;::::0;;7121:190::o;6317:204::-;1087:13:8;:11;:13::i;:::-;6414:5:1::1;6400:11;;:19;;;;:::i;:::-;6391:5;:28;;6383:103;;;::::0;-1:-1:-1;;;6383:103:1;;12598:2:9;6383:103:1::1;::::0;::::1;12580:21:9::0;12637:2;12617:18;;;12610:30;12676:34;12656:18;;;12649:62;12747:32;12727:18;;;12720:60;12797:19;;6383:103:1::1;12396:426:9::0;6383:103:1::1;6499:6;:14:::0;6317:204::o;7694:311::-;1087:13:8;:11;:13::i;:::-;7806:4:1::1;7797:5;:13;;:31;;;;;7824:4;7814:6;:14;;7797:31;:54;;;;;7847:4;7832:11;:19;;7797:54;7789:105;;;::::0;-1:-1:-1;;;7789:105:1;;13029:2:9;7789:105:1::1;::::0;::::1;13011:21:9::0;13068:2;13048:18;;;13041:30;13107:34;13087:18;;;13080:62;-1:-1:-1;;;13158:18:9;;;13151:36;13204:19;;7789:105:1::1;12827:402:9::0;7789:105:1::1;7907:4;:18:::0;;;;7936:11;:20;7967:16;:30;7694:311::o;6033:138::-;1087:13:8;:11;:13::i;:::-;-1:-1:-1;;;;;6127:27:1;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;6127:36:1::1;::::0;::::1;;::::0;;;::::1;::::0;;6033:138::o;7020:93::-;1087:13:8;:11;:13::i;:::-;7094:11:1::1;::::0;7082:9:::1;:23:::0;7020:93::o;9128:170::-;1087:13:8;:11;:13::i;:::-;9209:21:1::1;:30:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;9209:30:1;;::::1;;::::0;;9255:35:::1;::::0;::::1;::::0;::::1;::::0;9233:6;2231:14:9;2224:22;2206:41;;2194:2;2179:18;;2066:187;2067:198:8;1087:13;:11;:13::i;:::-;-1:-1:-1;;;;;2155:22:8;::::1;2147:73;;;::::0;-1:-1:-1;;;2147:73:8;;13436:2:9;2147:73:8::1;::::0;::::1;13418:21:9::0;13475:2;13455:18;;;13448:30;13514:34;13494:18;;;13487:62;-1:-1:-1;;;13565:18:9;;;13558:36;13611:19;;2147:73:8::1;13234:402:9::0;2147:73:8::1;2230:28;2249:8;2230:18;:28::i;:::-;2067:198:::0;:::o;1352:130::-;1240:7;1266:6;-1:-1:-1;;;;;1266:6:8;719:10:2;1415:23:8;1407:68;;;;-1:-1:-1;;;1407:68:8;;13843:2:9;1407:68:8;;;13825:21:9;;;13862:18;;;13855:30;13921:34;13901:18;;;13894:62;13973:18;;1407:68:8;13641:356:9;9673:340:1;-1:-1:-1;;;;;9768:19:1;;9760:69;;;;-1:-1:-1;;;9760:69:1;;14204:2:9;9760:69:1;;;14186:21:9;14243:2;14223:18;;;14216:30;14282:34;14262:18;;;14255:62;-1:-1:-1;;;14333:18:9;;;14326:35;14378:19;;9760:69:1;14002:401:9;9760:69:1;-1:-1:-1;;;;;9848:21:1;;9840:69;;;;-1:-1:-1;;;9840:69:1;;14610:2:9;9840:69:1;;;14592:21:9;14649:2;14629:18;;;14622:30;14688:34;14668:18;;;14661:62;-1:-1:-1;;;14739:18:9;;;14732:33;14782:19;;9840:69:1;14408:399:9;9840:69:1;-1:-1:-1;;;;;9922:17:1;;;;;;;:10;:17;;;;;;;;:26;;;;;;;;;;;;;:35;;;9973:32;;2404:25:9;;;9973:32:1;;2377:18:9;9973:32:1;;;;;;;9673:340;;;:::o;10739:2180::-;10823:4;-1:-1:-1;;;;;10853:20:1;;10845:71;;;;-1:-1:-1;;;10845:71:1;;15014:2:9;10845:71:1;;;14996:21:9;15053:2;15033:18;;;15026:30;15092:34;15072:18;;;15065:62;-1:-1:-1;;;15143:18:9;;;15136:36;15189:19;;10845:71:1;14812:402:9;10845:71:1;-1:-1:-1;;;;;10935:23:1;;10927:72;;;;-1:-1:-1;;;10927:72:1;;15421:2:9;10927:72:1;;;15403:21:9;15460:2;15440:18;;;15433:30;15499:34;15479:18;;;15472:62;-1:-1:-1;;;15550:18:9;;;15543:34;15594:19;;10927:72:1;15219:400:9;10927:72:1;-1:-1:-1;;;;;11019:22:1;;;;;;:11;:22;;;;;;;;11018:23;:47;;;;-1:-1:-1;;;;;;11046:19:1;;;;;;:11;:19;;;;;;;;11045:20;11018:47;11010:95;;;;-1:-1:-1;;;11010:95:1;;15826:2:9;11010:95:1;;;15808:21:9;15865:2;15845:18;;;15838:30;15904:34;15884:18;;;15877:62;-1:-1:-1;;;15955:18:9;;;15948:33;15998:19;;11010:95:1;15624:399:9;11010:95:1;11122:16;;;;;;;11118:1794;;;-1:-1:-1;;;;;11224:16:1;;;;;;:8;:16;;;;;;11214:26;;;11206:67;;;;-1:-1:-1;;;11206:67:1;;16230:2:9;11206:67:1;;;16212:21:9;16269:2;16249:18;;;16242:30;16308;16288:18;;;16281:58;16356:18;;11206:67:1;16028:352:9;11206:67:1;-1:-1:-1;;;;;11292:16:1;;;;;;;:8;:16;;;;;;:26;;;;;;;11350:19;;;;;;;;:29;;11312:6;;11292:16;11350:29;;11312:6;;11350:29;:::i;:::-;;;;;;;;11418:9;-1:-1:-1;;;;;11401:35:1;11410:6;-1:-1:-1;;;;;11401:35:1;;11429:6;11401:35;;;;2404:25:9;;2392:2;2377:18;;2258:177;11401:35:1;;;;;;;;-1:-1:-1;11458:4:1;11451:11;;11118:1794;-1:-1:-1;;;;;11518:19:1;;;;;;:11;:19;;;;;;;;11517:20;:47;;;;-1:-1:-1;;;;;;11542:22:1;;;;;;:11;:22;;;;;;;;11541:23;11517:47;11513:137;;;11591:14;;;;11583:67;;;;-1:-1:-1;;;11583:67:1;;16587:2:9;11583:67:1;;;16569:21:9;16626:2;16606:18;;;16599:30;16665:34;16645:18;;;16638:62;-1:-1:-1;;;16716:18:9;;;16709:38;16764:19;;11583:67:1;16385:404:9;11583:67:1;-1:-1:-1;;;;;11672:24:1;;;;;;:16;:24;;;;;;;;11671:25;:57;;;;-1:-1:-1;;;;;;11701:27:1;;;;;;:16;:27;;;;;;;;11700:28;11671:57;11667:151;;;11765:6;;11755;:16;;11747:71;;;;-1:-1:-1;;;11747:71:1;;16996:2:9;11747:71:1;;;16978:21:9;17035:2;17015:18;;;17008:30;17074:34;17054:18;;;17047:62;-1:-1:-1;;;17125:18:9;;;17118:40;17175:19;;11747:71:1;16794:406:9;11747:71:1;11881:4;11835:25;5298:16;;;:8;:16;;;;;;11907;;;;;;;11906:17;:42;;;;-1:-1:-1;11927:21:1;;;;;;;11906:42;:67;;;;-1:-1:-1;;;;;;11953:20:1;;;;;;:12;:20;;;;;;;;11952:21;11906:67;:111;;;;;12001:16;;11977:20;:40;;11906:111;11902:353;;;12055:25;;;;;;;12051:131;;;12126:56;12130:6;12138:43;12142:20;12164:16;;12138:3;:43::i;:::-;12126:3;:56::i;:::-;12103:79;;12051:131;12203:36;12218:20;12203:14;:36::i;:::-;-1:-1:-1;;;;;12331:16:1;;;;;;:8;:16;;;;;;12321:26;;;12313:67;;;;-1:-1:-1;;;12313:67:1;;16230:2:9;12313:67:1;;;16212:21:9;16269:2;16249:18;;;16242:30;16308;16288:18;;;16281:58;16356:18;;12313:67:1;16028:352:9;12313:67:1;-1:-1:-1;;;;;12399:16:1;;;;;;:8;:16;;;;;;;;:26;;;;;;;12477:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;12500:22:1;;;;;;:11;:22;;;;;;;;12477:45;12476:93;;12535:34;12543:6;12551:9;12562:6;12535:7;:34::i;:::-;12476:93;;;12526:6;12476:93;-1:-1:-1;;;;;12591:30:1;;;;;;:19;:30;;;;;;12457:112;;-1:-1:-1;12591:30:1;;12586:175;;12686:9;;12671:11;12648:20;12658:9;-1:-1:-1;;;;;5298:16:1;5269:4;5298:16;;;:8;:16;;;;;;;5204:118;12648:20;:34;;;;:::i;:::-;:47;;12640:121;;;;-1:-1:-1;;;12640:121:1;;17407:2:9;12640:121:1;;;17389:21:9;17446:2;17426:18;;;17419:30;17485:34;17465:18;;;17458:62;17556:31;17536:18;;;17529:59;17605:19;;12640:121:1;17205:425:9;12640:121:1;-1:-1:-1;;;;;12778:19:1;;;;;;:8;:19;;;;;:34;;12801:11;;12778:19;:34;;12801:11;;12778:34;:::i;:::-;;;;;;;;12851:9;-1:-1:-1;;;;;12834:40:1;12843:6;-1:-1:-1;;;;;12834:40:1;;12862:11;12834:40;;;;2404:25:9;;2392:2;2377:18;;2258:177;12834:40:1;;;;;;;;12896:4;12889:11;;;;;;2419:187:8;2492:16;2511:6;;-1:-1:-1;;;;;2527:17:8;;;-1:-1:-1;;;;;;2527:17:8;;;;;;2559:40;;2511:6;;;;;;;2559:40;;2492:16;2559:40;2482:124;2419:187;:::o;15044:104:1:-;15095:4;15130:1;15125;:6;;15124:16;;15139:1;15124:16;;;-1:-1:-1;15135:1:1;15117:23;-1:-1:-1;15044:104:1:o;12927:557::-;3316:16;:23;;-1:-1:-1;;3316:23:1;;;;;13000:24:::1;13017:6:::0;13000:16:::1;:24::i;:::-;13132:8;:18:::0;13057:21:::1;::::0;13035:19:::1;::::0;13154:5:::1;::::0;13115:35:::1;::::0;13057:21;13115:35:::1;:::i;:::-;13114:45;;;;:::i;:::-;13091:68;;13170:22;13237:5;13213:8;:20;;;13196:14;:37;;;;:::i;:::-;13195:47;;;;:::i;:::-;13170:72:::0;-1:-1:-1;13259:19:1;;13255:102:::1;;13317:12;:22:::0;13293:64:::1;::::0;-1:-1:-1;;;;;13317:22:1::1;13341:15:::0;13293:23:::1;:64::i;:::-;13372:21:::0;;13368:108:::1;;13432:24:::0;;13408:68:::1;::::0;-1:-1:-1;;;;;13432:24:1::1;13458:17:::0;13408:23:::1;:68::i;:::-;-1:-1:-1::0;;3362:16:1;:24;;-1:-1:-1;;3362:24:1;;;-1:-1:-1;;12927:557:1:o;13937:603::-;-1:-1:-1;;;;;14077:20:1;;14020:4;14077:20;;;:12;:20;;;;;;14020:4;;14077:20;;14073:256;;;14134:4;:10;14148:5;;14125:19;;:6;:19;:::i;:::-;14124:29;;;;:::i;:::-;14112:41;;14073:256;;;-1:-1:-1;;;;;14173:23:1;;;;;;:12;:23;;;;;;;;14169:160;;;14233:11;;14248:5;;14224:20;;:6;:20;:::i;14169:160::-;14304:16;;14324:5;;14295:25;;:6;:25;:::i;:::-;14294:35;;;;:::i;:::-;14282:47;;14169:160;14346:13;;14342:153;;14402:4;14385:23;;;;:8;:23;;;;;:36;;14412:9;;14385:23;:36;;14412:9;;14385:36;:::i;:::-;;;;-1:-1:-1;;14441:42:1;;2404:25:9;;;14466:4:1;;-1:-1:-1;;;;;14441:42:1;;;;;2392:2:9;2377:18;14441:42:1;;;;;;;14342:153;14514:18;14523:9;14514:6;:18;:::i;:::-;14507:25;13937:603;-1:-1:-1;;;;;13937:603:1:o;13492:437::-;13579:16;;;13593:1;13579:16;;;;;;;;13555:21;;13579:16;;;;;;;;;;-1:-1:-1;13579:16:1;13555:40;;13624:4;13606;13611:1;13606:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13606:23:1;;;:7;;;;;;;;;;:23;;;;13650:9;;:16;;;-1:-1:-1;;;13650:16:1;;;;:9;;;;;:14;;:16;;;;;13606:7;;13650:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13640:4;13645:1;13640:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13640:26:1;;;:7;;;;;;;;;:26;13683:9;;:109;;-1:-1:-1;;;13683:109:1;;:9;;;:60;;:109;;13744:6;;13683:9;;13755:4;;13769;;13776:15;;13683:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13679:243;;13904:7;13492:437;:::o;13679:243::-;13822:30;13839:6;13847:4;13822:30;;;;;;;:::i;:::-;;;;;;;;13544:385;13492:437;:::o;10501:230::-;-1:-1:-1;;;;;10606:23:1;;10598:77;;;;-1:-1:-1;;;10598:77:1;;19660:2:9;10598:77:1;;;19642:21:9;19699:2;19679:18;;;19672:30;19738:34;19718:18;;;19711:62;-1:-1:-1;;;19789:18:9;;;19782:39;19838:19;;10598:77:1;19458:405:9;10598:77:1;10688:35;;-1:-1:-1;;;;;10688:14:1;;;10711:6;;10688:35;;;;10711:6;10688:14;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10501:230;;:::o;222:131:9:-;-1:-1:-1;;;;;297:31:9;;287:42;;277:70;;343:1;340;333:12;358:134;426:20;;455:31;426:20;455:31;:::i;:::-;358:134;;;:::o;497:456::-;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;698:9;685:23;717:31;742:5;717:31;:::i;:::-;767:5;-1:-1:-1;824:2:9;809:18;;796:32;837:33;796:32;837:33;:::i;:::-;497:456;;889:7;;-1:-1:-1;;;943:2:9;928:18;;;;915:32;;497:456::o;958:548::-;1070:4;1099:2;1128;1117:9;1110:21;1160:6;1154:13;1203:6;1198:2;1187:9;1183:18;1176:34;1228:1;1238:140;1252:6;1249:1;1246:13;1238:140;;;1347:14;;;1343:23;;1337:30;1313:17;;;1332:2;1309:26;1302:66;1267:10;;1238:140;;;1242:3;1427:1;1422:2;1413:6;1402:9;1398:22;1394:31;1387:42;1497:2;1490;1486:7;1481:2;1473:6;1469:15;1465:29;1454:9;1450:45;1446:54;1438:62;;;;958:548;;;;:::o;1746:315::-;1814:6;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;2051:2;2036:18;;;;2023:32;;-1:-1:-1;;;1746:315:9:o;2440:118::-;2526:5;2519:13;2512:21;2505:5;2502:32;2492:60;;2548:1;2545;2538:12;2563:128;2628:20;;2657:28;2628:20;2657:28;:::i;2696:382::-;2761:6;2769;2822:2;2810:9;2801:7;2797:23;2793:32;2790:52;;;2838:1;2835;2828:12;2790:52;2877:9;2864:23;2896:31;2921:5;2896:31;:::i;:::-;2946:5;-1:-1:-1;3003:2:9;2988:18;;2975:32;3016:30;2975:32;3016:30;:::i;:::-;3065:7;3055:17;;;2696:382;;;;;:::o;3083:247::-;3142:6;3195:2;3183:9;3174:7;3170:23;3166:32;3163:52;;;3211:1;3208;3201:12;3163:52;3250:9;3237:23;3269:31;3294:5;3269:31;:::i;3335:180::-;3394:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:52;;;3463:1;3460;3453:12;3415:52;-1:-1:-1;3486:23:9;;3335:180;-1:-1:-1;3335:180:9:o;3773:127::-;3834:10;3829:3;3825:20;3822:1;3815:31;3865:4;3862:1;3855:15;3889:4;3886:1;3879:15;3905:1191;3995:6;4003;4056:2;4044:9;4035:7;4031:23;4027:32;4024:52;;;4072:1;4069;4062:12;4024:52;4112:9;4099:23;4141:18;4182:2;4174:6;4171:14;4168:34;;;4198:1;4195;4188:12;4168:34;4236:6;4225:9;4221:22;4211:32;;4281:7;4274:4;4270:2;4266:13;4262:27;4252:55;;4303:1;4300;4293:12;4252:55;4339:2;4326:16;4361:4;4384:2;4380;4377:10;4374:36;;;4390:18;;:::i;:::-;4436:2;4433:1;4429:10;4468:2;4462:9;4531:2;4527:7;4522:2;4518;4514:11;4510:25;4502:6;4498:38;4586:6;4574:10;4571:22;4566:2;4554:10;4551:18;4548:46;4545:72;;;4597:18;;:::i;:::-;4633:2;4626:22;4683:18;;;4717:15;;;;-1:-1:-1;4759:11:9;;;4755:20;;;4787:19;;;4784:39;;;4819:1;4816;4809:12;4784:39;4843:11;;;;4863:148;4879:6;4874:3;4871:15;4863:148;;;4945:23;4964:3;4945:23;:::i;:::-;4933:36;;4896:12;;;;4989;;;;4863:148;;;5030:6;-1:-1:-1;5055:35:9;;-1:-1:-1;5071:18:9;;;5055:35;:::i;:::-;5045:45;;;;;;3905:1191;;;;;:::o;5101:248::-;5169:6;5177;5230:2;5218:9;5209:7;5205:23;5201:32;5198:52;;;5246:1;5243;5236:12;5198:52;-1:-1:-1;;5269:23:9;;;5339:2;5324:18;;;5311:32;;-1:-1:-1;5101:248:9:o;5678:241::-;5734:6;5787:2;5775:9;5766:7;5762:23;5758:32;5755:52;;;5803:1;5800;5793:12;5755:52;5842:9;5829:23;5861:28;5883:5;5861:28;:::i;5924:388::-;5992:6;6000;6053:2;6041:9;6032:7;6028:23;6024:32;6021:52;;;6069:1;6066;6059:12;6021:52;6108:9;6095:23;6127:31;6152:5;6127:31;:::i;:::-;6177:5;-1:-1:-1;6234:2:9;6219:18;;6206:32;6247:33;6206:32;6247:33;:::i;6317:316::-;6394:6;6402;6410;6463:2;6451:9;6442:7;6438:23;6434:32;6431:52;;;6479:1;6476;6469:12;6431:52;-1:-1:-1;;6502:23:9;;;6572:2;6557:18;;6544:32;;-1:-1:-1;6623:2:9;6608:18;;;6595:32;;6317:316;-1:-1:-1;6317:316:9:o;6979:400::-;7181:2;7163:21;;;7220:2;7200:18;;;7193:30;7259:34;7254:2;7239:18;;7232:62;-1:-1:-1;;;7325:2:9;7310:18;;7303:34;7369:3;7354:19;;6979:400::o;7663:245::-;7730:6;7783:2;7771:9;7762:7;7758:23;7754:32;7751:52;;;7799:1;7796;7789:12;7751:52;7831:9;7825:16;7850:28;7872:5;7850:28;:::i;7913:380::-;7992:1;7988:12;;;;8035;;;8056:61;;8110:4;8102:6;8098:17;8088:27;;8056:61;8163:2;8155:6;8152:14;8132:18;8129:38;8126:161;;8209:10;8204:3;8200:20;8197:1;8190:31;8244:4;8241:1;8234:15;8272:4;8269:1;8262:15;8298:127;8359:10;8354:3;8350:20;8347:1;8340:31;8390:4;8387:1;8380:15;8414:4;8411:1;8404:15;8430:128;8497:9;;;8518:11;;;8515:37;;;8532:18;;:::i;8563:217::-;8603:1;8629;8619:132;;8673:10;8668:3;8664:20;8661:1;8654:31;8708:4;8705:1;8698:15;8736:4;8733:1;8726:15;8619:132;-1:-1:-1;8765:9:9;;8563:217::o;10087:127::-;10148:10;10143:3;10139:20;10136:1;10129:31;10179:4;10176:1;10169:15;10203:4;10200:1;10193:15;10626:125;10691:9;;;10712:10;;;10709:36;;;10725:18;;:::i;17635:168::-;17708:9;;;17739;;17756:15;;;17750:22;;17736:37;17726:71;;17777:18;;:::i;17808:251::-;17878:6;17931:2;17919:9;17910:7;17906:23;17902:32;17899:52;;;17947:1;17944;17937:12;17899:52;17979:9;17973:16;17998:31;18023:5;17998:31;:::i;18064:465::-;18117:3;18155:5;18149:12;18182:6;18177:3;18170:19;18208:4;18237;18232:3;18228:14;18221:21;;18276:4;18269:5;18265:16;18299:1;18309:195;18323:6;18320:1;18317:13;18309:195;;;18388:13;;-1:-1:-1;;;;;18384:39:9;18372:52;;18444:12;;;;18479:15;;;;18420:1;18338:9;18309:195;;;-1:-1:-1;18520:3:9;;18064:465;-1:-1:-1;;;;;18064:465:9:o;18534:582::-;18833:6;18822:9;18815:25;18876:6;18871:2;18860:9;18856:18;18849:34;18919:3;18914:2;18903:9;18899:18;18892:31;18796:4;18940:57;18992:3;18981:9;18977:19;18969:6;18940:57;:::i;:::-;-1:-1:-1;;;;;19033:32:9;;;;19028:2;19013:18;;19006:60;-1:-1:-1;19097:3:9;19082:19;19075:35;18932:65;18534:582;-1:-1:-1;;;18534:582:9:o;19121:332::-;19328:6;19317:9;19310:25;19371:2;19366;19355:9;19351:18;19344:30;19291:4;19391:56;19443:2;19432:9;19428:18;19420:6;19391:56;:::i

Swarm Source

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