ETH Price: $3,442.05 (-0.11%)
Gas: 2 Gwei

Token

Burners (BRNR)
 

Overview

Max Total Supply

1,000,000,000 BRNR

Holders

254

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.471397333753746386 BRNR

Value
$0.00
0xD93F2Ba0328633cA07A07201c70B1AeB4c7F43C2
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:
BRNR

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**                             
Burners // TG Multi Mixer.

Website: https://burners.bot
Docs: https://book.burners.bot
Telegram: https://t.me/burnersdotbot

**/


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. 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);
    }
}

// File: Burners/token.sol


pragma solidity ^0.8.17;



library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

// Uniswap Pair

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

// Uniswap Router

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

abstract contract Burners {
    address public marketingWallet = 0xfdec102BF5EB5B4Cd8600f2505C3c7392F51Cee7;
    address public treasuryWallet = 0xfdec102BF5EB5B4Cd8600f2505C3c7392F51Cee7;

    string constant _name = "Burners";
    string constant _symbol = "BRNR";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 1 * 10**9 * 10**_decimals;
    uint256 public _maxTxAmount = (_totalSupply * 10) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * 10) / 1000;
    uint256 public buyFee             = 40;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 38;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;
    uint256 public transFee           = 0;
    uint256 public feeDenominator     = 100;
}

