ETH Price: $3,018.20 (+4.54%)
Gas: 2 Gwei

Token

⚪️⚪️⚪️⚪️⚪️ (KARATE)
 

Overview

Max Total Supply

100,000,000 KARATE

Holders

140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
141,181.187500809 KARATE

Value
$0.00
0xdd01dcfa33bbe5a2f212cfccdc7c635abff85fea
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:
KARATE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**

----------------------------  Social Links  ----------------------------

Telegram:  https://t.me/KarateToken

Website:   https://www.karate.finance

Docs:      https://docs.karate.finance

Twitter:   https://www.karate.finance/twitter/

----------------------------  $KARATE Info  ----------------------------

🥋  $KARATE is powered by a brand new smart contract.

⛩️  There are three rules in the dojo:

1️⃣  The token name updates depending on the current market cap.

    Example:  If the market cap rises from $9,000 to $11,000,
              the token name will update from "⚪️⚪️⚪️⚪️⚪️" to "🟡🟡🟡🟡🟡".

2️⃣  The current belt color updates depending on the current market cap.

    Example:  If the market cap is $25,000, the current belt
              color will be Orange (🟠🟠🟠🟠🟠).

3️⃣  If you buy in at a lower belt color than the current belt color, you keep the original sell tax.

    Example:  If a wallet purchases $KARATE at a $45,000 market
              cap, their wallet's sell tax would never exceed the
              Blue belt sell tax of 4%, even if they sold tokens.

💡  Each belt color has slightly different milestones and taxes:

    ⚪️⚪️⚪️⚪️⚪️

    $0 MC: White Belt

    Buy Tax: 9%
    Sell Tax: 0%

    🟡🟡🟡🟡🟡

    $10,000 MC: Yellow Belt

    Buy Tax: 8%
    Sell Tax: 1%

    🟠🟠🟠🟠🟠

    $20,000 MC: Orange Belt

    Buy Tax: 7%
    Sell Tax: 2%

    🟢🟢🟢🟢🟢

    $30,000 MC: Green Belt

    Buy Tax: 6%
    Sell Tax: 3%

    🔵🔵🔵🔵🔵

    $40,000 MC: Blue Belt

    Buy Tax: 5%
    Sell Tax: 4%

    🟣🟣🟣🟣🟣

    $70,000 MC: Purple Belt

    Buy Tax: 4%
    Sell Tax: 5%

    🔴🔴🔴🔴🔴

    $100,000 MC: Red Belt

    Buy Tax: 3%
    Sell Tax: 6%

    🟤🟤🟤🟤🟤

    $150,000 MC: Brown Belt

    Buy Tax: 2%
    Sell Tax: 7%

    ⚫️⚫️⚫️⚫️⚫️

    $250,000 MC: Black Belt

    Buy Tax: 1%
    Sell Tax: 8%

    🌈🌈🌈🌈🌈

    $400,000 MC: Rainbow Belt

    Buy Tax: 0%
    Sell Tax: 9%

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.14;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  function getRoundData(
    uint80 _roundId
  ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);

  function latestRoundData()
    external
    view
    returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

