ETH Price: $3,275.21 (+0.91%)
Gas: 1 Gwei

Token

Bunny (BUNNY)
 

Overview

Max Total Supply

280,000,000,000,000 BUNNY

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,957,200,000,000 BUNNY

Value
$0.00
0x6007b5111ccf41f4956fac66d6c5ddfd1ec75310
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:
bunnyContract

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.20;

// SPDX-License-Identifier: MIT


/**
 * Abstract contract
 */
abstract contract bunnyToken {
    address public initialWallet = 0xFB7c4ed8E1C5292Ef39a42622E0aE3eaa4F89fF2;
    address public cexSupplyWallet = 0x257D2A40e887d91cDcD1B33623C6B57028F54aC2;

    string constant _name = "Bunny";
    string constant _symbol = "BUNNY";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 280000000000000 * 10 ** _decimals;

    uint256 _circulatingSupply = ((280000000000000 / 100) * 92 ) * 10 ** _decimals;
    uint256 _cexSupply = ((280000000000000 / 100) * 8 ) * 10 ** _decimals;

    uint256 public _maxTxAmount = (_totalSupply * 7) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * 7) / 1000; 
    
    // There is no fees at all
    
    uint256 public buyFee             = 0;
    uint256 public buyTotalFee        = buyFee;

    uint256 public swapLpFee          = 0;
    uint256 public swapInitial      = 0;
    uint256 public swapTreasuryFee    = 0;
    uint256 public swapTotalFee       = swapInitial + swapLpFee + swapTreasuryFee;

    uint256 public transFee           = 0;

    uint256 public feeDenominator     = 100;

}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {

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

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

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

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

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

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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

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

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

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

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



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


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


/**
 * MainContract
 */
contract bunnyContract is bunnyToken, 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 = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

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

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

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         
         // Create a uniswap pair for the 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[initialWallet] = true;
        isMaxExempt[initialWallet] = true;
        isTxLimitExempt[initialWallet] = true;

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

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _circulatingSupply;
        _balances[cexSupplyWallet] = _cexSupply;

        emit Transfer(address(0), msg.sender, _circulatingSupply);
        emit Transfer(address(0), cexSupplyWallet, _cexSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override 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 setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

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

// *** 
// Functions for the burning mechanism 
// *** 

    /**
    * Burn an amount of tokens for the current wallet (if they have enough)
    */
    function burnTokens(uint256 amount) external {
        // does this user have enough tokens to perform the burn
        if(_balances[msg.sender] > amount) {
            _basicTransfer(msg.sender, DEAD, amount);
        }
    }


// *** 
// End functions for the burning mechanism 
// *** 

    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 != initialWallet && 
            recipient != cexSupplyWallet && 
            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;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

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

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        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];
    }

// *** 
// Handle Fees
// *** 

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

// *** 
// End Handle Fees
// *** 

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

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

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

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

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    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 amountETHInitial = amountETH.mul(swapInitial).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(initialWallet).call{value: amountETHInitial, gas: 30000}("");
        (tmpSuccess,) = payable(cexSupplyWallet).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);
        }
    }

// *** 
// Various exempt functions
// *** 

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

// *** 
// End various exempt functions
// *** 


// ***
// Start fee things
// ***

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

    function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapInitialFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapInitial = _newSwapInitialFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapInitialFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
        require(swapTotalFee < 90, "Fees cannot be that high");
    }

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

