ETH Price: $2,507.79 (+0.24%)

Token

FUR BALL (FUR)
 

Overview

Max Total Supply

1,000,000,000 FUR

Holders

1,260

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
48,015.369450060126028791 FUR

Value
$0.00
0xeafa5831cc540735fa117024c7b6f0b553ee7d7a
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:
FURBALL

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;


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


pragma solidity ^0.8.0;

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

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

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

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

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

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


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


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


pragma solidity >=0.6.2;

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

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




pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


pragma solidity >=0.5.0;

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

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

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

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

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




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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract FURBALL is Context, Ownable, IERC20, IERC20Metadata{
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _transferDelay;
    mapping (address => bool) private _holderDelay;
    mapping (address => bool) private _presaleList;
    mapping (address => bool) public blacklist;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private openedAt = 0;
    bool private tradingActive = false;
    bool private presaleActive = false;
    bool private _transferDelayEnabled = false;
    bool private _blacklistEnabled = true;
    bool private _taxEnabled = true;
    bool public _limitsEnabled;
    uint256 private maxTxAmount;
    uint256 private maxWallet;
    address private uniswapV3NFT;
    bool private protectUniV3LPAdd = true;

    // exlcude from fees and max transaction amount
    mapping (address => bool) public _isExempt;


    constructor() {
        _name = 'FUR BALL';
        _symbol = 'FUR';
        _decimals = 18;
        _totalSupply = 1_000_000_000 * 1e18;

       IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswapv2
        uniswapV2Router = _uniswapV2Router;
        uniswapV3NFT = address(0xC36442b4a4522E871399CD717aBDD847Ab11FE88);

        _isExempt[address(msg.sender)] = true;
        _isExempt[address(this)] = true;
        _isExempt[address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)] = true;
        _isExempt[address(0xdead)];
        

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply); // Optional
    }

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

    function setPair(address _univ2pair) external onlyOwner {
        uniswapV2Pair = _univ2pair;
    }

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

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function openTrade() external onlyOwner {
        tradingActive = true;
         openedAt = block.number;
    }

    function openPresale() external onlyOwner {
        maxTxAmount = _totalSupply.div(200); // 0.5%
        maxWallet = _totalSupply.div(200); // 0.5%
        _limitsEnabled = true;
        _transferDelayEnabled = true;
        presaleActive = true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!blacklist[sender] && !blacklist[recipient], "TOKEN: You are a bad actor!");

        if (!presaleActive) {
            require( _isExempt[sender] || _isExempt[recipient], "Presale Trading is not active."); 
        }

        if (!tradingActive) {
            require( _isExempt[sender] || _isExempt[recipient] || _presaleList[sender] || _presaleList[recipient], "Trading is not active.");
        }

        if (protectUniV3LPAdd && (sender == uniswapV3NFT || recipient == uniswapV3NFT)) {
            require(_isExempt[sender] || _isExempt[recipient], "You are not authorized to add LP to Univ3");
        }
        
        if (_transferDelayEnabled) {
            bool oktoswap;
            oktoswap = transferDelay(sender,recipient,tx.origin);
            require(oktoswap, "transfer delay enabled");
        }

        if (_limitsEnabled) {
            //on buys
            if (sender == uniswapV2Pair && !_isExempt[recipient]) {
                require(amount <= maxTxAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                require(amount + _balances[recipient] <= maxWallet, "Max wallet exceeded");
            }
            //on sells
            else if (recipient == uniswapV2Pair && !_isExempt[sender]) {
                require(amount <= maxTxAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }
            // on transfers
            else if(!_isExempt[recipient]){
                require(amount + _balances[recipient] <= maxWallet, "Max wallet exceeded");
            }
        }

        _beforeTokenTransfer(sender, recipient, amount);

        if (_taxEnabled && !((_isExempt[sender]) || (_isExempt[recipient]))) {
            uint256 burnAmount = amount.mul(10).div(100); // 10%
            amount = amount.sub(burnAmount);
            burnEarlyTaxes(sender,burnAmount);
        }
       
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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 _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { 
    }

    function airdropPresalers(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "200 limit for gas fees");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e18;
            _presaleList[wallet] = true;
            _transfer(msg.sender, wallet, amount);
        }
    }

   function setBlacklist(address[] memory wallets_) public onlyOwner {
       require(_blacklistEnabled, "unable to blacklist anymore");
        for (uint256 i = 0; i < wallets_.length; i++) {
            blacklist[wallets_[i]] = true;
        }
    }

    function disableTransferDelay() public onlyOwner {
        _transferDelayEnabled = false;
    }


    function disableUniV3LPProtect() public onlyOwner {
        protectUniV3LPAdd = false;
    }

    function disableBlacklist() public onlyOwner {
        _blacklistEnabled = false;
    }

    function disableTax() public onlyOwner {
        _taxEnabled = false;
    }

    function disableLimits() public onlyOwner {
        _limitsEnabled = false;
    }

    function removeBlacklist(address wallets) public onlyOwner {
        blacklist[wallets] = false;
    }

    function prepMigration() public onlyOwner {
        _transferDelayEnabled = false;
        _taxEnabled = false;
        _limitsEnabled = false;
    }

    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function updateLimits(uint256 _txAmount, uint256 _walletAmount)
        external
        onlyOwner
    {
        maxTxAmount = _txAmount*1e18;
        maxWallet = _walletAmount*1e18;
    }

    function burnEarlyTaxes(address sender, uint256 _amount) private {
        if (_amount == 0) {
            return;
        }
        address deadAddress = address(0xdead);
        _balances[sender] = _balances[sender].sub(_amount, "ERC20: transfer amount exceeds balance");
        _balances[deadAddress] = _balances[deadAddress].add(_amount);
        emit Transfer(sender, deadAddress, _amount);
    }

    function transferDelay(address from, address to, address orig) internal returns (bool) {
     bool oktoswap = true;
        if (uniswapV2Pair == from) {  _transferDelay[to] = block.number;  _transferDelay[orig] = block.number;}
        else if (uniswapV2Pair == to) {
            if (_transferDelay[from] >= block.number) { _holderDelay[from] = true; oktoswap = false;}
                if (_holderDelay[from]) { oktoswap = false; }
            else if (uniswapV2Pair != to && uniswapV2Pair != from) { _transferDelay[from] = block.number; _transferDelay[to] = block.number; _transferDelay[orig] = block.number;}
        }
        return (oktoswap);
    }
}

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":[{"internalType":"address","name":"","type":"address"}],"name":"_isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropPresalers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableUniV3LPProtect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallets","type":"address"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets_","type":"address[]"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_univ2pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txAmount","type":"uint256"},{"internalType":"uint256","name":"_walletAmount","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600d55600e805464010100000064ffffffffff199091161790556011805460ff60a01b1916600160a01b1790553480156200004057600080fd5b506200004c33620001af565b604080518082019091526008815267119554881090531360c21b6020820152600a906200007a9082620002a4565b50604080518082019091526003815262232aa960e91b6020820152600b90620000a49082620002a4565b50600c8054601260ff1991821681179092556b033b2e3c9fd0803ce8000000600990815560018054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0319918216811783556011805473c36442b4a4522e871399cd717abdd847ab11fe8893169290921790915533600081815260209687526040808220805488168617905530825280822080548816861790557f3c6737805ae477fd0cfdda13dc5f99b32fcbfecb81e47f9e11e1b03813c08ec280549097169094179095559254838552600386528285208190559151918252939192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000370565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200022a57607f821691505b6020821081036200024b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029f57600081815260208120601f850160051c810160208610156200027a5750805b601f850160051c820191505b818110156200029b5782815560010162000286565b5050505b505050565b81516001600160401b03811115620002c057620002c0620001ff565b620002d881620002d1845462000215565b8462000251565b602080601f831160018114620003105760008415620002f75750858301515b600019600386901b1c1916600185901b1785556200029b565b600085815260208120601f198616915b82811015620003415788860151825594840194600190910190840162000320565b5085821015620003605787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611d1880620003806000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806395d89b411161010f578063e884f260116100a2578063f5648a4f11610071578063f5648a4f14610434578063f928364c1461043c578063f9f92be414610444578063fb201b1d1461046757600080fd5b8063e884f260146103fe578063ea43915e14610406578063eb91e6511461040e578063f2fde38b1461042157600080fd5b8063b5668fcd116100de578063b5668fcd14610387578063bf772491146103aa578063ced695a4146103bd578063dd62ed3e146103c557600080fd5b806395d89b4114610346578063a2240e191461034e578063a457c2d714610361578063a9059cbb1461037457600080fd5b806349bd5a5e11610187578063715018a611610156578063715018a6146103125780638187f5161461031a5780638da5cb5b1461032d5780638dd983121461033e57600080fd5b806349bd5a5e146102ae5780635895792a146102d95780636184fce6146102e157806370a08231146102e957600080fd5b80631f57414f116101c35780631f57414f1461025d57806323b872dd14610273578063313ce56714610286578063395093511461029b57600080fd5b806306fdde03146101f5578063095ea7b31461021357806318160ddd146102365780631d35485c14610248575b600080fd5b6101fd61046f565b60405161020a919061184f565b60405180910390f35b6102266102213660046118b9565b610501565b604051901515815260200161020a565b6009545b60405190815260200161020a565b61025b6102563660046119c0565b610518565b005b600e546102269065010000000000900460ff1681565b610226610281366004611a7b565b610689565b600c5460405160ff909116815260200161020a565b6102266102a93660046118b9565b6106f2565b6002546102c1906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b61025b610728565b61025b610761565b61023a6102f7366004611ab7565b6001600160a01b031660009081526003602052604090205490565b61025b61079c565b61025b610328366004611ab7565b6107d2565b6000546001600160a01b03166102c1565b61025b61081e565b6101fd610883565b61025b61035c366004611ad2565b610892565b61022661036f3660046118b9565b6108ea565b6102266103823660046118b9565b610939565b610226610395366004611ab7565b60126020526000908152604090205460ff1681565b61025b6103b8366004611af4565b610946565b61025b610a35565b61023a6103d3366004611b29565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61025b610a6f565b61025b610aa7565b61025b61041c366004611ab7565b610ae0565b61025b61042f366004611ab7565b610b2b565b61025b610bc6565b61025b610c3d565b610226610452366004611ab7565b60086020526000908152604090205460ff1681565b61025b610c78565b6060600a805461047e90611b5c565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa90611b5c565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b5050505050905090565b600061050e338484610cb5565b5060015b92915050565b6000546001600160a01b0316331461054b5760405162461bcd60e51b815260040161054290611b96565b60405180910390fd5b805182511461059c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610542565b60c88251106105e65760405162461bcd60e51b8152602060048201526016602482015275323030206c696d697420666f7220676173206665657360501b6044820152606401610542565b60005b825181101561068457600083828151811061060657610606611bcb565b60200260200101519050600083838151811061062457610624611bcb565b6020026020010151670de0b6b3a764000061063f9190611bf7565b6001600160a01b0383166000908152600760205260409020805460ff19166001179055905061066f338383610dda565b5050808061067c90611c0e565b9150506105e9565b505050565b6000610696848484610dda565b6106e884336106e385604051806060016040528060288152602001611c96602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611594565b610cb5565b5060019392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161050e9185906106e390866115c0565b6000546001600160a01b031633146107525760405162461bcd60e51b815260040161054290611b96565b6011805460ff60a01b19169055565b6000546001600160a01b0316331461078b5760405162461bcd60e51b815260040161054290611b96565b600e805465ffff00ff000019169055565b6000546001600160a01b031633146107c65760405162461bcd60e51b815260040161054290611b96565b6107d060006115d3565b565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260040161054290611b96565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108485760405162461bcd60e51b815260040161054290611b96565b6009546108569060c8611623565b600f556009546108679060c8611623565b601055600e805465ff0000ffff00191665010000010100179055565b6060600b805461047e90611b5c565b6000546001600160a01b031633146108bc5760405162461bcd60e51b815260040161054290611b96565b6108ce82670de0b6b3a7640000611bf7565b600f556108e381670de0b6b3a7640000611bf7565b6010555050565b600061050e33846106e385604051806060016040528060258152602001611cbe602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611594565b600061050e338484610dda565b6000546001600160a01b031633146109705760405162461bcd60e51b815260040161054290611b96565b600e546301000000900460ff166109c95760405162461bcd60e51b815260206004820152601b60248201527f756e61626c6520746f20626c61636b6c69737420616e796d6f726500000000006044820152606401610542565b60005b8151811015610a31576001600860008484815181106109ed576109ed611bcb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a2981611c0e565b9150506109cc565b5050565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161054290611b96565b600e805464ff0000000019169055565b6000546001600160a01b03163314610a995760405162461bcd60e51b815260040161054290611b96565b600e805462ff000019169055565b6000546001600160a01b03163314610ad15760405162461bcd60e51b815260040161054290611b96565b600e805463ff00000019169055565b6000546001600160a01b03163314610b0a5760405162461bcd60e51b815260040161054290611b96565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610b555760405162461bcd60e51b815260040161054290611b96565b6001600160a01b038116610bba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610542565b610bc3816115d3565b50565b6000546001600160a01b03163314610bf05760405162461bcd60e51b815260040161054290611b96565b604051600090339047908381818185875af1925050503d8060008114610c32576040519150601f19603f3d011682016040523d82523d6000602084013e610c37565b606091505b50505050565b6000546001600160a01b03163314610c675760405162461bcd60e51b815260040161054290611b96565b600e805465ff000000000019169055565b6000546001600160a01b03163314610ca25760405162461bcd60e51b815260040161054290611b96565b600e805460ff1916600117905543600d55565b6001600160a01b038316610d175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610542565b6001600160a01b038216610d785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610542565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610542565b6001600160a01b038216610ea05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610542565b6001600160a01b03831660009081526008602052604090205460ff16158015610ee257506001600160a01b03821660009081526008602052604090205460ff16155b610f2e5760405162461bcd60e51b815260206004820152601b60248201527f544f4b454e3a20596f7520617265206120626164206163746f722100000000006044820152606401610542565b600e54610100900460ff16610fc8576001600160a01b03831660009081526012602052604090205460ff1680610f7c57506001600160a01b03821660009081526012602052604090205460ff165b610fc85760405162461bcd60e51b815260206004820152601e60248201527f50726573616c652054726164696e67206973206e6f74206163746976652e00006044820152606401610542565b600e5460ff1661109c576001600160a01b03831660009081526012602052604090205460ff168061101157506001600160a01b03821660009081526012602052604090205460ff165b8061103457506001600160a01b03831660009081526007602052604090205460ff165b8061105757506001600160a01b03821660009081526007602052604090205460ff165b61109c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610542565b601154600160a01b900460ff1680156110d957506011546001600160a01b03848116911614806110d957506011546001600160a01b038381169116145b1561117b576001600160a01b03831660009081526012602052604090205460ff168061111d57506001600160a01b03821660009081526012602052604090205460ff165b61117b5760405162461bcd60e51b815260206004820152602960248201527f596f7520617265206e6f7420617574686f72697a656420746f20616464204c5060448201526820746f20556e69763360b81b6064820152608401610542565b600e5462010000900460ff16156111e357600061119984843261162f565b9050806111e15760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610542565b505b600e5465010000000000900460ff1615611447576002546001600160a01b03848116911614801561122d57506001600160a01b03821660009081526012602052604090205460ff16155b1561131157600f548111156112a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610542565b6010546001600160a01b0383166000908152600360205260409020546112c89083611c27565b111561130c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610542565b611447565b6002546001600160a01b03838116911614801561134757506001600160a01b03831660009081526012602052604090205460ff16155b156113bd57600f5481111561130c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610542565b6001600160a01b03821660009081526012602052604090205460ff16611447576010546001600160a01b0383166000908152600360205260409020546114039083611c27565b11156114475760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610542565b600e54640100000000900460ff16801561149d57506001600160a01b03831660009081526012602052604090205460ff168061149b57506001600160a01b03821660009081526012602052604090205460ff165b155b156114d45760006114ba60646114b484600a611764565b90611623565b90506114c68282611770565b91506114d2848261177c565b505b61151181604051806060016040528060268152602001611c70602691396001600160a01b0386166000908152600360205260409020549190611594565b6001600160a01b03808516600090815260036020526040808220939093559084168152205461154090826115c0565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dcd9085815260200190565b600081848411156115b85760405162461bcd60e51b8152600401610542919061184f565b505050900390565b60006115cc8284611c27565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006115cc8284611c3a565b6002546000906001906001600160a01b03808716911603611676576001600160a01b038085166000908152600560205260408082204390819055928616825290205561175c565b6002546001600160a01b0380861691160361175c576001600160a01b03851660009081526005602052604090205443116116cf57506001600160a01b0384166000908152600660205260408120805460ff191660011790555b6001600160a01b03851660009081526006602052604090205460ff16156116f85750600061175c565b6002546001600160a01b0385811691161480159061172457506002546001600160a01b03868116911614155b1561175c576001600160a01b038086166000908152600560205260408082204390819055878416835281832081905592861682529020555b949350505050565b60006115cc8284611bf7565b60006115cc8284611c5c565b80600003611788575050565b600061dead90506117cc82604051806060016040528060268152602001611c70602691396001600160a01b0386166000908152600360205260409020549190611594565b6001600160a01b0380851660009081526003602052604080822093909355908316815220546117fb90836115c0565b6001600160a01b0380831660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dcd9086815260200190565b600060208083528351808285015260005b8181101561187c57858101830151858201604001528201611860565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118b457600080fd5b919050565b600080604083850312156118cc57600080fd5b6118d58361189d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611922576119226118e3565b604052919050565b600067ffffffffffffffff821115611944576119446118e3565b5060051b60200190565b600082601f83011261195f57600080fd5b8135602061197461196f8361192a565b6118f9565b82815260059290921b8401810191818101908684111561199357600080fd5b8286015b848110156119b5576119a88161189d565b8352918301918301611997565b509695505050505050565b600080604083850312156119d357600080fd5b823567ffffffffffffffff808211156119eb57600080fd5b6119f78683870161194e565b9350602091508185013581811115611a0e57600080fd5b85019050601f81018613611a2157600080fd5b8035611a2f61196f8261192a565b81815260059190911b82018301908381019088831115611a4e57600080fd5b928401925b82841015611a6c57833582529284019290840190611a53565b80955050505050509250929050565b600080600060608486031215611a9057600080fd5b611a998461189d565b9250611aa76020850161189d565b9150604084013590509250925092565b600060208284031215611ac957600080fd5b6115cc8261189d565b60008060408385031215611ae557600080fd5b50508035926020909101359150565b600060208284031215611b0657600080fd5b813567ffffffffffffffff811115611b1d57600080fd5b61175c8482850161194e565b60008060408385031215611b3c57600080fd5b611b458361189d565b9150611b536020840161189d565b90509250929050565b600181811c90821680611b7057607f821691505b602082108103611b9057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761051257610512611be1565b600060018201611c2057611c20611be1565b5060010190565b8082018082111561051257610512611be1565b600082611c5757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561051257610512611be156fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122044b0b7265d945ba147d228ecc33aa5b680b5626fb9a061ebeba4ad8c03d42ce364736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806395d89b411161010f578063e884f260116100a2578063f5648a4f11610071578063f5648a4f14610434578063f928364c1461043c578063f9f92be414610444578063fb201b1d1461046757600080fd5b8063e884f260146103fe578063ea43915e14610406578063eb91e6511461040e578063f2fde38b1461042157600080fd5b8063b5668fcd116100de578063b5668fcd14610387578063bf772491146103aa578063ced695a4146103bd578063dd62ed3e146103c557600080fd5b806395d89b4114610346578063a2240e191461034e578063a457c2d714610361578063a9059cbb1461037457600080fd5b806349bd5a5e11610187578063715018a611610156578063715018a6146103125780638187f5161461031a5780638da5cb5b1461032d5780638dd983121461033e57600080fd5b806349bd5a5e146102ae5780635895792a146102d95780636184fce6146102e157806370a08231146102e957600080fd5b80631f57414f116101c35780631f57414f1461025d57806323b872dd14610273578063313ce56714610286578063395093511461029b57600080fd5b806306fdde03146101f5578063095ea7b31461021357806318160ddd146102365780631d35485c14610248575b600080fd5b6101fd61046f565b60405161020a919061184f565b60405180910390f35b6102266102213660046118b9565b610501565b604051901515815260200161020a565b6009545b60405190815260200161020a565b61025b6102563660046119c0565b610518565b005b600e546102269065010000000000900460ff1681565b610226610281366004611a7b565b610689565b600c5460405160ff909116815260200161020a565b6102266102a93660046118b9565b6106f2565b6002546102c1906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b61025b610728565b61025b610761565b61023a6102f7366004611ab7565b6001600160a01b031660009081526003602052604090205490565b61025b61079c565b61025b610328366004611ab7565b6107d2565b6000546001600160a01b03166102c1565b61025b61081e565b6101fd610883565b61025b61035c366004611ad2565b610892565b61022661036f3660046118b9565b6108ea565b6102266103823660046118b9565b610939565b610226610395366004611ab7565b60126020526000908152604090205460ff1681565b61025b6103b8366004611af4565b610946565b61025b610a35565b61023a6103d3366004611b29565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61025b610a6f565b61025b610aa7565b61025b61041c366004611ab7565b610ae0565b61025b61042f366004611ab7565b610b2b565b61025b610bc6565b61025b610c3d565b610226610452366004611ab7565b60086020526000908152604090205460ff1681565b61025b610c78565b6060600a805461047e90611b5c565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa90611b5c565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b5050505050905090565b600061050e338484610cb5565b5060015b92915050565b6000546001600160a01b0316331461054b5760405162461bcd60e51b815260040161054290611b96565b60405180910390fd5b805182511461059c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610542565b60c88251106105e65760405162461bcd60e51b8152602060048201526016602482015275323030206c696d697420666f7220676173206665657360501b6044820152606401610542565b60005b825181101561068457600083828151811061060657610606611bcb565b60200260200101519050600083838151811061062457610624611bcb565b6020026020010151670de0b6b3a764000061063f9190611bf7565b6001600160a01b0383166000908152600760205260409020805460ff19166001179055905061066f338383610dda565b5050808061067c90611c0e565b9150506105e9565b505050565b6000610696848484610dda565b6106e884336106e385604051806060016040528060288152602001611c96602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611594565b610cb5565b5060019392505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161050e9185906106e390866115c0565b6000546001600160a01b031633146107525760405162461bcd60e51b815260040161054290611b96565b6011805460ff60a01b19169055565b6000546001600160a01b0316331461078b5760405162461bcd60e51b815260040161054290611b96565b600e805465ffff00ff000019169055565b6000546001600160a01b031633146107c65760405162461bcd60e51b815260040161054290611b96565b6107d060006115d3565b565b6000546001600160a01b031633146107fc5760405162461bcd60e51b815260040161054290611b96565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108485760405162461bcd60e51b815260040161054290611b96565b6009546108569060c8611623565b600f556009546108679060c8611623565b601055600e805465ff0000ffff00191665010000010100179055565b6060600b805461047e90611b5c565b6000546001600160a01b031633146108bc5760405162461bcd60e51b815260040161054290611b96565b6108ce82670de0b6b3a7640000611bf7565b600f556108e381670de0b6b3a7640000611bf7565b6010555050565b600061050e33846106e385604051806060016040528060258152602001611cbe602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190611594565b600061050e338484610dda565b6000546001600160a01b031633146109705760405162461bcd60e51b815260040161054290611b96565b600e546301000000900460ff166109c95760405162461bcd60e51b815260206004820152601b60248201527f756e61626c6520746f20626c61636b6c69737420616e796d6f726500000000006044820152606401610542565b60005b8151811015610a31576001600860008484815181106109ed576109ed611bcb565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a2981611c0e565b9150506109cc565b5050565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161054290611b96565b600e805464ff0000000019169055565b6000546001600160a01b03163314610a995760405162461bcd60e51b815260040161054290611b96565b600e805462ff000019169055565b6000546001600160a01b03163314610ad15760405162461bcd60e51b815260040161054290611b96565b600e805463ff00000019169055565b6000546001600160a01b03163314610b0a5760405162461bcd60e51b815260040161054290611b96565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610b555760405162461bcd60e51b815260040161054290611b96565b6001600160a01b038116610bba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610542565b610bc3816115d3565b50565b6000546001600160a01b03163314610bf05760405162461bcd60e51b815260040161054290611b96565b604051600090339047908381818185875af1925050503d8060008114610c32576040519150601f19603f3d011682016040523d82523d6000602084013e610c37565b606091505b50505050565b6000546001600160a01b03163314610c675760405162461bcd60e51b815260040161054290611b96565b600e805465ff000000000019169055565b6000546001600160a01b03163314610ca25760405162461bcd60e51b815260040161054290611b96565b600e805460ff1916600117905543600d55565b6001600160a01b038316610d175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610542565b6001600160a01b038216610d785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610542565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610e3e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610542565b6001600160a01b038216610ea05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610542565b6001600160a01b03831660009081526008602052604090205460ff16158015610ee257506001600160a01b03821660009081526008602052604090205460ff16155b610f2e5760405162461bcd60e51b815260206004820152601b60248201527f544f4b454e3a20596f7520617265206120626164206163746f722100000000006044820152606401610542565b600e54610100900460ff16610fc8576001600160a01b03831660009081526012602052604090205460ff1680610f7c57506001600160a01b03821660009081526012602052604090205460ff165b610fc85760405162461bcd60e51b815260206004820152601e60248201527f50726573616c652054726164696e67206973206e6f74206163746976652e00006044820152606401610542565b600e5460ff1661109c576001600160a01b03831660009081526012602052604090205460ff168061101157506001600160a01b03821660009081526012602052604090205460ff165b8061103457506001600160a01b03831660009081526007602052604090205460ff165b8061105757506001600160a01b03821660009081526007602052604090205460ff165b61109c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610542565b601154600160a01b900460ff1680156110d957506011546001600160a01b03848116911614806110d957506011546001600160a01b038381169116145b1561117b576001600160a01b03831660009081526012602052604090205460ff168061111d57506001600160a01b03821660009081526012602052604090205460ff165b61117b5760405162461bcd60e51b815260206004820152602960248201527f596f7520617265206e6f7420617574686f72697a656420746f20616464204c5060448201526820746f20556e69763360b81b6064820152608401610542565b600e5462010000900460ff16156111e357600061119984843261162f565b9050806111e15760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610542565b505b600e5465010000000000900460ff1615611447576002546001600160a01b03848116911614801561122d57506001600160a01b03821660009081526012602052604090205460ff16155b1561131157600f548111156112a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610542565b6010546001600160a01b0383166000908152600360205260409020546112c89083611c27565b111561130c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610542565b611447565b6002546001600160a01b03838116911614801561134757506001600160a01b03831660009081526012602052604090205460ff16155b156113bd57600f5481111561130c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610542565b6001600160a01b03821660009081526012602052604090205460ff16611447576010546001600160a01b0383166000908152600360205260409020546114039083611c27565b11156114475760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610542565b600e54640100000000900460ff16801561149d57506001600160a01b03831660009081526012602052604090205460ff168061149b57506001600160a01b03821660009081526012602052604090205460ff165b155b156114d45760006114ba60646114b484600a611764565b90611623565b90506114c68282611770565b91506114d2848261177c565b505b61151181604051806060016040528060268152602001611c70602691396001600160a01b0386166000908152600360205260409020549190611594565b6001600160a01b03808516600090815260036020526040808220939093559084168152205461154090826115c0565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dcd9085815260200190565b600081848411156115b85760405162461bcd60e51b8152600401610542919061184f565b505050900390565b60006115cc8284611c27565b9392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006115cc8284611c3a565b6002546000906001906001600160a01b03808716911603611676576001600160a01b038085166000908152600560205260408082204390819055928616825290205561175c565b6002546001600160a01b0380861691160361175c576001600160a01b03851660009081526005602052604090205443116116cf57506001600160a01b0384166000908152600660205260408120805460ff191660011790555b6001600160a01b03851660009081526006602052604090205460ff16156116f85750600061175c565b6002546001600160a01b0385811691161480159061172457506002546001600160a01b03868116911614155b1561175c576001600160a01b038086166000908152600560205260408082204390819055878416835281832081905592861682529020555b949350505050565b60006115cc8284611bf7565b60006115cc8284611c5c565b80600003611788575050565b600061dead90506117cc82604051806060016040528060268152602001611c70602691396001600160a01b0386166000908152600360205260409020549190611594565b6001600160a01b0380851660009081526003602052604080822093909355908316815220546117fb90836115c0565b6001600160a01b0380831660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610dcd9086815260200190565b600060208083528351808285015260005b8181101561187c57858101830151858201604001528201611860565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146118b457600080fd5b919050565b600080604083850312156118cc57600080fd5b6118d58361189d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611922576119226118e3565b604052919050565b600067ffffffffffffffff821115611944576119446118e3565b5060051b60200190565b600082601f83011261195f57600080fd5b8135602061197461196f8361192a565b6118f9565b82815260059290921b8401810191818101908684111561199357600080fd5b8286015b848110156119b5576119a88161189d565b8352918301918301611997565b509695505050505050565b600080604083850312156119d357600080fd5b823567ffffffffffffffff808211156119eb57600080fd5b6119f78683870161194e565b9350602091508185013581811115611a0e57600080fd5b85019050601f81018613611a2157600080fd5b8035611a2f61196f8261192a565b81815260059190911b82018301908381019088831115611a4e57600080fd5b928401925b82841015611a6c57833582529284019290840190611a53565b80955050505050509250929050565b600080600060608486031215611a9057600080fd5b611a998461189d565b9250611aa76020850161189d565b9150604084013590509250925092565b600060208284031215611ac957600080fd5b6115cc8261189d565b60008060408385031215611ae557600080fd5b50508035926020909101359150565b600060208284031215611b0657600080fd5b813567ffffffffffffffff811115611b1d57600080fd5b61175c8482850161194e565b60008060408385031215611b3c57600080fd5b611b458361189d565b9150611b536020840161189d565b90509250929050565b600181811c90821680611b7057607f821691505b602082108103611b9057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761051257610512611be1565b600060018201611c2057611c20611be1565b5060010190565b8082018082111561051257610512611be1565b600082611c5757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561051257610512611be156fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122044b0b7265d945ba147d228ecc33aa5b680b5626fb9a061ebeba4ad8c03d42ce364736f6c63430008110033