contract BRNR is Burners, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    uint256 public swapAmount = _totalSupply * 20 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

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

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
    
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWallet(uint256 maxWalletPercent) external onlyOwner() {
        _maxWalletToken = maxWalletPercent;
    }

    function setMaxTx(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = maxTxPercent;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != treasuryWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        uint256 feeToTake;
        feeToTake = isSell ? swapTotalFee : buyTotalFee;

        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function feeOnTransfer(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function feeOnSell(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
    }

    function feeOnBuy(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(treasuryWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function triggerSwapBack() external onlyOwner {
        swapBack();
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner() {
        isFeeExempt[holder] = exempt;
    }

    function setIsMaxExempt(address holder, bool exempt) external onlyOwner() {
        isMaxExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() {
        isTimelockExempt[holder] = exempt;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newTreasuryWallet ) external onlyOwner() {

        isFeeExempt[treasuryWallet] = false;
        isFeeExempt[_newTreasuryWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        treasuryWallet = _newTreasuryWallet;
    }

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    /* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"feeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"feeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"feeOnTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","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":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f805473fdec102bf5eb5b4cd8600f2505c3c7392f51cee76001600160a01b03199182168117909255600180549091169091179055620000476012600a62000582565b6200005790633b9aca0062000599565b6002556103e8600254600a6200006e919062000599565b6200007a9190620005b3565b6003556103e8600254600a62000091919062000599565b6200009d9190620005b3565b6004556028600555600554600655600160075560266008556001600955600954600754600854620000cf9190620005d3565b620000db9190620005d3565b600a555f600b556064600c819055600e805461dead6001600160a01b031991821617909155600f8054909116905560146017556018556019805462ffffff1916620a0000179055601b805460ff19166001179055600254612710906200014390601e62000599565b6200014f9190620005b3565b601c55612710600254601462000166919062000599565b620001729190620005b3565b601d5534801562000181575f80fd5b506200018d3362000422565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002089190620005e9565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000254573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027a9190620005e9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002c5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002eb9190620005e9565b6001600160a01b0390811660a0528181166080819052305f8181526011602090815260408083209483529381528382205f1990553380835260128083528584208054600160ff1991821681179092556013808652888720805483168417905560148087528988208054841685179055601587528988208054841685179055600e548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601680546001600160a01b03191685179055600254848252601083528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000611565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004c757815f1904821115620004ab57620004ab62000473565b80851615620004b957918102915b93841c93908002906200048c565b509250929050565b5f82620004df575060016200057c565b81620004ed57505f6200057c565b8160018114620005065760028114620005115762000531565b60019150506200057c565b60ff84111562000525576200052562000473565b50506001821b6200057c565b5060208310610133831016604e8410600b841016171562000556575081810a6200057c565b62000562838362000487565b805f190482111562000578576200057862000473565b0290505b92915050565b5f6200059260ff841683620004cf565b9392505050565b80820281158282048414176200057c576200057c62000473565b5f82620005ce57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200057c576200057c62000473565b5f60208284031215620005fa575f80fd5b81516001600160a01b038116811462000592575f80fd5b60805160a0516122b4620006725f395f81816105ec01528181610f47015281816112510152818161128a015281816112f1015281816114280152611de601525f81816106f701528181611778015281816118300152611a2001526122b45ff3fe60806040526004361061035e575f3560e01c8063658d4b7f116101bd578063a9059cbb116100f2578063dd62ed3e11610092578063f2fde38b1161006d578063f2fde38b146109ae578063f53fd584146109cd578063f84ba65d146109e2578063ffb54a9914610a01575f80fd5b8063dd62ed3e14610936578063e53c30b01461097a578063e632313c1461098f575f80fd5b8063cf703bb9116100cd578063cf703bb9146108ba578063d51ed1c8146108d9578063d7c01032146108f8578063dd395c6314610917575f80fd5b8063a9059cbb1461087c578063bc3371821461066b578063ca33e64c1461089b575f80fd5b806375f0a8741161015d578063893d20e811610138578063893d20e8146108005780638da5cb5b146108145780638e8aaafa1461083157806395d89b4114610850575f80fd5b806375f0a874146107b857806378109e54146107d65780637d1db4a5146107eb575f80fd5b806370a082311161019857806370a0823114610732578063713e4ae514610766578063715018a614610785578063722b62ad14610799575f80fd5b8063658d4b7f146106c757806367ac77b4146106e65780636ddd171314610719575f80fd5b80632e8fa8211161029357806349bd5a5e11610233578063571ac8b01161020e578063571ac8b01461064c5780635c85974f1461066b5780635d0044ca1461068a578063617fe0ed146106a9575f80fd5b806349bd5a5e146105db5780634dd0e4d31461060e57806350db71fb1461062d575f80fd5b8063456d401a1161026e578063456d401a146105665780634626402b1461057a57806346e421a2146105b157806347062402146105c6575f80fd5b80632e8fa8211461051b578063313ce567146105305780633705b39214610551575f80fd5b806318160ddd116102fe578063201e7991116102d9578063201e7991146104aa57806323b872dd146104c957806329e04b4a146104e85780632b112e4914610507575f80fd5b806318160ddd146104625780631da1db5e146104765780631e25dc5414610495575f80fd5b8063095ea7b311610339578063095ea7b3146103de5780630d2959801461040d5780631161ae391461042e578063180b0d7e1461044d575f80fd5b8063026f7d15146103695780630445b6671461039157806306fdde03146103a6575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037e60085481565b6040519081526020015b60405180910390f35b34801561039c575f80fd5b5061037e601c5481565b3480156103b1575f80fd5b506040805180820190915260078152664275726e65727360c81b60208201525b6040516103889190611e36565b3480156103e9575f80fd5b506103fd6103f8366004611e96565b610a1a565b6040519015158152602001610388565b348015610418575f80fd5b5061042c610427366004611ed4565b610a86565b005b348015610439575f80fd5b506103fd610448366004611eed565b610aa1565b348015610458575f80fd5b5061037e600c5481565b34801561046d575f80fd5b5060025461037e565b348015610481575f80fd5b5061042c610490366004611f0d565b610ab4565b3480156104a0575f80fd5b5061037e600b5481565b3480156104b5575f80fd5b5061042c6104c4366004611eed565b610b04565b3480156104d4575f80fd5b506103fd6104e3366004611f24565b610b17565b3480156104f3575f80fd5b5061042c610502366004611f0d565b610bd5565b348015610512575f80fd5b5061037e610be2565b348015610526575f80fd5b5061037e601d5481565b34801561053b575f80fd5b5060125b60405160ff9091168152602001610388565b34801561055c575f80fd5b5061037e60065481565b348015610571575f80fd5b5061042c610c32565b348015610585575f80fd5b50600154610599906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b3480156105bc575f80fd5b5061037e60075481565b3480156105d1575f80fd5b5061037e60055481565b3480156105e6575f80fd5b506105997f000000000000000000000000000000000000000000000000000000000000000081565b348015610619575f80fd5b5061042c610628366004611f0d565b610c44565b348015610638575f80fd5b5061042c610647366004611f62565b610c51565b348015610657575f80fd5b506103fd610666366004611f95565b610c83565b348015610676575f80fd5b5061042c610685366004611f0d565b610c8f565b348015610695575f80fd5b5061042c6106a4366004611f0d565b610c9c565b3480156106b4575f80fd5b506019546103fd90610100900460ff1681565b3480156106d2575f80fd5b5061042c6106e1366004611f62565b610ca9565b3480156106f1575f80fd5b506105997f000000000000000000000000000000000000000000000000000000000000000081565b348015610724575f80fd5b50601b546103fd9060ff1681565b34801561073d575f80fd5b5061037e61074c366004611f95565b6001600160a01b03165f9081526010602052604090205490565b348015610771575f80fd5b5061042c610780366004611ff8565b610cdb565b348015610790575f80fd5b5061042c610ebb565b3480156107a4575f80fd5b5060195461053f9062010000900460ff1681565b3480156107c3575f80fd5b505f54610599906001600160a01b031681565b3480156107e1575f80fd5b5061037e60045481565b3480156107f6575f80fd5b5061037e60035481565b34801561080b575f80fd5b50610599610ecc565b34801561081f575f80fd5b50600d546001600160a01b0316610599565b34801561083c575f80fd5b5061042c61084b366004612075565b610edf565b34801561085b575f80fd5b506040805180820190915260048152632129272960e11b60208201526103d1565b348015610887575f80fd5b506103fd610896366004611e96565b610f15565b3480156108a6575f80fd5b50601654610599906001600160a01b031681565b3480156108c5575f80fd5b5061042c6108d4366004611f0d565b610f21565b3480156108e4575f80fd5b5061037e6108f3366004611f0d565b610f2e565b348015610903575f80fd5b5061042c6109123660046120a4565b610f93565b348015610922575f80fd5b5061042c610931366004611f62565b611033565b348015610941575f80fd5b5061037e6109503660046120ec565b6001600160a01b039182165f90815260116020908152604080832093909416825291909152205490565b348015610985575f80fd5b5061037e600a5481565b34801561099a575f80fd5b5061042c6109a9366004611f0d565b611065565b3480156109b9575f80fd5b5061042c6109c8366004611f95565b611089565b3480156109d8575f80fd5b5061037e60095481565b3480156109ed575f80fd5b5061042c6109fc366004611f62565b6110ff565b348015610a0c575f80fd5b506019546103fd9060ff1681565b335f8181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a749086815260200190565b60405180910390a35060015b92915050565b610a8e611131565b6019805460ff1916911515919091179055565b5f82610aac83610f2e565b119392505050565b5f5447906001600160a01b03166108fc6064610ad08585612137565b610ada919061214e565b6040518115909202915f818181858888f19350505050158015610aff573d5f803e3d5ffd5b505050565b610b0c611131565b601791909155601855565b6001600160a01b0383165f9081526011602090815260408083203384529091528120545f1914610bc0576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601182528381203382529091529190912054610b9c91849061118b565b6001600160a01b0385165f9081526011602090815260408083203384529091529020555b610bcb8484846111b6565b90505b9392505050565b610bdd611131565b601c55565b600f546001600160a01b03165f90815260106020526040812054610c2d90600e546001600160a01b03165f90815260106020526040902054610c2790600254906116ac565b906116ac565b905090565b610c3a611131565b610c426116b7565b565b610c4c611131565b600655565b610c59611131565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f610a80825f19610a1a565b610c97611131565b600355565b610ca4611131565b600455565b610cb1611131565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b610ce3611131565b6101f58310610d4f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b828114610daf5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610d46565b5f805b84811015610de857838382818110610dcc57610dcc61216d565b9050602002013582610dde9190612181565b9150600101610db2565b5080610e08876001600160a01b03165f9081526010602052604090205490565b1015610e565760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610d46565b5f5b84811015610eb257610ea987878784818110610e7657610e7661216d565b9050602002016020810190610e8b9190611f95565b868685818110610e9d57610e9d61216d565b90506020020135611ae3565b50600101610e58565b50505050505050565b610ec3611131565b610c425f611bb3565b5f610c2d600d546001600160a01b031690565b610ee7611131565b600784905560088390556009829055610f0a82610f048686611c04565b90611c04565b600a55600c55505050565b5f610bce3384846111b6565b610f29611131565b600b55565b5f610a80610f3a610be2565b610f8d610f866002610f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f9081526010602052604090205490565b90611c0f565b8590611c0f565b90611c1a565b610f9b611131565b600180546001600160a01b039081165f908152601260209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601490925282208054909516841790945560168054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b61103b611131565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b61106d611131565b601c5481111561108057601c54601d5550565b601d8190555b50565b611091611131565b6001600160a01b0381166110f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d46565b61108681611bb3565b611107611131565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b600d546001600160a01b03163314610c425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d46565b5f81848411156111ae5760405162461bcd60e51b8152600401610d469190611e36565b505050900390565b601e545f9060ff16156111d5576111ce848484611ae3565b9050610bce565b600d546001600160a01b038581169116148015906112015750600d546001600160a01b03848116911614155b1561124f5760195460ff1661124f5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610d46565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416145f8115826112bf57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906112e85750600e546001600160a01b03868116911614155b801561132657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561133f57505f546001600160a01b03868116911614155b801561135957506001546001600160a01b03868116911614155b801561137357506016546001600160a01b03868116911614155b15611426576001600160a01b0385165f9081526010602090815260408083205460149092529091205460ff16611424576004546113b08683612181565b11156114245760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610d46565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614801561146e5750601954610100900460ff165b801561149257506001600160a01b0385165f9081526015602052604090205460ff16155b1561153a576001600160a01b0385165f908152601a6020526040902054421161150b5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610d46565b6019546115219062010000900460ff1642612181565b6001600160a01b0386165f908152601a60205260409020555b6001600160a01b0385165f9081526013602052604090205460ff16611563576115638685611c25565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152601090915291909120546115b491869061118b565b6001600160a01b0387165f908152601060205260409020558381156115ed57600b54156115e8576115e58786611c91565b90505b611635565b6001600160a01b0387165f9081526012602052604090205460ff1615611613578461161e565b61161e878685611d2e565b9050611628611dda565b15611635576116356116b7565b6001600160a01b0386165f908152601060205260409020546116579082611c04565b6001600160a01b038088165f8181526010602052604090819020939093559151908916905f8051602061225f833981519152906116979085815260200190565b60405180910390a35060019695505050505050565b5f610bce8284612194565b601e805460ff191660011790556017546018545f916116d591610aa1565b6116e1576007546116e3565b5f5b90505f6117066002610f8d600a54610f8d86601d54611c0f90919063ffffffff16565b90505f61171e82601d546116ac90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106117565761175661216d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f691906121a7565b816001815181106118095761180961216d565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061186d9086905f908790309042906004016121c2565b5f604051808303815f87803b158015611884575f80fd5b505af1158015611896573d5f803e3d5ffd5b505050505f6118ae82476116ac90919063ffffffff16565b90505f6118c86118bf886002611c1a565b600a54906116ac565b90505f6118e96002610f8d84610f8d60075488611c0f90919063ffffffff16565b90505f61190583610f8d60085487611c0f90919063ffffffff16565b90505f61192184610f8d60095488611c0f90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f8114611975576040519150601f19603f3d011682016040523d82523d5f602084013e61197a565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146119cc576040519150601f19603f3d011682016040523d82523d5f602084013e6119d1565b606091505b505f9250508a159050611acc5760165460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015611a6a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a8f9190612233565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff19169055505050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152601090915291822054611b3391849061118b565b6001600160a01b038086165f908152601060205260408082209390935590851681522054611b619083611c04565b6001600160a01b038085165f8181526010602052604090819020939093559151908616905f8051602061225f83398151915290611ba19086815260200190565b60405180910390a35060019392505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f610bce8284612181565b5f610bce8284612137565b5f610bce828461214e565b60035481111580611c4d57506001600160a01b0382165f9081526013602052604090205460ff165b611c8d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610d46565b5050565b5f80600b5490505f611cba600c546064611cab9190612137565b610f8d6064610f808887611c0f565b305f90815260106020526040902054909150611cd69082611c04565b305f81815260106020526040908190209290925590516001600160a01b038716905f8051602061225f83398151915290611d139085815260200190565b60405180910390a3611d2584826116ac565b95945050505050565b5f8082611d3d57600654611d41565b600a545b90505f611d65600c546064611d569190612137565b610f8d6064610f808987611c0f565b305f90815260106020526040902054909150611d819082611c04565b305f81815260106020526040908190209290925590516001600160a01b038816905f8051602061225f83398151915290611dbe9085815260200190565b60405180910390a3611dd085826116ac565b9695505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611e175750601e5460ff16155b8015610c2d575050601c54305f90815260106020526040902054101590565b5f602080835283518060208501525f5b81811015611e6257858101830151858201604001528201611e46565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611086575f80fd5b5f8060408385031215611ea7575f80fd5b8235611eb281611e82565b946020939093013593505050565b80358015158114611ecf575f80fd5b919050565b5f60208284031215611ee4575f80fd5b610bce82611ec0565b5f8060408385031215611efe575f80fd5b50508035926020909101359150565b5f60208284031215611f1d575f80fd5b5035919050565b5f805f60608486031215611f36575f80fd5b8335611f4181611e82565b92506020840135611f5181611e82565b929592945050506040919091013590565b5f8060408385031215611f73575f80fd5b8235611f7e81611e82565b9150611f8c60208401611ec0565b90509250929050565b5f60208284031215611fa5575f80fd5b8135610bce81611e82565b5f8083601f840112611fc0575f80fd5b50813567ffffffffffffffff811115611fd7575f80fd5b6020830191508360208260051b8501011115611ff1575f80fd5b9250929050565b5f805f805f6060868803121561200c575f80fd5b853561201781611e82565b9450602086013567ffffffffffffffff80821115612033575f80fd5b61203f89838a01611fb0565b90965094506040880135915080821115612057575f80fd5b5061206488828901611fb0565b969995985093965092949392505050565b5f805f8060808587031215612088575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156120b6575f80fd5b83356120c181611e82565b925060208401356120d181611e82565b915060408401356120e181611e82565b809150509250925092565b5f80604083850312156120fd575f80fd5b823561210881611e82565b9150602083013561211881611e82565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a8057610a80612123565b5f8261216857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610a8057610a80612123565b81810381811115610a8057610a80612123565b5f602082840312156121b7575f80fd5b8151610bce81611e82565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156122125784516001600160a01b0316835293830193918301916001016121ed565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612245575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122023872453b10a41dec9b9c717420dce86ed80d5b672fa7d11386ba365e4718d5164736f6c63430008170033

Deployed Bytecode

0x60806040526004361061035e575f3560e01c8063658d4b7f116101bd578063a9059cbb116100f2578063dd62ed3e11610092578063f2fde38b1161006d578063f2fde38b146109ae578063f53fd584146109cd578063f84ba65d146109e2578063ffb54a9914610a01575f80fd5b8063dd62ed3e14610936578063e53c30b01461097a578063e632313c1461098f575f80fd5b8063cf703bb9116100cd578063cf703bb9146108ba578063d51ed1c8146108d9578063d7c01032146108f8578063dd395c6314610917575f80fd5b8063a9059cbb1461087c578063bc3371821461066b578063ca33e64c1461089b575f80fd5b806375f0a8741161015d578063893d20e811610138578063893d20e8146108005780638da5cb5b146108145780638e8aaafa1461083157806395d89b4114610850575f80fd5b806375f0a874146107b857806378109e54146107d65780637d1db4a5146107eb575f80fd5b806370a082311161019857806370a0823114610732578063713e4ae514610766578063715018a614610785578063722b62ad14610799575f80fd5b8063658d4b7f146106c757806367ac77b4146106e65780636ddd171314610719575f80fd5b80632e8fa8211161029357806349bd5a5e11610233578063571ac8b01161020e578063571ac8b01461064c5780635c85974f1461066b5780635d0044ca1461068a578063617fe0ed146106a9575f80fd5b806349bd5a5e146105db5780634dd0e4d31461060e57806350db71fb1461062d575f80fd5b8063456d401a1161026e578063456d401a146105665780634626402b1461057a57806346e421a2146105b157806347062402146105c6575f80fd5b80632e8fa8211461051b578063313ce567146105305780633705b39214610551575f80fd5b806318160ddd116102fe578063201e7991116102d9578063201e7991146104aa57806323b872dd146104c957806329e04b4a146104e85780632b112e4914610507575f80fd5b806318160ddd146104625780631da1db5e146104765780631e25dc5414610495575f80fd5b8063095ea7b311610339578063095ea7b3146103de5780630d2959801461040d5780631161ae391461042e578063180b0d7e1461044d575f80fd5b8063026f7d15146103695780630445b6671461039157806306fdde03146103a6575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037e60085481565b6040519081526020015b60405180910390f35b34801561039c575f80fd5b5061037e601c5481565b3480156103b1575f80fd5b506040805180820190915260078152664275726e65727360c81b60208201525b6040516103889190611e36565b3480156103e9575f80fd5b506103fd6103f8366004611e96565b610a1a565b6040519015158152602001610388565b348015610418575f80fd5b5061042c610427366004611ed4565b610a86565b005b348015610439575f80fd5b506103fd610448366004611eed565b610aa1565b348015610458575f80fd5b5061037e600c5481565b34801561046d575f80fd5b5060025461037e565b348015610481575f80fd5b5061042c610490366004611f0d565b610ab4565b3480156104a0575f80fd5b5061037e600b5481565b3480156104b5575f80fd5b5061042c6104c4366004611eed565b610b04565b3480156104d4575f80fd5b506103fd6104e3366004611f24565b610b17565b3480156104f3575f80fd5b5061042c610502366004611f0d565b610bd5565b348015610512575f80fd5b5061037e610be2565b348015610526575f80fd5b5061037e601d5481565b34801561053b575f80fd5b5060125b60405160ff9091168152602001610388565b34801561055c575f80fd5b5061037e60065481565b348015610571575f80fd5b5061042c610c32565b348015610585575f80fd5b50600154610599906001600160a01b031681565b6040516001600160a01b039091168152602001610388565b3480156105bc575f80fd5b5061037e60075481565b3480156105d1575f80fd5b5061037e60055481565b3480156105e6575f80fd5b506105997f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff381565b348015610619575f80fd5b5061042c610628366004611f0d565b610c44565b348015610638575f80fd5b5061042c610647366004611f62565b610c51565b348015610657575f80fd5b506103fd610666366004611f95565b610c83565b348015610676575f80fd5b5061042c610685366004611f0d565b610c8f565b348015610695575f80fd5b5061042c6106a4366004611f0d565b610c9c565b3480156106b4575f80fd5b506019546103fd90610100900460ff1681565b3480156106d2575f80fd5b5061042c6106e1366004611f62565b610ca9565b3480156106f1575f80fd5b506105997f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610724575f80fd5b50601b546103fd9060ff1681565b34801561073d575f80fd5b5061037e61074c366004611f95565b6001600160a01b03165f9081526010602052604090205490565b348015610771575f80fd5b5061042c610780366004611ff8565b610cdb565b348015610790575f80fd5b5061042c610ebb565b3480156107a4575f80fd5b5060195461053f9062010000900460ff1681565b3480156107c3575f80fd5b505f54610599906001600160a01b031681565b3480156107e1575f80fd5b5061037e60045481565b3480156107f6575f80fd5b5061037e60035481565b34801561080b575f80fd5b50610599610ecc565b34801561081f575f80fd5b50600d546001600160a01b0316610599565b34801561083c575f80fd5b5061042c61084b366004612075565b610edf565b34801561085b575f80fd5b506040805180820190915260048152632129272960e11b60208201526103d1565b348015610887575f80fd5b506103fd610896366004611e96565b610f15565b3480156108a6575f80fd5b50601654610599906001600160a01b031681565b3480156108c5575f80fd5b5061042c6108d4366004611f0d565b610f21565b3480156108e4575f80fd5b5061037e6108f3366004611f0d565b610f2e565b348015610903575f80fd5b5061042c6109123660046120a4565b610f93565b348015610922575f80fd5b5061042c610931366004611f62565b611033565b348015610941575f80fd5b5061037e6109503660046120ec565b6001600160a01b039182165f90815260116020908152604080832093909416825291909152205490565b348015610985575f80fd5b5061037e600a5481565b34801561099a575f80fd5b5061042c6109a9366004611f0d565b611065565b3480156109b9575f80fd5b5061042c6109c8366004611f95565b611089565b3480156109d8575f80fd5b5061037e60095481565b3480156109ed575f80fd5b5061042c6109fc366004611f62565b6110ff565b348015610a0c575f80fd5b506019546103fd9060ff1681565b335f8181526011602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a749086815260200190565b60405180910390a35060015b92915050565b610a8e611131565b6019805460ff1916911515919091179055565b5f82610aac83610f2e565b119392505050565b5f5447906001600160a01b03166108fc6064610ad08585612137565b610ada919061214e565b6040518115909202915f818181858888f19350505050158015610aff573d5f803e3d5ffd5b505050565b610b0c611131565b601791909155601855565b6001600160a01b0383165f9081526011602090815260408083203384529091528120545f1914610bc0576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601182528381203382529091529190912054610b9c91849061118b565b6001600160a01b0385165f9081526011602090815260408083203384529091529020555b610bcb8484846111b6565b90505b9392505050565b610bdd611131565b601c55565b600f546001600160a01b03165f90815260106020526040812054610c2d90600e546001600160a01b03165f90815260106020526040902054610c2790600254906116ac565b906116ac565b905090565b610c3a611131565b610c426116b7565b565b610c4c611131565b600655565b610c59611131565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f610a80825f19610a1a565b610c97611131565b600355565b610ca4611131565b600455565b610cb1611131565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b610ce3611131565b6101f58310610d4f5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b60648201526084015b60405180910390fd5b828114610daf5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610d46565b5f805b84811015610de857838382818110610dcc57610dcc61216d565b9050602002013582610dde9190612181565b9150600101610db2565b5080610e08876001600160a01b03165f9081526010602052604090205490565b1015610e565760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610d46565b5f5b84811015610eb257610ea987878784818110610e7657610e7661216d565b9050602002016020810190610e8b9190611f95565b868685818110610e9d57610e9d61216d565b90506020020135611ae3565b50600101610e58565b50505050505050565b610ec3611131565b610c425f611bb3565b5f610c2d600d546001600160a01b031690565b610ee7611131565b600784905560088390556009829055610f0a82610f048686611c04565b90611c04565b600a55600c55505050565b5f610bce3384846111b6565b610f29611131565b600b55565b5f610a80610f3a610be2565b610f8d610f866002610f807f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff36001600160a01b03165f9081526010602052604090205490565b90611c0f565b8590611c0f565b90611c1a565b610f9b611131565b600180546001600160a01b039081165f908152601260209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601490925282208054909516841790945560168054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b61103b611131565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b61106d611131565b601c5481111561108057601c54601d5550565b601d8190555b50565b611091611131565b6001600160a01b0381166110f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d46565b61108681611bb3565b611107611131565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b600d546001600160a01b03163314610c425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d46565b5f81848411156111ae5760405162461bcd60e51b8152600401610d469190611e36565b505050900390565b601e545f9060ff16156111d5576111ce848484611ae3565b9050610bce565b600d546001600160a01b038581169116148015906112015750600d546001600160a01b03848116911614155b1561124f5760195460ff1661124f5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610d46565b7f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff36001600160a01b03908116908416145f8115826112bf57507f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff36001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906112e85750600e546001600160a01b03868116911614155b801561132657507f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff36001600160a01b0316856001600160a01b031614155b801561133f57505f546001600160a01b03868116911614155b801561135957506001546001600160a01b03868116911614155b801561137357506016546001600160a01b03868116911614155b15611426576001600160a01b0385165f9081526010602090815260408083205460149092529091205460ff16611424576004546113b08683612181565b11156114245760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610d46565b505b7f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff36001600160a01b0316866001600160a01b031614801561146e5750601954610100900460ff165b801561149257506001600160a01b0385165f9081526015602052604090205460ff16155b1561153a576001600160a01b0385165f908152601a6020526040902054421161150b5760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610d46565b6019546115219062010000900460ff1642612181565b6001600160a01b0386165f908152601a60205260409020555b6001600160a01b0385165f9081526013602052604090205460ff16611563576115638685611c25565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f908152601090915291909120546115b491869061118b565b6001600160a01b0387165f908152601060205260409020558381156115ed57600b54156115e8576115e58786611c91565b90505b611635565b6001600160a01b0387165f9081526012602052604090205460ff1615611613578461161e565b61161e878685611d2e565b9050611628611dda565b15611635576116356116b7565b6001600160a01b0386165f908152601060205260409020546116579082611c04565b6001600160a01b038088165f8181526010602052604090819020939093559151908916905f8051602061225f833981519152906116979085815260200190565b60405180910390a35060019695505050505050565b5f610bce8284612194565b601e805460ff191660011790556017546018545f916116d591610aa1565b6116e1576007546116e3565b5f5b90505f6117066002610f8d600a54610f8d86601d54611c0f90919063ffffffff16565b90505f61171e82601d546116ac90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f815181106117565761175661216d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f691906121a7565b816001815181106118095761180961216d565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061186d9086905f908790309042906004016121c2565b5f604051808303815f87803b158015611884575f80fd5b505af1158015611896573d5f803e3d5ffd5b505050505f6118ae82476116ac90919063ffffffff16565b90505f6118c86118bf886002611c1a565b600a54906116ac565b90505f6118e96002610f8d84610f8d60075488611c0f90919063ffffffff16565b90505f61190583610f8d60085487611c0f90919063ffffffff16565b90505f61192184610f8d60095488611c0f90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f8114611975576040519150601f19603f3d011682016040523d82523d5f602084013e61197a565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146119cc576040519150601f19603f3d011682016040523d82523d5f602084013e6119d1565b606091505b505f9250508a159050611acc5760165460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015611a6a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a8f9190612233565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff19169055505050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152601090915291822054611b3391849061118b565b6001600160a01b038086165f908152601060205260408082209390935590851681522054611b619083611c04565b6001600160a01b038085165f8181526010602052604090819020939093559151908616905f8051602061225f83398151915290611ba19086815260200190565b60405180910390a35060019392505050565b600d80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f610bce8284612181565b5f610bce8284612137565b5f610bce828461214e565b60035481111580611c4d57506001600160a01b0382165f9081526013602052604090205460ff165b611c8d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610d46565b5050565b5f80600b5490505f611cba600c546064611cab9190612137565b610f8d6064610f808887611c0f565b305f90815260106020526040902054909150611cd69082611c04565b305f81815260106020526040908190209290925590516001600160a01b038716905f8051602061225f83398151915290611d139085815260200190565b60405180910390a3611d2584826116ac565b95945050505050565b5f8082611d3d57600654611d41565b600a545b90505f611d65600c546064611d569190612137565b610f8d6064610f808987611c0f565b305f90815260106020526040902054909150611d819082611c04565b305f81815260106020526040908190209290925590516001600160a01b038816905f8051602061225f83398151915290611dbe9085815260200190565b60405180910390a3611dd085826116ac565b9695505050505050565b5f336001600160a01b037f000000000000000000000000074aeced5a756536a917a15a6e0bfe7cfa41aff31614801590611e175750601e5460ff16155b8015610c2d575050601c54305f90815260106020526040902054101590565b5f602080835283518060208501525f5b81811015611e6257858101830151858201604001528201611e46565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611086575f80fd5b5f8060408385031215611ea7575f80fd5b8235611eb281611e82565b946020939093013593505050565b80358015158114611ecf575f80fd5b919050565b5f60208284031215611ee4575f80fd5b610bce82611ec0565b5f8060408385031215611efe575f80fd5b50508035926020909101359150565b5f60208284031215611f1d575f80fd5b5035919050565b5f805f60608486031215611f36575f80fd5b8335611f4181611e82565b92506020840135611f5181611e82565b929592945050506040919091013590565b5f8060408385031215611f73575f80fd5b8235611f7e81611e82565b9150611f8c60208401611ec0565b90509250929050565b5f60208284031215611fa5575f80fd5b8135610bce81611e82565b5f8083601f840112611fc0575f80fd5b50813567ffffffffffffffff811115611fd7575f80fd5b6020830191508360208260051b8501011115611ff1575f80fd5b9250929050565b5f805f805f6060868803121561200c575f80fd5b853561201781611e82565b9450602086013567ffffffffffffffff80821115612033575f80fd5b61203f89838a01611fb0565b90965094506040880135915080821115612057575f80fd5b5061206488828901611fb0565b969995985093965092949392505050565b5f805f8060808587031215612088575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156120b6575f80fd5b83356120c181611e82565b925060208401356120d181611e82565b915060408401356120e181611e82565b809150509250925092565b5f80604083850312156120fd575f80fd5b823561210881611e82565b9150602083013561211881611e82565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a8057610a80612123565b5f8261216857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610a8057610a80612123565b81810381811115610a8057610a80612123565b5f602082840312156121b7575f80fd5b8151610bce81611e82565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156122125784516001600160a01b0316835293830193918301916001016121ed565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612245575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122023872453b10a41dec9b9c717420dce86ed80d5b672fa7d11386ba365e4718d5164736f6c63430008170033

Deployed Bytecode Sourcemap

16847:13695:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16581:38;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16581:38:0;;;;;;;;17818:56;;;;;;;;;;;;;;;;19423:71;;;;;;;;;;-1:-1:-1;19486:5:0;;;;;;;;;;;;-1:-1:-1;;;19486:5:0;;;;19423:71;;;;;;;:::i;19833:216::-;;;;;;;;;;-1:-1:-1;19833:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19833:216:0;1205:187:1;25086:94:0;;;;;;;;;;-1:-1:-1;25086:94:0;;;;;:::i;:::-;;:::i;:::-;;29648:150;;;;;;;;;;-1:-1:-1;29648:150:0;;;;;:::i;:::-;;:::i;16800:39::-;;;;;;;;;;;;;;;;19171:88;;;;;;;;;;-1:-1:-1;19244:12:0;;19171:88;;24853:202;;;;;;;;;;-1:-1:-1;24853:202:0;;;;;:::i;:::-;;:::i;16756:37::-;;;;;;;;;;;;;;;;29122:184;;;;;;;;;;-1:-1:-1;29122:184:0;;;;;:::i;:::-;;:::i;20351:370::-;;;;;;;;;;-1:-1:-1;20351:370:0;;;;;:::i;:::-;;:::i;28773:112::-;;;;;;;;;;-1:-1:-1;28773:112:0;;;;;:::i;:::-;;:::i;29314:142::-;;;;;;;;;;;;;:::i;17881:53::-;;;;;;;;;;;;;;;;19265:71;;;;;;;;;;-1:-1:-1;16248:2:0;19265:71;;;2818:4:1;2806:17;;;2788:36;;2776:2;2761:18;19265:71:0;2646:184:1;16488:42:0;;;;;;;;;;;;;;;;27605:75;;;;;;;;;;;;;:::i;16059:74::-;;;;;;;;;;-1:-1:-1;16059:74:0;;;;-1:-1:-1;;;;;16059:74:0;;;;;;-1:-1:-1;;;;;2999:32:1;;;2981:51;;2969:2;2954:18;16059:74:0;2835:203:1;16537:37:0;;;;;;;;;;;;;;;;16443:38;;;;;;;;;;;;;;;;17547;;;;;;;;;;;;;;;25713:94;;;;;;;;;;-1:-1:-1;25713:94:0;;;;;:::i;:::-;;:::i;28083:131::-;;;;;;;;;;-1:-1:-1;28083:131:0;;;;;:::i;:::-;;:::i;20057:122::-;;;;;;;;;;-1:-1:-1;20057:122:0;;;;;:::i;:::-;;:::i;20974:97::-;;;;;;;;;;-1:-1:-1;20974:97:0;;;;;:::i;:::-;;:::i;20729:122::-;;;;;;;;;;-1:-1:-1;20729:122:0;;;;;:::i;:::-;;:::i;17634:38::-;;;;;;;;;;-1:-1:-1;17634:38:0;;;;;;;;;;;27688:121;;;;;;;;;;-1:-1:-1;27688:121:0;;;;;:::i;:::-;;:::i;17490:50::-;;;;;;;;;;;;;;;17781:30;;;;;;;;;;-1:-1:-1;17781:30:0;;;;;;;;19577:105;;;;;;;;;;-1:-1:-1;19577:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;19661:18:0;19643:7;19661:18;;;:9;:18;;;;;;;19577:105;29825:648;;;;;;;;;;-1:-1:-1;29825:648:0;;;;;:::i;:::-;;:::i;5763:103::-;;;;;;;;;;;;;:::i;17679:39::-;;;;;;;;;;-1:-1:-1;17679:39:0;;;;;;;;;;;15977:75;;;;;;;;;;-1:-1:-1;15977:75:0;;;;-1:-1:-1;;;;;15977:75:0;;;16377:59;;;;;;;;;;;;;;;;16314:56;;;;;;;;;;;;;;;;19500:71;;;;;;;;;;;;;:::i;5122:87::-;;;;;;;;;;-1:-1:-1;5195:6:0;;-1:-1:-1;;;;;5195:6:0;5122:87;;25286:419;;;;;;;;;;-1:-1:-1;25286:419:0;;;;;:::i;:::-;;:::i;19342:75::-;;;;;;;;;;-1:-1:-1;19407:7:0;;;;;;;;;;;;-1:-1:-1;;;19407:7:0;;;;19342:75;;20187:156;;;;;;;;;;-1:-1:-1;20187:156:0;;;;;:::i;:::-;;:::i;17361:36::-;;;;;;;;;;-1:-1:-1;17361:36:0;;;;-1:-1:-1;;;;;17361:36:0;;;25188:90;;;;;;;;;;-1:-1:-1;25188:90:0;;;;;:::i;:::-;;:::i;29464:176::-;;;;;;;;;;-1:-1:-1;29464:176:0;;;;;:::i;:::-;;:::i;28222:543::-;;;;;;;;;;-1:-1:-1;28222:543:0;;;;;:::i;:::-;;:::i;27817:121::-;;;;;;;;;;-1:-1:-1;27817:121:0;;;;;:::i;:::-;;:::i;19688:133::-;;;;;;;;;;-1:-1:-1;19688:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;19790:19:0;;;19772:7;19790:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19688:133;16670:79;;;;;;;;;;;;;;;;28893:221;;;;;;;;;;-1:-1:-1;28893:221:0;;;;;:::i;:::-;;:::i;6021:201::-;;;;;;;;;;-1:-1:-1;6021:201:0;;;;;:::i;:::-;;:::i;16626:37::-;;;;;;;;;;;;;;;;27946:129;;;;;;;;;;-1:-1:-1;27946:129:0;;;;;:::i;:::-;;:::i;17594:31::-;;;;;;;;;;-1:-1:-1;17594:31:0;;;;;;;;19833:216;19937:10;19908:4;19925:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19925:32:0;;;;;;;;;;:41;;;19982:37;19908:4;;19925:32;;19982:37;;;;19960:6;160:25:1;;148:2;133:18;;14:177;19982:37:0;;;;;;;;-1:-1:-1;20037:4:0;19833:216;;;;;:::o;25086:94::-;5008:13;:11;:13::i;:::-;25151:11:::1;:21:::0;;-1:-1:-1;;25151:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25086:94::o;29648:150::-;29728:4;29784:6;29752:29;29772:8;29752:19;:29::i;:::-;:38;;29648:150;-1:-1:-1;;;29648:150:0:o;24853:202::-;24926:17;24986:15;24946:21;;-1:-1:-1;;;;;24986:15:0;24978:69;25043:3;25012:28;25024:16;24946:21;25012:28;:::i;:::-;:34;;;;:::i;:::-;24978:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24915:140;24853:202;:::o;29122:184::-;5008:13;:11;:13::i;:::-;29221:15:::1;:25:::0;;;;29257:26:::1;:41:::0;29122:184::o;20351:370::-;-1:-1:-1;;;;;20471:19:0;;20451:4;20471:19;;;:11;:19;;;;;;;;20491:10;20471:31;;;;;;;;-1:-1:-1;;20471:52:0;20468:186;;20573:69;;;;;;;;;;;-1:-1:-1;;;20573:69:0;;;;;;;;-1:-1:-1;;;;;20573:19:0;;-1:-1:-1;20573:19:0;;;:11;:19;;;;;20593:10;20573:31;;;;;;;;;;:69;;20609:6;;20573:35;:69::i;:::-;-1:-1:-1;;;;;20539:19:0;;;;;;:11;:19;;;;;;;;20559:10;20539:31;;;;;;;:103;20468:186;20673:40;20687:6;20695:9;20706:6;20673:13;:40::i;:::-;20666:47;;20351:370;;;;;;:::o;28773:112::-;5008:13;:11;:13::i;:::-;28854::::1;:23:::0;28773:112::o;29314:142::-;29442:4;;-1:-1:-1;;;;;29442:4:0;29367:7;19661:18;;;:9;:18;;;;;;29394:54;;29421:4;;-1:-1:-1;;;;;29421:4:0;19643:7;19661:18;;;:9;:18;;;;;;29394:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;29387:61;;29314:142;:::o;27605:75::-;5008:13;:11;:13::i;:::-;27662:10:::1;:8;:10::i;:::-;27605:75::o:0;25713:94::-;5008:13;:11;:13::i;:::-;25779:11:::1;:20:::0;25713:94::o;28083:131::-;5008:13;:11;:13::i;:::-;-1:-1:-1;;;;;28173:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;28173:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28083:131::o;20057:122::-;20112:4;20136:35;20144:7;-1:-1:-1;;20136:7:0;:35::i;20974:97::-;5008:13;:11;:13::i;:::-;21042:12:::1;:21:::0;20974:97::o;20729:122::-;5008:13;:11;:13::i;:::-;20809:15:::1;:34:::0;20729:122::o;27688:121::-;5008:13;:11;:13::i;:::-;-1:-1:-1;;;;;27773:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27773:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27688:121::o;29825:648::-;5008:13;:11;:13::i;:::-;29978:3:::1;29959:22:::0;::::1;29951:79;;;::::0;-1:-1:-1;;;29951:79:0;;7181:2:1;29951:79:0::1;::::0;::::1;7163:21:1::0;7220:2;7200:18;;;7193:30;7259:34;7239:18;;;7232:62;-1:-1:-1;;;7310:18:1;;;7303:43;7363:19;;29951:79:0::1;;;;;;;;;30049:33:::0;;::::1;30041:85;;;::::0;-1:-1:-1;;;30041:85:0;;7595:2:1;30041:85:0::1;::::0;::::1;7577:21:1::0;7634:2;7614:18;;;7607:30;7673:34;7653:18;;;7646:62;-1:-1:-1;;;7724:18:1;;;7717:38;7772:19;;30041:85:0::1;7393:404:1::0;30041:85:0::1;30139:12;30172:6:::0;30168:90:::1;30182:20:::0;;::::1;30168:90;;;30237:6;;30244:1;30237:9;;;;;;;:::i;:::-;;;;;;;30230:4;:16;;;;:::i;:::-;30223:23:::0;-1:-1:-1;30204:3:0::1;;30168:90;;;;30297:4;30278:15;30288:4;-1:-1:-1::0;;;;;19661:18:0;19643:7;19661:18;;;:9;:18;;;;;;;19577:105;30278:15:::1;:23;;30270:63;;;::::0;-1:-1:-1;;;30270:63:0;;8266:2:1;30270:63:0::1;::::0;::::1;8248:21:1::0;8305:2;8285:18;;;8278:30;8344:29;8324:18;;;8317:57;8391:18;;30270:63:0::1;8064:351:1::0;30270:63:0::1;30350:6;30346:110;30360:20:::0;;::::1;30346:110;;;30401:43;30416:4;30421:9;;30431:1;30421:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30434:6;;30441:1;30434:9;;;;;;;:::i;:::-;;;;;;;30401:14;:43::i;:::-;-1:-1:-1::0;30382:3:0::1;;30346:110;;;;29938:535;29825:648:::0;;;;;:::o;5763:103::-;5008:13;:11;:13::i;:::-;5828:30:::1;5855:1;5828:18;:30::i;19500:71::-:0;19543:7;19561;5195:6;;-1:-1:-1;;;;;5195:6:0;;5122:87;25286:419;5008:13;:11;:13::i;:::-;25444:9:::1;:25:::0;;;25480:13:::1;:36:::0;;;25527:15:::1;:37:::0;;;25590:64:::1;25545:19:::0;25590:39:::1;25456:13:::0;25496:20;25590:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;25575:12;:79:::0;25665:14:::1;:32:::0;-1:-1:-1;;;25286:419:0:o;20187:156::-;20267:4;20291:44;20305:10;20317:9;20328:6;20291:13;:44::i;25188:90::-;5008:13;:11;:13::i;:::-;25256:8:::1;:14:::0;25188:90::o;29464:176::-;29532:7;29559:73;29609:22;:20;:22::i;:::-;29559:45;29572:31;29601:1;29572:24;29582:13;-1:-1:-1;;;;;19661:18:0;19643:7;19661:18;;;:9;:18;;;;;;;19577:105;29572:24;:28;;:31::i;:::-;29559:8;;:12;:45::i;:::-;:49;;:73::i;28222:543::-;5008:13;:11;:13::i;:::-;28383:14:::1;::::0;;-1:-1:-1;;;;;28383:14:0;;::::1;28401:5;28371:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;28371:35:0;;::::1;::::0;;;28417:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;28478:15;;;::::1;28466:28:::0;;;;;:36;;;::::1;::::0;;28513:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;28565:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;28617:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;28617:46:0;;::::1;;::::0;;;28674:37;;;::::1;::::0;;::::1;::::0;;;28722:35;;;;::::1;;::::0;;28222:543::o;27817:121::-;5008:13;:11;:13::i;:::-;-1:-1:-1;;;;;27902:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;27902:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27817:121::o;28893:221::-;5008:13;:11;:13::i;:::-;28978::::1;;28968:7;:23;28965:134;;;29021:13;::::0;29008:10:::1;:26:::0;28893:221;:::o;28965:134::-:1;29067:10;:20:::0;;;28965:134:::1;28893:221:::0;:::o;6021:201::-;5008:13;:11;:13::i;:::-;-1:-1:-1;;;;;6110:22:0;::::1;6102:73;;;::::0;-1:-1:-1;;;6102:73:0;;8622:2:1;6102:73:0::1;::::0;::::1;8604:21:1::0;8661:2;8641:18;;;8634:30;8700:34;8680:18;;;8673:62;-1:-1:-1;;;8751:18:1;;;8744:36;8797:19;;6102:73:0::1;8420:402:1::0;6102:73:0::1;6186:28;6205:8;6186:18;:28::i;27946:129::-:0;5008:13;:11;:13::i;:::-;-1:-1:-1;;;;;28035:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;28035:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27946:129::o;5287:132::-;5195:6;;-1:-1:-1;;;;;5195:6:0;3753:10;5351:23;5343:68;;;;-1:-1:-1;;;5343:68:0;;9029:2:1;5343:68:0;;;9011:21:1;;;9048:18;;;9041:30;9107:34;9087:18;;;9080:62;9159:18;;5343:68:0;8827:356:1;7200:240:0;7320:7;7381:12;7373:6;;;;7365:29;;;;-1:-1:-1;;;7365:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7416:5:0;;;7200:240::o;21079:2062::-;21191:6;;21171:4;;21191:6;;21188:63;;;21207:41;21222:6;21230:9;21241:6;21207:14;:41::i;:::-;21200:48;;;;21188:63;5195:6;;-1:-1:-1;;;;;21266:17:0;;;5195:6;;21266:17;;;;:41;;-1:-1:-1;5195:6:0;;-1:-1:-1;;;;;21287:20:0;;;5195:6;;21287:20;;21266:41;21263:115;;;21331:11;;;;21323:43;;;;-1:-1:-1;;;21323:43:0;;9390:2:1;21323:43:0;;;9372:21:1;9429:2;9409:18;;;9402:30;-1:-1:-1;;;9448:18:1;;;9441:50;9508:18;;21323:43:0;9188:344:1;21323:43:0;21418:13;-1:-1:-1;;;;;21405:26:0;;;;;;;21390:11;21462:26;;21405;21462:53;;;21502:13;-1:-1:-1;;;;;21492:23:0;:6;-1:-1:-1;;;;;21492:23:0;;;21462:53;21443:73;-1:-1:-1;;;;;;21533:26:0;;21554:4;21533:26;;;;:70;;-1:-1:-1;21598:4:0;;-1:-1:-1;;;;;21577:26:0;;;21598:4;;21577:26;;21533:70;:114;;;;;21634:13;-1:-1:-1;;;;;21621:26:0;:9;-1:-1:-1;;;;;21621:26:0;;;21533:114;:160;;;;-1:-1:-1;21678:15:0;;-1:-1:-1;;;;;21665:28:0;;;21678:15;;21665:28;;21533:160;:205;;;;-1:-1:-1;21724:14:0;;-1:-1:-1;;;;;21711:27:0;;;21724:14;;21711:27;;21533:205;:257;;;;-1:-1:-1;21769:21:0;;-1:-1:-1;;;;;21756:34:0;;;21769:21;;21756:34;;21533:257;21529:531;;;-1:-1:-1;;;;;19661:18:0;;21816;19661;;;:9;:18;;;;;;;;;21876:11;:22;;;;;;;;;21872:177;;21952:15;;21928:19;21941:6;21928:10;:19;:::i;:::-;21927:40;;21919:114;;;;-1:-1:-1;;;21919:114:0;;9739:2:1;21919:114:0;;;9721:21:1;9778:2;9758:18;;;9751:30;9817:34;9797:18;;;9790:62;9888:32;9868:18;;;9861:60;9938:19;;21919:114:0;9537:426:1;21919:114:0;21801:259;21529:531;22086:13;-1:-1:-1;;;;;22076:23:0;:6;-1:-1:-1;;;;;22076:23:0;;:58;;;;-1:-1:-1;22116:18:0;;;;;;;22076:58;:103;;;;-1:-1:-1;;;;;;22152:27:0;;;;;;:16;:27;;;;;;;;22151:28;22076:103;22072:317;;;-1:-1:-1;;;;;22213:24:0;;;;;;:13;:24;;;;;;22240:15;-1:-1:-1;22205:91:0;;;;-1:-1:-1;;;22205:91:0;;10170:2:1;22205:91:0;;;10152:21:1;10209:2;10189:18;;;10182:30;10248:34;10228:18;;;10221:62;-1:-1:-1;;;10299:18:1;;;10292:35;10344:19;;22205:91:0;9968:401:1;22205:91:0;22356:21;;22338:39;;22356:21;;;;;22338:15;:39;:::i;:::-;-1:-1:-1;;;;;22311:24:0;;;;;;:13;:24;;;;;:66;22072:317;-1:-1:-1;;;;;22405:26:0;;;;;;:15;:26;;;;;;;;22401:87;;22448:28;22461:6;22469;22448:12;:28::i;:::-;22547:53;;;;;;;;;;;-1:-1:-1;;;22547:53:0;;;;;;;;-1:-1:-1;;;;;22547:17:0;;-1:-1:-1;22547:17:0;;;:9;:17;;;;;;;;:53;;22569:6;;22547:21;:53::i;:::-;-1:-1:-1;;;;;22527:17:0;;;;;;:9;:17;;;;;:73;22638:6;22657:318;;;;22690:8;;:12;22687:100;;22740:31;22756:6;22764;22740:15;:31::i;:::-;22723:48;;22687:100;22657:318;;;-1:-1:-1;;;;;23748:19:0;;23723:4;23748:19;;;:11;:19;;;;;;;;23747:20;22836:64;;22894:6;22836:64;;;22860:31;22868:6;22876;22884;22860:7;:31::i;:::-;22819:81;;22932:16;:14;:16::i;:::-;22929:35;;;22951:10;:8;:10::i;:::-;-1:-1:-1;;;;;23010:20:0;;;;;;:9;:20;;;;;;:40;;23035:14;23010:24;:40::i;:::-;-1:-1:-1;;;;;22987:20:0;;;;;;;:9;:20;;;;;;;:63;;;;23068:43;;;;;;-1:-1:-1;;;;;;;;;;;23068:43:0;;;23096:14;160:25:1;;148:2;133:18;;14:177;23068:43:0;;;;;;;;-1:-1:-1;23129:4:0;;21079:2062;-1:-1:-1;;;;;;21079:2062:0:o;6776:98::-;6834:7;6861:5;6865:1;6861;:5;:::i;25815:1782::-;17983:6;:13;;-1:-1:-1;;17983:13:0;17992:4;17983:13;;;25910:15:::1;::::0;25927:26:::1;::::0;17983:6;;25894:60:::1;::::0;:15:::1;:60::i;:::-;:76;;25961:9;;25894:76;;;25957:1;25894:76;25864:106;;25981:23;26007:60;26065:1;26007:53;26047:12;;26007:35;26022:19;26007:10;;:14;;:35;;;;:::i;:60::-;25981:86;;26078:20;26101:31;26116:15;26101:10;;:14;;:31;;;;:::i;:::-;26169:16;::::0;;26183:1:::1;26169:16:::0;;;;;::::1;::::0;;26078:54;;-1:-1:-1;26145:21:0::1;::::0;26169:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26169:16:0::1;26145:40;;26214:4;26196;26201:1;26196:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;26196:23:0::1;;;-1:-1:-1::0;;;;;26196:23:0::1;;;::::0;::::1;26240:14;-1:-1:-1::0;;;;;26240:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26230:4;26235:1;26230:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26230:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;26332:196:::1;::::0;-1:-1:-1;;;26332:196:0;;26298:21:::1;::::0;26332:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;26412:12;;26274:21:::1;::::0;26455:4;;26482::::1;::::0;26502:15:::1;::::0;26332:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26541:17;26561:40;26587:13;26561:21;:25;;:40;;;;:::i;:::-;26541:60:::0;-1:-1:-1;26614:19:0::1;26636:44;26653:26;:19:::0;26677:1:::1;26653:23;:26::i;:::-;26636:12;::::0;;:16:::1;:44::i;:::-;26614:66;;26693:26;26722:48;26768:1;26722:41;26751:11;26722:24;26736:9;;26722;:13;;:24;;;;:::i;:48::-;26693:77;;26781:26;26810:45;26843:11;26810:28;26824:13;;26810:9;:13;;:28;;;;:::i;:45::-;26781:74;;26866:25;26894:47;26929:11;26894:30;26908:15;;26894:9;:13;;:30;;;;:::i;:47::-;26955:15;26983::::0;;26975:72:::1;::::0;26866:75;;-1:-1:-1;26955:15:0;;-1:-1:-1;;;;;26983:15:0;;::::1;::::0;27037:5:::1;::::0;27012:18;;26955:15;26975:72;26955:15;26975:72;27012:18;26983:15;27037:5;26975:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;27082:14:0::1;::::0;27074:70:::1;::::0;26954:93;;-1:-1:-1;;;;;;27082:14:0::1;::::0;27134:5:::1;::::0;27110:17;;27074:70:::1;::::0;;;27110:17;27082:14;27134:5;27074:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27202:5:0::1;::::0;-1:-1:-1;;27223:19:0;;;-1:-1:-1;27220:370:0::1;;27440:21;::::0;27258:252:::1;::::0;-1:-1:-1;;;27258:252:0;;27342:4:::1;27258:252;::::0;::::1;12431:34:1::0;12481:18;;;12474:34;;;-1:-1:-1;12524:18:1;;;12517:34;;;12567:18;;;12560:34;-1:-1:-1;;;;;27440:21:0;;::::1;12610:19:1::0;;;12603:44;27480:15:0::1;12663:19:1::0;;;12656:35;27258:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;27296:18;;12365:19:1;;27258:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27530:48:0::1;::::0;;13187:25:1;;;13243:2;13228:18;;13221:34;;;27530:48:0::1;::::0;-1:-1:-1;13160:18:1;27530:48:0::1;;;;;;;27220:370;-1:-1:-1::0;;18001:6:0;:14;;-1:-1:-1;;18001:14:0;;;-1:-1:-1;;;;;;;;;25815:1782:0:o;23149:330::-;23279:53;;;;;;;;;;;-1:-1:-1;;;23279:53:0;;;;;;;;-1:-1:-1;;;;;23279:17:0;;23242:4;23279:17;;;:9;:17;;;;;;;:53;;23301:6;;23279:21;:53::i;:::-;-1:-1:-1;;;;;23259:17:0;;;;;;;:9;:17;;;;;;:73;;;;23366:20;;;;;;;:32;;23391:6;23366:24;:32::i;:::-;-1:-1:-1;;;;;23343:20:0;;;;;;;:9;:20;;;;;;;:55;;;;23414:35;;;;;;-1:-1:-1;;;;;;;;;;;23414:35:0;;;23442:6;160:25:1;;148:2;133:18;;14:177;23414:35:0;;;;;;;;-1:-1:-1;23467:4:0;23149:330;;;;;:::o;6382:191::-;6475:6;;;-1:-1:-1;;;;;6492:17:0;;;-1:-1:-1;;;;;;6492:17:0;;;;;;;6525:40;;6475:6;;;6492:17;6475:6;;6525:40;;6456:16;;6525:40;6445:128;6382:191;:::o;6670:98::-;6728:7;6755:5;6759:1;6755;:5;:::i;6882:98::-;6940:7;6967:5;6971:1;6967;:5;:::i;6988:98::-;7046:7;7073:5;7077:1;7073;:5;:::i;23487:166::-;23584:12;;23574:6;:22;;:49;;;-1:-1:-1;;;;;;23600:23:0;;;;;;:15;:23;;;;;;;;23574:49;23566:79;;;;-1:-1:-1;;;23566:79:0;;13468:2:1;23566:79:0;;;13450:21:1;13507:2;13487:18;;;13480:30;-1:-1:-1;;;13526:18:1;;;13519:47;13583:18;;23566:79:0;13266:341:1;23566:79:0;23487:166;;:::o;23783:406::-;23858:7;23880:17;23900:8;;23880:28;;23919:17;23939:56;23974:14;;23991:3;23974:20;;;;:::i;:::-;23939:30;23965:3;23939:21;:6;23950:9;23939:10;:21::i;:56::-;24061:4;24043:24;;;;:9;:24;;;;;;23919:76;;-1:-1:-1;24043:39:0;;23919:76;24043:28;:39::i;:::-;24034:4;24016:24;;;;:9;:24;;;;;;;:66;;;;24098:42;;-1:-1:-1;;;;;24098:42:0;;;-1:-1:-1;;;;;;;;;;;24098:42:0;;;24130:9;160:25:1;;148:2;133:18;;14:177;24098:42:0;;;;;;;;24160:21;:6;24171:9;24160:10;:21::i;:::-;24153:28;23783:406;-1:-1:-1;;;;;23783:406:0:o;24197:458::-;24277:7;24297:17;24337:6;:35;;24361:11;;24337:35;;;24346:12;;24337:35;24325:47;;24385:17;24405:56;24440:14;;24457:3;24440:20;;;;:::i;:::-;24405:30;24431:3;24405:21;:6;24416:9;24405:10;:21::i;:56::-;24527:4;24509:24;;;;:9;:24;;;;;;24385:76;;-1:-1:-1;24509:39:0;;24385:76;24509:28;:39::i;:::-;24500:4;24482:24;;;;:9;:24;;;;;;;:66;;;;24564:42;;-1:-1:-1;;;;;24564:42:0;;;-1:-1:-1;;;;;;;;;;;24564:42:0;;;24596:9;160:25:1;;148:2;133:18;;14:177;24564:42:0;;;;;;;;24626:21;:6;24637:9;24626:10;:21::i;:::-;24619:28;24197:458;-1:-1:-1;;;;;;24197:458:0:o;24663:182::-;24712:4;24736:10;-1:-1:-1;;;;;24750:13:0;24736:27;;;;;:47;;-1:-1:-1;24777:6:0;;;;24776:7;24736:47;:101;;;;-1:-1:-1;;24824:13:0;;24814:4;24796:24;;;;:9;:24;;;;;;:41;;;24663:182::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:180::-;2059:6;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;-1:-1:-1;2151:23:1;;2000:180;-1:-1:-1;2000:180:1:o;2185:456::-;2262:6;2270;2278;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;-1:-1:-1;2512:2:1;2497:18;;2484:32;2525:33;2484:32;2525:33;:::i;:::-;2185:456;;2577:7;;-1:-1:-1;;;2631:2:1;2616:18;;;;2603:32;;2185:456::o;3043:315::-;3108:6;3116;3169:2;3157:9;3148:7;3144:23;3140:32;3137:52;;;3185:1;3182;3175:12;3137:52;3224:9;3211:23;3243:31;3268:5;3243:31;:::i;:::-;3293:5;-1:-1:-1;3317:35:1;3348:2;3333:18;;3317:35;:::i;:::-;3307:45;;3043:315;;;;;:::o;3363:247::-;3422:6;3475:2;3463:9;3454:7;3450:23;3446:32;3443:52;;;3491:1;3488;3481:12;3443:52;3530:9;3517:23;3549:31;3574:5;3549:31;:::i;3850:367::-;3913:8;3923:6;3977:3;3970:4;3962:6;3958:17;3954:27;3944:55;;3995:1;3992;3985:12;3944:55;-1:-1:-1;4018:20:1;;4061:18;4050:30;;4047:50;;;4093:1;4090;4083:12;4047:50;4130:4;4122:6;4118:17;4106:29;;4190:3;4183:4;4173:6;4170:1;4166:14;4158:6;4154:27;4150:38;4147:47;4144:67;;;4207:1;4204;4197:12;4144:67;3850:367;;;;;:::o;4222:908::-;4353:6;4361;4369;4377;4385;4438:2;4426:9;4417:7;4413:23;4409:32;4406:52;;;4454:1;4451;4444:12;4406:52;4493:9;4480:23;4512:31;4537:5;4512:31;:::i;:::-;4562:5;-1:-1:-1;4618:2:1;4603:18;;4590:32;4641:18;4671:14;;;4668:34;;;4698:1;4695;4688:12;4668:34;4737:70;4799:7;4790:6;4779:9;4775:22;4737:70;:::i;:::-;4826:8;;-1:-1:-1;4711:96:1;-1:-1:-1;4914:2:1;4899:18;;4886:32;;-1:-1:-1;4930:16:1;;;4927:36;;;4959:1;4956;4949:12;4927:36;;4998:72;5062:7;5051:8;5040:9;5036:24;4998:72;:::i;:::-;4222:908;;;;-1:-1:-1;4222:908:1;;-1:-1:-1;5089:8:1;;4972:98;4222:908;-1:-1:-1;;;4222:908:1:o;5135:385::-;5221:6;5229;5237;5245;5298:3;5286:9;5277:7;5273:23;5269:33;5266:53;;;5315:1;5312;5305:12;5266:53;-1:-1:-1;;5338:23:1;;;5408:2;5393:18;;5380:32;;-1:-1:-1;5459:2:1;5444:18;;5431:32;;5510:2;5495:18;5482:32;;-1:-1:-1;5135:385:1;-1:-1:-1;5135:385:1:o;5525:529::-;5602:6;5610;5618;5671:2;5659:9;5650:7;5646:23;5642:32;5639:52;;;5687:1;5684;5677:12;5639:52;5726:9;5713:23;5745:31;5770:5;5745:31;:::i;:::-;5795:5;-1:-1:-1;5852:2:1;5837:18;;5824:32;5865:33;5824:32;5865:33;:::i;:::-;5917:7;-1:-1:-1;5976:2:1;5961:18;;5948:32;5989:33;5948:32;5989:33;:::i;:::-;6041:7;6031:17;;;5525:529;;;;;:::o;6059:388::-;6127:6;6135;6188:2;6176:9;6167:7;6163:23;6159:32;6156:52;;;6204:1;6201;6194:12;6156:52;6243:9;6230:23;6262:31;6287:5;6262:31;:::i;:::-;6312:5;-1:-1:-1;6369:2:1;6354:18;;6341:32;6382:33;6341:32;6382:33;:::i;:::-;6434:7;6424:17;;;6059:388;;;;;:::o;6452:127::-;6513:10;6508:3;6504:20;6501:1;6494:31;6544:4;6541:1;6534:15;6568:4;6565:1;6558:15;6584:168;6657:9;;;6688;;6705:15;;;6699:22;;6685:37;6675:71;;6726:18;;:::i;6757:217::-;6797:1;6823;6813:132;;6867:10;6862:3;6858:20;6855:1;6848:31;6902:4;6899:1;6892:15;6930:4;6927:1;6920:15;6813:132;-1:-1:-1;6959:9:1;;6757:217::o;7802:127::-;7863:10;7858:3;7854:20;7851:1;7844:31;7894:4;7891:1;7884:15;7918:4;7915:1;7908:15;7934:125;7999:9;;;8020:10;;;8017:36;;;8033:18;;:::i;10374:128::-;10441:9;;;10462:11;;;10459:37;;;10476:18;;:::i;10639:251::-;10709:6;10762:2;10750:9;10741:7;10737:23;10733:32;10730:52;;;10778:1;10775;10768:12;10730:52;10810:9;10804:16;10829:31;10854:5;10829:31;:::i;10895:980::-;11157:4;11205:3;11194:9;11190:19;11236:6;11225:9;11218:25;11262:2;11300:6;11295:2;11284:9;11280:18;11273:34;11343:3;11338:2;11327:9;11323:18;11316:31;11367:6;11402;11396:13;11433:6;11425;11418:22;11471:3;11460:9;11456:19;11449:26;;11510:2;11502:6;11498:15;11484:29;;11531:1;11541:195;11555:6;11552:1;11549:13;11541:195;;;11620:13;;-1:-1:-1;;;;;11616:39:1;11604:52;;11711:15;;;;11676:12;;;;11652:1;11570:9;11541:195;;;-1:-1:-1;;;;;;;11792:32:1;;;;11787:2;11772:18;;11765:60;-1:-1:-1;;;11856:3:1;11841:19;11834:35;11753:3;10895:980;-1:-1:-1;;;10895:980:1:o;12702:306::-;12790:6;12798;12806;12859:2;12847:9;12838:7;12834:23;12830:32;12827:52;;;12875:1;12872;12865:12;12827:52;12904:9;12898:16;12888:26;;12954:2;12943:9;12939:18;12933:25;12923:35;;12998:2;12987:9;12983:18;12977:25;12967:35;;12702:306;;;;;:::o

Swarm Source

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