contract KARATE is Context, IERC20, Ownable {

    mapping(uint256 => string) internal belts;

    mapping(uint256 => uint256) internal milestones;

    mapping(uint256 => uint256) internal buyTaxGlobal;
    mapping(uint256 => uint256) internal sellTaxGlobal;

    mapping(address => uint256) internal userBelt;
    mapping(address => bool) internal hasBelt;

    string private _name = unicode"⚪️⚪️⚪️⚪️⚪️";
    string private constant _symbol = "KARATE";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public constant maxBuyTax = 9;
    uint256 public constant maxSellTax = 9;
    uint256 private _taxFee = 9;

    address payable private _developerFund = payable(msg.sender);
    address payable private _marketingFund = payable(msg.sender);

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Factory public constant uniswapV2Factory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IERC20 public constant weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address public immutable KARATE;
    address public uniswapV2Pair;

    AggregatorV3Interface public constant priceFeedETHUSD = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);

    bool private tradingOpen;
    bool private inTaxSwap;
    bool private inContractSwap;

    uint256 public maxSwap = 2000000 * 10**9;
    uint256 public maxWallet = 2000000 * 10**9;
    uint256 private constant _triggerSwap = 10**9;

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

    constructor() {
        KARATE = address(this);
        uniswapV2Pair = uniswapV2Factory.createPair(KARATE, WETH);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[KARATE] = true;
        _isExcludedFromFee[_developerFund] = true;
        _isExcludedFromFee[_marketingFund] = true;
        _approve(KARATE, address(uniswapV2Router), MAX);
        _approve(owner(), address(uniswapV2Router), MAX);

        // ⚪️  White Belt: $0 MC
        belts[0] = unicode"⚪️⚪️⚪️⚪️⚪️";
        milestones[0] = 0;
        buyTaxGlobal[0] = 9;
        sellTaxGlobal[0] = 0;

        // 🟡  Yellow Belt: $10,000 MC
        belts[1] = unicode"🟡🟡🟡🟡🟡";
        milestones[1] = 10000;
        buyTaxGlobal[1] = 8;
        sellTaxGlobal[1] = 1;

        // 🟠  Orange Belt: $20,000 MC
        belts[2] = unicode"🟠🟠🟠🟠🟠";
        milestones[2] = 20000;
        buyTaxGlobal[2] = 7;
        sellTaxGlobal[2] = 2;

        // 🟢  Green Belt: $30,000 MC
        belts[3] = unicode"🟢🟢🟢🟢🟢";
        milestones[3] = 30000;
        buyTaxGlobal[3] = 6;
        sellTaxGlobal[3] = 3;

        // 🔵  Blue Belt: $40,000 MC
        belts[4] = unicode"🔵🔵🔵🔵🔵";
        milestones[4] = 40000;
        buyTaxGlobal[4] = 5;
        sellTaxGlobal[4] = 4;

        // 🟣  Purple Belt: $70,000 MC
        belts[5] = unicode"🟣🟣🟣🟣🟣";
        milestones[5] = 70000;
        buyTaxGlobal[5] = 4;
        sellTaxGlobal[5] = 5;

        // 🔴  Red Belt: $100,000 MC
        belts[6] = unicode"🔴🔴🔴🔴🔴";
        milestones[6] = 100000;
        buyTaxGlobal[6] = 3;
        sellTaxGlobal[6] = 6;

        // 🟤  Brown Belt: $150,000 MC
        belts[7] = unicode"🟤🟤🟤🟤🟤";
        milestones[7] = 150000;
        buyTaxGlobal[7] = 2;
        sellTaxGlobal[7] = 7;

        // ⚫️  Black Belt: $250,000 MC
        belts[8] = unicode"⚫️⚫️⚫️⚫️⚫️";
        milestones[8] = 250000;
        buyTaxGlobal[8] = 1;
        sellTaxGlobal[8] = 8;

        // 🌈  Rainbow Belt: $400,000 MC
        belts[9] = unicode"🌈🌈🌈🌈🌈";
        milestones[9] = 400000;
        buyTaxGlobal[9] = 0;
        sellTaxGlobal[9] = 9;

        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    receive() external payable {}

    function getETHUSDPrice() public view returns (uint256) {
        (
            ,
            int256 answer,
            ,
            ,
        ) = priceFeedETHUSD.latestRoundData();
        return uint256(answer / 1e8);
    }

    function getKARATEUSDMarketCap() public view returns (uint256) {
        uint256 poolValue = (weth.balanceOf(uniswapV2Pair) * getETHUSDPrice()) / 1e18;
        uint256 poolPct = totalSupply() / balanceOf(uniswapV2Pair);
        return (poolValue * poolPct) * 2;
    }

    function getETHUSDPriceFeed() external view returns (address) {
        return address(priceFeedETHUSD);
    }

    function getCurrentBelt() public view returns (uint256) {
        uint256 marketCap = getKARATEUSDMarketCap();
        uint256 currentBelt;
        for (uint256 i = 9; i >= 0; i--) {
            if (marketCap >= milestones[i]) {
                currentBelt = i;
                break;
            }
        }
        return currentBelt;
    }

    function getCurrentBeltColor() public view returns (string memory) {
        return belts[getCurrentBelt()];
    }

    function getNextBelt() public view returns (uint256) {
        uint256 currentBelt = getCurrentBelt();
        return currentBelt == 9 ? 9 : currentBelt + 1;
    }

    function getNextBeltColor() external view returns (string memory) {
        return belts[getNextBelt()];
    }

    function getGlobalMaxBuyTax() external view returns (uint256) {
        return maxBuyTax;
    }

    function getGlobalMaxSellTax() external view returns (uint256) {
        return maxSellTax;
    }

    function getGlobalBuyTax() public view returns (uint256) {
        uint256 globalBuyTax = 9 - getCurrentBelt();
        return globalBuyTax > maxBuyTax ? maxBuyTax : globalBuyTax;
    }

    function getGlobalSellTax() public view returns (uint256) {
        uint256 globalSellTax = getCurrentBelt();
        return globalSellTax > maxSellTax ? maxSellTax : globalSellTax;
    }

    function getWalletHasBelt(address _wallet) external view returns (bool) {
        return hasBelt[_wallet];
    }

    function getWalletBelt(address _wallet) public view returns (uint256) {
        return hasBelt[_wallet] ? userBelt[_wallet] : getCurrentBelt();
    }

    function getWalletBeltColor(address _wallet) external view returns (string memory) {
        return belts[getWalletBelt(_wallet)];
    }

    function getWalletSellTax(address _wallet) public view returns (uint256) {
        uint256 globalSellTax = getGlobalSellTax();
        if (hasBelt[_wallet]) {
            uint256 userBelt = userBelt[_wallet];
            return globalSellTax > userBelt ? userBelt : globalSellTax;
        }
        return globalSellTax;
    }

    function getWalletMaxSellTax(address _wallet) external view returns (uint256) {
        return hasBelt[_wallet] ? userBelt[_wallet] : maxSellTax;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        require(_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

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

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

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

    function _removeTax() private {
        if (_taxFee == 0) {
            return;
        }

        _taxFee = 0;
    }

    function _restoreTax() private {
        _taxFee = 9;
    }

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "TOKEN: Transfer amount must exceed zero");

        if (from != owner() && to != owner() && from != KARATE && to != KARATE) {
            if (!tradingOpen) {
                require(from == KARATE, "TOKEN: This account cannot send tokens until trading is enabled");
            }

            require(amount <= maxSwap, "TOKEN: Max Transaction Limit");

            if (to != uniswapV2Pair) {
                require(balanceOf(to) + amount < maxWallet, "TOKEN: Balance exceeds wallet size!");
            }

            uint256 contractTokenBalance = balanceOf(KARATE);
            bool canSwap = contractTokenBalance >= _triggerSwap;

            if (contractTokenBalance >= maxSwap) {
                contractTokenBalance = maxSwap;
            }

            if (canSwap && !inTaxSwap && from != uniswapV2Pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                inContractSwap = true;
                _swapKARATEForETH(contractTokenBalance);
                inContractSwap = false;
                if (KARATE.balance > 0) _sendETHToFee(KARATE.balance);
            }
        }

        bool takeFee = true;

        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _taxFee = getGlobalBuyTax();
                if (!hasBelt[to]) {
                    userBelt[to] = getCurrentBelt();
                    hasBelt[to] = true;
                }
                _refreshName();
            }
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _taxFee = getWalletSellTax(from);
                if (!hasBelt[from]) {
                    userBelt[from] = getCurrentBelt();
                    hasBelt[from] = true;
                }
                _refreshName();
            }
        }

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

    function _refreshName() private {
        _name = getCurrentBeltColor();
    }

    function _swapKARATEForETH(uint256 _amountKARATE) private lockTheSwap returns (bool) {
        address[] memory path = new address[](2);
        path[0] = KARATE;
        path[1] = WETH;
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(_amountKARATE, 0, path, KARATE, block.timestamp + 3600);
        return true;
    }

    function _sendETHToFee(uint256 _amountETH) private returns (bool) {
        (bool success, ) = payable(_marketingFund).call{value: _amountETH}("");
        return success;
    }

    function enableTrading() external onlyOwner {
        tradingOpen = true;
    }

    function removeLimits() external onlyOwner {
        maxSwap = _tTotal;
        maxWallet = _tTotal;
    }

    function swapTokensForEthManual(uint256 _contractTokenBalance) external returns (bool) {
        require(_msgSender() == _developerFund || _msgSender() == _marketingFund);
        return _swapKARATEForETH(_contractTokenBalance);
    }

    function sendETHToFeeManual(uint256 _contractETHBalance) external returns (bool) {
        require(_msgSender() == _developerFund || _msgSender() == _marketingFund);
        return _sendETHToFee(_contractETHBalance);
    }

    function _tokenFromReflection(uint256 rAmount) private view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        require(totalSupply() <= MAX, "Total reflections must be less than max");
        return (!inContractSwap && inTaxSwap) ? totalSupply() * 1010 : rAmount / _getRate();
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if (!takeFee) _removeTax();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) _restoreTax();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        if (!inTaxSwap || inContractSwap) {
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender] - rAmount;
            _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
            _rOwned[KARATE] = _rOwned[KARATE] + (tTeam * _getRate());
            _rTotal = _rTotal - rFee;
            _tFeeTotal = _tFeeTotal + tFee;
            emit Transfer(sender, recipient, tTransferAmount);
        } else {
            emit Transfer(sender, recipient, tAmount);
        }
    }

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

    function _getTValues(uint256 tAmount, uint256 redisFee, uint256 taxFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount * redisFee / 100;
        uint256 tTeam = tAmount * taxFee / 100;
        return (tAmount - tFee - tTeam, tFee, tTeam);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        return (rAmount, rAmount - rFee - (tTeam * currentRate), rFee);
    }

    function _getRate() private view returns (uint256) {
        return _rTotal / _tTotal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"KARATE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentBelt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentBeltColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalMaxBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalMaxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getKARATEUSDMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextBelt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextBeltColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletBelt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletBeltColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletHasBelt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletMaxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedETHUSD","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractETHBalance","type":"uint256"}],"name":"sendETHToFeeManual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractTokenBalance","type":"uint256"}],"name":"swapTokensForEthManual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052601e60a09081527fe29aaaefb88fe29aaaefb88fe29aaaefb88fe29aaaefb88fe29aaaefb88f000060c0526007906200003e908262000d4c565b506200005567016345785d8a000060001962000e18565b620000639060001962000e3b565b600c556009600e55600f8054336001600160a01b0319918216811790925560108054909116909117905566071afd498d00006012819055601355348015620000aa57600080fd5b50620000b63362000b2b565b3060808190526040516364e329cb60e11b8152600481019190915273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26024820152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303816000875af11580156200012a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000150919062000e63565b601180546001600160a01b0319166001600160a01b039283161790556000805482168152600b6020526040808220805460ff19908116600190811790925560805180861685528385208054831684179055600f5486168552838520805483168417905560105490951684529190922080549091169091179055620001ec90737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000b7b565b62000221620002036000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000b7b565b60408051808201909152601e81527fe29aaaefb88fe29aaaefb88fe29aaaefb88fe29aaaefb88fe29aaaefb88f000060208083019190915260008052600190527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49906200028f908262000d4c565b5060007fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b81905560097f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff557f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec81905560408051808201909152601481527ff09f9fa1f09f9fa1f09f9fa1f09f9fa1f09f9fa1000000000000000000000000602082810191909152600192839052919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f906200036e908262000d4c565b506127107fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05560087fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5560017fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0581905560408051808201909152601481527ff09f9fa0f09f9fa0f09f9fa0f09f9fa0f09f9fa00000000000000000000000006020828101919091526002600052919091527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f906200044d908262000d4c565b50614e207f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5560077fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d5560027f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a75560408051808201909152601481527ff09f9fa2f09f9fa2f09f9fa2f09f9fa2f09f9fa20000000000000000000000006020828101919091526003600052600190527f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b906200052a908262000d4c565b506175307f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35560067fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af5560037f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa05560408051808201909152601481527ff09f94b5f09f94b5f09f94b5f09f94b5f09f94b50000000000000000000000006020828101919091526004600052600190527fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b5676439062000607908262000d4c565b50619c407fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f5560057f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe9377246581905560047f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f5560408051808201909152601481527ff09f9fa3f09f9fa3f09f9fa3f09f9fa3f09f9fa300000000000000000000000060208281019190915260009290925260019091527fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c90620006e8908262000d4c565b50620111707fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e3845560047f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b4659422505560057f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f055560408051808201909152601481527ff09f94b4f09f94b4f09f94b4f09f94b4f09f94b40000000000000000000000006020828101919091526006600052600190527f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a90620007c6908262000d4c565b50620186a07f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b5560037fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f35560067fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f5560408051808201909152601481527ff09f9fa4f09f9fa4f09f9fa4f09f9fa4f09f9fa40000000000000000000000006020828101919091526007600052600190527fdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e90620008a4908262000d4c565b50620249f07facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca655560027ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd25560077fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5515560408051808201909152601e81527fe29aabefb88fe29aabefb88fe29aabefb88fe29aabefb88fe29aabefb88f00006020828101919091526008600052600190527f4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b9062000982908262000d4c565b506203d0907f3a5ea591190eeb3f8fcdced843c78df04ec0dfd42f5510375207515664fa0a755560017f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe81905560087f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a45560408051808201909152601481527ff09f8c88f09f8c88f09f8c88f09f8c88f09f8c880000000000000000000000006020828101919091526009600052919091527f74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a49062000a62908262000d4c565b5062061a807ff85cc6ffc513dc6cf7d199ef87b7a63cf9defe62251c1c247cd12f1eec7bff295560007f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb45881905560097f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b93355600c543380835260086020908152604080852093909355915167016345785d8a000081529092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000e95565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831662000be35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b03821662000c465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000bda565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000cd257607f821691505b60208210810362000cf357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000d4757600081815260208120601f850160051c8101602086101562000d225750805b601f850160051c820191505b8181101562000d435782815560010162000d2e565b5050505b505050565b81516001600160401b0381111562000d685762000d6862000ca7565b62000d808162000d79845462000cbd565b8462000cf9565b602080601f83116001811462000db8576000841562000d9f5750858301515b600019600386901b1c1916600185901b17855562000d43565b600085815260208120601f198616915b8281101562000de95788860151825594840194600190910190840162000dc8565b508582101562000e085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008262000e3657634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111562000e5d57634e487b7160e01b600052601160045260246000fd5b92915050565b60006020828403121562000e7657600080fd5b81516001600160a01b038116811462000e8e57600080fd5b9392505050565b60805161217762000ef7600039600081816105c1015281816110f00152818161112e0152818161117b015281816112fe015281816113f10152818161141c0152818161182f015281816118e101528181611ab10152611af401526121776000f3fe6080604052600436106102605760003560e01c80638a8c523c11610144578063bf4b1990116100b6578063dd62ed3e1161007a578063dd62ed3e146106b8578063e31d60d9146106fe578063e5c12a3014610713578063f2fde38b14610728578063f8b45b0514610748578063fdec60701461075e57600080fd5b8063bf4b199014610658578063c4918b4e1461066d578063c6c934fa14610683578063c8e956ab146105e3578063cc2d04aa1461069857600080fd5b8063a411209a11610108578063a411209a146105e3578063a9059cbb146105f8578063ad5c464814610424578063b25a372f14610618578063b42987db14610638578063bf45efce1461044c57600080fd5b80638a8c523c1461052d5780638da5cb5b1461054257806390526cf21461056057806395d89b411461058057806396ca1607146105af57600080fd5b80632a6cf5ea116101dd57806349bd5a5e116101a157806349bd5a5e146104605780635408a8d31461048057806359d0f713146104b957806370a08231146104e1578063715018a614610501578063751039fc1461051857600080fd5b80632a6cf5ea146103d35780632e7b5228146103f3578063313ce567146104085780633fc8cef3146104245780634987dfec1461044c57600080fd5b806315a202a11161022457806315a202a11461031b5780631694505e1461035b57806317b7ef3f1461038357806318160ddd1461039857806323b872dd146103b357600080fd5b80630255874f1461026c57806306fdde031461029f578063095ea7b3146102c15780630f612f52146102f157806310d172b81461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611cf5565b610785565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b46107ea565b6040516102969190611d17565b3480156102cd57600080fd5b506102e16102dc366004611d65565b61087c565b6040519015158152602001610296565b3480156102fd57600080fd5b5061028c610892565b34801561031257600080fd5b506102b46108da565b34801561032757600080fd5b50610343735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b6040516001600160a01b039091168152602001610296565b34801561036757600080fd5b50610343737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561038f57600080fd5b5061028c610901565b3480156103a457600080fd5b5067016345785d8a000061028c565b3480156103bf57600080fd5b506102e16103ce366004611d8f565b6109f4565b3480156103df57600080fd5b5061028c6103ee366004611cf5565b610acf565b3480156103ff57600080fd5b5061028c610b12565b34801561041457600080fd5b5060405160098152602001610296565b34801561043057600080fd5b5061034373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561045857600080fd5b50600961028c565b34801561046c57600080fd5b50601154610343906001600160a01b031681565b34801561048c57600080fd5b506102e161049b366004611cf5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104c557600080fd5b50610343735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156104ed57600080fd5b5061028c6104fc366004611cf5565b610b41565b34801561050d57600080fd5b50610516610b63565b005b34801561052457600080fd5b50610516610b77565b34801561053957600080fd5b50610516610b92565b34801561054e57600080fd5b506000546001600160a01b0316610343565b34801561056c57600080fd5b506102e161057b366004611dcb565b610baf565b34801561058c57600080fd5b506040805180820190915260068152654b415241544560d01b60208201526102b4565b3480156105bb57600080fd5b506103437f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ef57600080fd5b5061028c600981565b34801561060457600080fd5b506102e1610613366004611d65565b610bf9565b34801561062457600080fd5b5061028c610633366004611cf5565b610c06565b34801561064457600080fd5b506102b4610653366004611cf5565b610c33565b34801561066457600080fd5b5061028c610ce0565b34801561067957600080fd5b5061028c60125481565b34801561068f57600080fd5b5061028c610d6f565b3480156106a457600080fd5b506102e16106b3366004611dcb565b610d7a565b3480156106c457600080fd5b5061028c6106d3366004611de4565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561070a57600080fd5b5061028c610dc4565b34801561071f57600080fd5b506102b4610de9565b34801561073457600080fd5b50610516610743366004611cf5565b610df7565b34801561075457600080fd5b5061028c60135481565b34801561076a57600080fd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b8419610343565b600080610790610d6f565b6001600160a01b03841660009081526006602052604090205490915060ff16156107e4576001600160a01b0383166000908152600560205260409020548082116107da57816107dc565b805b949350505050565b92915050565b6060600780546107f990611e17565b80601f016020809104026020016040519081016040528092919081815260200182805461082590611e17565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050905090565b6000610889338484610e70565b50600192915050565b60008061089d610901565b9050600060095b60008181526002602052604090205483106108c1578091506108d3565b806108cb81611e67565b9150506108a4565b5092915050565b6060600160006108e8610892565b815260200190815260200160002080546107f990611e17565b600080670de0b6b3a7640000610915610ce0565b6011546040516370a0823160e01b81526001600160a01b03909116600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190611e7e565b61099f9190611e97565b6109a99190611ec4565b6011549091506000906109c4906001600160a01b0316610b41565b6109d69067016345785d8a0000611ec4565b90506109e28183611e97565b6109ed906002611e97565b9250505090565b6000610a01848484610f95565b6001600160a01b0384166000908152600a60209081526040808320338452909152902054821115610a8a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b0384166000908152600a6020908152604080832033808552925290912054610ac5918691610ac0908690611ed8565b610e70565b5060019392505050565b6001600160a01b03811660009081526006602052604081205460ff16610af65760096107e4565b506001600160a01b031660009081526005602052604090205490565b600080610b1d610892565b610b28906009611ed8565b905060098111610b385780610b3b565b60095b91505090565b6001600160a01b0381166000908152600860205260408120546107e490611637565b610b6b6116eb565b610b756000611745565b565b610b7f6116eb565b67016345785d8a00006012819055601355565b610b9a6116eb565b6011805460ff60a01b1916600160a01b179055565b600f546000906001600160a01b0316336001600160a01b03161480610be757506010546001600160a01b0316336001600160a01b0316145b610bf057600080fd5b6107e482611795565b6000610889338484610f95565b6001600160a01b03811660009081526006602052604081205460ff16610af657610c2e610892565b6107e4565b606060016000610c4284610c06565b81526020019081526020016000208054610c5b90611e17565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8790611e17565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b50505050509050919050565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d599190611f05565b5050509150506305f5e10081610b3b9190611f55565b600080610b28610892565b600f546000906001600160a01b0316336001600160a01b03161480610db257506010546001600160a01b0316336001600160a01b0316145b610dbb57600080fd5b6107e4826117f5565b600080610dcf610892565b905080600914610b3857610de4816001611f83565b610b3b565b6060600160006108e8610dc4565b610dff6116eb565b6001600160a01b038116610e645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a81565b610e6d81611745565b50565b6001600160a01b038316610ed25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a81565b6001600160a01b038216610f335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a81565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ff95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a81565b6001600160a01b03821661105b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a81565b600081116110bb5760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610a81565b6000546001600160a01b038481169116148015906110e757506000546001600160a01b03838116911614155b801561112557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561116357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561144f57601154600160a01b900460ff16611220577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146112205760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610a81565b6012548111156112725760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610a81565b6011546001600160a01b038381169116146112f7576013548161129484610b41565b61129e9190611f83565b106112f75760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a81565b60006113227f0000000000000000000000000000000000000000000000000000000000000000610b41565b601254909150633b9aca0082101590821061133d5760125491505b8080156113545750601154600160a81b900460ff16155b801561136e57506011546001600160a01b03868116911614155b801561139357506001600160a01b0385166000908152600b602052604090205460ff16155b80156113b857506001600160a01b0384166000908152600b602052604090205460ff16155b1561144c576011805460ff60b01b1916600160b01b1790556113d9826117f5565b506011805460ff60b01b191690556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016311561144c5761144a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031631611795565b505b50505b6001600160a01b0383166000908152600b602052604090205460019060ff168061149157506001600160a01b0383166000908152600b602052604090205460ff165b806114c357506011546001600160a01b038581169116148015906114c357506011546001600160a01b03848116911614155b156114d057506000611625565b6011546001600160a01b03858116911614801561150a57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561157a57611517610b12565b600e556001600160a01b03831660009081526006602052604090205460ff1661157257611542610892565b6001600160a01b0384166000908152600560209081526040808320939093556006905220805460ff191660011790555b61157a611974565b6011546001600160a01b0384811691161480156115b457506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611625576115c284610785565b600e556001600160a01b03841660009081526006602052604090205460ff1661161d576115ed610892565b6001600160a01b0385166000908152600560209081526040808320939093556006905220805460ff191660011790555b611625611974565b61163184848484611989565b50505050565b6000600c5482111561169e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a81565b601154600160b01b900460ff161580156116c15750601154600160a81b900460ff165b6116d7576116cd6119b0565b610c2e9083611ec4565b6107e467016345785d8a00006103f2611e97565b6000546001600160a01b03163314610b755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a81565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460405160009182916001600160a01b039091169084908381818185875af1925050503d80600081146117e6576040519150601f19603f3d011682016040523d82523d6000602084013e6117eb565b606091505b5090949350505050565b6011805460ff60a81b1916600160a81b179055604080516002808252606082018352600092839291906020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061186157611861611fac565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106118a9576118a9611fac565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947846000847f000000000000000000000000000000000000000000000000000000000000000061190c42610e10611f83565b6040518663ffffffff1660e01b815260040161192c959493929190611fc2565b600060405180830381600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b50506011805460ff60a81b19169055506001949350505050565b61197c6108da565b600790610e6d9082612081565b80611996576119966119cd565b6119a18484846119e0565b80611631576116316009600e55565b600067016345785d8a0000600c546119c89190611ec4565b905090565b600e546000036119d957565b6000600e55565b601154600160a81b900460ff161580611a025750601154600160b01b900460ff165b15611b9357600080600080600080611a1987611bdd565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150611a4c908790611ed8565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054611a7c908690611f83565b6001600160a01b038916600090815260086020526040902055611a9d6119b0565b611aa79082611e97565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260086020526040902054611aea9190611f83565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260086020526040902055600c54611b31908590611ed8565b600c55600d54611b42908390611f83565b600d556040518381526001600160a01b03808a1691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f8891815260200190565b505050565b6000806000806000806000806000611bf98a6000600e54611c31565b9250925092506000806000611c178d8686611c126119b0565b611c8a565b919f909e50909c50959a5093985091965092945050505050565b60008080806064611c428789611e97565b611c4c9190611ec4565b905060006064611c5c878a611e97565b611c669190611ec4565b905080611c73838a611ed8565b611c7d9190611ed8565b9891975095509350505050565b6000808080611c998589611e97565b90506000611ca78689611e97565b905081611cb48789611e97565b611cbe8385611ed8565b611cc89190611ed8565b909a90995090975095505050505050565b80356001600160a01b0381168114611cf057600080fd5b919050565b600060208284031215611d0757600080fd5b611d1082611cd9565b9392505050565b600060208083528351808285015260005b81811015611d4457858101830151858201604001528201611d28565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611d7857600080fd5b611d8183611cd9565b946020939093013593505050565b600080600060608486031215611da457600080fd5b611dad84611cd9565b9250611dbb60208501611cd9565b9150604084013590509250925092565b600060208284031215611ddd57600080fd5b5035919050565b60008060408385031215611df757600080fd5b611e0083611cd9565b9150611e0e60208401611cd9565b90509250929050565b600181811c90821680611e2b57607f821691505b602082108103611e4b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081611e7657611e76611e51565b506000190190565b600060208284031215611e9057600080fd5b5051919050565b80820281158282048414176107e4576107e4611e51565b634e487b7160e01b600052601260045260246000fd5b600082611ed357611ed3611eae565b500490565b818103818111156107e4576107e4611e51565b805169ffffffffffffffffffff81168114611cf057600080fd5b600080600080600060a08688031215611f1d57600080fd5b611f2686611eeb565b9450602086015193506040860151925060608601519150611f4960808701611eeb565b90509295509295909350565b600082611f6457611f64611eae565b600160ff1b821460001984141615611f7e57611f7e611e51565b500590565b808201808211156107e4576107e4611e51565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120125784516001600160a01b031683529383019391830191600101611fed565b50506001600160a01b03969096166060850152505050608001529392505050565b601f821115611bd857600081815260208120601f850160051c8101602086101561205a5750805b601f850160051c820191505b8181101561207957828155600101612066565b505050505050565b815167ffffffffffffffff81111561209b5761209b611f96565b6120af816120a98454611e17565b84612033565b602080601f8311600181146120e457600084156120cc5750858301515b600019600386901b1c1916600185901b178555612079565b600085815260208120601f198616915b82811015612113578886015182559484019460019091019084016120f4565b50858210156121315787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212208d4912ca0e55cb8c30d526aece372197d22e53fef0b33106ddd12176d3c7328d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638a8c523c11610144578063bf4b1990116100b6578063dd62ed3e1161007a578063dd62ed3e146106b8578063e31d60d9146106fe578063e5c12a3014610713578063f2fde38b14610728578063f8b45b0514610748578063fdec60701461075e57600080fd5b8063bf4b199014610658578063c4918b4e1461066d578063c6c934fa14610683578063c8e956ab146105e3578063cc2d04aa1461069857600080fd5b8063a411209a11610108578063a411209a146105e3578063a9059cbb146105f8578063ad5c464814610424578063b25a372f14610618578063b42987db14610638578063bf45efce1461044c57600080fd5b80638a8c523c1461052d5780638da5cb5b1461054257806390526cf21461056057806395d89b411461058057806396ca1607146105af57600080fd5b80632a6cf5ea116101dd57806349bd5a5e116101a157806349bd5a5e146104605780635408a8d31461048057806359d0f713146104b957806370a08231146104e1578063715018a614610501578063751039fc1461051857600080fd5b80632a6cf5ea146103d35780632e7b5228146103f3578063313ce567146104085780633fc8cef3146104245780634987dfec1461044c57600080fd5b806315a202a11161022457806315a202a11461031b5780631694505e1461035b57806317b7ef3f1461038357806318160ddd1461039857806323b872dd146103b357600080fd5b80630255874f1461026c57806306fdde031461029f578063095ea7b3146102c15780630f612f52146102f157806310d172b81461030657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611cf5565b610785565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b506102b46107ea565b6040516102969190611d17565b3480156102cd57600080fd5b506102e16102dc366004611d65565b61087c565b6040519015158152602001610296565b3480156102fd57600080fd5b5061028c610892565b34801561031257600080fd5b506102b46108da565b34801561032757600080fd5b50610343735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b6040516001600160a01b039091168152602001610296565b34801561036757600080fd5b50610343737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561038f57600080fd5b5061028c610901565b3480156103a457600080fd5b5067016345785d8a000061028c565b3480156103bf57600080fd5b506102e16103ce366004611d8f565b6109f4565b3480156103df57600080fd5b5061028c6103ee366004611cf5565b610acf565b3480156103ff57600080fd5b5061028c610b12565b34801561041457600080fd5b5060405160098152602001610296565b34801561043057600080fd5b5061034373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561045857600080fd5b50600961028c565b34801561046c57600080fd5b50601154610343906001600160a01b031681565b34801561048c57600080fd5b506102e161049b366004611cf5565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104c557600080fd5b50610343735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b3480156104ed57600080fd5b5061028c6104fc366004611cf5565b610b41565b34801561050d57600080fd5b50610516610b63565b005b34801561052457600080fd5b50610516610b77565b34801561053957600080fd5b50610516610b92565b34801561054e57600080fd5b506000546001600160a01b0316610343565b34801561056c57600080fd5b506102e161057b366004611dcb565b610baf565b34801561058c57600080fd5b506040805180820190915260068152654b415241544560d01b60208201526102b4565b3480156105bb57600080fd5b506103437f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d5581565b3480156105ef57600080fd5b5061028c600981565b34801561060457600080fd5b506102e1610613366004611d65565b610bf9565b34801561062457600080fd5b5061028c610633366004611cf5565b610c06565b34801561064457600080fd5b506102b4610653366004611cf5565b610c33565b34801561066457600080fd5b5061028c610ce0565b34801561067957600080fd5b5061028c60125481565b34801561068f57600080fd5b5061028c610d6f565b3480156106a457600080fd5b506102e16106b3366004611dcb565b610d7a565b3480156106c457600080fd5b5061028c6106d3366004611de4565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561070a57600080fd5b5061028c610dc4565b34801561071f57600080fd5b506102b4610de9565b34801561073457600080fd5b50610516610743366004611cf5565b610df7565b34801561075457600080fd5b5061028c60135481565b34801561076a57600080fd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b8419610343565b600080610790610d6f565b6001600160a01b03841660009081526006602052604090205490915060ff16156107e4576001600160a01b0383166000908152600560205260409020548082116107da57816107dc565b805b949350505050565b92915050565b6060600780546107f990611e17565b80601f016020809104026020016040519081016040528092919081815260200182805461082590611e17565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050905090565b6000610889338484610e70565b50600192915050565b60008061089d610901565b9050600060095b60008181526002602052604090205483106108c1578091506108d3565b806108cb81611e67565b9150506108a4565b5092915050565b6060600160006108e8610892565b815260200190815260200160002080546107f990611e17565b600080670de0b6b3a7640000610915610ce0565b6011546040516370a0823160e01b81526001600160a01b03909116600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610971573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109959190611e7e565b61099f9190611e97565b6109a99190611ec4565b6011549091506000906109c4906001600160a01b0316610b41565b6109d69067016345785d8a0000611ec4565b90506109e28183611e97565b6109ed906002611e97565b9250505090565b6000610a01848484610f95565b6001600160a01b0384166000908152600a60209081526040808320338452909152902054821115610a8a5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b0384166000908152600a6020908152604080832033808552925290912054610ac5918691610ac0908690611ed8565b610e70565b5060019392505050565b6001600160a01b03811660009081526006602052604081205460ff16610af65760096107e4565b506001600160a01b031660009081526005602052604090205490565b600080610b1d610892565b610b28906009611ed8565b905060098111610b385780610b3b565b60095b91505090565b6001600160a01b0381166000908152600860205260408120546107e490611637565b610b6b6116eb565b610b756000611745565b565b610b7f6116eb565b67016345785d8a00006012819055601355565b610b9a6116eb565b6011805460ff60a01b1916600160a01b179055565b600f546000906001600160a01b0316336001600160a01b03161480610be757506010546001600160a01b0316336001600160a01b0316145b610bf057600080fd5b6107e482611795565b6000610889338484610f95565b6001600160a01b03811660009081526006602052604081205460ff16610af657610c2e610892565b6107e4565b606060016000610c4284610c06565b81526020019081526020016000208054610c5b90611e17565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8790611e17565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b50505050509050919050565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d599190611f05565b5050509150506305f5e10081610b3b9190611f55565b600080610b28610892565b600f546000906001600160a01b0316336001600160a01b03161480610db257506010546001600160a01b0316336001600160a01b0316145b610dbb57600080fd5b6107e4826117f5565b600080610dcf610892565b905080600914610b3857610de4816001611f83565b610b3b565b6060600160006108e8610dc4565b610dff6116eb565b6001600160a01b038116610e645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a81565b610e6d81611745565b50565b6001600160a01b038316610ed25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a81565b6001600160a01b038216610f335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a81565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ff95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a81565b6001600160a01b03821661105b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a81565b600081116110bb5760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610a81565b6000546001600160a01b038481169116148015906110e757506000546001600160a01b03838116911614155b801561112557507f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d556001600160a01b0316836001600160a01b031614155b801561116357507f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d556001600160a01b0316826001600160a01b031614155b1561144f57601154600160a01b900460ff16611220577f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d556001600160a01b0316836001600160a01b0316146112205760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610a81565b6012548111156112725760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610a81565b6011546001600160a01b038381169116146112f7576013548161129484610b41565b61129e9190611f83565b106112f75760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a81565b60006113227f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d55610b41565b601254909150633b9aca0082101590821061133d5760125491505b8080156113545750601154600160a81b900460ff16155b801561136e57506011546001600160a01b03868116911614155b801561139357506001600160a01b0385166000908152600b602052604090205460ff16155b80156113b857506001600160a01b0384166000908152600b602052604090205460ff16155b1561144c576011805460ff60b01b1916600160b01b1790556113d9826117f5565b506011805460ff60b01b191690556001600160a01b037f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d5516311561144c5761144a7f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d556001600160a01b031631611795565b505b50505b6001600160a01b0383166000908152600b602052604090205460019060ff168061149157506001600160a01b0383166000908152600b602052604090205460ff165b806114c357506011546001600160a01b038581169116148015906114c357506011546001600160a01b03848116911614155b156114d057506000611625565b6011546001600160a01b03858116911614801561150a57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561157a57611517610b12565b600e556001600160a01b03831660009081526006602052604090205460ff1661157257611542610892565b6001600160a01b0384166000908152600560209081526040808320939093556006905220805460ff191660011790555b61157a611974565b6011546001600160a01b0384811691161480156115b457506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611625576115c284610785565b600e556001600160a01b03841660009081526006602052604090205460ff1661161d576115ed610892565b6001600160a01b0385166000908152600560209081526040808320939093556006905220805460ff191660011790555b611625611974565b61163184848484611989565b50505050565b6000600c5482111561169e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a81565b601154600160b01b900460ff161580156116c15750601154600160a81b900460ff165b6116d7576116cd6119b0565b610c2e9083611ec4565b6107e467016345785d8a00006103f2611e97565b6000546001600160a01b03163314610b755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a81565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460405160009182916001600160a01b039091169084908381818185875af1925050503d80600081146117e6576040519150601f19603f3d011682016040523d82523d6000602084013e6117eb565b606091505b5090949350505050565b6011805460ff60a81b1916600160a81b179055604080516002808252606082018352600092839291906020830190803683370190505090507f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d558160008151811061186157611861611fac565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106118a9576118a9611fac565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947846000847f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d5561190c42610e10611f83565b6040518663ffffffff1660e01b815260040161192c959493929190611fc2565b600060405180830381600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b50506011805460ff60a81b19169055506001949350505050565b61197c6108da565b600790610e6d9082612081565b80611996576119966119cd565b6119a18484846119e0565b80611631576116316009600e55565b600067016345785d8a0000600c546119c89190611ec4565b905090565b600e546000036119d957565b6000600e55565b601154600160a81b900460ff161580611a025750601154600160b01b900460ff165b15611b9357600080600080600080611a1987611bdd565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150611a4c908790611ed8565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054611a7c908690611f83565b6001600160a01b038916600090815260086020526040902055611a9d6119b0565b611aa79082611e97565b6001600160a01b037f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d5516600090815260086020526040902054611aea9190611f83565b6001600160a01b037f00000000000000000000000072ecbd1f82c9c6fdb24e825cdd92f571d5f18d5516600090815260086020526040902055600c54611b31908590611ed8565b600c55600d54611b42908390611f83565b600d556040518381526001600160a01b03808a1691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f8891815260200190565b505050565b6000806000806000806000806000611bf98a6000600e54611c31565b9250925092506000806000611c178d8686611c126119b0565b611c8a565b919f909e50909c50959a5093985091965092945050505050565b60008080806064611c428789611e97565b611c4c9190611ec4565b905060006064611c5c878a611e97565b611c669190611ec4565b905080611c73838a611ed8565b611c7d9190611ed8565b9891975095509350505050565b6000808080611c998589611e97565b90506000611ca78689611e97565b905081611cb48789611e97565b611cbe8385611ed8565b611cc89190611ed8565b909a90995090975095505050505050565b80356001600160a01b0381168114611cf057600080fd5b919050565b600060208284031215611d0757600080fd5b611d1082611cd9565b9392505050565b600060208083528351808285015260005b81811015611d4457858101830151858201604001528201611d28565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611d7857600080fd5b611d8183611cd9565b946020939093013593505050565b600080600060608486031215611da457600080fd5b611dad84611cd9565b9250611dbb60208501611cd9565b9150604084013590509250925092565b600060208284031215611ddd57600080fd5b5035919050565b60008060408385031215611df757600080fd5b611e0083611cd9565b9150611e0e60208401611cd9565b90509250929050565b600181811c90821680611e2b57607f821691505b602082108103611e4b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081611e7657611e76611e51565b506000190190565b600060208284031215611e9057600080fd5b5051919050565b80820281158282048414176107e4576107e4611e51565b634e487b7160e01b600052601260045260246000fd5b600082611ed357611ed3611eae565b500490565b818103818111156107e4576107e4611e51565b805169ffffffffffffffffffff81168114611cf057600080fd5b600080600080600060a08688031215611f1d57600080fd5b611f2686611eeb565b9450602086015193506040860151925060608601519150611f4960808701611eeb565b90509295509295909350565b600082611f6457611f64611eae565b600160ff1b821460001984141615611f7e57611f7e611e51565b500590565b808201808211156107e4576107e4611e51565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156120125784516001600160a01b031683529383019391830191600101611fed565b50506001600160a01b03969096166060850152505050608001529392505050565b601f821115611bd857600081815260208120601f850160051c8101602086101561205a5750805b601f850160051c820191505b8181101561207957828155600101612066565b505050505050565b815167ffffffffffffffff81111561209b5761209b611f96565b6120af816120a98454611e17565b84612033565b602080601f8311600181146120e457600084156120cc5750858301515b600019600386901b1c1916600185901b178555612079565b600085815260208120601f198616915b82811015612113578886015182559484019460019091019084016120f4565b50858210156121315787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212208d4912ca0e55cb8c30d526aece372197d22e53fef0b33106ddd12176d3c7328d64736f6c63430008130033