Deployed Bytecode Sourcemap

20915:10197:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22851:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23814:169;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;23814:169:0;1004:187:1;23237:100:0;23317:12;;23237:100;;;1342:25:1;;;1330:2;1315:18;23237:100:0;1196:177:1;28082:529:0;;;;;;:::i;:::-;;:::i;:::-;;21818:26;;;;;;;;;;;;23991:321;;;;;;:::i;:::-;;:::i;23146:83::-;23212:9;;23146:83;;23212:9;;;;4269:36:1;;4257:2;4242:18;23146:83:0;4127:184:1;24320:218:0;;;;;;:::i;:::-;;:::i;21066:28::-;;;;;-1:-1:-1;;;;;21066:28:0;;;;;;-1:-1:-1;;;;;4480:32:1;;;4462:51;;4450:2;4435:18;21066:28:0;4316:203:1;28986:94:0;;;:::i;29473:153::-;;;:::i;23345:119::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23438:18:0;23411:7;23438:18;;;:9;:18;;;;;;;23345:119;2418:103;;;:::i;22942:101::-;;;;;;:::i;:::-;;:::i;1767:87::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;1767:87;;24945:258;;;:::i;23051:87::-;;;:::i;29827:194::-;;;;;;:::i;:::-;;:::i;24546:269::-;;;;;;:::i;:::-;;:::i;23472:175::-;;;;;;:::i;:::-;;:::i;22051:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28618:253;;;;;;:::i;:::-;;:::i;29185:77::-;;;:::i;23655:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;23771:18:0;;;23744:7;23771:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23655:151;28879:97;;;:::i;29088:89::-;;;:::i;29361:104::-;;;;;;:::i;:::-;;:::i;2676:201::-;;;;;;:::i;:::-;;:::i;29634:185::-;;;:::i;29270:83::-;;;:::i;21398:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24823:114;;;:::i;22851:83::-;22888:13;22921:5;22914:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22851:83;:::o;23814:169::-;23897:4;23914:39;685:10;23937:7;23946:6;23914:8;:39::i;:::-;-1:-1:-1;23971:4:0;23814:169;;;;;:::o;28082:529::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;;;;;;;;;28224:15:::1;:22;28206:7;:14;:40;28198:83;;;::::0;-1:-1:-1;;;28198:83:0;;6534:2:1;28198:83:0::1;::::0;::::1;6516:21:1::0;6573:2;6553:18;;;6546:30;6612:32;6592:18;;;6585:60;6662:18;;28198:83:0::1;6332:354:1::0;28198:83:0::1;28317:3;28300:7;:14;:20;28292:55;;;::::0;-1:-1:-1;;;28292:55:0;;6893:2:1;28292:55:0::1;::::0;::::1;6875:21:1::0;6932:2;6912:18;;;6905:30;-1:-1:-1;;;6951:18:1;;;6944:52;7013:18;;28292:55:0::1;6691:346:1::0;28292:55:0::1;28362:9;28358:246;28381:7;:14;28377:1;:18;28358:246;;;28416:14;28433:7;28441:1;28433:10;;;;;;;;:::i;:::-;;;;;;;28416:27;;28458:14;28475:15;28491:1;28475:18;;;;;;;;:::i;:::-;;;;;;;28494:4;28475:23;;;;:::i;:::-;-1:-1:-1::0;;;;;28513:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;:27;;-1:-1:-1;;28513:27:0::1;28536:4;28513:27;::::0;;28458:40;-1:-1:-1;28555:37:0::1;28565:10;28526:6:::0;28458:40;28555:9:::1;:37::i;:::-;28401:203;;28397:3;;;;;:::i;:::-;;;;28358:246;;;;28082:529:::0;;:::o;23991:321::-;24097:4;24114:36;24124:6;24132:9;24143:6;24114:9;:36::i;:::-;24161:121;24170:6;685:10;24192:89;24230:6;24192:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24192:19:0;;;;;;:11;:19;;;;;;;;685:10;24192:33;;;;;;;;;;:37;:89::i;:::-;24161:8;:121::i;:::-;-1:-1:-1;24300:4:0;23991:321;;;;;:::o;24320:218::-;685:10;24408:4;24457:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24457:34:0;;;;;;;;;;24408:4;;24425:83;;24448:7;;24457:50;;24496:10;24457:38;:50::i;28986:94::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29047:17:::1;:25:::0;;-1:-1:-1;;;;29047:25:0::1;::::0;;28986:94::o;29473:153::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29526:21:::1;:29:::0;;-1:-1:-1;;29596:22:0;;;29473:153::o;2418:103::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;2483:30:::1;2510:1;2483:18;:30::i;:::-;2418:103::o:0;22942:101::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;23009:13:::1;:26:::0;;-1:-1:-1;;;;;;23009:26:0::1;-1:-1:-1::0;;;;;23009:26:0;;;::::1;::::0;;;::::1;::::0;;22942:101::o;24945:258::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;25012:12:::1;::::0;:21:::1;::::0;25029:3:::1;25012:16;:21::i;:::-;24998:11;:35:::0;25064:12:::1;::::0;:21:::1;::::0;25081:3:::1;25064:16;:21::i;:::-;25052:9;:33:::0;25104:14:::1;:21:::0;;-1:-1:-1;;25175:20:0;;;;;24945:258::o;23051:87::-;23090:13;23123:7;23116:14;;;;;:::i;29827:194::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29958:14:::1;:9:::0;29968:4:::1;29958:14;:::i;:::-;29944:11;:28:::0;29995:18:::1;:13:::0;30009:4:::1;29995:18;:::i;:::-;29983:9;:30:::0;-1:-1:-1;;29827:194:0:o;24546:269::-;24639:4;24656:129;685:10;24679:7;24688:96;24727:15;24688:96;;;;;;;;;;;;;;;;;685:10;24688:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24688:34:0;;;;;;;;;;;;:38;:96::i;23472:175::-;23558:4;23575:42;685:10;23599:9;23610:6;23575:9;:42::i;28618:253::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;28702:17:::1;::::0;;;::::1;;;28694:57;;;::::0;-1:-1:-1;;;28694:57:0;;7821:2:1;28694:57:0::1;::::0;::::1;7803:21:1::0;7860:2;7840:18;;;7833:30;7899:29;7879:18;;;7872:57;7946:18;;28694:57:0::1;7619:351:1::0;28694:57:0::1;28767:9;28762:102;28786:8;:15;28782:1;:19;28762:102;;;28848:4;28823:9;:22;28833:8;28842:1;28833:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;28823:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;28823:22:0;:29;;-1:-1:-1;;28823:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28803:3;::::1;::::0;::::1;:::i;:::-;;;;28762:102;;;;28618:253:::0;:::o;29185:77::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29235:11:::1;:19:::0;;-1:-1:-1;;29235:19:0::1;::::0;;29185:77::o;28879:97::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;28939:21:::1;:29:::0;;-1:-1:-1;;28939:29:0::1;::::0;;28879:97::o;29088:89::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29144:17:::1;:25:::0;;-1:-1:-1;;29144:25:0::1;::::0;;29088:89::o;29361:104::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29431:18:0::1;29452:5;29431:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;29431:26:0::1;::::0;;29361:104::o;2676:201::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2765:22:0;::::1;2757:73;;;::::0;-1:-1:-1;;;2757:73:0;;8177:2:1;2757:73:0::1;::::0;::::1;8159:21:1::0;8216:2;8196:18;;;8189:30;8255:34;8235:18;;;8228:62;-1:-1:-1;;;8306:18:1;;;8299:36;8352:19;;2757:73:0::1;7975:402:1::0;2757:73:0::1;2841:28;2860:8;2841:18;:28::i;:::-;2676:201:::0;:::o;29634:185::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29729:82:::1;::::0;29692:12:::1;::::0;29737:10:::1;::::0;29761:21:::1;::::0;29692:12;29729:82;29692:12;29729:82;29761:21;29737:10;29729:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;29634:185:0:o;29270:83::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;29323:14:::1;:22:::0;;-1:-1:-1;;29323:22:0::1;::::0;;29270:83::o;24823:114::-;1813:7;1840:6;-1:-1:-1;;;;;1840:6:0;685:10;1987:23;1979:68;;;;-1:-1:-1;;;1979:68:0;;;;;;;:::i;:::-;24874:13:::1;:20:::0;;-1:-1:-1;;24874:20:0::1;24890:4;24874:20;::::0;;24917:12:::1;24906:8;:23:::0;24823:114::o;27622:346::-;-1:-1:-1;;;;;27724:19:0;;27716:68;;;;-1:-1:-1;;;27716:68:0;;8794:2:1;27716:68:0;;;8776:21:1;8833:2;8813:18;;;8806:30;8872:34;8852:18;;;8845:62;-1:-1:-1;;;8923:18:1;;;8916:34;8967:19;;27716:68:0;8592:400:1;27716:68:0;-1:-1:-1;;;;;27803:21:0;;27795:68;;;;-1:-1:-1;;;27795:68:0;;9199:2:1;27795:68:0;;;9181:21:1;9238:2;9218:18;;;9211:30;9277:34;9257:18;;;9250:62;-1:-1:-1;;;9328:18:1;;;9321:32;9370:19;;27795:68:0;8997:398:1;27795:68:0;-1:-1:-1;;;;;27876:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27928:32;;1342:25:1;;;27928:32:0;;1315:18:1;27928:32:0;;;;;;;;27622:346;;;:::o;25211:2403::-;-1:-1:-1;;;;;25317:20:0;;25309:70;;;;-1:-1:-1;;;25309:70:0;;9602:2:1;25309:70:0;;;9584:21:1;9641:2;9621:18;;;9614:30;9680:34;9660:18;;;9653:62;-1:-1:-1;;;9731:18:1;;;9724:35;9776:19;;25309:70:0;9400:401:1;25309:70:0;-1:-1:-1;;;;;25398:23:0;;25390:71;;;;-1:-1:-1;;;25390:71:0;;10008:2:1;25390:71:0;;;9990:21:1;10047:2;10027:18;;;10020:30;10086:34;10066:18;;;10059:62;-1:-1:-1;;;10137:18:1;;;10130:33;10180:19;;25390:71:0;9806:399:1;25390:71:0;-1:-1:-1;;;;;25481:17:0;;;;;;:9;:17;;;;;;;;25480:18;:43;;;;-1:-1:-1;;;;;;25503:20:0;;;;;;:9;:20;;;;;;;;25502:21;25480:43;25472:83;;;;-1:-1:-1;;;25472:83:0;;10412:2:1;25472:83:0;;;10394:21:1;10451:2;10431:18;;;10424:30;10490:29;10470:18;;;10463:57;10537:18;;25472:83:0;10210:351:1;25472:83:0;25573:13;;;;;;;25568:133;;-1:-1:-1;;;;;25612:17:0;;;;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;25633:20:0;;;;;;:9;:20;;;;;;;;25612:41;25603:85;;;;-1:-1:-1;;;25603:85:0;;10768:2:1;25603:85:0;;;10750:21:1;10807:2;10787:18;;;10780:30;10846:32;10826:18;;;10819:60;10896:18;;25603:85:0;10566:354:1;25603:85:0;25718:13;;;;25713:175;;-1:-1:-1;;;;;25757:17:0;;;;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;25778:20:0;;;;;;:9;:20;;;;;;;;25757:41;:65;;;-1:-1:-1;;;;;;25802:20:0;;;;;;:12;:20;;;;;;;;25757:65;:92;;;-1:-1:-1;;;;;;25826:23:0;;;;;;:12;:23;;;;;;;;25757:92;25748:128;;;;-1:-1:-1;;;25748:128:0;;11127:2:1;25748:128:0;;;11109:21:1;11166:2;11146:18;;;11139:30;-1:-1:-1;;;11185:18:1;;;11178:52;11247:18;;25748:128:0;10925:346:1;25748:128:0;25904:17;;-1:-1:-1;;;25904:17:0;;;;:74;;;;-1:-1:-1;25936:12:0;;-1:-1:-1;;;;;25926:22:0;;;25936:12;;25926:22;;:51;;-1:-1:-1;25965:12:0;;-1:-1:-1;;;;;25952:25:0;;;25965:12;;25952:25;25926:51;25900:202;;;-1:-1:-1;;;;;26003:17:0;;;;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;26024:20:0;;;;;;:9;:20;;;;;;;;26003:41;25995:95;;;;-1:-1:-1;;;25995:95:0;;11478:2:1;25995:95:0;;;11460:21:1;11517:2;11497:18;;;11490:30;11556:34;11536:18;;;11529:62;-1:-1:-1;;;11607:18:1;;;11600:39;11656:19;;25995:95:0;11276:405:1;25995:95:0;26126:21;;;;;;;26122:192;;;26164:13;26203:41;26217:6;26224:9;26234;26203:13;:41::i;:::-;26192:52;;26267:8;26259:43;;;;-1:-1:-1;;;26259:43:0;;11888:2:1;26259:43:0;;;11870:21:1;11927:2;11907:18;;;11900:30;-1:-1:-1;;;11946:18:1;;;11939:52;12008:18;;26259:43:0;11686:346:1;26259:43:0;26149:165;26122:192;26330:14;;;;;;;26326:740;;;26398:13;;-1:-1:-1;;;;;26388:23:0;;;26398:13;;26388:23;:48;;;;-1:-1:-1;;;;;;26416:20:0;;;;;;:9;:20;;;;;;;;26415:21;26388:48;26384:671;;;26475:11;;26465:6;:21;;26457:87;;;;-1:-1:-1;;;26457:87:0;;12239:2:1;26457:87:0;;;12221:21:1;12278:2;12258:18;;;12251:30;12317:34;12297:18;;;12290:62;-1:-1:-1;;;12368:18:1;;;12361:51;12429:19;;26457:87:0;12037:417:1;26457:87:0;26604:9;;-1:-1:-1;;;;;26580:20:0;;;;;;:9;:20;;;;;;26571:29;;:6;:29;:::i;:::-;:42;;26563:74;;;;-1:-1:-1;;;26563:74:0;;12791:2:1;26563:74:0;;;12773:21:1;12830:2;12810:18;;;12803:30;-1:-1:-1;;;12849:18:1;;;12842:49;12908:18;;26563:74:0;12589:343:1;26563:74:0;26384:671;;;26713:13;;-1:-1:-1;;;;;26700:26:0;;;26713:13;;26700:26;:48;;;;-1:-1:-1;;;;;;26731:17:0;;;;;;:9;:17;;;;;;;;26730:18;26700:48;26696:359;;;26787:11;;26777:6;:21;;26769:88;;;;-1:-1:-1;;;26769:88:0;;13139:2:1;26769:88:0;;;13121:21:1;13178:2;13158:18;;;13151:30;13217:34;13197:18;;;13190:62;-1:-1:-1;;;13268:18:1;;;13261:52;13330:19;;26769:88:0;12937:418:1;26696:359:0;-1:-1:-1;;;;;26925:20:0;;;;;;:9;:20;;;;;;;;26921:134;;27006:9;;-1:-1:-1;;;;;26982:20:0;;;;;;:9;:20;;;;;;26973:29;;:6;:29;:::i;:::-;:42;;26965:74;;;;-1:-1:-1;;;26965:74:0;;12791:2:1;26965:74:0;;;12773:21:1;12830:2;12810:18;;;12803:30;-1:-1:-1;;;12849:18:1;;;12842:49;12908:18;;26965:74:0;12589:343:1;26965:74:0;27142:11;;;;;;;:63;;;;-1:-1:-1;;;;;;27160:17:0;;;;;;:9;:17;;;;;;;;;27159:45;;-1:-1:-1;;;;;;27183:20:0;;;;;;:9;:20;;;;;;;;27159:45;27157:48;27142:63;27138:241;;;27222:18;27243:23;27262:3;27243:14;:6;27254:2;27243:10;:14::i;:::-;:18;;:23::i;:::-;27222:44;-1:-1:-1;27297:22:0;:6;27222:44;27297:10;:22::i;:::-;27288:31;;27334:33;27349:6;27356:10;27334:14;:33::i;:::-;27207:172;27138:241;27418:71;27440:6;27418:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27418:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;27398:17:0;;;;;;;:9;:17;;;;;;:91;;;;27523:20;;;;;;;:32;;27548:6;27523:24;:32::i;:::-;-1:-1:-1;;;;;27500:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27571:35;;;;;;;;;;27599:6;1342:25:1;;1330:2;1315:18;;1196:177;7867:240:0;7987:7;8048:12;8040:6;;;;8032:29;;;;-1:-1:-1;;;8032:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8083:5:0;;;7867:240::o;5588:98::-;5646:7;5673:5;5677:1;5673;:5;:::i;:::-;5666:12;5588:98;-1:-1:-1;;;5588:98:0:o;3037:191::-;3111:16;3130:6;;-1:-1:-1;;;;;3147:17:0;;;-1:-1:-1;;;;;;3147:17:0;;;;;;3180:40;;3130:6;;;;;;;3180:40;;3111:16;3180:40;3100:128;3037:191;:::o;6725:98::-;6783:7;6810:5;6814:1;6810;:5;:::i;30447:662::-;30577:13;;30528:4;;30558;;-1:-1:-1;;;;;30577:21:0;;;:13;;:21;30573:501;;-1:-1:-1;;;;;30603:18:0;;;;;;;:14;:18;;;;;;30624:12;30603:33;;;;30639:20;;;;;;;:35;30573:501;;;30695:13;;-1:-1:-1;;;;;30695:19:0;;;:13;;:19;30691:383;;-1:-1:-1;;;;;30735:20:0;;;;;;:14;:20;;;;;;30759:12;-1:-1:-1;30731:89:0;;-1:-1:-1;;;;;;30775:18:0;;;;;;:12;:18;;;;;:25;;-1:-1:-1;;30775:25:0;30796:4;30775:25;;;30731:89;-1:-1:-1;;;;;30842:18:0;;;;;;:12;:18;;;;;;;;30838:225;;;-1:-1:-1;30875:5:0;30838:225;;;30906:13;;-1:-1:-1;;;;;30906:19:0;;;:13;;:19;;;;:44;;-1:-1:-1;30929:13:0;;-1:-1:-1;;;;;30929:21:0;;;:13;;:21;;30906:44;30902:161;;;-1:-1:-1;;;;;30954:20:0;;;;;;;:14;:20;;;;;;30977:12;30954:35;;;;30991:18;;;;;;;;:33;;;31026:20;;;;;;;:35;30902:161;31092:8;30447:662;-1:-1:-1;;;;30447:662:0:o;6326:98::-;6384:7;6411:5;6415:1;6411;:5;:::i;5969:98::-;6027:7;6054:5;6058:1;6054;:5;:::i;30029:410::-;30109:7;30120:1;30109:12;30105:51;;30029:410;;:::o;30105:51::-;30166:19;30196:6;30166:37;;30234:72;30256:7;30234:72;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30234:17:0;;;;;;:9;:17;;;;;;;:72;:21;:72::i;:::-;-1:-1:-1;;;;;30214:17:0;;;;;;;:9;:17;;;;;;:92;;;;30342:22;;;;;;;:35;;30369:7;30342:26;:35::i;:::-;-1:-1:-1;;;;;30317:22:0;;;;;;;:9;:22;;;;;;;:60;;;;30393:38;;;;;;;;;;30423:7;1342:25:1;;1330:2;1315:18;;1196:177;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:127::-;1439:10;1434:3;1430:20;1427:1;1420:31;1470:4;1467:1;1460:15;1494:4;1491:1;1484:15;1510:275;1581:2;1575:9;1646:2;1627:13;;-1:-1:-1;;1623:27:1;1611:40;;1681:18;1666:34;;1702:22;;;1663:62;1660:88;;;1728:18;;:::i;:::-;1764:2;1757:22;1510:275;;-1:-1:-1;1510:275:1:o;1790:183::-;1850:4;1883:18;1875:6;1872:30;1869:56;;;1905:18;;:::i;:::-;-1:-1:-1;1950:1:1;1946:14;1962:4;1942:25;;1790:183::o;1978:668::-;2032:5;2085:3;2078:4;2070:6;2066:17;2062:27;2052:55;;2103:1;2100;2093:12;2052:55;2139:6;2126:20;2165:4;2189:60;2205:43;2245:2;2205:43;:::i;:::-;2189:60;:::i;:::-;2283:15;;;2369:1;2365:10;;;;2353:23;;2349:32;;;2314:12;;;;2393:15;;;2390:35;;;2421:1;2418;2411:12;2390:35;2457:2;2449:6;2445:15;2469:148;2485:6;2480:3;2477:15;2469:148;;;2551:23;2570:3;2551:23;:::i;:::-;2539:36;;2595:12;;;;2502;;2469:148;;;-1:-1:-1;2635:5:1;1978:668;-1:-1:-1;;;;;;1978:668:1:o;2651:1138::-;2769:6;2777;2830:2;2818:9;2809:7;2805:23;2801:32;2798:52;;;2846:1;2843;2836:12;2798:52;2886:9;2873:23;2915:18;2956:2;2948:6;2945:14;2942:34;;;2972:1;2969;2962:12;2942:34;2995:61;3048:7;3039:6;3028:9;3024:22;2995:61;:::i;:::-;2985:71;;3075:2;3065:12;;3130:2;3119:9;3115:18;3102:32;3159:2;3149:8;3146:16;3143:36;;;3175:1;3172;3165:12;3143:36;3198:24;;;-1:-1:-1;3253:4:1;3245:13;;3241:27;-1:-1:-1;3231:55:1;;3282:1;3279;3272:12;3231:55;3318:2;3305:16;3341:60;3357:43;3397:2;3357:43;:::i;3341:60::-;3435:15;;;3517:1;3513:10;;;;3505:19;;3501:28;;;3466:12;;;;3541:19;;;3538:39;;;3573:1;3570;3563:12;3538:39;3597:11;;;;3617:142;3633:6;3628:3;3625:15;3617:142;;;3699:17;;3687:30;;3650:12;;;;3737;;;;3617:142;;;3778:5;3768:15;;;;;;;2651:1138;;;;;:::o;3794:328::-;3871:6;3879;3887;3940:2;3928:9;3919:7;3915:23;3911:32;3908:52;;;3956:1;3953;3946:12;3908:52;3979:29;3998:9;3979:29;:::i;:::-;3969:39;;4027:38;4061:2;4050:9;4046:18;4027:38;:::i;:::-;4017:48;;4112:2;4101:9;4097:18;4084:32;4074:42;;3794:328;;;;;:::o;4524:186::-;4583:6;4636:2;4624:9;4615:7;4611:23;4607:32;4604:52;;;4652:1;4649;4642:12;4604:52;4675:29;4694:9;4675:29;:::i;4715:248::-;4783:6;4791;4844:2;4832:9;4823:7;4819:23;4815:32;4812:52;;;4860:1;4857;4850:12;4812:52;-1:-1:-1;;4883:23:1;;;4953:2;4938:18;;;4925:32;;-1:-1:-1;4715:248:1:o;4968:348::-;5052:6;5105:2;5093:9;5084:7;5080:23;5076:32;5073:52;;;5121:1;5118;5111:12;5073:52;5161:9;5148:23;5194:18;5186:6;5183:30;5180:50;;;5226:1;5223;5216:12;5180:50;5249:61;5302:7;5293:6;5282:9;5278:22;5249:61;:::i;5321:260::-;5389:6;5397;5450:2;5438:9;5429:7;5425:23;5421:32;5418:52;;;5466:1;5463;5456:12;5418:52;5489:29;5508:9;5489:29;:::i;:::-;5479:39;;5537:38;5571:2;5560:9;5556:18;5537:38;:::i;:::-;5527:48;;5321:260;;;;;:::o;5586:380::-;5665:1;5661:12;;;;5708;;;5729:61;;5783:4;5775:6;5771:17;5761:27;;5729:61;5836:2;5828:6;5825:14;5805:18;5802:38;5799:161;;5882:10;5877:3;5873:20;5870:1;5863:31;5917:4;5914:1;5907:15;5945:4;5942:1;5935:15;5799:161;;5586:380;;;:::o;5971:356::-;6173:2;6155:21;;;6192:18;;;6185:30;6251:34;6246:2;6231:18;;6224:62;6318:2;6303:18;;5971:356::o;7042:127::-;7103:10;7098:3;7094:20;7091:1;7084:31;7134:4;7131:1;7124:15;7158:4;7155:1;7148:15;7174:127;7235:10;7230:3;7226:20;7223:1;7216:31;7266:4;7263:1;7256:15;7290:4;7287:1;7280:15;7306:168;7379:9;;;7410;;7427:15;;;7421:22;;7407:37;7397:71;;7448:18;;:::i;7479:135::-;7518:3;7539:17;;;7536:43;;7559:18;;:::i;:::-;-1:-1:-1;7606:1:1;7595:13;;7479:135::o;12459:125::-;12524:9;;;12545:10;;;12542:36;;;12558:18;;:::i;13360:217::-;13400:1;13426;13416:132;;13470:10;13465:3;13461:20;13458:1;13451:31;13505:4;13502:1;13495:15;13533:4;13530:1;13523:15;13416:132;-1:-1:-1;13562:9:1;;13360:217::o;13582:128::-;13649:9;;;13670:11;;;13667:37;;;13684:18;;:::i

Swarm Source

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