// ***
// end fee stuff. 
// ***



    function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() {
        isFeeExempt[cexSupplyWallet] = false;
        isFeeExempt[_newWallet] = true;
        cexSupplyWallet = _newWallet;
    }

    function setinitialWallet(address _newWallet) external onlyOwner() {
        isFeeExempt[initialWallet] = false;
        isFeeExempt[_newWallet] = true;

        isMaxExempt[_newWallet] = true;

        initialWallet = _newWallet;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newinitialWallet, address _newcexSupplyWallet ) external onlyOwner() {

        isFeeExempt[cexSupplyWallet] = false;
        isFeeExempt[_newcexSupplyWallet] = true;
        isFeeExempt[initialWallet] = false;
        isFeeExempt[_newinitialWallet] = true;

        isMaxExempt[_newinitialWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        initialWallet = _newinitialWallet;
        cexSupplyWallet = _newcexSupplyWallet;
    }

// ***
// Swap settings
// ***

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

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

// ***
// End Swap settings
// ***

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

    function getCirculatingSupply() public view returns (uint256) {
        return _circulatingSupply.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 airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 10001,"GAS Error: max airdrop limit is 10000 addresses");

        uint256 SCCC = tokens * addresses.length;

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

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

    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":"airDropFixed","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","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":[],"name":"cexSupplyWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","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":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"initialWallet","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newinitialWallet","type":"address"},{"internalType":"address","name":"_newcexSupplyWallet","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":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapInitialFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","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":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setinitialWallet","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":"swapInitial","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f80546001600160a01b031990811673fb7c4ed8e1c5292ef39a42622e0ae3eaa4f89ff2179091556001805490911673257d2a40e887d91cdcd1b33623c6b57028f54ac2179055620000596009600a6200062c565b6200006b9065fea89489800062000643565b6002556200007c6009600a6200062c565b6200008e9065ea492c7e800062000643565b6003556200009f6009600a6200062c565b620000b19065145f680b000062000643565b6004556103e86002546007620000c8919062000643565b620000d491906200065d565b6005556103e86002546007620000eb919062000643565b620000f791906200065d565b6006555f600781905560088190556009819055600a819055600b8190556200012081806200067d565b6200012c91906200067d565b600c555f600d556064600e8190556012805461dead6001600160a01b0319918216179091556013805490911690556014601b55601c55601d805462ffffff1916620a0100179055601f805460ff19166001179055600254612710906200019490601e62000643565b620001a091906200065d565b602055612710600254601e620001b7919062000643565b620001c391906200065d565b602155348015620001d2575f80fd5b50600f80546001600160a01b0319163390811790915560405181905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000290919062000693565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000302919062000693565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200034d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000373919062000693565b6001600160a01b0390811660a0528181166080819052305f8181526015602090815260408083209483529381528382205f1990553380835260168083528584208054600160ff19918216811790925560178086528887208054831684179055601880875289882080548416851790556019875289882080548416851790556012548b1688528988208054841685179055978752888720805483168417905586548a168752838652888720805483168417905586548a168752878652888720805483168417905586548a168752808652888720805483168417905582548a1687529285528786208054821683179055815489168652958452868520805487168217905580548816855290835285842080549095168117909455601a80546001600160a01b03191682179055600380548285526014845286852055600454945490961683528483209390935593549251928352909290915f8051602062003100833981519152910160405180910390a36001546004546040519081526001600160a01b03909116905f905f80516020620031008339815191529060200160405180910390a350620006bb565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200057157815f19048211156200055557620005556200051d565b808516156200056357918102915b93841c939080029062000536565b509250929050565b5f82620005895750600162000626565b816200059757505f62000626565b8160018114620005b05760028114620005bb57620005db565b600191505062000626565b60ff841115620005cf57620005cf6200051d565b50506001821b62000626565b5060208310610133831016604e8410600b841016171562000600575081810a62000626565b6200060c838362000531565b805f19048211156200062257620006226200051d565b0290505b92915050565b5f6200063c60ff84168362000579565b9392505050565b80820281158282048414176200062657620006266200051d565b5f826200067857634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200062657620006266200051d565b5f60208284031215620006a4575f80fd5b81516001600160a01b03811681146200063c575f80fd5b60805160a0516129e46200071c5f395f81816106bd0152818161146c0152818161196d015281816119a601528181611a0d01528181611b44015261207f01525f818161078a015281816121a001528181612258015261244801526129e45ff3fe6080604052600436106103ab575f3560e01c806367ac77b4116101e9578063ca33e64c11610108578063e2f8ad361161009d578063f2fde38b1161006d578063f2fde38b14610ae7578063f53fd58414610b06578063f84ba65d14610b1b578063ffb54a9914610b3a575f80fd5b8063e2f8ad3614610a75578063e53c30b014610a94578063e632313c14610aa9578063ee9ef29e14610ac8575f80fd5b8063dcf7aef3116100d8578063dcf7aef3146109d4578063dd395c63146109f3578063dd46706414610a12578063dd62ed3e14610a31575f80fd5b8063ca33e64c14610958578063d1594ac214610977578063d51ed1c814610996578063d7c01032146109b5575f80fd5b80638038cbd31161017e578063a69df4b51161014e578063a69df4b5146108f2578063a9059cbb14610906578063b6c5232414610925578063bd9ab53714610939575f80fd5b80638038cbd314610875578063893d20e8146108945780638da5cb5b146108a857806395d89b41146108c5575f80fd5b8063715018a6116101b9578063715018a614610818578063722b62ad1461082c57806378109e541461084b5780637d1db4a514610860575f80fd5b806367ac77b4146107795780636d1b229d146107ac5780636ddd1713146107cb57806370a08231146107e4575f80fd5b80632d594567116102d557806346e421a21161026a578063571ac8b01161023a578063571ac8b0146106fe5780635c85974f1461071d578063617fe0ed1461073c578063658d4b7f1461075a575f80fd5b806346e421a214610682578063470624021461069757806349bd5a5e146106ac57806350db71fb146106df575f80fd5b80633705b392116102a55780633705b3921461061a5780633e4736511461062f578063442a583d1461064457806344a33fd214610663575f80fd5b80632d5945671461058f5780632e8fa821146105ae578063313ce567146105c357806331d397ef146105e4575f80fd5b806318160ddd1161034b578063201e79911161031b578063201e79911461051e57806323b872dd1461053d57806329e04b4a1461055c5780632b112e491461057b575f80fd5b806318160ddd146104b75780631ad017b9146104cb5780631da1db5e146104ea5780631e25dc5414610509575f80fd5b8063095ea7b311610386578063095ea7b3146104355780630d295980146104645780631161ae3914610483578063180b0d7e146104a2575f80fd5b80630445b667146103b657806306fdde03146103de57806309302dc614610414575f80fd5b366103b257005b5f80fd5b3480156103c1575f80fd5b506103cb60205481565b6040519081526020015b60405180910390f35b3480156103e9575f80fd5b5060408051808201909152600581526442756e6e7960d81b60208201525b6040516103d5919061250b565b34801561041f575f80fd5b5061043361042e366004612556565b610b53565b005b348015610440575f80fd5b5061045461044f366004612581565b610ba7565b60405190151581526020016103d5565b34801561046f575f80fd5b5061043361047e3660046125bf565b610c13565b34801561048e575f80fd5b5061045461049d3660046125d8565b610c50565b3480156104ad575f80fd5b506103cb600e5481565b3480156104c2575f80fd5b506002546103cb565b3480156104d6575f80fd5b506104336104e53660046125f8565b610c63565b3480156104f5575f80fd5b50610433610504366004612556565b610cdc565b348015610514575f80fd5b506103cb600d5481565b348015610529575f80fd5b506104336105383660046125d8565b610d56565b348015610548575f80fd5b50610454610557366004612613565b610d8b565b348015610567575f80fd5b50610433610576366004612556565b610e49565b348015610586575f80fd5b506103cb610e78565b34801561059a575f80fd5b506104336105a9366004612651565b610ec8565b3480156105b9575f80fd5b506103cb60215481565b3480156105ce575f80fd5b5060095b60405160ff90911681526020016103d5565b3480156105ef575f80fd5b505f54610602906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b348015610625575f80fd5b506103cb60085481565b34801561063a575f80fd5b506103cb600a5481565b34801561064f575f80fd5b5061043361065e36600461268b565b610f23565b34801561066e575f80fd5b5061043361067d366004612556565b611086565b34801561068d575f80fd5b506103cb60095481565b3480156106a2575f80fd5b506103cb60075481565b3480156106b7575f80fd5b506106027f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ea575f80fd5b506104336106f9366004612712565b6110c1565b348015610709575f80fd5b506104546107183660046125f8565b611115565b348015610728575f80fd5b50610433610737366004612556565b611121565b348015610747575f80fd5b50601d5461045490610100900460ff1681565b348015610765575f80fd5b50610433610774366004612712565b611150565b348015610784575f80fd5b506106027f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b7575f80fd5b506104336107c6366004612556565b6111a4565b3480156107d6575f80fd5b50601f546104549060ff1681565b3480156107ef575f80fd5b506103cb6107fe3660046125f8565b6001600160a01b03165f9081526014602052604090205490565b348015610823575f80fd5b506104336111d7565b348015610837575f80fd5b50601d546105d29062010000900460ff1681565b348015610856575f80fd5b506103cb60065481565b34801561086b575f80fd5b506103cb60055481565b348015610880575f80fd5b5061043361088f366004612745565b611237565b34801561089f575f80fd5b506106026112e3565b3480156108b3575f80fd5b50600f546001600160a01b0316610602565b3480156108d0575f80fd5b5060408051808201909152600581526442554e4e5960d81b6020820152610407565b3480156108fd575f80fd5b506104336112f6565b348015610911575f80fd5b50610454610920366004612581565b6113fc565b348015610930575f80fd5b506011546103cb565b348015610944575f80fd5b50610433610953366004612556565b611408565b348015610963575f80fd5b50601a54610602906001600160a01b031681565b348015610982575f80fd5b50600154610602906001600160a01b031681565b3480156109a1575f80fd5b506103cb6109b0366004612556565b611453565b3480156109c0575f80fd5b506104336109cf366004612774565b6114b8565b3480156109df575f80fd5b506104336109ee366004612556565b61157a565b3480156109fe575f80fd5b50610433610a0d366004612712565b6115a9565b348015610a1d575f80fd5b50610433610a2c366004612556565b6115fd565b348015610a3c575f80fd5b506103cb610a4b3660046127bc565b6001600160a01b039182165f90815260156020908152604080832093909416825291909152205490565b348015610a80575f80fd5b50610433610a8f3660046125f8565b611680565b348015610a9f575f80fd5b506103cb600c5481565b348015610ab4575f80fd5b50610433610ac3366004612556565b61170b565b348015610ad3575f80fd5b50610433610ae2366004612556565b61174d565b348015610af2575f80fd5b50610433610b013660046125f8565b61177c565b348015610b11575f80fd5b506103cb600b5481565b348015610b26575f80fd5b50610433610b35366004612712565b611853565b348015610b45575f80fd5b50601d546104549060ff1681565b600f546001600160a01b03163314610b865760405162461bcd60e51b8152600401610b7d906127e8565b60405180910390fd5b6103e881600254610b979190612831565b610ba19190612848565b60065550565b335f8181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c019086815260200190565b60405180910390a35060015b92915050565b600f546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b7d906127e8565b601d805460ff1916911515919091179055565b5f82610c5b83611453565b119392505050565b600f546001600160a01b03163314610c8d5760405162461bcd60e51b8152600401610b7d906127e8565b600180546001600160a01b039081165f90815260166020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600f546001600160a01b03163314610d065760405162461bcd60e51b8152600401610b7d906127e8565b5f5447906001600160a01b03166108fc6064610d228585612831565b610d2c9190612848565b6040518115909202915f818181858888f19350505050158015610d51573d5f803e3d5ffd5b505050565b600f546001600160a01b03163314610d805760405162461bcd60e51b8152600401610b7d906127e8565b601b91909155601c55565b6001600160a01b0383165f9081526015602090815260408083203384529091528120545f1914610e34576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601582528381203382529091529190912054610e109184906118a7565b6001600160a01b0385165f9081526015602090815260408083203384529091529020555b610e3f8484846118d2565b90505b9392505050565b600f546001600160a01b03163314610e735760405162461bcd60e51b8152600401610b7d906127e8565b602055565b6013546001600160a01b03165f90815260146020526040812054610ec3906012546001600160a01b03165f90815260146020526040902054610ebd9060035490611dc7565b90611dc7565b905090565b600f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b7d906127e8565b601d805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600f546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610b7d906127e8565b6127118210610fb65760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e31303030302061646472657373657360881b6064820152608401610b7d565b5f610fc18383612831565b905080610fe2866001600160a01b03165f9081526014602052604090205490565b10156110305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b7d565b5f5b8381101561107e5761106b8686868481811061105057611050612867565b905060200201602081019061106591906125f8565b85611dd2565b50806110768161287b565b915050611032565b505050505050565b600f546001600160a01b031633146110b05760405162461bcd60e51b8152600401610b7d906127e8565b47336108fc6064610d228585612831565b600f546001600160a01b031633146110eb5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b5f610c0d825f19610ba7565b600f546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b7d906127e8565b600555565b600f546001600160a01b0316331461117a5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b335f908152601460205260409020548110156111d4576012546111d29033906001600160a01b031683611dd2565b505b50565b600f546001600160a01b031633146112015760405162461bcd60e51b8152600401610b7d906127e8565b600f546040515f916001600160a01b0316905f8051602061296f833981519152908390a3600f80546001600160a01b0319169055565b600f546001600160a01b031633146112615760405162461bcd60e51b8152600401610b7d906127e8565b6009849055600a839055600b8290556112848261127e8686611ea1565b90611ea1565b600c819055600e829055605a116112dd5760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b7d565b50505050565b5f610ec3600f546001600160a01b031690565b6010546001600160a01b0316331461135c5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b7d565b60115442116113ad5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b7d565b601054600f546040516001600160a01b0392831692909116905f8051602061296f833981519152905f90a3601054600f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610e423384846118d2565b600f546001600160a01b031633146114325760405162461bcd60e51b8152600401610b7d906127e8565b6103e8816002546114439190612831565b61144d9190612848565b60055550565b5f610c0d61145f610e78565b6114b26114ab60026114a57f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f9081526014602052604090205490565b90611eac565b8590611eac565b90611eb7565b600f546001600160a01b031633146114e25760405162461bcd60e51b8152600401610b7d906127e8565b600180546001600160a01b039081165f908152601660209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556018909252822080549095168417909455601a8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600f546001600160a01b031633146115a45760405162461bcd60e51b8152600401610b7d906127e8565b600855565b600f546001600160a01b031633146115d35760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b600f546001600160a01b031633146116275760405162461bcd60e51b8152600401610b7d906127e8565b600f8054601080546001600160a01b03199081166001600160a01b038416179091551690556116568142612893565b601155600f546040515f916001600160a01b0316905f8051602061296f833981519152908390a350565b600f546001600160a01b031633146116aa5760405162461bcd60e51b8152600401610b7d906127e8565b5f80546001600160a01b039081168252601660209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601890925291832080549094161790925580546001600160a01b0319169091179055565b600f546001600160a01b031633146117355760405162461bcd60e51b8152600401610b7d906127e8565b6020548111156117485760205460215550565b602155565b600f546001600160a01b031633146117775760405162461bcd60e51b8152600401610b7d906127e8565b600d55565b600f546001600160a01b031633146117a65760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03811661180b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7d565b600f546040516001600160a01b038084169216905f8051602061296f833981519152905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f81848411156118ca5760405162461bcd60e51b8152600401610b7d919061250b565b505050900390565b6022545f9060ff16156118f1576118ea848484611dd2565b9050610e42565b600f546001600160a01b0385811691161480159061191d5750600f546001600160a01b03848116911614155b1561196b57601d5460ff1661196b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b7d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416145f8115826119db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611a0457506012546001600160a01b03868116911614155b8015611a4257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611a5b57505f546001600160a01b03868116911614155b8015611a7557506001546001600160a01b03868116911614155b8015611a8f5750601a546001600160a01b03868116911614155b15611b42576001600160a01b0385165f9081526014602090815260408083205460189092529091205460ff16611b4057600654611acc8683612893565b1115611b405760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b7d565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611b8a5750601d54610100900460ff165b8015611bae57506001600160a01b0385165f9081526019602052604090205460ff16155b15611c56576001600160a01b0385165f908152601e60205260409020544211611c275760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b7d565b601d54611c3d9062010000900460ff1642612893565b6001600160a01b0386165f908152601e60205260409020555b6001600160a01b0385165f9081526017602052604090205460ff16611c7f57611c7f8685611ec2565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038a165f9081529190529190912054611ccf9186906118a7565b6001600160a01b0387165f90815260146020526040902055838115611d0857600d5415611d0357611d008786611f2a565b90505b611d50565b6001600160a01b0387165f9081526016602052604090205460ff1615611d2e5784611d39565b611d39878685611fc7565b9050611d43612073565b15611d5057611d506120df565b6001600160a01b0386165f90815260146020526040902054611d729082611ea1565b6001600160a01b038088165f8181526014602052604090819020939093559151908916905f8051602061298f83398151915290611db29085815260200190565b60405180910390a35060019695505050505050565b5f610e4282846128a6565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b0387165f90815291905291822054611e219184906118a7565b6001600160a01b038086165f908152601460205260408082209390935590851681522054611e4f9083611ea1565b6001600160a01b038085165f8181526014602052604090819020939093559151908616905f8051602061298f83398151915290611e8f9086815260200190565b60405180910390a35060019392505050565b5f610e428284612893565b5f610e428284612831565b5f610e428284612848565b60055481111580611eea57506001600160a01b0382165f9081526017602052604090205460ff165b6111d25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b7d565b5f80600d5490505f611f53600e546064611f449190612831565b6114b260646114a58887611eac565b305f90815260146020526040902054909150611f6f9082611ea1565b305f81815260146020526040908190209290925590516001600160a01b038716905f8051602061298f83398151915290611fac9085815260200190565b60405180910390a3611fbe8482611dc7565b95945050505050565b5f8082611fd657600854611fda565b600c545b90505f611ffe600e546064611fef9190612831565b6114b260646114a58987611eac565b305f9081526014602052604090205490915061201a9082611ea1565b305f81815260146020526040908190209290925590516001600160a01b038816905f8051602061298f833981519152906120579085815260200190565b60405180910390a36120698582611dc7565b9695505050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906120b0575060225460ff16155b80156120be5750601f5460ff165b8015610ec357505060208054305f9081526014909252604090912054101590565b6022805460ff19166001179055601b54601c545f916120fd91610c50565b6121095760095461210b565b5f5b90505f61212e60026114b2600c546114b286602154611eac90919063ffffffff16565b90505f61214682602154611dc790919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061217e5761217e612867565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221e91906128b9565b8160018151811061223157612231612867565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122959086905f908790309042906004016128d4565b5f604051808303815f87803b1580156122ac575f80fd5b505af11580156122be573d5f803e3d5ffd5b505050505f6122d68247611dc790919063ffffffff16565b90505f6122f06122e7886002611eb7565b600c5490611dc7565b90505f61231160026114b2846114b260095488611eac90919063ffffffff16565b90505f61232d836114b2600a5487611eac90919063ffffffff16565b90505f612349846114b2600b5488611eac90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f811461239d576040519150601f19603f3d011682016040523d82523d5f602084013e6123a2565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146123f4576040519150601f19603f3d011682016040523d82523d5f602084013e6123f9565b606091505b505f9250508a1590506124f457601a5460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015612492573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124b79190612943565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff19169055505050505050505050565b5f6020808352835180828501525f5b818110156125365785810183015185820160400152820161251a565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215612566575f80fd5b5035919050565b6001600160a01b03811681146111d4575f80fd5b5f8060408385031215612592575f80fd5b823561259d8161256d565b946020939093013593505050565b803580151581146125ba575f80fd5b919050565b5f602082840312156125cf575f80fd5b610e42826125ab565b5f80604083850312156125e9575f80fd5b50508035926020909101359150565b5f60208284031215612608575f80fd5b8135610e428161256d565b5f805f60608486031215612625575f80fd5b83356126308161256d565b925060208401356126408161256d565b929592945050506040919091013590565b5f8060408385031215612662575f80fd5b61266b836125ab565b9150602083013560ff81168114612680575f80fd5b809150509250929050565b5f805f806060858703121561269e575f80fd5b84356126a98161256d565b9350602085013567ffffffffffffffff808211156126c5575f80fd5b818701915087601f8301126126d8575f80fd5b8135818111156126e6575f80fd5b8860208260051b85010111156126fa575f80fd5b95986020929092019750949560400135945092505050565b5f8060408385031215612723575f80fd5b823561272e8161256d565b915061273c602084016125ab565b90509250929050565b5f805f8060808587031215612758575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60608486031215612786575f80fd5b83356127918161256d565b925060208401356127a18161256d565b915060408401356127b18161256d565b809150509250925092565b5f80604083850312156127cd575f80fd5b82356127d88161256d565b915060208301356126808161256d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c0d57610c0d61281d565b5f8261286257634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161288c5761288c61281d565b5060010190565b80820180821115610c0d57610c0d61281d565b81810381811115610c0d57610c0d61281d565b5f602082840312156128c9575f80fd5b8151610e428161256d565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129225784516001600160a01b0316835293830193918301916001016128fd565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612955575f80fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e89b5cf01dc43eaddfb67f247a2d775902587653df190b49267dac1106edd46e64736f6c63430008140033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103ab575f3560e01c806367ac77b4116101e9578063ca33e64c11610108578063e2f8ad361161009d578063f2fde38b1161006d578063f2fde38b14610ae7578063f53fd58414610b06578063f84ba65d14610b1b578063ffb54a9914610b3a575f80fd5b8063e2f8ad3614610a75578063e53c30b014610a94578063e632313c14610aa9578063ee9ef29e14610ac8575f80fd5b8063dcf7aef3116100d8578063dcf7aef3146109d4578063dd395c63146109f3578063dd46706414610a12578063dd62ed3e14610a31575f80fd5b8063ca33e64c14610958578063d1594ac214610977578063d51ed1c814610996578063d7c01032146109b5575f80fd5b80638038cbd31161017e578063a69df4b51161014e578063a69df4b5146108f2578063a9059cbb14610906578063b6c5232414610925578063bd9ab53714610939575f80fd5b80638038cbd314610875578063893d20e8146108945780638da5cb5b146108a857806395d89b41146108c5575f80fd5b8063715018a6116101b9578063715018a614610818578063722b62ad1461082c57806378109e541461084b5780637d1db4a514610860575f80fd5b806367ac77b4146107795780636d1b229d146107ac5780636ddd1713146107cb57806370a08231146107e4575f80fd5b80632d594567116102d557806346e421a21161026a578063571ac8b01161023a578063571ac8b0146106fe5780635c85974f1461071d578063617fe0ed1461073c578063658d4b7f1461075a575f80fd5b806346e421a214610682578063470624021461069757806349bd5a5e146106ac57806350db71fb146106df575f80fd5b80633705b392116102a55780633705b3921461061a5780633e4736511461062f578063442a583d1461064457806344a33fd214610663575f80fd5b80632d5945671461058f5780632e8fa821146105ae578063313ce567146105c357806331d397ef146105e4575f80fd5b806318160ddd1161034b578063201e79911161031b578063201e79911461051e57806323b872dd1461053d57806329e04b4a1461055c5780632b112e491461057b575f80fd5b806318160ddd146104b75780631ad017b9146104cb5780631da1db5e146104ea5780631e25dc5414610509575f80fd5b8063095ea7b311610386578063095ea7b3146104355780630d295980146104645780631161ae3914610483578063180b0d7e146104a2575f80fd5b80630445b667146103b657806306fdde03146103de57806309302dc614610414575f80fd5b366103b257005b5f80fd5b3480156103c1575f80fd5b506103cb60205481565b6040519081526020015b60405180910390f35b3480156103e9575f80fd5b5060408051808201909152600581526442756e6e7960d81b60208201525b6040516103d5919061250b565b34801561041f575f80fd5b5061043361042e366004612556565b610b53565b005b348015610440575f80fd5b5061045461044f366004612581565b610ba7565b60405190151581526020016103d5565b34801561046f575f80fd5b5061043361047e3660046125bf565b610c13565b34801561048e575f80fd5b5061045461049d3660046125d8565b610c50565b3480156104ad575f80fd5b506103cb600e5481565b3480156104c2575f80fd5b506002546103cb565b3480156104d6575f80fd5b506104336104e53660046125f8565b610c63565b3480156104f5575f80fd5b50610433610504366004612556565b610cdc565b348015610514575f80fd5b506103cb600d5481565b348015610529575f80fd5b506104336105383660046125d8565b610d56565b348015610548575f80fd5b50610454610557366004612613565b610d8b565b348015610567575f80fd5b50610433610576366004612556565b610e49565b348015610586575f80fd5b506103cb610e78565b34801561059a575f80fd5b506104336105a9366004612651565b610ec8565b3480156105b9575f80fd5b506103cb60215481565b3480156105ce575f80fd5b5060095b60405160ff90911681526020016103d5565b3480156105ef575f80fd5b505f54610602906001600160a01b031681565b6040516001600160a01b0390911681526020016103d5565b348015610625575f80fd5b506103cb60085481565b34801561063a575f80fd5b506103cb600a5481565b34801561064f575f80fd5b5061043361065e36600461268b565b610f23565b34801561066e575f80fd5b5061043361067d366004612556565b611086565b34801561068d575f80fd5b506103cb60095481565b3480156106a2575f80fd5b506103cb60075481565b3480156106b7575f80fd5b506106027f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a781565b3480156106ea575f80fd5b506104336106f9366004612712565b6110c1565b348015610709575f80fd5b506104546107183660046125f8565b611115565b348015610728575f80fd5b50610433610737366004612556565b611121565b348015610747575f80fd5b50601d5461045490610100900460ff1681565b348015610765575f80fd5b50610433610774366004612712565b611150565b348015610784575f80fd5b506106027f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107b7575f80fd5b506104336107c6366004612556565b6111a4565b3480156107d6575f80fd5b50601f546104549060ff1681565b3480156107ef575f80fd5b506103cb6107fe3660046125f8565b6001600160a01b03165f9081526014602052604090205490565b348015610823575f80fd5b506104336111d7565b348015610837575f80fd5b50601d546105d29062010000900460ff1681565b348015610856575f80fd5b506103cb60065481565b34801561086b575f80fd5b506103cb60055481565b348015610880575f80fd5b5061043361088f366004612745565b611237565b34801561089f575f80fd5b506106026112e3565b3480156108b3575f80fd5b50600f546001600160a01b0316610602565b3480156108d0575f80fd5b5060408051808201909152600581526442554e4e5960d81b6020820152610407565b3480156108fd575f80fd5b506104336112f6565b348015610911575f80fd5b50610454610920366004612581565b6113fc565b348015610930575f80fd5b506011546103cb565b348015610944575f80fd5b50610433610953366004612556565b611408565b348015610963575f80fd5b50601a54610602906001600160a01b031681565b348015610982575f80fd5b50600154610602906001600160a01b031681565b3480156109a1575f80fd5b506103cb6109b0366004612556565b611453565b3480156109c0575f80fd5b506104336109cf366004612774565b6114b8565b3480156109df575f80fd5b506104336109ee366004612556565b61157a565b3480156109fe575f80fd5b50610433610a0d366004612712565b6115a9565b348015610a1d575f80fd5b50610433610a2c366004612556565b6115fd565b348015610a3c575f80fd5b506103cb610a4b3660046127bc565b6001600160a01b039182165f90815260156020908152604080832093909416825291909152205490565b348015610a80575f80fd5b50610433610a8f3660046125f8565b611680565b348015610a9f575f80fd5b506103cb600c5481565b348015610ab4575f80fd5b50610433610ac3366004612556565b61170b565b348015610ad3575f80fd5b50610433610ae2366004612556565b61174d565b348015610af2575f80fd5b50610433610b013660046125f8565b61177c565b348015610b11575f80fd5b506103cb600b5481565b348015610b26575f80fd5b50610433610b35366004612712565b611853565b348015610b45575f80fd5b50601d546104549060ff1681565b600f546001600160a01b03163314610b865760405162461bcd60e51b8152600401610b7d906127e8565b60405180910390fd5b6103e881600254610b979190612831565b610ba19190612848565b60065550565b335f8181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c019086815260200190565b60405180910390a35060015b92915050565b600f546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b7d906127e8565b601d805460ff1916911515919091179055565b5f82610c5b83611453565b119392505050565b600f546001600160a01b03163314610c8d5760405162461bcd60e51b8152600401610b7d906127e8565b600180546001600160a01b039081165f90815260166020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600f546001600160a01b03163314610d065760405162461bcd60e51b8152600401610b7d906127e8565b5f5447906001600160a01b03166108fc6064610d228585612831565b610d2c9190612848565b6040518115909202915f818181858888f19350505050158015610d51573d5f803e3d5ffd5b505050565b600f546001600160a01b03163314610d805760405162461bcd60e51b8152600401610b7d906127e8565b601b91909155601c55565b6001600160a01b0383165f9081526015602090815260408083203384529091528120545f1914610e34576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601582528381203382529091529190912054610e109184906118a7565b6001600160a01b0385165f9081526015602090815260408083203384529091529020555b610e3f8484846118d2565b90505b9392505050565b600f546001600160a01b03163314610e735760405162461bcd60e51b8152600401610b7d906127e8565b602055565b6013546001600160a01b03165f90815260146020526040812054610ec3906012546001600160a01b03165f90815260146020526040902054610ebd9060035490611dc7565b90611dc7565b905090565b600f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b7d906127e8565b601d805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600f546001600160a01b03163314610f4d5760405162461bcd60e51b8152600401610b7d906127e8565b6127118210610fb65760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e31303030302061646472657373657360881b6064820152608401610b7d565b5f610fc18383612831565b905080610fe2866001600160a01b03165f9081526014602052604090205490565b10156110305760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b7d565b5f5b8381101561107e5761106b8686868481811061105057611050612867565b905060200201602081019061106591906125f8565b85611dd2565b50806110768161287b565b915050611032565b505050505050565b600f546001600160a01b031633146110b05760405162461bcd60e51b8152600401610b7d906127e8565b47336108fc6064610d228585612831565b600f546001600160a01b031633146110eb5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b5f610c0d825f19610ba7565b600f546001600160a01b0316331461114b5760405162461bcd60e51b8152600401610b7d906127e8565b600555565b600f546001600160a01b0316331461117a5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b335f908152601460205260409020548110156111d4576012546111d29033906001600160a01b031683611dd2565b505b50565b600f546001600160a01b031633146112015760405162461bcd60e51b8152600401610b7d906127e8565b600f546040515f916001600160a01b0316905f8051602061296f833981519152908390a3600f80546001600160a01b0319169055565b600f546001600160a01b031633146112615760405162461bcd60e51b8152600401610b7d906127e8565b6009849055600a839055600b8290556112848261127e8686611ea1565b90611ea1565b600c819055600e829055605a116112dd5760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b7d565b50505050565b5f610ec3600f546001600160a01b031690565b6010546001600160a01b0316331461135c5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b7d565b60115442116113ad5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b7d565b601054600f546040516001600160a01b0392831692909116905f8051602061296f833981519152905f90a3601054600f80546001600160a01b0319166001600160a01b03909216919091179055565b5f610e423384846118d2565b600f546001600160a01b031633146114325760405162461bcd60e51b8152600401610b7d906127e8565b6103e8816002546114439190612831565b61144d9190612848565b60055550565b5f610c0d61145f610e78565b6114b26114ab60026114a57f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a76001600160a01b03165f9081526014602052604090205490565b90611eac565b8590611eac565b90611eb7565b600f546001600160a01b031633146114e25760405162461bcd60e51b8152600401610b7d906127e8565b600180546001600160a01b039081165f908152601660209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556018909252822080549095168417909455601a8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600f546001600160a01b031633146115a45760405162461bcd60e51b8152600401610b7d906127e8565b600855565b600f546001600160a01b031633146115d35760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b600f546001600160a01b031633146116275760405162461bcd60e51b8152600401610b7d906127e8565b600f8054601080546001600160a01b03199081166001600160a01b038416179091551690556116568142612893565b601155600f546040515f916001600160a01b0316905f8051602061296f833981519152908390a350565b600f546001600160a01b031633146116aa5760405162461bcd60e51b8152600401610b7d906127e8565b5f80546001600160a01b039081168252601660209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601890925291832080549094161790925580546001600160a01b0319169091179055565b600f546001600160a01b031633146117355760405162461bcd60e51b8152600401610b7d906127e8565b6020548111156117485760205460215550565b602155565b600f546001600160a01b031633146117775760405162461bcd60e51b8152600401610b7d906127e8565b600d55565b600f546001600160a01b031633146117a65760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03811661180b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7d565b600f546040516001600160a01b038084169216905f8051602061296f833981519152905f90a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610b7d906127e8565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f81848411156118ca5760405162461bcd60e51b8152600401610b7d919061250b565b505050900390565b6022545f9060ff16156118f1576118ea848484611dd2565b9050610e42565b600f546001600160a01b0385811691161480159061191d5750600f546001600160a01b03848116911614155b1561196b57601d5460ff1661196b5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b7d565b7f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a76001600160a01b03908116908416145f8115826119db57507f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a76001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611a0457506012546001600160a01b03868116911614155b8015611a4257507f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a76001600160a01b0316856001600160a01b031614155b8015611a5b57505f546001600160a01b03868116911614155b8015611a7557506001546001600160a01b03868116911614155b8015611a8f5750601a546001600160a01b03868116911614155b15611b42576001600160a01b0385165f9081526014602090815260408083205460189092529091205460ff16611b4057600654611acc8683612893565b1115611b405760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b7d565b505b7f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a76001600160a01b0316866001600160a01b0316148015611b8a5750601d54610100900460ff165b8015611bae57506001600160a01b0385165f9081526019602052604090205460ff16155b15611c56576001600160a01b0385165f908152601e60205260409020544211611c275760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b7d565b601d54611c3d9062010000900460ff1642612893565b6001600160a01b0386165f908152601e60205260409020555b6001600160a01b0385165f9081526017602052604090205460ff16611c7f57611c7f8685611ec2565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038a165f9081529190529190912054611ccf9186906118a7565b6001600160a01b0387165f90815260146020526040902055838115611d0857600d5415611d0357611d008786611f2a565b90505b611d50565b6001600160a01b0387165f9081526016602052604090205460ff1615611d2e5784611d39565b611d39878685611fc7565b9050611d43612073565b15611d5057611d506120df565b6001600160a01b0386165f90815260146020526040902054611d729082611ea1565b6001600160a01b038088165f8181526014602052604090819020939093559151908916905f8051602061298f83398151915290611db29085815260200190565b60405180910390a35060019695505050505050565b5f610e4282846128a6565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b0387165f90815291905291822054611e219184906118a7565b6001600160a01b038086165f908152601460205260408082209390935590851681522054611e4f9083611ea1565b6001600160a01b038085165f8181526014602052604090819020939093559151908616905f8051602061298f83398151915290611e8f9086815260200190565b60405180910390a35060019392505050565b5f610e428284612893565b5f610e428284612831565b5f610e428284612848565b60055481111580611eea57506001600160a01b0382165f9081526017602052604090205460ff165b6111d25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b7d565b5f80600d5490505f611f53600e546064611f449190612831565b6114b260646114a58887611eac565b305f90815260146020526040902054909150611f6f9082611ea1565b305f81815260146020526040908190209290925590516001600160a01b038716905f8051602061298f83398151915290611fac9085815260200190565b60405180910390a3611fbe8482611dc7565b95945050505050565b5f8082611fd657600854611fda565b600c545b90505f611ffe600e546064611fef9190612831565b6114b260646114a58987611eac565b305f9081526014602052604090205490915061201a9082611ea1565b305f81815260146020526040908190209290925590516001600160a01b038816905f8051602061298f833981519152906120579085815260200190565b60405180910390a36120698582611dc7565b9695505050505050565b5f336001600160a01b037f0000000000000000000000008bb5b53931134d2c815d8bd06bd20b8fe90682a716148015906120b0575060225460ff16155b80156120be5750601f5460ff165b8015610ec357505060208054305f9081526014909252604090912054101590565b6022805460ff19166001179055601b54601c545f916120fd91610c50565b6121095760095461210b565b5f5b90505f61212e60026114b2600c546114b286602154611eac90919063ffffffff16565b90505f61214682602154611dc790919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061217e5761217e612867565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061221e91906128b9565b8160018151811061223157612231612867565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122959086905f908790309042906004016128d4565b5f604051808303815f87803b1580156122ac575f80fd5b505af11580156122be573d5f803e3d5ffd5b505050505f6122d68247611dc790919063ffffffff16565b90505f6122f06122e7886002611eb7565b600c5490611dc7565b90505f61231160026114b2846114b260095488611eac90919063ffffffff16565b90505f61232d836114b2600a5487611eac90919063ffffffff16565b90505f612349846114b2600b5488611eac90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f811461239d576040519150601f19603f3d011682016040523d82523d5f602084013e6123a2565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146123f4576040519150601f19603f3d011682016040523d82523d5f602084013e6123f9565b606091505b505f9250508a1590506124f457601a5460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015612492573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124b79190612943565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff19169055505050505050505050565b5f6020808352835180828501525f5b818110156125365785810183015185820160400152820161251a565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215612566575f80fd5b5035919050565b6001600160a01b03811681146111d4575f80fd5b5f8060408385031215612592575f80fd5b823561259d8161256d565b946020939093013593505050565b803580151581146125ba575f80fd5b919050565b5f602082840312156125cf575f80fd5b610e42826125ab565b5f80604083850312156125e9575f80fd5b50508035926020909101359150565b5f60208284031215612608575f80fd5b8135610e428161256d565b5f805f60608486031215612625575f80fd5b83356126308161256d565b925060208401356126408161256d565b929592945050506040919091013590565b5f8060408385031215612662575f80fd5b61266b836125ab565b9150602083013560ff81168114612680575f80fd5b809150509250929050565b5f805f806060858703121561269e575f80fd5b84356126a98161256d565b9350602085013567ffffffffffffffff808211156126c5575f80fd5b818701915087601f8301126126d8575f80fd5b8135818111156126e6575f80fd5b8860208260051b85010111156126fa575f80fd5b95986020929092019750949560400135945092505050565b5f8060408385031215612723575f80fd5b823561272e8161256d565b915061273c602084016125ab565b90509250929050565b5f805f8060808587031215612758575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60608486031215612786575f80fd5b83356127918161256d565b925060208401356127a18161256d565b915060408401356127b18161256d565b809150509250925092565b5f80604083850312156127cd575f80fd5b82356127d88161256d565b915060208301356126808161256d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c0d57610c0d61281d565b5f8261286257634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161288c5761288c61281d565b5060010190565b80820180821115610c0d57610c0d61281d565b81810381811115610c0d57610c0d61281d565b5f602082840312156128c9575f80fd5b8151610e428161256d565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156129225784516001600160a01b0316835293830193918301916001016128fd565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612955575f80fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e89b5cf01dc43eaddfb67f247a2d775902587653df190b49267dac1106edd46e64736f6c63430008140033

Deployed Bytecode Sourcemap

18276:15919:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19260:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19260:56:0;;;;;;;;21133:80;;;;;;;;;;-1:-1:-1;21205:5:0;;;;;;;;;;;;-1:-1:-1;;;21205:5:0;;;;21133:80;;;;;;;:::i;22453:177::-;;;;;;;;;;-1:-1:-1;22453:177:0;;;;;:::i;:::-;;:::i;:::-;;21557:216;;;;;;;;;;-1:-1:-1;21557:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;21557:216:0;1390:187:1;28025:94:0;;;;;;;;;;-1:-1:-1;28025:94:0;;;;;:::i;:::-;;:::i;33494:150::-;;;;;;;;;;-1:-1:-1;33494:150:0;;;;;:::i;:::-;;:::i;1169:39::-;;;;;;;;;;;;;;;;20863:88;;;;;;;;;;-1:-1:-1;20936:12:0;;20863:88;;31526:208;;;;;;;;;;-1:-1:-1;31526:208:0;;;;;:::i;:::-;;:::i;27558:212::-;;;;;;;;;;-1:-1:-1;27558:212:0;;;;;:::i;:::-;;:::i;1123:37::-;;;;;;;;;;;;;;;;32962:184;;;;;;;;;;-1:-1:-1;32962:184:0;;;;;:::i;:::-;;:::i;22075:370::-;;;;;;;;;;-1:-1:-1;22075:370:0;;;;;:::i;:::-;;:::i;32573:112::-;;;;;;;;;;-1:-1:-1;32573:112:0;;;;;:::i;:::-;;:::i;33154:148::-;;;;;;;;;;;;;:::i;28166:164::-;;;;;;;;;;-1:-1:-1;28166:164:0;;;;;:::i;:::-;;:::i;19323:53::-;;;;;;;;;;;;;;;;20957:80;;;;;;;;;;-1:-1:-1;402:1:0;20957:80;;;3412:4:1;3400:17;;;3382:36;;3370:2;3355:18;20957:80:0;3240:184:1;133:73:0;;;;;;;;;;-1:-1:-1;133:73:0;;;;-1:-1:-1;;;;;133:73:0;;;;;;-1:-1:-1;;;;;3593:32:1;;;3575:51;;3563:2;3548:18;133:73:0;3429:203:1;856:42:0;;;;;;;;;;;;;;;;951:35;;;;;;;;;;;;;;;;33673:453;;;;;;;;;;-1:-1:-1;33673:453:0;;;;;:::i;:::-;;:::i;27778:216::-;;;;;;;;;;-1:-1:-1;27778:216:0;;;;;:::i;:::-;;:::i;907:37::-;;;;;;;;;;;;;;;;812;;;;;;;;;;;;;;;;18990:38;;;;;;;;;;;;;;;30565:131;;;;;;;;;;-1:-1:-1;30565:131:0;;;;;:::i;:::-;;:::i;21781:122::-;;;;;;;;;;-1:-1:-1;21781:122:0;;;;;:::i;:::-;;:::i;22816:97::-;;;;;;;;;;-1:-1:-1;22816:97:0;;;;;:::i;:::-;;:::i;19077:37::-;;;;;;;;;;-1:-1:-1;19077:37:0;;;;;;;;;;;30170:121;;;;;;;;;;-1:-1:-1;30170:121:0;;;;;:::i;:::-;;:::i;18933:50::-;;;;;;;;;;;;;;;23076:231;;;;;;;;;;-1:-1:-1;23076:231:0;;;;;:::i;:::-;;:::i;19223:30::-;;;;;;;;;;-1:-1:-1;19223:30:0;;;;;;;;21305:105;;;;;;;;;;-1:-1:-1;21305:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;21389:18:0;21371:7;21389:18;;;:9;:18;;;;;;;21305:105;8936:148;;;;;;;;;;;;;:::i;19121:39::-;;;;;;;;;;-1:-1:-1;19121:39:0;;;;;;;;;;;702:58;;;;;;;;;;;;;;;;640:55;;;;;;;;;;;;;;;;30894:478;;;;;;;;;;-1:-1:-1;30894:478:0;;;;;:::i;:::-;;:::i;21219:80::-;;;;;;;;;;;;;:::i;8293:79::-;;;;;;;;;;-1:-1:-1;8358:6:0;;-1:-1:-1;;;;;8358:6:0;8293:79;;21043:84;;;;;;;;;;-1:-1:-1;21117:7:0;;;;;;;;;;;;-1:-1:-1;;;21117:7:0;;;;21043:84;;9958:305;;;;;;;;;;;;;:::i;21911:156::-;;;;;;;;;;-1:-1:-1;21911:156:0;;;;;:::i;:::-;;:::i;9491:89::-;;;;;;;;;;-1:-1:-1;9563:9:0;;9491:89;;22636:172;;;;;;;;;;-1:-1:-1;22636:172:0;;;;;:::i;:::-;;:::i;18804:36::-;;;;;;;;;;-1:-1:-1;18804:36:0;;;;-1:-1:-1;;;;;18804:36:0;;;213:75;;;;;;;;;;-1:-1:-1;213:75:0;;;;-1:-1:-1;;;;;213:75:0;;;33310:176;;;;;;;;;;-1:-1:-1;33310:176:0;;;;;:::i;:::-;;:::i;31993:536::-;;;;;;;;;;-1:-1:-1;31993:536:0;;;;;:::i;:::-;;:::i;31380:96::-;;;;;;;;;;-1:-1:-1;31380:96:0;;;;;:::i;:::-;;:::i;30299:121::-;;;;;;;;;;-1:-1:-1;30299:121:0;;;;;:::i;:::-;;:::i;9656:226::-;;;;;;;;;;-1:-1:-1;9656:226:0;;;;;:::i;:::-;;:::i;21416:133::-;;;;;;;;;;-1:-1:-1;21416:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21518:19:0;;;21500:7;21518:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21416:133;31742:243;;;;;;;;;;-1:-1:-1;31742:243:0;;;;;:::i;:::-;;:::i;1037:77::-;;;;;;;;;;;;;;;;32693:221;;;;;;;;;;-1:-1:-1;32693:221:0;;;;;:::i;:::-;;:::i;30798:88::-;;;;;;;;;;-1:-1:-1;30798:88:0;;;;;:::i;:::-;;:::i;9239:244::-;;;;;;;;;;-1:-1:-1;9239:244:0;;;;;:::i;:::-;;:::i;993:37::-;;;;;;;;;;;;;;;;30428:129;;;;;;;;;;-1:-1:-1;30428:129:0;;;;;:::i;:::-;;:::i;19037:31::-;;;;;;;;;;-1:-1:-1;19037:31:0;;;;;;;;22453:177;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;;;;;;;;;22618:4:::1;22590:23;22575:12;;:38;;;;:::i;:::-;22574:48;;;;:::i;:::-;22556:15;:66:::0;-1:-1:-1;22453:177:0:o;21557:216::-;21661:10;21632:4;21649:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21649:32:0;;;;;;;;;;:41;;;21706:37;21632:4;;21649:32;;21706:37;;;;21684:6;160:25:1;;148:2;133:18;;14:177;21706:37:0;;;;;;;;-1:-1:-1;21761:4:0;21557:216;;;;;:::o;28025:94::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;28090:11:::1;:21:::0;;-1:-1:-1;;28090:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28025:94::o;33494:150::-;33574:4;33630:6;33598:29;33618:8;33598:19;:29::i;:::-;:38;;33494:150;-1:-1:-1;;;33494:150:0:o;31526:208::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;31622:15:::1;::::0;;-1:-1:-1;;;;;31622:15:0;;::::1;31641:5;31610:28:::0;;;:11:::1;:28;::::0;;;;;:36;;-1:-1:-1;;31610:36:0;;::::1;::::0;;;31657:23;;;::::1;::::0;;;;;;:30;;;;::::1;::::0;::::1;::::0;;;31698:28;;-1:-1:-1;;;;;;31698:28:0::1;::::0;;::::1;::::0;;31526:208::o;27558:212::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;27643:17:::1;27703:13:::0;27663:21:::1;::::0;-1:-1:-1;;;;;27703:13:0::1;27695:67;27758:3;27727:28;27739:16:::0;27663:21;27727:28:::1;:::i;:::-;:34;;;;:::i;:::-;27695:67;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27632:138;27558:212:::0;:::o;32962:184::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;33061:15:::1;:25:::0;;;;33097:26:::1;:41:::0;32962:184::o;22075:370::-;-1:-1:-1;;;;;22195:19:0;;22175:4;22195:19;;;:11;:19;;;;;;;;22215:10;22195:31;;;;;;;;-1:-1:-1;;22195:52:0;22192:186;;22297:69;;;;;;;;;;;-1:-1:-1;;;22297:69:0;;;;;;;;-1:-1:-1;;;;;22297:19:0;;-1:-1:-1;22297:19:0;;;:11;:19;;;;;22317:10;22297:31;;;;;;;;;;:69;;22333:6;;22297:35;:69::i;:::-;-1:-1:-1;;;;;22263:19:0;;;;;;:11;:19;;;;;;;;22283:10;22263:31;;;;;;;:103;22192:186;22397:40;22411:6;22419:9;22430:6;22397:13;:40::i;:::-;22390:47;;22075:370;;;;;;:::o;32573:112::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;32654:13:::1;:23:::0;32573:112::o;33154:148::-;33288:4;;-1:-1:-1;;;;;33288:4:0;33207:7;21389:18;;;:9;:18;;;;;;33234:60;;33267:4;;-1:-1:-1;;;;;33267:4:0;21371:7;21389:18;;;:9;:18;;;;;;33234:39;;:18;;;:22;:39::i;:::-;:43;;:60::i;:::-;33227:67;;33154:148;:::o;28166:164::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;28250:18:::1;:28:::0;;-1:-1:-1;;28289:33:0;28250:28:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;28289:33:0;;;;;;28250:28:::1;28289:33:::0;;;::::1;::::0;;;::::1;;::::0;;28166:164::o;33673:453::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;33814:5:::1;33795:24:::0;::::1;33787:83;;;::::0;-1:-1:-1;;;33787:83:0;;7422:2:1;33787:83:0::1;::::0;::::1;7404:21:1::0;7461:2;7441:18;;;7434:30;7500:34;7480:18;;;7473:62;-1:-1:-1;;;7551:18:1;;;7544:45;7606:19;;33787:83:0::1;7220:411:1::0;33787:83:0::1;33883:12;33898:25;33907:9:::0;33898:6;:25:::1;:::i;:::-;33883:40;;33963:4;33944:15;33954:4;-1:-1:-1::0;;;;;21389:18:0;21371:7;21389:18;;;:9;:18;;;;;;;21305:105;33944:15:::1;:23;;33936:63;;;::::0;-1:-1:-1;;;33936:63:0;;7838:2:1;33936:63:0::1;::::0;::::1;7820:21:1::0;7877:2;7857:18;;;7850:30;7916:29;7896:18;;;7889:57;7963:18;;33936:63:0::1;7636:351:1::0;33936:63:0::1;34016:6;34012:107;34026:20:::0;;::::1;34012:107;;;34067:40;34082:4;34087:9;;34097:1;34087:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34100:6;34067:14;:40::i;:::-;-1:-1:-1::0;34048:3:0;::::1;::::0;::::1;:::i;:::-;;;;34012:107;;;;33774:352;33673:453:::0;;;;:::o;27778:216::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;27890:21:::1;27930:10;27922:64;27982:3;27951:28;27963:16:::0;27890:21;27951:28:::1;:::i;30565:131::-:0;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30655:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30655:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30565:131::o;21781:122::-;21836:4;21860:35;21868:7;-1:-1:-1;;21860:7:0;:35::i;22816:97::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;22884:12:::1;:21:::0;22816:97::o;30170:121::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30255:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30255:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30170:121::o;23076:231::-;23211:10;23201:21;;;;:9;:21;;;;;;:30;-1:-1:-1;23198:102:0;;;23275:4;;23248:40;;23263:10;;-1:-1:-1;;;;;23275:4:0;23281:6;23248:14;:40::i;:::-;;23198:102;23076:231;:::o;8936:148::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;9027:6:::1;::::0;9006:40:::1;::::0;9043:1:::1;::::0;-1:-1:-1;;;;;9027:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9006:40:0;9043:1;;9006:40:::1;9057:6;:19:::0;;-1:-1:-1;;;;;;9057:19:0::1;::::0;;8936:148::o;30894:478::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;31052:9:::1;:25:::0;;;31088:11:::1;:32:::0;;;31131:15:::1;:37:::0;;;31194:62:::1;31149:19:::0;31194:37:::1;31064:13:::0;31102:18;31194:17:::1;:37::i;:::-;:41:::0;::::1;:62::i;:::-;31179:12;:77:::0;;;31267:14:::1;:32:::0;;;31333:2:::1;-1:-1:-1::0;31310:54:0::1;;;::::0;-1:-1:-1;;;31310:54:0;;8466:2:1;31310:54:0::1;::::0;::::1;8448:21:1::0;8505:2;8485:18;;;8478:30;8544:26;8524:18;;;8517:54;8588:18;;31310:54:0::1;8264:348:1::0;31310:54:0::1;30894:478:::0;;;;:::o;21219:80::-;21271:7;21289;8358:6;;-1:-1:-1;;;;;8358:6:0;;8293:79;9958:305;10010:14;;-1:-1:-1;;;;;10010:14:0;10028:10;10010:28;10002:76;;;;-1:-1:-1;;;10002:76:0;;8819:2:1;10002:76:0;;;8801:21:1;8858:2;8838:18;;;8831:30;8897:34;8877:18;;;8870:62;-1:-1:-1;;;8948:18:1;;;8941:33;8991:19;;10002:76:0;8617:399:1;10002:76:0;10115:9;;10097:15;:27;10089:72;;;;-1:-1:-1;;;10089:72:0;;9223:2:1;10089:72:0;;;9205:21:1;9262:2;9242:18;;;9235:30;9301:33;9281:18;;;9274:61;9352:18;;10089:72:0;9021:355:1;10089:72:0;10206:14;;10198:6;;10177:44;;-1:-1:-1;;;;;10206:14:0;;;;10198:6;;;;-1:-1:-1;;;;;;;;;;;10177:44:0;10206:14;;10177:44;10241:14;;10232:6;:23;;-1:-1:-1;;;;;;10232:23:0;-1:-1:-1;;;;;10241:14:0;;;10232:23;;;;;;9958:305::o;21911:156::-;21991:4;22015:44;22029:10;22041:9;22052:6;22015:13;:44::i;22636:172::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;22796:4:::1;22767:24;22752:12;;:39;;;;:::i;:::-;22751:49;;;;:::i;:::-;22736:12;:64:::0;-1:-1:-1;22636:172:0:o;33310:176::-;33378:7;33405:73;33455:22;:20;:22::i;:::-;33405:45;33418:31;33447:1;33418:24;33428:13;-1:-1:-1;;;;;21389:18:0;21371:7;21389:18;;;:9;:18;;;;;;;21305:105;33418:24;:28;;:31::i;:::-;33405:8;;:12;:45::i;:::-;:49;;:73::i;31993:536::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;32153:15:::1;::::0;;-1:-1:-1;;;;;32153:15:0;;::::1;32172:5;32141:28:::0;;;:11:::1;:28;::::0;;;;;;;:36;;-1:-1:-1;;32141:36:0;;::::1;::::0;;;32188:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;32250:13;;;::::1;32238:26:::0;;;;;:34;;;::::1;::::0;;32283:30;;::::1;::::0;;;;;;:37;;;::::1;::::0;::::1;::::0;;32333:11:::1;:30:::0;;;;;:37;;;;::::1;::::0;::::1;::::0;;;32383:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;32383:46:0;;::::1;;::::0;;;32440:33;;;::::1;::::0;;::::1;::::0;;;32484:37;;;;::::1;;::::0;;31993:536::o;31380:96::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;31448:11:::1;:20:::0;31380:96::o;30299:121::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30384:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30384:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30299:121::o;9656:226::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;9737:6:::1;::::0;;9720:14:::1;:23:::0;;-1:-1:-1;;;;;;9720:23:0;;::::1;-1:-1:-1::0;;;;;9737:6:0;::::1;9720:23;::::0;;;9754:19:::1;::::0;;9796:22:::1;9814:4:::0;9796:15:::1;:22;:::i;:::-;9784:9;:34:::0;9855:6:::1;::::0;9834:40:::1;::::0;9871:1:::1;::::0;-1:-1:-1;;;;;9855:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9834:40:0;9871:1;;9834:40:::1;9656:226:::0;:::o;31742:243::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;31849:5:::1;31832:13:::0;;-1:-1:-1;;;;;31832:13:0;;::::1;31820:26:::0;;:11:::1;:26;::::0;;;;;;;:34;;-1:-1:-1;;31820:34:0;;::::1;::::0;;;31865:23;;;::::1;::::0;;;;;;:30;;;::::1;31832:13:::0;31865:30;;::::1;::::0;;;31908:11:::1;:23:::0;;;;;;:30;;;;::::1;;::::0;;;31951:26;;-1:-1:-1;;;;;;31951:26:0::1;::::0;;::::1;::::0;;31742:243::o;32693:221::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;32778:13:::1;;32768:7;:23;32765:134;;;32821:13;::::0;32808:10:::1;:26:::0;23076:231;:::o;32765:134::-:1;32867:10;:20:::0;32693:221::o;30798:88::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;30864:8:::1;:14:::0;30798:88::o;9239:244::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9328:22:0;::::1;9320:73;;;::::0;-1:-1:-1;;;9320:73:0;;9713:2:1;9320:73:0::1;::::0;::::1;9695:21:1::0;9752:2;9732:18;;;9725:30;9791:34;9771:18;;;9764:62;-1:-1:-1;;;9842:18:1;;;9835:36;9888:19;;9320:73:0::1;9511:402:1::0;9320:73:0::1;9430:6;::::0;9409:38:::1;::::0;-1:-1:-1;;;;;9409:38:0;;::::1;::::0;9430:6:::1;::::0;-1:-1:-1;;;;;;;;;;;9409:38:0;9430:6:::1;::::0;9409:38:::1;9458:6;:17:::0;;-1:-1:-1;;;;;;9458:17:0::1;-1:-1:-1::0;;;;;9458:17:0;;;::::1;::::0;;;::::1;::::0;;9239:244::o;30428:129::-;8505:6;;-1:-1:-1;;;;;8505:6:0;6957:10;8505:22;8497:67;;;;-1:-1:-1;;;8497:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30517:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;30517:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30428:129::o;3965:240::-;4085:7;4146:12;4138:6;;;;4130:29;;;;-1:-1:-1;;;4130:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4181:5:0;;;3965:240::o;23382:2384::-;23494:6;;23474:4;;23494:6;;23491:63;;;23510:41;23525:6;23533:9;23544:6;23510:14;:41::i;:::-;23503:48;;;;23491:63;8358:6;;-1:-1:-1;;;;;23569:17:0;;;8358:6;;23569:17;;;;:41;;-1:-1:-1;8358:6:0;;-1:-1:-1;;;;;23590:20:0;;;8358:6;;23590:20;;23569:41;23566:115;;;23634:11;;;;23626:43;;;;-1:-1:-1;;;23626:43:0;;10120:2:1;23626:43:0;;;10102:21:1;10159:2;10139:18;;;10132:30;-1:-1:-1;;;10178:18:1;;;10171:50;10238:18;;23626:43:0;9918:344:1;23626:43:0;23721:13;-1:-1:-1;;;;;23708:26:0;;;;;;;23693:11;23765:26;;23708;23765:53;;;23805:13;-1:-1:-1;;;;;23795:23:0;:6;-1:-1:-1;;;;;23795:23:0;;;23765:53;23746:73;-1:-1:-1;;;;;;23836:26:0;;23857:4;23836:26;;;;:70;;-1:-1:-1;23901:4:0;;-1:-1:-1;;;;;23880:26:0;;;23901:4;;23880:26;;23836:70;:114;;;;;23937:13;-1:-1:-1;;;;;23924:26:0;:9;-1:-1:-1;;;;;23924:26:0;;;23836:114;:158;;;;-1:-1:-1;23981:13:0;;-1:-1:-1;;;;;23968:26:0;;;23981:13;;23968:26;;23836:158;:204;;;;-1:-1:-1;24025:15:0;;-1:-1:-1;;;;;24012:28:0;;;24025:15;;24012:28;;23836:204;:256;;;;-1:-1:-1;24071:21:0;;-1:-1:-1;;;;;24058:34:0;;;24071:21;;24058:34;;23836:256;23832:530;;;-1:-1:-1;;;;;21389:18:0;;24118;21389;;;:9;:18;;;;;;;;;24178:11;:22;;;;;;;;;24174:177;;24254:15;;24230:19;24243:6;24230:10;:19;:::i;:::-;24229:40;;24221:114;;;;-1:-1:-1;;;24221:114:0;;10469:2:1;24221:114:0;;;10451:21:1;10508:2;10488:18;;;10481:30;10547:34;10527:18;;;10520:62;10618:32;10598:18;;;10591:60;10668:19;;24221:114:0;10267:426:1;24221:114:0;24103:259;23832:530;24388:13;-1:-1:-1;;;;;24378:23:0;:6;-1:-1:-1;;;;;24378:23:0;;:58;;;;-1:-1:-1;24418:18:0;;;;;;;24378:58;:103;;;;-1:-1:-1;;;;;;24454:27:0;;;;;;:16;:27;;;;;;;;24453:28;24378:103;24374:317;;;-1:-1:-1;;;;;24515:24:0;;;;;;:13;:24;;;;;;24542:15;-1:-1:-1;24507:91:0;;;;-1:-1:-1;;;24507:91:0;;10900:2:1;24507:91:0;;;10882:21:1;10939:2;10919:18;;;10912:30;10978:34;10958:18;;;10951:62;-1:-1:-1;;;11029:18:1;;;11022:35;11074:19;;24507:91:0;10698:401:1;24507:91:0;24658:21;;24640:39;;24658:21;;;;;24640:15;:39;:::i;:::-;-1:-1:-1;;;;;24613:24:0;;;;;;:13;:24;;;;;:66;24374:317;-1:-1:-1;;;;;24913:26:0;;;;;;:15;:26;;;;;;;;24909:87;;24956:28;24969:6;24977;24956:12;:28::i;:::-;25055:53;;;;;;;;;;;;-1:-1:-1;;;25055:53:0;;;;;;;;-1:-1:-1;;;;;25055:17:0;;-1:-1:-1;25055:17:0;;;;;;;;;;;:53;;25077:6;;25055:21;:53::i;:::-;-1:-1:-1;;;;;25035:17:0;;;;;;:9;:17;;;;;:73;25146:6;25282:318;;;;25315:8;;:12;25312:100;;25365:31;25381:6;25389;25365:15;:31::i;:::-;25348:48;;25312:100;25282:318;;;-1:-1:-1;;;;;26373:19:0;;26348:4;26373:19;;;:11;:19;;;;;;;;26372:20;25461:64;;25519:6;25461:64;;;25485:31;25493:6;25501;25509;25485:7;:31::i;:::-;25444:81;;25557:16;:14;:16::i;:::-;25554:35;;;25576:10;:8;:10::i;:::-;-1:-1:-1;;;;;25635:20:0;;;;;;:9;:20;;;;;;:40;;25660:14;25635:24;:40::i;:::-;-1:-1:-1;;;;;25612:20:0;;;;;;;:9;:20;;;;;;;:63;;;;25693:43;;;;;;-1:-1:-1;;;;;;;;;;;25693:43:0;;;25721:14;160:25:1;;148:2;133:18;;14:177;25693:43:0;;;;;;;;-1:-1:-1;25754:4:0;;23382:2384;-1:-1:-1;;;;;;23382:2384:0:o;2067:98::-;2125:7;2152:5;2156:1;2152;:5;:::i;25774:330::-;25904:53;;;;;;;;;;;;-1:-1:-1;;;25904:53:0;;;;;;;;-1:-1:-1;;;;;25904:17:0;;25867:4;25904:17;;;;;;;;;;:53;;25926:6;;25904:21;:53::i;:::-;-1:-1:-1;;;;;25884:17:0;;;;;;;:9;:17;;;;;;:73;;;;25991:20;;;;;;;:32;;26016:6;25991:24;:32::i;:::-;-1:-1:-1;;;;;25968:20:0;;;;;;;:9;:20;;;;;;;:55;;;;26039:35;;;;;;-1:-1:-1;;;;;;;;;;;26039:35:0;;;26067:6;160:25:1;;148:2;133:18;;14:177;26039:35:0;;;;;;;;-1:-1:-1;26092:4:0;25774:330;;;;;:::o;1686:98::-;1744:7;1771:5;1775:1;1771;:5;:::i;2424:98::-;2482:7;2509:5;2513:1;2509;:5;:::i;2823:98::-;2881:7;2908:5;2912:1;2908;:5;:::i;26112:166::-;26209:12;;26199:6;:22;;:49;;;-1:-1:-1;;;;;;26225:23:0;;;;;;:15;:23;;;;;;;;26199:49;26191:79;;;;-1:-1:-1;;;26191:79:0;;11439:2:1;26191:79:0;;;11421:21:1;11478:2;11458:18;;;11451:30;-1:-1:-1;;;11497:18:1;;;11490:47;11554:18;;26191:79:0;11237:341:1;26444:406:0;26519:7;26541:17;26561:8;;26541:28;;26580:17;26600:56;26635:14;;26652:3;26635:20;;;;:::i;:::-;26600:30;26626:3;26600:21;:6;26611:9;26600:10;:21::i;:56::-;26722:4;26704:24;;;;:9;:24;;;;;;26580:76;;-1:-1:-1;26704:39:0;;26580:76;26704:28;:39::i;:::-;26695:4;26677:24;;;;:9;:24;;;;;;;:66;;;;26759:42;;-1:-1:-1;;;;;26759:42:0;;;-1:-1:-1;;;;;;;;;;;26759:42:0;;;26791:9;160:25:1;;148:2;133:18;;14:177;26759:42:0;;;;;;;;26821:21;:6;26832:9;26821:10;:21::i;:::-;26814:28;26444:406;-1:-1:-1;;;;;26444:406:0:o;26858:438::-;26938:7;26960:17;26980:6;:35;;27004:11;;26980:35;;;26989:12;;26980:35;26960:55;;27026:17;27046:56;27081:14;;27098:3;27081:20;;;;:::i;:::-;27046:30;27072:3;27046:21;:6;27057:9;27046:10;:21::i;:56::-;27168:4;27150:24;;;;:9;:24;;;;;;27026:76;;-1:-1:-1;27150:39:0;;27026:76;27150:28;:39::i;:::-;27141:4;27123:24;;;;:9;:24;;;;;;;:66;;;;27205:42;;-1:-1:-1;;;;;27205:42:0;;;-1:-1:-1;;;;;;;;;;;27205:42:0;;;27237:9;160:25:1;;148:2;133:18;;14:177;27205:42:0;;;;;;;;27267:21;:6;27278:9;27267:10;:21::i;:::-;27260:28;26858:438;-1:-1:-1;;;;;;26858:438:0:o;27344:206::-;27393:4;27417:10;-1:-1:-1;;;;;27431:13:0;27417:27;;;;;:47;;-1:-1:-1;27458:6:0;;;;27457:7;27417:47;:71;;;;-1:-1:-1;27477:11:0;;;;27417:71;:125;;;;-1:-1:-1;;27529:13:0;;;27519:4;27501:24;;;;:9;:24;;;;;;;;:41;;;27344:206::o;28338:1775::-;19425:6;:13;;-1:-1:-1;;19425:13:0;19434:4;19425:13;;;28433:15:::1;::::0;28450:26:::1;::::0;19425:6;;28417:60:::1;::::0;:15:::1;:60::i;:::-;:76;;28484:9;;28417:76;;;28480:1;28417:76;28387:106;;28504:23;28530:60;28588:1;28530:53;28570:12;;28530:35;28545:19;28530:10;;:14;;:35;;;;:::i;:60::-;28504:86;;28601:20;28624:31;28639:15;28624:10;;:14;;:31;;;;:::i;:::-;28692:16;::::0;;28706:1:::1;28692:16:::0;;;;;::::1;::::0;;28601:54;;-1:-1:-1;28668:21:0::1;::::0;28692:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28692:16:0::1;28668:40;;28737:4;28719;28724:1;28719:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;28719:23:0::1;;;-1:-1:-1::0;;;;;28719:23:0::1;;;::::0;::::1;28763:14;-1:-1:-1::0;;;;;28763:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28753:4;28758:1;28753:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28753:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;28855:196:::1;::::0;-1:-1:-1;;;28855:196:0;;28821:21:::1;::::0;28855:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;28935:12;;28797:21:::1;::::0;28978:4;;29005::::1;::::0;29025:15:::1;::::0;28855:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29064:17;29084:40;29110:13;29084:21;:25;;:40;;;;:::i;:::-;29064:60:::0;-1:-1:-1;29137:19:0::1;29159:44;29176:26;:19:::0;29200:1:::1;29176:23;:26::i;:::-;29159:12;::::0;;:16:::1;:44::i;:::-;29137:66;;29216:26;29245:48;29291:1;29245:41;29274:11;29245:24;29259:9;;29245;:13;;:24;;;;:::i;:48::-;29216:77;;29304:24;29331:43;29362:11;29331:26;29345:11;;29331:9;:13;;:26;;;;:::i;:43::-;29304:70;;29385:25;29413:47;29448:11;29413:30;29427:15;;29413:9;:13;;:30;;;;:::i;:47::-;29474:15;29502:13:::0;;29494:68:::1;::::0;29385:75;;-1:-1:-1;29474:15:0;;-1:-1:-1;;;;;29502:13:0;;::::1;::::0;29552:5:::1;::::0;29529:16;;29474:15;29494:68;29474:15;29494:68;29529:16;29502:13;29552:5;29494:68:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29597:15:0::1;::::0;29589:71:::1;::::0;29473:89;;-1:-1:-1;;;;;;29597:15:0::1;::::0;29650:5:::1;::::0;29626:17;;29589:71:::1;::::0;;;29626:17;29597:15;29650:5;29589:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29718:5:0::1;::::0;-1:-1:-1;;29739:19:0;;;-1:-1:-1;29736:370:0::1;;29956:21;::::0;29774:252:::1;::::0;-1:-1:-1;;;29774:252:0;;29858:4:::1;29774:252;::::0;::::1;13507:34:1::0;13557:18;;;13550:34;;;-1:-1:-1;13600:18:1;;;13593:34;;;13643:18;;;13636:34;-1:-1:-1;;;;;29956:21:0;;::::1;13686:19:1::0;;;13679:44;29996:15:0::1;13739:19:1::0;;;13732:35;29774:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;29812:18;;13441:19:1;;29774:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30046:48:0::1;::::0;;14263:25:1;;;14319:2;14304:18;;14297:34;;;30046:48:0::1;::::0;-1:-1:-1;14236:18:1;30046:48:0::1;;;;;;;29736:370;-1:-1:-1::0;;19443:6:0;:14;;-1:-1:-1;;19443:14:0;;;-1:-1:-1;;;;;;;;;28338:1775:0: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:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:160::-;1647:20;;1703:13;;1696:21;1686:32;;1676:60;;1732:1;1729;1722:12;1676:60;1582:160;;;:::o;1747:180::-;1803:6;1856:2;1844:9;1835:7;1831:23;1827:32;1824:52;;;1872:1;1869;1862:12;1824:52;1895:26;1911:9;1895:26;:::i;1932:248::-;2000:6;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;;2100:23:1;;;2170:2;2155:18;;;2142:32;;-1:-1:-1;1932:248:1:o;2185:247::-;2244:6;2297:2;2285:9;2276:7;2272:23;2268:32;2265:52;;;2313:1;2310;2303:12;2265:52;2352:9;2339:23;2371:31;2396:5;2371:31;:::i;2437:456::-;2514:6;2522;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2638:9;2625:23;2657:31;2682:5;2657:31;:::i;:::-;2707:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;2777:33;2736:32;2777:33;:::i;:::-;2437:456;;2829:7;;-1:-1:-1;;;2883:2:1;2868:18;;;;2855:32;;2437:456::o;2898:337::-;2961:6;2969;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3061:26;3077:9;3061:26;:::i;:::-;3051:36;;3137:2;3126:9;3122:18;3109:32;3181:4;3174:5;3170:16;3163:5;3160:27;3150:55;;3201:1;3198;3191:12;3150:55;3224:5;3214:15;;;2898:337;;;;;:::o;3637:818::-;3741:6;3749;3757;3765;3818:2;3806:9;3797:7;3793:23;3789:32;3786:52;;;3834:1;3831;3824:12;3786:52;3873:9;3860:23;3892:31;3917:5;3892:31;:::i;:::-;3942:5;-1:-1:-1;3998:2:1;3983:18;;3970:32;4021:18;4051:14;;;4048:34;;;4078:1;4075;4068:12;4048:34;4116:6;4105:9;4101:22;4091:32;;4161:7;4154:4;4150:2;4146:13;4142:27;4132:55;;4183:1;4180;4173:12;4132:55;4223:2;4210:16;4249:2;4241:6;4238:14;4235:34;;;4265:1;4262;4255:12;4235:34;4318:7;4313:2;4303:6;4300:1;4296:14;4292:2;4288:23;4284:32;4281:45;4278:65;;;4339:1;4336;4329:12;4278:65;3637:818;;4370:2;4362:11;;;;;-1:-1:-1;4392:6:1;;4445:2;4430:18;4417:32;;-1:-1:-1;3637:818:1;-1:-1:-1;;;3637:818:1:o;4460:315::-;4525:6;4533;4586:2;4574:9;4565:7;4561:23;4557:32;4554:52;;;4602:1;4599;4592:12;4554:52;4641:9;4628:23;4660:31;4685:5;4660:31;:::i;:::-;4710:5;-1:-1:-1;4734:35:1;4765:2;4750:18;;4734:35;:::i;:::-;4724:45;;4460:315;;;;;:::o;5015:385::-;5101:6;5109;5117;5125;5178:3;5166:9;5157:7;5153:23;5149:33;5146:53;;;5195:1;5192;5185:12;5146:53;-1:-1:-1;;5218:23:1;;;5288:2;5273:18;;5260:32;;-1:-1:-1;5339:2:1;5324:18;;5311:32;;5390:2;5375:18;5362:32;;-1:-1:-1;5015:385:1;-1:-1:-1;5015:385:1:o;5405:529::-;5482:6;5490;5498;5551:2;5539:9;5530:7;5526:23;5522:32;5519:52;;;5567:1;5564;5557:12;5519:52;5606:9;5593:23;5625:31;5650:5;5625:31;:::i;:::-;5675:5;-1:-1:-1;5732:2:1;5717:18;;5704:32;5745:33;5704:32;5745:33;:::i;:::-;5797:7;-1:-1:-1;5856:2:1;5841:18;;5828:32;5869:33;5828:32;5869:33;:::i;:::-;5921:7;5911:17;;;5405:529;;;;;:::o;5939:388::-;6007:6;6015;6068:2;6056:9;6047:7;6043:23;6039:32;6036:52;;;6084:1;6081;6074:12;6036:52;6123:9;6110:23;6142:31;6167:5;6142:31;:::i;:::-;6192:5;-1:-1:-1;6249:2:1;6234:18;;6221:32;6262:33;6221:32;6262:33;:::i;6332:356::-;6534:2;6516:21;;;6553:18;;;6546:30;6612:34;6607:2;6592:18;;6585:62;6679:2;6664:18;;6332:356::o;6693:127::-;6754:10;6749:3;6745:20;6742:1;6735:31;6785:4;6782:1;6775:15;6809:4;6806:1;6799:15;6825:168;6898:9;;;6929;;6946:15;;;6940:22;;6926:37;6916:71;;6967:18;;:::i;6998:217::-;7038:1;7064;7054:132;;7108:10;7103:3;7099:20;7096:1;7089:31;7143:4;7140:1;7133:15;7171:4;7168:1;7161:15;7054:132;-1:-1:-1;7200:9:1;;6998:217::o;7992:127::-;8053:10;8048:3;8044:20;8041:1;8034:31;8084:4;8081:1;8074:15;8108:4;8105:1;8098:15;8124:135;8163:3;8184:17;;;8181:43;;8204:18;;:::i;:::-;-1:-1:-1;8251:1:1;8240:13;;8124:135::o;9381:125::-;9446:9;;;9467:10;;;9464:36;;;9480:18;;:::i;11104:128::-;11171:9;;;11192:11;;;11189:37;;;11206:18;;:::i;11715:251::-;11785:6;11838:2;11826:9;11817:7;11813:23;11809:32;11806:52;;;11854:1;11851;11844:12;11806:52;11886:9;11880:16;11905:31;11930:5;11905:31;:::i;11971:980::-;12233:4;12281:3;12270:9;12266:19;12312:6;12301:9;12294:25;12338:2;12376:6;12371:2;12360:9;12356:18;12349:34;12419:3;12414:2;12403:9;12399:18;12392:31;12443:6;12478;12472:13;12509:6;12501;12494:22;12547:3;12536:9;12532:19;12525:26;;12586:2;12578:6;12574:15;12560:29;;12607:1;12617:195;12631:6;12628:1;12625:13;12617:195;;;12696:13;;-1:-1:-1;;;;;12692:39:1;12680:52;;12787:15;;;;12752:12;;;;12728:1;12646:9;12617:195;;;-1:-1:-1;;;;;;;12868:32:1;;;;12863:2;12848:18;;12841:60;-1:-1:-1;;;12932:3:1;12917:19;12910:35;12829:3;11971:980;-1:-1:-1;;;11971:980:1:o;13778:306::-;13866:6;13874;13882;13935:2;13923:9;13914:7;13910:23;13906:32;13903:52;;;13951:1;13948;13941:12;13903:52;13980:9;13974:16;13964:26;;14030:2;14019:9;14015:18;14009:25;13999:35;;14074:2;14063:9;14059:18;14053:25;14043:35;;13778:306;;;;;:::o

Swarm Source

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