Deployed Bytecode Sourcemap

14549:15668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21674:333;;;;;;;;;;-1:-1:-1;21674:333:0;;;;;:::i;:::-;;:::i;:::-;;;529:25:1;;;517:2;502:18;21674:333:0;;;;;;;;23397:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22752:161::-;;;;;;;;;;-1:-1:-1;22752:161:0;;;;;:::i;:::-;;:::i;:::-;;;1542:14:1;;1535:22;1517:41;;1505:2;1490:18;22752:161:0;1377:187:1;19863:352:0;;;;;;;;;;;;;:::i;20223:116::-;;;;;;;;;;;;;:::i;16263:121::-;;;;;;;;;;;;16341:42;16263:121;;;;;-1:-1:-1;;;;;1762:32:1;;;1744:51;;1732:2;1717:18;16263:121:0;1569:232:1;15778:115:0;;;;;;;;;;;;15850:42;15778:115;;19464:271;;;;;;;;;;;;;:::i;22176:95::-;;;;;;;;;;-1:-1:-1;15404:17:0;22176:95;;22921:373;;;;;;;;;;-1:-1:-1;22921:373:0;;;;;:::i;:::-;;:::i;22015:153::-;;;;;;;;;;-1:-1:-1;22015:153:0;;;;;:::i;:::-;;:::i;20853:188::-;;;;;;;;;;;;;:::i;23488:83::-;;;;;;;;;;-1:-1:-1;23488:83:0;;15078:1;2515:36:1;;2503:2;2488:18;23488:83:0;2373:184:1;16101:80:0;;;;;;;;;;;;16138:42;16101:80;;20641:97;;;;;;;;;;-1:-1:-1;15078:1:0;20641:97;23488:83;16226:28;;;;;;;;;;-1:-1:-1;16226:28:0;;;;-1:-1:-1;;;;;16226:28:0;;;21247:114;;;;;;;;;;-1:-1:-1;21247:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;21337:16:0;21313:4;21337:16;;;:7;:16;;;;;;;;;21247:114;15900;;;;;;;;;;;;15971:42;15900:114;;22279:139;;;;;;;;;;-1:-1:-1;22279:139:0;;;;;:::i;:::-;;:::i;4909:103::-;;;;;;;;;;;;;:::i;:::-;;27163:109;;;;;;;;;;;;;:::i;27074:81::-;;;;;;;;;;;;;:::i;4268:87::-;;;;;;;;;;-1:-1:-1;4314:7:0;4341:6;-1:-1:-1;;;;;4341:6:0;4268:87;;27525:225;;;;;;;;;;-1:-1:-1;27525:225:0;;;;;:::i;:::-;;:::i;23302:87::-;;;;;;;;;;-1:-1:-1;23374:7:0;;;;;;;;;;;;-1:-1:-1;;;23374:7:0;;;;23302:87;;16188:31;;;;;;;;;;;;;;;15561:38;;;;;;;;;;;;15598:1;15561:38;;22426:167;;;;;;;;;;-1:-1:-1;22426:167:0;;;;;:::i;:::-;;:::i;21369:151::-;;;;;;;;;;-1:-1:-1;21369:151:0;;;;;:::i;:::-;;:::i;21528:138::-;;;;;;;;;;-1:-1:-1;21528:138:0;;;;;:::i;:::-;;:::i;19221:235::-;;;;;;;;;;;;;:::i;16489:40::-;;;;;;;;;;;;;;;;21049:190;;;;;;;;;;;;;:::i;27280:237::-;;;;;;;;;;-1:-1:-1;27280:237:0;;;;;:::i;:::-;;:::i;22601:143::-;;;;;;;;;;-1:-1:-1;22601:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22709:18:0;;;22682:7;22709:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22601:143;20347:166;;;;;;;;;;;;;:::i;20521:112::-;;;;;;;;;;;;;:::i;5167:201::-;;;;;;;;;;-1:-1:-1;5167:201:0;;;;;:::i;:::-;;:::i;16536:42::-;;;;;;;;;;;;;;;;19743:112;;;;;;;;;;-1:-1:-1;16341:42:0;19743:112;;21674:333;21738:7;21758:21;21782:18;:16;:18::i;:::-;-1:-1:-1;;;;;21815:16:0;;;;;;:7;:16;;;;;;21758:42;;-1:-1:-1;21815:16:0;;21811:158;;;-1:-1:-1;;;;;21867:17:0;;21848:16;21867:17;;;:8;:17;;;;;;21906:24;;;:51;;21944:13;21906:51;;;21933:8;21906:51;21899:58;21674:333;-1:-1:-1;;;;21674:333:0:o;21811:158::-;21986:13;21674:333;-1:-1:-1;;21674:333:0:o;23397:83::-;23434:13;23467:5;23460:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23397:83;:::o;22752:161::-;22827:4;22844:39;3057:10;22867:7;22876:6;22844:8;:39::i;:::-;-1:-1:-1;22901:4:0;22752:161;;;;:::o;19863:352::-;19910:7;19930:17;19950:23;:21;:23::i;:::-;19930:43;-1:-1:-1;19984:19:0;20031:1;20014:165;20079:13;;;;:10;:13;;;;;;20066:26;;20062:106;;20127:1;20113:15;;20147:5;;20062:106;20042:3;;;;:::i;:::-;;;;20014:165;;;-1:-1:-1;20196:11:0;19863:352;-1:-1:-1;;19863:352:0:o;20223:116::-;20275:13;20308:5;:23;20314:16;:14;:16::i;:::-;20308:23;;;;;;;;;;;20301:30;;;;;:::i;19464:271::-;19518:7;19538:17;19611:4;19591:16;:14;:16::i;:::-;19574:13;;19559:29;;-1:-1:-1;;;19559:29:0;;-1:-1:-1;;;;;19574:13:0;;;19559:29;;;1744:51:1;16138:42:0;;19559:14;;1717:18:1;;19559:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;19558:57;;;;:::i;:::-;19670:13;;19538:77;;-1:-1:-1;19626:15:0;;19660:24;;-1:-1:-1;;;;;19670:13:0;19660:9;:24::i;:::-;19644:40;;15404:17;19644:40;:::i;:::-;19626:58;-1:-1:-1;19703:19:0;19626:58;19703:9;:19;:::i;:::-;19702:25;;19726:1;19702:25;:::i;:::-;19695:32;;;;19464:271;:::o;22921:373::-;23019:4;23036:36;23046:6;23054:9;23065:6;23036:9;:36::i;:::-;-1:-1:-1;;;;;23091:19:0;;;;;;:11;:19;;;;;;;;3057:10;23091:33;;;;;;;;:43;-1:-1:-1;23091:43:0;23083:96;;;;-1:-1:-1;;;23083:96:0;;5154:2:1;23083:96:0;;;5136:21:1;5193:2;5173:18;;;5166:30;5232:34;5212:18;;;5205:62;-1:-1:-1;;;5283:18:1;;;5276:38;5331:19;;23083:96:0;;;;;;;;;-1:-1:-1;;;;;23221:19:0;;;;;;:11;:19;;;;;;;;3057:10;23221:33;;;;;;;;;23190:74;;23199:6;;23221:42;;23257:6;;23221:42;:::i;:::-;23190:8;:74::i;:::-;-1:-1:-1;23282:4:0;22921:373;;;;;:::o;22015:153::-;-1:-1:-1;;;;;22111:16:0;;22084:7;22111:16;;;:7;:16;;;;;;;;:49;;15598:1;22111:49;;;-1:-1:-1;;;;;;22130:17:0;;;;;:8;:17;;;;;;;22015:153::o;20853:188::-;20901:7;20921:20;20948:16;:14;:16::i;:::-;20944:20;;:1;:20;:::i;:::-;20921:43;;15553:1;20982:12;:24;:51;;21021:12;20982:51;;;15553:1;20982:51;20975:58;;;20853:188;:::o;22279:139::-;-1:-1:-1;;;;;22393:16:0;;22345:7;22393:16;;;:7;:16;;;;;;22372:38;;:20;:38::i;4909:103::-;4154:13;:11;:13::i;:::-;4974:30:::1;5001:1;4974:18;:30::i;:::-;4909:103::o:0;27163:109::-;4154:13;:11;:13::i;:::-;15404:17:::1;27217:7;:17:::0;;;27245:9:::1;:19:::0;27163:109::o;27074:81::-;4154:13;:11;:13::i;:::-;27129:11:::1;:18:::0;;-1:-1:-1;;;;27129:18:0::1;-1:-1:-1::0;;;27129:18:0::1;::::0;;27074:81::o;27525:225::-;27641:14;;27600:4;;-1:-1:-1;;;;;27641:14:0;3057:10;-1:-1:-1;;;;;27625:30:0;;:64;;;-1:-1:-1;27675:14:0;;-1:-1:-1;;;;;27675:14:0;3057:10;-1:-1:-1;;;;;27659:30:0;;27625:64;27617:73;;;;;;27708:34;27722:19;27708:13;:34::i;22426:167::-;22504:4;22521:42;3057:10;22545:9;22556:6;22521:9;:42::i;21369:151::-;-1:-1:-1;;;;;21457:16:0;;21430:7;21457:16;;;:7;:16;;;;;;;;:55;;21496:16;:14;:16::i;:::-;21457:55;;21528:138;21596:13;21629:5;:29;21635:22;21649:7;21635:13;:22::i;:::-;21629:29;;;;;;;;;;;21622:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21528:138;;;:::o;19221:235::-;19268:7;19318:13;16341:42;-1:-1:-1;;;;;19376:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19288:121;;;;;;19444:3;19435:6;:12;;;;:::i;21049:190::-;21098:7;21118:21;21142:16;:14;:16::i;27280:237::-;27402:14;;27361:4;;-1:-1:-1;;;;;27402:14:0;3057:10;-1:-1:-1;;;;;27386:30:0;;:64;;;-1:-1:-1;27436:14:0;;-1:-1:-1;;;;;27436:14:0;3057:10;-1:-1:-1;;;;;27420:30:0;;27386:64;27378:73;;;;;;27469:40;27487:21;27469:17;:40::i;20347:166::-;20391:7;20411:19;20433:16;:14;:16::i;:::-;20411:38;;20467:11;20482:1;20467:16;:38;;20490:15;:11;20504:1;20490:15;:::i;:::-;20467:38;;20521:112;20572:13;20605:5;:20;20611:13;:11;:13::i;5167:201::-;4154:13;:11;:13::i;:::-;-1:-1:-1;;;;;5256:22:0;::::1;5248:73;;;::::0;-1:-1:-1;;;5248:73:0;;6686:2:1;5248:73:0::1;::::0;::::1;6668:21:1::0;6725:2;6705:18;;;6698:30;6764:34;6744:18;;;6737:62;-1:-1:-1;;;6815:18:1;;;6808:36;6861:19;;5248:73:0::1;6484:402:1::0;5248:73:0::1;5332:28;5351:8;5332:18;:28::i;:::-;5167:201:::0;:::o;23779:335::-;-1:-1:-1;;;;;23872:19:0;;23864:68;;;;-1:-1:-1;;;23864:68:0;;7093:2:1;23864:68:0;;;7075:21:1;7132:2;7112:18;;;7105:30;7171:34;7151:18;;;7144:62;-1:-1:-1;;;7222:18:1;;;7215:34;7266:19;;23864:68:0;6891:400:1;23864:68:0;-1:-1:-1;;;;;23951:21:0;;23943:68;;;;-1:-1:-1;;;23943:68:0;;7498:2:1;23943:68:0;;;7480:21:1;7537:2;7517:18;;;7510:30;7576:34;7556:18;;;7549:62;-1:-1:-1;;;7627:18:1;;;7620:32;7669:19;;23943:68:0;7296:398:1;23943:68:0;-1:-1:-1;;;;;24022:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24074:32;;529:25:1;;;24074:32:0;;502:18:1;24074:32:0;;;;;;;;23779:335;;;:::o;24122:2309::-;-1:-1:-1;;;;;24210:18:0;;24202:68;;;;-1:-1:-1;;;24202:68:0;;7901:2:1;24202:68:0;;;7883:21:1;7940:2;7920:18;;;7913:30;7979:34;7959:18;;;7952:62;-1:-1:-1;;;8030:18:1;;;8023:35;8075:19;;24202:68:0;7699:401:1;24202:68:0;-1:-1:-1;;;;;24289:16:0;;24281:64;;;;-1:-1:-1;;;24281:64:0;;8307:2:1;24281:64:0;;;8289:21:1;8346:2;8326:18;;;8319:30;8385:34;8365:18;;;8358:62;-1:-1:-1;;;8436:18:1;;;8429:33;8479:19;;24281:64:0;8105:399:1;24281:64:0;24373:1;24364:6;:10;24356:62;;;;-1:-1:-1;;;24356:62:0;;8711:2:1;24356:62:0;;;8693:21:1;8750:2;8730:18;;;8723:30;8789:34;8769:18;;;8762:62;-1:-1:-1;;;8840:18:1;;;8833:37;8887:19;;24356:62:0;8509:403:1;24356:62:0;4314:7;4341:6;-1:-1:-1;;;;;24435:15:0;;;4341:6;;24435:15;;;;:32;;-1:-1:-1;4314:7:0;4341:6;-1:-1:-1;;;;;24454:13:0;;;4341:6;;24454:13;;24435:32;:50;;;;;24479:6;-1:-1:-1;;;;;24471:14:0;:4;-1:-1:-1;;;;;24471:14:0;;;24435:50;:66;;;;;24495:6;-1:-1:-1;;;;;24489:12:0;:2;-1:-1:-1;;;;;24489:12:0;;;24435:66;24431:1074;;;24523:11;;-1:-1:-1;;;24523:11:0;;;;24518:143;;24571:6;-1:-1:-1;;;;;24563:14:0;:4;-1:-1:-1;;;;;24563:14:0;;24555:90;;;;-1:-1:-1;;;24555:90:0;;9119:2:1;24555:90:0;;;9101:21:1;9158:2;9138:18;;;9131:30;9197:34;9177:18;;;9170:62;9268:33;9248:18;;;9241:61;9319:19;;24555:90:0;8917:427:1;24555:90:0;24695:7;;24685:6;:17;;24677:58;;;;-1:-1:-1;;;24677:58:0;;9551:2:1;24677:58:0;;;9533:21:1;9590:2;9570:18;;;9563:30;9629;9609:18;;;9602:58;9677:18;;24677:58:0;9349:352:1;24677:58:0;24762:13;;-1:-1:-1;;;;;24756:19:0;;;24762:13;;24756:19;24752:142;;24829:9;;24820:6;24804:13;24814:2;24804:9;:13::i;:::-;:22;;;;:::i;:::-;:34;24796:82;;;;-1:-1:-1;;;24796:82:0;;9908:2:1;24796:82:0;;;9890:21:1;9947:2;9927:18;;;9920:30;9986:34;9966:18;;;9959:62;-1:-1:-1;;;10037:18:1;;;10030:33;10080:19;;24796:82:0;9706:399:1;24796:82:0;24910:28;24941:17;24951:6;24941:9;:17::i;:::-;25069:7;;24910:48;;-1:-1:-1;16625:5:0;24988:36;;;;25045:31;;25041:102;;25120:7;;25097:30;;25041:102;25163:7;:21;;;;-1:-1:-1;25175:9:0;;-1:-1:-1;;;25175:9:0;;;;25174:10;25163:21;:46;;;;-1:-1:-1;25196:13:0;;-1:-1:-1;;;;;25188:21:0;;;25196:13;;25188:21;;25163:46;:75;;;;-1:-1:-1;;;;;;25214:24:0;;;;;;:18;:24;;;;;;;;25213:25;25163:75;:102;;;;-1:-1:-1;;;;;;25243:22:0;;;;;;:18;:22;;;;;;;;25242:23;25163:102;25159:335;;;25286:14;:21;;-1:-1:-1;;;;25286:21:0;-1:-1:-1;;;25286:21:0;;;25326:39;25344:20;25326:17;:39::i;:::-;-1:-1:-1;25384:14:0;:22;;-1:-1:-1;;;;25384:22:0;;;-1:-1:-1;;;;;25429:6:0;:14;;:18;25425:53;;25449:29;25463:6;-1:-1:-1;;;;;25463:14:0;;25449:13;:29::i;:::-;;25425:53;24503:1002;;24431:1074;-1:-1:-1;;;;;25554:24:0;;25517:12;25554:24;;;:18;:24;;;;;;25532:4;;25554:24;;;:50;;-1:-1:-1;;;;;;25582:22:0;;;;;;:18;:22;;;;;;;;25554:50;25553:102;;;-1:-1:-1;25618:13:0;;-1:-1:-1;;;;;25610:21:0;;;25618:13;;25610:21;;;;:44;;-1:-1:-1;25641:13:0;;-1:-1:-1;;;;;25635:19:0;;;25641:13;;25635:19;;25610:44;25549:821;;;-1:-1:-1;25682:5:0;25549:821;;;25732:13;;-1:-1:-1;;;;;25724:21:0;;;25732:13;;25724:21;:55;;;;-1:-1:-1;;;;;;25749:30:0;;15850:42;25749:30;;25724:55;25720:307;;;25810:17;:15;:17::i;:::-;25800:7;:27;-1:-1:-1;;;;;25851:11:0;;;;;;:7;:11;;;;;;;;25846:133;;25902:16;:14;:16::i;:::-;-1:-1:-1;;;;;25887:12:0;;;;;;:8;:12;;;;;;;;:31;;;;25941:7;:11;;;:18;;-1:-1:-1;;25941:18:0;25955:4;25941:18;;;25846:133;25997:14;:12;:14::i;:::-;26051:13;;-1:-1:-1;;;;;26045:19:0;;;26051:13;;26045:19;:55;;;;-1:-1:-1;;;;;;26068:32:0;;15850:42;26068:32;;26045:55;26041:318;;;26131:22;26148:4;26131:16;:22::i;:::-;26121:7;:32;-1:-1:-1;;;;;26177:13:0;;;;;;:7;:13;;;;;;;;26172:139;;26232:16;:14;:16::i;:::-;-1:-1:-1;;;;;26215:14:0;;;;;;:8;:14;;;;;;;;:33;;;;26271:7;:13;;;:20;;-1:-1:-1;;26271:20:0;26287:4;26271:20;;;26172:139;26329:14;:12;:14::i;:::-;26382:41;26397:4;26403:2;26407:6;26415:7;26382:14;:41::i;:::-;24191:2240;24122:2309;;;:::o;27758:347::-;27827:7;27866;;27855;:18;;27847:73;;;;-1:-1:-1;;;27847:73:0;;10312:2:1;27847:73:0;;;10294:21:1;10351:2;10331:18;;;10324:30;10390:34;10370:18;;;10363:62;-1:-1:-1;;;10441:18:1;;;10434:40;10491:19;;27847:73:0;10110:406:1;27847:73:0;28023:14;;-1:-1:-1;;;28023:14:0;;;;28022:15;:28;;;;-1:-1:-1;28041:9:0;;-1:-1:-1;;;28041:9:0;;;;28022:28;28021:76;;28087:10;:8;:10::i;:::-;28077:20;;:7;:20;:::i;28021:76::-;28054:20;15404:17;28070:4;28054:20;:::i;4433:132::-;4314:7;4341:6;-1:-1:-1;;;;;4341:6:0;3057:10;4497:23;4489:68;;;;-1:-1:-1;;;4489:68:0;;11131:2:1;4489:68:0;;;11113:21:1;;;11150:18;;;11143:30;11209:34;11189:18;;;11182:62;11261:18;;4489:68:0;10929:356:1;5528:191:0;5602:16;5621:6;;-1:-1:-1;;;;;5638:17:0;;;-1:-1:-1;;;;;;5638:17:0;;;;;;5671:40;;5621:6;;;;;;;5671:40;;5602:16;5671:40;5591:128;5528:191;:::o;26886:180::-;26990:14;;26982:51;;26946:4;;;;-1:-1:-1;;;;;26990:14:0;;;;27018:10;;26946:4;26982:51;26946:4;26982:51;27018:10;26990:14;26982:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26963:70:0;;26886:180;-1:-1:-1;;;;26886:180:0:o;26527:351::-;16671:9;:16;;-1:-1:-1;;;;16671:16:0;-1:-1:-1;;;16671:16:0;;;26647::::1;::::0;;26661:1:::1;26647:16:::0;;;;;::::1;::::0;;-1:-1:-1;;;;26647:16:0;26661:1;26647:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26647:16:0::1;26623:40;;26684:6;26674:4;26679:1;26674:7;;;;;;;;:::i;:::-;;;;;;:16;-1:-1:-1::0;;;;;26674:16:0::1;;;-1:-1:-1::0;;;;;26674:16:0::1;;;::::0;::::1;16052:42;26701:4;26706:1;26701:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26701:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:14;15850:42:::1;26726:66;26793:13:::0;26808:1:::1;26811:4:::0;26817:6:::1;26825:22;:15;26843:4;26825:22;:::i;:::-;26726:122;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16710:9:0;:17;;-1:-1:-1;;;;16710:17:0;;;-1:-1:-1;26866:4:0::1;::::0;26527:351;-1:-1:-1;;;;26527:351:0:o;26439:80::-;26490:21;:19;:21::i;:::-;26482:5;;:29;;:5;:29;:::i;28113:235::-;28226:7;28221:26;;28235:12;:10;:12::i;:::-;28258:44;28276:6;28284:9;28295:6;28258:17;:44::i;:::-;28318:7;28313:27;;28327:13;23762:1;23752:7;:11;23710:61;30120:94;30162:7;15404:17;30189:7;;:17;;;;:::i;:::-;30182:24;;30120:94;:::o;23579:123::-;23624:7;;23635:1;23624:12;23620:51;;23579:123::o;23620:51::-;23693:1;23683:7;:11;23579:123::o;28356:721::-;28459:9;;-1:-1:-1;;;28459:9:0;;;;28458:10;;:28;;-1:-1:-1;28472:14:0;;-1:-1:-1;;;28472:14:0;;;;28458:28;28454:616;;;28504:15;28521:23;28546:12;28560:23;28585:12;28599:13;28616:19;28627:7;28616:10;:19::i;:::-;-1:-1:-1;;;;;28668:15:0;;;;;;:7;:15;;;;;;28503:132;;-1:-1:-1;28503:132:0;;-1:-1:-1;28503:132:0;;-1:-1:-1;28503:132:0;-1:-1:-1;28503:132:0;-1:-1:-1;28503:132:0;-1:-1:-1;28668:25:0;;28503:132;;28668:25;:::i;:::-;-1:-1:-1;;;;;28650:15:0;;;;;;;:7;:15;;;;;;:43;;;;28729:18;;;;;;;:36;;28750:15;;28729:36;:::i;:::-;-1:-1:-1;;;;;28708:18:0;;;;;;:7;:18;;;;;:57;28825:10;:8;:10::i;:::-;28817:18;;:5;:18;:::i;:::-;-1:-1:-1;;;;;28806:6:0;28798:15;;;;;:7;:15;;;;;;:38;;;;:::i;:::-;-1:-1:-1;;;;;28788:6:0;28780:15;;;;;:7;:15;;;;;:56;28861:7;;:14;;28871:4;;28861:14;:::i;:::-;28851:7;:24;28903:10;;:17;;28916:4;;28903:17;:::i;:::-;28890:10;:30;28940:44;;529:25:1;;;-1:-1:-1;;;;;28940:44:0;;;;;;;;;;517:2:1;502:18;28940:44:0;;;;;;;28488:508;;;;;;28356:721;;;:::o;28454:616::-;29039:9;-1:-1:-1;;;;;29022:36:0;29031:6;-1:-1:-1;;;;;29022:36:0;;29050:7;29022:36;;;;529:25:1;;517:2;502:18;;383:177;28454:616:0;28356:721;;;:::o;29085:416::-;29144:7;29153;29162;29171;29180;29189;29210:23;29235:12;29249:13;29266:32;29278:7;29287:1;29290:7;;29266:11;:32::i;:::-;29209:89;;;;;;29310:15;29327:23;29352:12;29368:45;29380:7;29389:4;29395:5;29402:10;:8;:10::i;:::-;29368:11;:45::i;:::-;29309:104;;;;-1:-1:-1;29309:104:0;;-1:-1:-1;29464:15:0;;-1:-1:-1;29481:4:0;;-1:-1:-1;29487:5:0;;-1:-1:-1;29085:416:0;;-1:-1:-1;;;;;29085:416:0:o;29509:283::-;29603:7;;;;29677:3;29656:18;29666:8;29656:7;:18;:::i;:::-;:24;;;;:::i;:::-;29641:39;-1:-1:-1;29691:13:0;29726:3;29707:16;29717:6;29707:7;:16;:::i;:::-;:22;;;;:::i;:::-;29691:38;-1:-1:-1;29691:38:0;29748:14;29758:4;29748:7;:14;:::i;:::-;:22;;;;:::i;:::-;29740:44;29772:4;;-1:-1:-1;29772:4:0;-1:-1:-1;29509:283:0;-1:-1:-1;;;;29509:283:0:o;29800:312::-;29910:7;;;;29966:21;29976:11;29966:7;:21;:::i;:::-;29948:39;-1:-1:-1;29998:12:0;30013:18;30020:11;30013:4;:18;:::i;:::-;29998:33;-1:-1:-1;30050:7:0;30077:19;30085:11;30077:5;:19;:::i;:::-;30059:14;30069:4;30059:7;:14;:::i;:::-;:38;;;;:::i;:::-;30042:62;;;;-1:-1:-1;30099:4:0;;-1:-1:-1;29800:312:0;-1:-1:-1;;;;;;29800:312:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;565:548::-;677:4;706:2;735;724:9;717:21;767:6;761:13;810:6;805:2;794:9;790:18;783:34;835:1;845:140;859:6;856:1;853:13;845:140;;;954:14;;;950:23;;944:30;920:17;;;939:2;916:26;909:66;874:10;;845:140;;;849:3;1034:1;1029:2;1020:6;1009:9;1005:22;1001:31;994:42;1104:2;1097;1093:7;1088:2;1080:6;1076:15;1072:29;1061:9;1057:45;1053:54;1045:62;;;;565:548;;;;:::o;1118:254::-;1186:6;1194;1247:2;1235:9;1226:7;1222:23;1218:32;1215:52;;;1263:1;1260;1253:12;1215:52;1286:29;1305:9;1286:29;:::i;:::-;1276:39;1362:2;1347:18;;;;1334:32;;-1:-1:-1;;;1118:254:1:o;2040:328::-;2117:6;2125;2133;2186:2;2174:9;2165:7;2161:23;2157:32;2154:52;;;2202:1;2199;2192:12;2154:52;2225:29;2244:9;2225:29;:::i;:::-;2215:39;;2273:38;2307:2;2296:9;2292:18;2273:38;:::i;:::-;2263:48;;2358:2;2347:9;2343:18;2330:32;2320:42;;2040:328;;;;;:::o;3225:180::-;3284:6;3337:2;3325:9;3316:7;3312:23;3308:32;3305:52;;;3353:1;3350;3343:12;3305:52;-1:-1:-1;3376:23:1;;3225:180;-1:-1:-1;3225:180:1:o;3410:260::-;3478:6;3486;3539:2;3527:9;3518:7;3514:23;3510:32;3507:52;;;3555:1;3552;3545:12;3507:52;3578:29;3597:9;3578:29;:::i;:::-;3568:39;;3626:38;3660:2;3649:9;3645:18;3626:38;:::i;:::-;3616:48;;3410:260;;;;;:::o;3675:380::-;3754:1;3750:12;;;;3797;;;3818:61;;3872:4;3864:6;3860:17;3850:27;;3818:61;3925:2;3917:6;3914:14;3894:18;3891:38;3888:161;;3971:10;3966:3;3962:20;3959:1;3952:31;4006:4;4003:1;3996:15;4034:4;4031:1;4024:15;3888:161;;3675:380;;;:::o;4060:127::-;4121:10;4116:3;4112:20;4109:1;4102:31;4152:4;4149:1;4142:15;4176:4;4173:1;4166:15;4192:136;4231:3;4259:5;4249:39;;4268:18;;:::i;:::-;-1:-1:-1;;;4304:18:1;;4192:136::o;4333:184::-;4403:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;-1:-1:-1;4495:16:1;;4333:184;-1:-1:-1;4333:184:1:o;4522:168::-;4595:9;;;4626;;4643:15;;;4637:22;;4623:37;4613:71;;4664:18;;:::i;4695:127::-;4756:10;4751:3;4747:20;4744:1;4737:31;4787:4;4784:1;4777:15;4811:4;4808:1;4801:15;4827:120;4867:1;4893;4883:35;;4898:18;;:::i;:::-;-1:-1:-1;4932:9:1;;4827:120::o;5361:128::-;5428:9;;;5449:11;;;5446:37;;;5463:18;;:::i;5494:179::-;5572:13;;5625:22;5614:34;;5604:45;;5594:73;;5663:1;5660;5653:12;5678:473;5781:6;5789;5797;5805;5813;5866:3;5854:9;5845:7;5841:23;5837:33;5834:53;;;5883:1;5880;5873:12;5834:53;5906:39;5935:9;5906:39;:::i;:::-;5896:49;;5985:2;5974:9;5970:18;5964:25;5954:35;;6029:2;6018:9;6014:18;6008:25;5998:35;;6073:2;6062:9;6058:18;6052:25;6042:35;;6096:49;6140:3;6129:9;6125:19;6096:49;:::i;:::-;6086:59;;5678:473;;;;;;;;:::o;6156:193::-;6195:1;6221;6211:35;;6226:18;;:::i;:::-;-1:-1:-1;;;6262:18:1;;-1:-1:-1;;6282:13:1;;6258:38;6255:64;;;6299:18;;:::i;:::-;-1:-1:-1;6333:10:1;;6156:193::o;6354:125::-;6419:9;;;6440:10;;;6437:36;;;6453:18;;:::i;11500:127::-;11561:10;11556:3;11552:20;11549:1;11542:31;11592:4;11589:1;11582:15;11616:4;11613:1;11606:15;11632:127;11693:10;11688:3;11684:20;11681:1;11674:31;11724:4;11721:1;11714:15;11748:4;11745:1;11738:15;11764:980;12026:4;12074:3;12063:9;12059:19;12105:6;12094:9;12087:25;12131:2;12169:6;12164:2;12153:9;12149:18;12142:34;12212:3;12207:2;12196:9;12192:18;12185:31;12236:6;12271;12265:13;12302:6;12294;12287:22;12340:3;12329:9;12325:19;12318:26;;12379:2;12371:6;12367:15;12353:29;;12400:1;12410:195;12424:6;12421:1;12418:13;12410:195;;;12489:13;;-1:-1:-1;;;;;12485:39:1;12473:52;;12580:15;;;;12545:12;;;;12521:1;12439:9;12410:195;;;-1:-1:-1;;;;;;;12661:32:1;;;;12656:2;12641:18;;12634:60;-1:-1:-1;;;12725:3:1;12710:19;12703:35;12622:3;11764:980;-1:-1:-1;;;11764:980:1:o;12875:545::-;12977:2;12972:3;12969:11;12966:448;;;13013:1;13038:5;13034:2;13027:17;13083:4;13079:2;13069:19;13153:2;13141:10;13137:19;13134:1;13130:27;13124:4;13120:38;13189:4;13177:10;13174:20;13171:47;;;-1:-1:-1;13212:4:1;13171:47;13267:2;13262:3;13258:12;13255:1;13251:20;13245:4;13241:31;13231:41;;13322:82;13340:2;13333:5;13330:13;13322:82;;;13385:17;;;13366:1;13355:13;13322:82;;;13326:3;;;12875:545;;;:::o;13596:1352::-;13722:3;13716:10;13749:18;13741:6;13738:30;13735:56;;;13771:18;;:::i;:::-;13800:97;13890:6;13850:38;13882:4;13876:11;13850:38;:::i;:::-;13844:4;13800:97;:::i;:::-;13952:4;;14016:2;14005:14;;14033:1;14028:663;;;;14735:1;14752:6;14749:89;;;-1:-1:-1;14804:19:1;;;14798:26;14749:89;-1:-1:-1;;13553:1:1;13549:11;;;13545:24;13541:29;13531:40;13577:1;13573:11;;;13528:57;14851:81;;13998:944;;14028:663;12822:1;12815:14;;;12859:4;12846:18;;-1:-1:-1;;14064:20:1;;;14182:236;14196:7;14193:1;14190:14;14182:236;;;14285:19;;;14279:26;14264:42;;14377:27;;;;14345:1;14333:14;;;;14212:19;;14182:236;;;14186:3;14446:6;14437:7;14434:19;14431:201;;;14507:19;;;14501:26;-1:-1:-1;;14590:1:1;14586:14;;;14602:3;14582:24;14578:37;14574:42;14559:58;14544:74;;14431:201;-1:-1:-1;;;;;14678:1:1;14662:14;;;14658:22;14645:36;;-1:-1:-1;13596:1352:1:o

Swarm Source

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