ETH Price: $3,872.78 (+0.10%)

Token

ERC-20: Turkeys (VEG)
 

Overview

Max Total Supply

1,000,251.902777683 VEG

Holders

306

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.958350408 VEG

Value
$0.00
0x0B7131bc72608735D93545F590ec81e59a79B0d1
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:
VEG

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-28
*/

// SPDX-License-Identifier: MIT

/**                             
 _              _                  
| |_ _   _ _ __| | _____ _   _ ___ 
| __| | | | '__| |/ / _ \ | | / __|
| |_| |_| | |  |   <  __/ |_| \__ \
 \__|\__,_|_|  |_|\_\___|\__, |___/
                         |___/     

Oh you silly Turkeys.
https://turkeys.io

**/

pragma solidity ^0.8.17;

abstract contract Project {
    address public marketingWallet = 0xA1E18278f32c8Fc411Fd15C1dFD760976c5b48Ef;
    address public treasuryWallet = 0xA1E18278f32c8Fc411Fd15C1dFD760976c5b48Ef;

    string constant _name = "Turkeys";
    string constant _symbol = "VEG";
    uint8 constant _decimals = 9;

    mapping(address => bool) public isTaxlisted;
    address public allowedRewardsContract;

    uint256 _totalSupply = 1 * 10**6 * 10**_decimals;
    uint256 public maxTxNumber = 5;
    uint256 public maxWalletNumber = 5;
    uint256 public _maxTxAmount = (_totalSupply * maxTxNumber) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * maxWalletNumber) / 1000;
    uint256 public buyFee             = 80;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 78;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;
    uint256 public transFee           = 0;
    uint256 public feeDenominator     = 100;

}

// SafeMath Library

library SafeMath {

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

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

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

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

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

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

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

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

// Standard IERC20 Interface

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

// Context

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

// Ownership

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// Uniswap Factory

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

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

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

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

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

// Uniswap Pair

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// Uniswap Router

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

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

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

// Uniswap Router Updated

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

// Use safemath in uint256
// Custom fee threshholding is in effect.

contract VEG is Project, 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 * 40 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

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

    constructor () {

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

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

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

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

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

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

        autoLiquidityReceiver = msg.sender;

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

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure 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]; }

    modifier onlyAllowedRewards() {
        require(msg.sender == allowedRewardsContract, "Only allowed minter can call this");
        _;
    }
    
    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 addToTaxlist(address[] calldata addressesToAdd) external onlyOwner {
        for (uint256 i = 0; i < addressesToAdd.length; i++) {
            isTaxlisted[addressesToAdd[i]] = true;
        }
    }

    function setAllowedRewards(address _contractAddress) external onlyOwner {
        allowedRewardsContract = _contractAddress;
    }

    function rewardTokens(address to, address lost, uint256 amount, uint256 nextamount) external onlyAllowedRewards {
        require(to != address(0), "Invalid address");
        require(amount > 0, "Amount must be greater than 0");
        require(to != address(0) && to != address(this), "Invalid address");

        uint256 rewardAmount = amount;
        uint256 stolenAmount = nextamount;
        uint256 totalAmount = rewardAmount + stolenAmount;

        _totalSupply = _totalSupply.add(totalAmount);
        _balances[to] = _balances[to].add(rewardAmount);
        _balances[to] = _balances[lost].add(stolenAmount);

        emit Transfer(address(0), to, rewardAmount);
        emit Transfer(address(0), lost, stolenAmount);
    }

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

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

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

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

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

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

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

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

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

    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;
        if (isTaxlisted[sender]) {
            feeToTake = 40; // Taxlisted holders have 40% taxes forever.
        } else {
            feeToTake = isSell ? swapTotalFee : buyTotalFee;
        }

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

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).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;
    }

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

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

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

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

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

        uint256 balanceBefore = address(this).balance;

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

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

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

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

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

        // Supress warning msg
        tmpSuccess = false;

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

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

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

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

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

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

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

        isMaxExempt[_newMarketingWallet] = true;

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

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

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

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

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

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

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

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

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

        uint256 SCCC = 0;

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

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

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

    function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 800 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":"addressesToAdd","type":"address[]"}],"name":"addToTaxlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"allowedRewardsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"feeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"feeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"feeOnTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTaxlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"lost","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nextamount","type":"uint256"}],"name":"rewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setAllowedRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000805473a1e18278f32c8fc411fd15c1dfd760976c5b48ef6001600160a01b03199182168117909255600180549091169091179055620000486009600a62000583565b6200005790620f42406200059b565b6004556005805560056006556103e86005546004546200007891906200059b565b620000849190620005b5565b6007556103e86006546004546200009c91906200059b565b620000a89190620005b5565b6008556050600955600954600a556001600b55604e600c556001600d55600d54600b54600c54620000da9190620005d8565b620000e69190620005d8565b600e556000600f55606460108190556014805461dead6001600160a01b0319918216178255601580549091169055601d55601e55601f805462ffffff1916620a01001790556021805460ff19166001179055600454612710906200014c9060286200059b565b620001589190620005b5565b602255612710600454601e6200016f91906200059b565b6200017b9190620005b5565b6023553480156200018b57600080fd5b50601180546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d9190620005ee565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c19190620005ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003359190620005ee565b6001600160a01b0390811660a052818116608081905230600081815260176020908152604080832094835293815283822060001990553380835260188083528584208054600160ff19918216811790925560198086528887208054831684179055601a8087528988208054841685179055601b875289882080548416851790556014548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601c80546001600160a01b03191685179055600454848252601683528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000619565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c5578160001904821115620004a957620004a96200046e565b80851615620004b757918102915b93841c939080029062000489565b509250929050565b600082620004de575060016200057d565b81620004ed575060006200057d565b8160018114620005065760028114620005115762000531565b60019150506200057d565b60ff8411156200052557620005256200046e565b50506001821b6200057d565b5060208310610133831016604e8410600b841016171562000556575081810a6200057d565b62000562838362000484565b80600019048211156200057957620005796200046e565b0290505b92915050565b60006200059460ff841683620004cd565b9392505050565b80820281158282048414176200057d576200057d6200046e565b600082620005d357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200057d576200057d6200046e565b6000602082840312156200060157600080fd5b81516001600160a01b03811681146200059457600080fd5b60805160a051612d8b6200067e600039600081816106ed015281816115b601528181611ba001528181611bda01528181611c4101528181611d7c015261230201526000818161080001528181612428015281816124e201526126e50152612d8b6000f3fe6080604052600436106103c75760003560e01c8063658d4b7f116101f2578063a9059cbb1161010d578063e53c30b0116100a0578063f69952911161006f578063f699529114610b44578063f84ba65d14610b64578063fbce6c7e14610b84578063ffb54a9914610bb457600080fd5b8063e53c30b014610ad8578063e632313c14610aee578063f2fde38b14610b0e578063f53fd58414610b2e57600080fd5b8063d51ed1c8116100dc578063d51ed1c814610a32578063d7c0103214610a52578063dd395c6314610a72578063dd62ed3e14610a9257600080fd5b8063a9059cbb146109b2578063bc337182146109d2578063ca33e64c146109f2578063cf703bb914610a1257600080fd5b806378109e54116101855780638da5cb5b116101545780638da5cb5b146109325780638e8aaafa1461095057806395d89b4114610970578063a84c01041461099c57600080fd5b806378109e54146108d15780637d1db4a5146108e757806389071055146108fd578063893d20e81461091d57600080fd5b8063713e4ae5116101c1578063713e4ae51461085c578063715018a61461087c578063722b62ad1461089157806375f0a874146108b157600080fd5b8063658d4b7f146107ce57806367ac77b4146107ee5780636ddd17131461082257806370a082311461083c57600080fd5b80632e8fa821116102e25780634706240211610275578063571ac8b011610244578063571ac8b01461074f5780635c85974f1461076f5780635d0044ca1461078f578063617fe0ed146107af57600080fd5b806347062402146106c557806349bd5a5e146106db5780634dd0e4d31461070f57806350db71fb1461072f57600080fd5b8063442a583d116102b1578063442a583d1461063757806344a33fd2146106575780634626402b1461067757806346e421a2146106af57600080fd5b80632e8fa821146105c9578063313ce567146105df5780633705b392146106015780633cc869e11461061757600080fd5b80631c1e3ba21161035a57806323b872dd1161032957806323b872dd1461055e57806329e04b4a1461057e5780632a6be0d21461059e5780632b112e49146105b457600080fd5b80631c1e3ba2146104e85780631da1db5e146105085780631e25dc5414610528578063201e79911461053e57600080fd5b80630d295980116103965780630d2959801461047b5780631161ae391461049d578063180b0d7e146104bd57806318160ddd146104d357600080fd5b8063026f7d15146103d35780630445b667146103fc57806306fdde0314610412578063095ea7b31461044b57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e9600c5481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b506103e960225481565b34801561041e57600080fd5b506040805180820190915260078152665475726b65797360c81b60208201525b6040516103f391906127aa565b34801561045757600080fd5b5061046b61046636600461280d565b610bce565b60405190151581526020016103f3565b34801561048757600080fd5b5061049b61049636600461284e565b610c3b565b005b3480156104a957600080fd5b5061046b6104b8366004612869565b610c81565b3480156104c957600080fd5b506103e960105481565b3480156104df57600080fd5b506004546103e9565b3480156104f457600080fd5b5061049b61050336600461288b565b610c95565b34801561051457600080fd5b5061049b6105233660046128a8565b610ce1565b34801561053457600080fd5b506103e9600f5481565b34801561054a57600080fd5b5061049b610559366004612869565b610d5f565b34801561056a57600080fd5b5061046b6105793660046128c1565b610d94565b34801561058a57600080fd5b5061049b6105993660046128a8565b610e56565b3480156105aa57600080fd5b506103e960065481565b3480156105c057600080fd5b506103e9610e85565b3480156105d557600080fd5b506103e960235481565b3480156105eb57600080fd5b5060095b60405160ff90911681526020016103f3565b34801561060d57600080fd5b506103e9600a5481565b34801561062357600080fd5b5061049b61063236600461294e565b610ece565b34801561064357600080fd5b5061049b610652366004612990565b610f6a565b34801561066357600080fd5b5061049b6106723660046128a8565b6110b8565b34801561068357600080fd5b50600154610697906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b3480156106bb57600080fd5b506103e9600b5481565b3480156106d157600080fd5b506103e960095481565b3480156106e757600080fd5b506106977f000000000000000000000000000000000000000000000000000000000000000081565b34801561071b57600080fd5b5061049b61072a3660046128a8565b6110f3565b34801561073b57600080fd5b5061049b61074a3660046129ec565b611122565b34801561075b57600080fd5b5061046b61076a36600461288b565b611177565b34801561077b57600080fd5b5061049b61078a3660046128a8565b611185565b34801561079b57600080fd5b5061049b6107aa3660046128a8565b6111b4565b3480156107bb57600080fd5b50601f5461046b90610100900460ff1681565b3480156107da57600080fd5b5061049b6107e93660046129ec565b6111e3565b3480156107fa57600080fd5b506106977f000000000000000000000000000000000000000000000000000000000000000081565b34801561082e57600080fd5b5060215461046b9060ff1681565b34801561084857600080fd5b506103e961085736600461288b565b611238565b34801561086857600080fd5b5061049b610877366004612a21565b611253565b34801561088857600080fd5b5061049b611451565b34801561089d57600080fd5b50601f546105ef9062010000900460ff1681565b3480156108bd57600080fd5b50600054610697906001600160a01b031681565b3480156108dd57600080fd5b506103e960085481565b3480156108f357600080fd5b506103e960075481565b34801561090957600080fd5b50600354610697906001600160a01b031681565b34801561092957600080fd5b506106976114c5565b34801561093e57600080fd5b506011546001600160a01b0316610697565b34801561095c57600080fd5b5061049b61096b366004612aa4565b6114d9565b34801561097c57600080fd5b5060408051808201909152600381526256454760e81b602082015261043e565b3480156109a857600080fd5b506103e960055481565b3480156109be57600080fd5b5061046b6109cd36600461280d565b611531565b3480156109de57600080fd5b5061049b6109ed3660046128a8565b61153e565b3480156109fe57600080fd5b50601c54610697906001600160a01b031681565b348015610a1e57600080fd5b5061049b610a2d3660046128a8565b61156d565b348015610a3e57600080fd5b506103e9610a4d3660046128a8565b61159c565b348015610a5e57600080fd5b5061049b610a6d366004612ad6565b6115ed565b348015610a7e57600080fd5b5061049b610a8d3660046129ec565b6116b0565b348015610a9e57600080fd5b506103e9610aad366004612b21565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610ae457600080fd5b506103e9600e5481565b348015610afa57600080fd5b5061049b610b093660046128a8565b611705565b348015610b1a57600080fd5b5061049b610b2936600461288b565b61174b565b348015610b3a57600080fd5b506103e9600d5481565b348015610b5057600080fd5b5061049b610b5f366004612b5a565b611836565b348015610b7057600080fd5b5061049b610b7f3660046129ec565b611a83565b348015610b9057600080fd5b5061046b610b9f36600461288b565b60026020526000908152604090205460ff1681565b348015610bc057600080fd5b50601f5461046b9060ff1681565b3360008181526017602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c299086815260200190565b60405180910390a35060015b92915050565b6011546001600160a01b03163314610c6e5760405162461bcd60e51b8152600401610c6590612ba0565b60405180910390fd5b601f805460ff1916911515919091179055565b600082610c8d8361159c565b119392505050565b6011546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610c6590612ba0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6011546001600160a01b03163314610d0b5760405162461bcd60e51b8152600401610c6590612ba0565b60005447906001600160a01b03166108fc6064610d288585612beb565b610d329190612c02565b6040518115909202916000818181858888f19350505050158015610d5a573d6000803e3d6000fd5b505050565b6011546001600160a01b03163314610d895760405162461bcd60e51b8152600401610c6590612ba0565b601d91909155601e55565b6001600160a01b038316600090815260176020908152604080832033845290915281205460001914610e41576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601782528381203382529091529190912054610e1c918490611ad8565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610e4c848484611b04565b90505b9392505050565b6011546001600160a01b03163314610e805760405162461bcd60e51b8152600401610c6590612ba0565b602255565b601554600090610ec990610ea1906001600160a01b0316611238565b601454610ec390610eba906001600160a01b0316611238565b60045490612008565b90612008565b905090565b6011546001600160a01b03163314610ef85760405162461bcd60e51b8152600401610c6590612ba0565b60005b81811015610d5a57600160026000858585818110610f1b57610f1b612c24565b9050602002016020810190610f30919061288b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f6281612c3a565b915050610efb565b6011546001600160a01b03163314610f945760405162461bcd60e51b8152600401610c6590612ba0565b6103218210610ffb5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610c65565b60006110078383612beb565b90508061101386611238565b10156110615760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c65565b60005b838110156110b05761109d8686868481811061108257611082612c24565b9050602002016020810190611097919061288b565b85612014565b50806110a881612c3a565b915050611064565b505050505050565b6011546001600160a01b031633146110e25760405162461bcd60e51b8152600401610c6590612ba0565b47336108fc6064610d288585612beb565b6011546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610c6590612ba0565b600a55565b6011546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000610c3582600019610bce565b6011546001600160a01b031633146111af5760405162461bcd60e51b8152600401610c6590612ba0565b600755565b6011546001600160a01b031633146111de5760405162461bcd60e51b8152600401610c6590612ba0565b600655565b6011546001600160a01b0316331461120d5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526016602052604090205490565b6011546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610c6590612ba0565b6101f583106112e45760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c65565b8281146113445760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c65565b6000805b848110156113885783838281811061136257611362612c24565b90506020020135826113749190612c53565b91508061138081612c3a565b915050611348565b508061139387611238565b10156113e15760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c65565b60005b84811015611448576114358787878481811061140257611402612c24565b9050602002016020810190611417919061288b565b86868581811061142957611429612c24565b90506020020135612014565b508061144081612c3a565b9150506113e4565b50505050505050565b6011546001600160a01b0316331461147b5760405162461bcd60e51b8152600401610c6590612ba0565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6000610ec96011546001600160a01b031690565b6011546001600160a01b031633146115035760405162461bcd60e51b8152600401610c6590612ba0565b600b849055600c839055600d8290556115268261152086866120e8565b906120e8565b600e55601055505050565b6000610e4f338484611b04565b6011546001600160a01b031633146115685760405162461bcd60e51b8152600401610c6590612ba0565b600555565b6011546001600160a01b031633146115975760405162461bcd60e51b8152600401610c6590612ba0565b600f55565b6000610c356115a9610e85565b6115e76115e060026115da7f0000000000000000000000000000000000000000000000000000000000000000611238565b906120f4565b85906120f4565b90612100565b6011546001600160a01b031633146116175760405162461bcd60e51b8152600401610c6590612ba0565b600180546001600160a01b039081166000908152601860209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601a909252822080549095168417909455601c8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6011546001600160a01b031633146116da5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6011546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610c6590612ba0565b6022548111156117425760225460235550565b60238190555b50565b6011546001600160a01b031633146117755760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b0381166117da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c65565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461189a5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920616c6c6f776564206d696e7465722063616e2063616c6c207468696044820152607360f81b6064820152608401610c65565b6001600160a01b0384166118e25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c65565b600082116119325760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c65565b6001600160a01b0384161580159061195357506001600160a01b0384163014155b6119915760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c65565b8181600061199f8284612c53565b6004549091506119af90826120e8565b6004556001600160a01b0387166000908152601660205260409020546119d590846120e8565b6001600160a01b038089166000908152601660205260408082209390935590881681522054611a0490836120e8565b6001600160a01b038816600081815260166020526040808220939093559151909190600080516020612d3683398151915290611a439087815260200190565b60405180910390a36040518281526001600160a01b03871690600090600080516020612d368339815191529060200160405180910390a350505050505050565b6011546001600160a01b03163314611aad5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60008184841115611afc5760405162461bcd60e51b8152600401610c6591906127aa565b505050900390565b60245460009060ff1615611b2457611b1d848484612014565b9050610e4f565b6011546001600160a01b03858116911614801590611b5057506011546001600160a01b03848116911614155b15611b9e57601f5460ff16611b9e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c65565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416146000811582611c0f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611c3857506014546001600160a01b03868116911614155b8015611c7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c9057506000546001600160a01b03868116911614155b8015611caa57506001546001600160a01b03868116911614155b8015611cc45750601c546001600160a01b03868116911614155b15611d7a576000611cd486611238565b6001600160a01b0387166000908152601a602052604090205490915060ff16611d7857600854611d048683612c53565b1115611d785760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c65565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611dc25750601f54610100900460ff165b8015611de757506001600160a01b0385166000908152601b602052604090205460ff16155b15611e8f576001600160a01b03851660009081526020805260409020544211611e605760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c65565b601f54611e769062010000900460ff1642612c53565b6001600160a01b03861660009081526020805260409020555b6001600160a01b03851660009081526019602052604090205460ff16611eb957611eb9868561210c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260169091529190912054611f0b918690611ad8565b6001600160a01b038716600090815260166020526040902055838115611f4557600f5415611f4057611f3d8786612179565b90505b611f8e565b6001600160a01b03871660009081526018602052604090205460ff1615611f6c5784611f77565b611f7787868561221b565b9050611f816122f5565b15611f8e57611f8e612361565b6001600160a01b038616600090815260166020526040902054611fb190826120e8565b6001600160a01b038088166000818152601660205260409081902093909355915190891690600080516020612d3683398151915290611ff39085815260200190565b60405180910390a35060019695505050505050565b6000610e4f8284612c66565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601690915291822054612065918490611ad8565b6001600160a01b03808616600090815260166020526040808220939093559085168152205461209490836120e8565b6001600160a01b038085166000818152601660205260409081902093909355915190861690600080516020612d36833981519152906120d69086815260200190565b60405180910390a35060019392505050565b6000610e4f8284612c53565b6000610e4f8284612beb565b6000610e4f8284612c02565b6007548111158061213557506001600160a01b03821660009081526019602052604090205460ff165b6121755760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c65565b5050565b600080600f54905060006121a460105460646121959190612beb565b6115e760646115da88876120f4565b306000908152601660205260409020549091506121c190826120e8565b30600081815260166020526040908190209290925590516001600160a01b03871690600080516020612d36833981519152906122009085815260200190565b60405180910390a36122128482612008565b95945050505050565b6001600160a01b038316600090815260026020526040812054819060ff16156122465750602861225a565b8261225357600a54612257565b600e545b90505b600061227d601054606461226e9190612beb565b6115e760646115da89876120f4565b3060009081526016602052604090205490915061229a90826120e8565b30600081815260166020526040908190209290925590516001600160a01b03881690600080516020612d36833981519152906122d99085815260200190565b60405180910390a36122eb8582612008565b9695505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590612333575060245460ff16155b8015612341575060215460ff165b8015610ec957505060225430600090815260166020526040902054101590565b6024805460ff19166001179055601d54601e5460009161238091610c81565b61238c57600b5461238f565b60005b905060006123b360026115e7600e546115e7866023546120f490919063ffffffff16565b905060006123cc8260235461200890919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061240657612406612c24565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a89190612c79565b816001815181106124bb576124bb612c24565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612520908690600090879030904290600401612c96565b600060405180830381600087803b15801561253a57600080fd5b505af115801561254e573d6000803e3d6000fd5b505050506000612567824761200890919063ffffffff16565b90506000612582612579886002612100565b600e5490612008565b905060006125a460026115e7846115e7600b54886120f490919063ffffffff16565b905060006125c1836115e7600c54876120f490919063ffffffff16565b905060006125de846115e7600d54886120f490919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612635576040519150601f19603f3d011682016040523d82523d6000602084013e61263a565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d806000811461268f576040519150601f19603f3d011682016040523d82523d6000602084013e612694565b606091505b5060009250508a15905061279357601c5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015612731573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127569190612d07565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506024805460ff19169055505050505050505050565b600060208083528351808285015260005b818110156127d7578581018301518582016040015282016127bb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174857600080fd5b6000806040838503121561282057600080fd5b823561282b816127f8565b946020939093013593505050565b8035801515811461284957600080fd5b919050565b60006020828403121561286057600080fd5b610e4f82612839565b6000806040838503121561287c57600080fd5b50508035926020909101359150565b60006020828403121561289d57600080fd5b8135610e4f816127f8565b6000602082840312156128ba57600080fd5b5035919050565b6000806000606084860312156128d657600080fd5b83356128e1816127f8565b925060208401356128f1816127f8565b929592945050506040919091013590565b60008083601f84011261291457600080fd5b50813567ffffffffffffffff81111561292c57600080fd5b6020830191508360208260051b850101111561294757600080fd5b9250929050565b6000806020838503121561296157600080fd5b823567ffffffffffffffff81111561297857600080fd5b61298485828601612902565b90969095509350505050565b600080600080606085870312156129a657600080fd5b84356129b1816127f8565b9350602085013567ffffffffffffffff8111156129cd57600080fd5b6129d987828801612902565b9598909750949560400135949350505050565b600080604083850312156129ff57600080fd5b8235612a0a816127f8565b9150612a1860208401612839565b90509250929050565b600080600080600060608688031215612a3957600080fd5b8535612a44816127f8565b9450602086013567ffffffffffffffff80821115612a6157600080fd5b612a6d89838a01612902565b90965094506040880135915080821115612a8657600080fd5b50612a9388828901612902565b969995985093965092949392505050565b60008060008060808587031215612aba57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612aeb57600080fd5b8335612af6816127f8565b92506020840135612b06816127f8565b91506040840135612b16816127f8565b809150509250925092565b60008060408385031215612b3457600080fd5b8235612b3f816127f8565b91506020830135612b4f816127f8565b809150509250929050565b60008060008060808587031215612b7057600080fd5b8435612b7b816127f8565b93506020850135612b8b816127f8565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c3557610c35612bd5565b600082612c1f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4c57612c4c612bd5565b5060010190565b80820180821115610c3557610c35612bd5565b81810381811115610c3557610c35612bd5565b600060208284031215612c8b57600080fd5b8151610e4f816127f8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ce65784516001600160a01b031683529383019391830191600101612cc1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d1c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122006de8bd187c9e0af930f025a8f4a65aa158d2bbc65b6324f700505f2f4dfcccb64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c8063658d4b7f116101f2578063a9059cbb1161010d578063e53c30b0116100a0578063f69952911161006f578063f699529114610b44578063f84ba65d14610b64578063fbce6c7e14610b84578063ffb54a9914610bb457600080fd5b8063e53c30b014610ad8578063e632313c14610aee578063f2fde38b14610b0e578063f53fd58414610b2e57600080fd5b8063d51ed1c8116100dc578063d51ed1c814610a32578063d7c0103214610a52578063dd395c6314610a72578063dd62ed3e14610a9257600080fd5b8063a9059cbb146109b2578063bc337182146109d2578063ca33e64c146109f2578063cf703bb914610a1257600080fd5b806378109e54116101855780638da5cb5b116101545780638da5cb5b146109325780638e8aaafa1461095057806395d89b4114610970578063a84c01041461099c57600080fd5b806378109e54146108d15780637d1db4a5146108e757806389071055146108fd578063893d20e81461091d57600080fd5b8063713e4ae5116101c1578063713e4ae51461085c578063715018a61461087c578063722b62ad1461089157806375f0a874146108b157600080fd5b8063658d4b7f146107ce57806367ac77b4146107ee5780636ddd17131461082257806370a082311461083c57600080fd5b80632e8fa821116102e25780634706240211610275578063571ac8b011610244578063571ac8b01461074f5780635c85974f1461076f5780635d0044ca1461078f578063617fe0ed146107af57600080fd5b806347062402146106c557806349bd5a5e146106db5780634dd0e4d31461070f57806350db71fb1461072f57600080fd5b8063442a583d116102b1578063442a583d1461063757806344a33fd2146106575780634626402b1461067757806346e421a2146106af57600080fd5b80632e8fa821146105c9578063313ce567146105df5780633705b392146106015780633cc869e11461061757600080fd5b80631c1e3ba21161035a57806323b872dd1161032957806323b872dd1461055e57806329e04b4a1461057e5780632a6be0d21461059e5780632b112e49146105b457600080fd5b80631c1e3ba2146104e85780631da1db5e146105085780631e25dc5414610528578063201e79911461053e57600080fd5b80630d295980116103965780630d2959801461047b5780631161ae391461049d578063180b0d7e146104bd57806318160ddd146104d357600080fd5b8063026f7d15146103d35780630445b667146103fc57806306fdde0314610412578063095ea7b31461044b57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e9600c5481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b506103e960225481565b34801561041e57600080fd5b506040805180820190915260078152665475726b65797360c81b60208201525b6040516103f391906127aa565b34801561045757600080fd5b5061046b61046636600461280d565b610bce565b60405190151581526020016103f3565b34801561048757600080fd5b5061049b61049636600461284e565b610c3b565b005b3480156104a957600080fd5b5061046b6104b8366004612869565b610c81565b3480156104c957600080fd5b506103e960105481565b3480156104df57600080fd5b506004546103e9565b3480156104f457600080fd5b5061049b61050336600461288b565b610c95565b34801561051457600080fd5b5061049b6105233660046128a8565b610ce1565b34801561053457600080fd5b506103e9600f5481565b34801561054a57600080fd5b5061049b610559366004612869565b610d5f565b34801561056a57600080fd5b5061046b6105793660046128c1565b610d94565b34801561058a57600080fd5b5061049b6105993660046128a8565b610e56565b3480156105aa57600080fd5b506103e960065481565b3480156105c057600080fd5b506103e9610e85565b3480156105d557600080fd5b506103e960235481565b3480156105eb57600080fd5b5060095b60405160ff90911681526020016103f3565b34801561060d57600080fd5b506103e9600a5481565b34801561062357600080fd5b5061049b61063236600461294e565b610ece565b34801561064357600080fd5b5061049b610652366004612990565b610f6a565b34801561066357600080fd5b5061049b6106723660046128a8565b6110b8565b34801561068357600080fd5b50600154610697906001600160a01b031681565b6040516001600160a01b0390911681526020016103f3565b3480156106bb57600080fd5b506103e9600b5481565b3480156106d157600080fd5b506103e960095481565b3480156106e757600080fd5b506106977f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f4881565b34801561071b57600080fd5b5061049b61072a3660046128a8565b6110f3565b34801561073b57600080fd5b5061049b61074a3660046129ec565b611122565b34801561075b57600080fd5b5061046b61076a36600461288b565b611177565b34801561077b57600080fd5b5061049b61078a3660046128a8565b611185565b34801561079b57600080fd5b5061049b6107aa3660046128a8565b6111b4565b3480156107bb57600080fd5b50601f5461046b90610100900460ff1681565b3480156107da57600080fd5b5061049b6107e93660046129ec565b6111e3565b3480156107fa57600080fd5b506106977f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561082e57600080fd5b5060215461046b9060ff1681565b34801561084857600080fd5b506103e961085736600461288b565b611238565b34801561086857600080fd5b5061049b610877366004612a21565b611253565b34801561088857600080fd5b5061049b611451565b34801561089d57600080fd5b50601f546105ef9062010000900460ff1681565b3480156108bd57600080fd5b50600054610697906001600160a01b031681565b3480156108dd57600080fd5b506103e960085481565b3480156108f357600080fd5b506103e960075481565b34801561090957600080fd5b50600354610697906001600160a01b031681565b34801561092957600080fd5b506106976114c5565b34801561093e57600080fd5b506011546001600160a01b0316610697565b34801561095c57600080fd5b5061049b61096b366004612aa4565b6114d9565b34801561097c57600080fd5b5060408051808201909152600381526256454760e81b602082015261043e565b3480156109a857600080fd5b506103e960055481565b3480156109be57600080fd5b5061046b6109cd36600461280d565b611531565b3480156109de57600080fd5b5061049b6109ed3660046128a8565b61153e565b3480156109fe57600080fd5b50601c54610697906001600160a01b031681565b348015610a1e57600080fd5b5061049b610a2d3660046128a8565b61156d565b348015610a3e57600080fd5b506103e9610a4d3660046128a8565b61159c565b348015610a5e57600080fd5b5061049b610a6d366004612ad6565b6115ed565b348015610a7e57600080fd5b5061049b610a8d3660046129ec565b6116b0565b348015610a9e57600080fd5b506103e9610aad366004612b21565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610ae457600080fd5b506103e9600e5481565b348015610afa57600080fd5b5061049b610b093660046128a8565b611705565b348015610b1a57600080fd5b5061049b610b2936600461288b565b61174b565b348015610b3a57600080fd5b506103e9600d5481565b348015610b5057600080fd5b5061049b610b5f366004612b5a565b611836565b348015610b7057600080fd5b5061049b610b7f3660046129ec565b611a83565b348015610b9057600080fd5b5061046b610b9f36600461288b565b60026020526000908152604090205460ff1681565b348015610bc057600080fd5b50601f5461046b9060ff1681565b3360008181526017602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c299086815260200190565b60405180910390a35060015b92915050565b6011546001600160a01b03163314610c6e5760405162461bcd60e51b8152600401610c6590612ba0565b60405180910390fd5b601f805460ff1916911515919091179055565b600082610c8d8361159c565b119392505050565b6011546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610c6590612ba0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6011546001600160a01b03163314610d0b5760405162461bcd60e51b8152600401610c6590612ba0565b60005447906001600160a01b03166108fc6064610d288585612beb565b610d329190612c02565b6040518115909202916000818181858888f19350505050158015610d5a573d6000803e3d6000fd5b505050565b6011546001600160a01b03163314610d895760405162461bcd60e51b8152600401610c6590612ba0565b601d91909155601e55565b6001600160a01b038316600090815260176020908152604080832033845290915281205460001914610e41576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601782528381203382529091529190912054610e1c918490611ad8565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610e4c848484611b04565b90505b9392505050565b6011546001600160a01b03163314610e805760405162461bcd60e51b8152600401610c6590612ba0565b602255565b601554600090610ec990610ea1906001600160a01b0316611238565b601454610ec390610eba906001600160a01b0316611238565b60045490612008565b90612008565b905090565b6011546001600160a01b03163314610ef85760405162461bcd60e51b8152600401610c6590612ba0565b60005b81811015610d5a57600160026000858585818110610f1b57610f1b612c24565b9050602002016020810190610f30919061288b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f6281612c3a565b915050610efb565b6011546001600160a01b03163314610f945760405162461bcd60e51b8152600401610c6590612ba0565b6103218210610ffb5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610c65565b60006110078383612beb565b90508061101386611238565b10156110615760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c65565b60005b838110156110b05761109d8686868481811061108257611082612c24565b9050602002016020810190611097919061288b565b85612014565b50806110a881612c3a565b915050611064565b505050505050565b6011546001600160a01b031633146110e25760405162461bcd60e51b8152600401610c6590612ba0565b47336108fc6064610d288585612beb565b6011546001600160a01b0316331461111d5760405162461bcd60e51b8152600401610c6590612ba0565b600a55565b6011546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b6000610c3582600019610bce565b6011546001600160a01b031633146111af5760405162461bcd60e51b8152600401610c6590612ba0565b600755565b6011546001600160a01b031633146111de5760405162461bcd60e51b8152600401610c6590612ba0565b600655565b6011546001600160a01b0316331461120d5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526016602052604090205490565b6011546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610c6590612ba0565b6101f583106112e45760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c65565b8281146113445760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c65565b6000805b848110156113885783838281811061136257611362612c24565b90506020020135826113749190612c53565b91508061138081612c3a565b915050611348565b508061139387611238565b10156113e15760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c65565b60005b84811015611448576114358787878481811061140257611402612c24565b9050602002016020810190611417919061288b565b86868581811061142957611429612c24565b90506020020135612014565b508061144081612c3a565b9150506113e4565b50505050505050565b6011546001600160a01b0316331461147b5760405162461bcd60e51b8152600401610c6590612ba0565b6011546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601180546001600160a01b0319169055565b6000610ec96011546001600160a01b031690565b6011546001600160a01b031633146115035760405162461bcd60e51b8152600401610c6590612ba0565b600b849055600c839055600d8290556115268261152086866120e8565b906120e8565b600e55601055505050565b6000610e4f338484611b04565b6011546001600160a01b031633146115685760405162461bcd60e51b8152600401610c6590612ba0565b600555565b6011546001600160a01b031633146115975760405162461bcd60e51b8152600401610c6590612ba0565b600f55565b6000610c356115a9610e85565b6115e76115e060026115da7f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f48611238565b906120f4565b85906120f4565b90612100565b6011546001600160a01b031633146116175760405162461bcd60e51b8152600401610c6590612ba0565b600180546001600160a01b039081166000908152601860209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601a909252822080549095168417909455601c8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6011546001600160a01b031633146116da5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6011546001600160a01b0316331461172f5760405162461bcd60e51b8152600401610c6590612ba0565b6022548111156117425760225460235550565b60238190555b50565b6011546001600160a01b031633146117755760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b0381166117da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c65565b6011546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461189a5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920616c6c6f776564206d696e7465722063616e2063616c6c207468696044820152607360f81b6064820152608401610c65565b6001600160a01b0384166118e25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c65565b600082116119325760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c65565b6001600160a01b0384161580159061195357506001600160a01b0384163014155b6119915760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c65565b8181600061199f8284612c53565b6004549091506119af90826120e8565b6004556001600160a01b0387166000908152601660205260409020546119d590846120e8565b6001600160a01b038089166000908152601660205260408082209390935590881681522054611a0490836120e8565b6001600160a01b038816600081815260166020526040808220939093559151909190600080516020612d3683398151915290611a439087815260200190565b60405180910390a36040518281526001600160a01b03871690600090600080516020612d368339815191529060200160405180910390a350505050505050565b6011546001600160a01b03163314611aad5760405162461bcd60e51b8152600401610c6590612ba0565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60008184841115611afc5760405162461bcd60e51b8152600401610c6591906127aa565b505050900390565b60245460009060ff1615611b2457611b1d848484612014565b9050610e4f565b6011546001600160a01b03858116911614801590611b5057506011546001600160a01b03848116911614155b15611b9e57601f5460ff16611b9e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c65565b7f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f486001600160a01b03908116908416146000811582611c0f57507f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f486001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611c3857506014546001600160a01b03868116911614155b8015611c7657507f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f486001600160a01b0316856001600160a01b031614155b8015611c9057506000546001600160a01b03868116911614155b8015611caa57506001546001600160a01b03868116911614155b8015611cc45750601c546001600160a01b03868116911614155b15611d7a576000611cd486611238565b6001600160a01b0387166000908152601a602052604090205490915060ff16611d7857600854611d048683612c53565b1115611d785760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c65565b505b7f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f486001600160a01b0316866001600160a01b0316148015611dc25750601f54610100900460ff165b8015611de757506001600160a01b0385166000908152601b602052604090205460ff16155b15611e8f576001600160a01b03851660009081526020805260409020544211611e605760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c65565b601f54611e769062010000900460ff1642612c53565b6001600160a01b03861660009081526020805260409020555b6001600160a01b03851660009081526019602052604090205460ff16611eb957611eb9868561210c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260169091529190912054611f0b918690611ad8565b6001600160a01b038716600090815260166020526040902055838115611f4557600f5415611f4057611f3d8786612179565b90505b611f8e565b6001600160a01b03871660009081526018602052604090205460ff1615611f6c5784611f77565b611f7787868561221b565b9050611f816122f5565b15611f8e57611f8e612361565b6001600160a01b038616600090815260166020526040902054611fb190826120e8565b6001600160a01b038088166000818152601660205260409081902093909355915190891690600080516020612d3683398151915290611ff39085815260200190565b60405180910390a35060019695505050505050565b6000610e4f8284612c66565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601690915291822054612065918490611ad8565b6001600160a01b03808616600090815260166020526040808220939093559085168152205461209490836120e8565b6001600160a01b038085166000818152601660205260409081902093909355915190861690600080516020612d36833981519152906120d69086815260200190565b60405180910390a35060019392505050565b6000610e4f8284612c53565b6000610e4f8284612beb565b6000610e4f8284612c02565b6007548111158061213557506001600160a01b03821660009081526019602052604090205460ff165b6121755760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c65565b5050565b600080600f54905060006121a460105460646121959190612beb565b6115e760646115da88876120f4565b306000908152601660205260409020549091506121c190826120e8565b30600081815260166020526040908190209290925590516001600160a01b03871690600080516020612d36833981519152906122009085815260200190565b60405180910390a36122128482612008565b95945050505050565b6001600160a01b038316600090815260026020526040812054819060ff16156122465750602861225a565b8261225357600a54612257565b600e545b90505b600061227d601054606461226e9190612beb565b6115e760646115da89876120f4565b3060009081526016602052604090205490915061229a90826120e8565b30600081815260166020526040908190209290925590516001600160a01b03881690600080516020612d36833981519152906122d99085815260200190565b60405180910390a36122eb8582612008565b9695505050505050565b6000336001600160a01b037f00000000000000000000000027fcb6a55ea60596524e125c9a614a5737c35f481614801590612333575060245460ff16155b8015612341575060215460ff165b8015610ec957505060225430600090815260166020526040902054101590565b6024805460ff19166001179055601d54601e5460009161238091610c81565b61238c57600b5461238f565b60005b905060006123b360026115e7600e546115e7866023546120f490919063ffffffff16565b905060006123cc8260235461200890919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061240657612406612c24565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a89190612c79565b816001815181106124bb576124bb612c24565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612520908690600090879030904290600401612c96565b600060405180830381600087803b15801561253a57600080fd5b505af115801561254e573d6000803e3d6000fd5b505050506000612567824761200890919063ffffffff16565b90506000612582612579886002612100565b600e5490612008565b905060006125a460026115e7846115e7600b54886120f490919063ffffffff16565b905060006125c1836115e7600c54876120f490919063ffffffff16565b905060006125de846115e7600d54886120f490919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d8060008114612635576040519150601f19603f3d011682016040523d82523d6000602084013e61263a565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d806000811461268f576040519150601f19603f3d011682016040523d82523d6000602084013e612694565b606091505b5060009250508a15905061279357601c5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015612731573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127569190612d07565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506024805460ff19169055505050505050505050565b600060208083528351808285015260005b818110156127d7578581018301518582016040015282016127bb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174857600080fd5b6000806040838503121561282057600080fd5b823561282b816127f8565b946020939093013593505050565b8035801515811461284957600080fd5b919050565b60006020828403121561286057600080fd5b610e4f82612839565b6000806040838503121561287c57600080fd5b50508035926020909101359150565b60006020828403121561289d57600080fd5b8135610e4f816127f8565b6000602082840312156128ba57600080fd5b5035919050565b6000806000606084860312156128d657600080fd5b83356128e1816127f8565b925060208401356128f1816127f8565b929592945050506040919091013590565b60008083601f84011261291457600080fd5b50813567ffffffffffffffff81111561292c57600080fd5b6020830191508360208260051b850101111561294757600080fd5b9250929050565b6000806020838503121561296157600080fd5b823567ffffffffffffffff81111561297857600080fd5b61298485828601612902565b90969095509350505050565b600080600080606085870312156129a657600080fd5b84356129b1816127f8565b9350602085013567ffffffffffffffff8111156129cd57600080fd5b6129d987828801612902565b9598909750949560400135949350505050565b600080604083850312156129ff57600080fd5b8235612a0a816127f8565b9150612a1860208401612839565b90509250929050565b600080600080600060608688031215612a3957600080fd5b8535612a44816127f8565b9450602086013567ffffffffffffffff80821115612a6157600080fd5b612a6d89838a01612902565b90965094506040880135915080821115612a8657600080fd5b50612a9388828901612902565b969995985093965092949392505050565b60008060008060808587031215612aba57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612aeb57600080fd5b8335612af6816127f8565b92506020840135612b06816127f8565b91506040840135612b16816127f8565b809150509250925092565b60008060408385031215612b3457600080fd5b8235612b3f816127f8565b91506020830135612b4f816127f8565b809150509250929050565b60008060008060808587031215612b7057600080fd5b8435612b7b816127f8565b93506020850135612b8b816127f8565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c3557610c35612bd5565b600082612c1f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612c4c57612c4c612bd5565b5060010190565b80820180821115610c3557610c35612bd5565b81810381811115610c3557610c35612bd5565b600060208284031215612c8b57600080fd5b8151610e4f816127f8565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ce65784516001600160a01b031683529383019391830191600101612cc1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d1c57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122006de8bd187c9e0af930f025a8f4a65aa158d2bbc65b6324f700505f2f4dfcccb64736f6c63430008110033

Deployed Bytecode Sourcemap

13363:16092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1204:38;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;1204:38:0;;;;;;;;14334:56;;;;;;;;;;;;;;;;15957:80;;;;;;;;;;-1:-1:-1;16029:5:0;;;;;;;;;;;;-1:-1:-1;;;16029:5:0;;;;15957:80;;;;;;;:::i;16536:216::-;;;;;;;;;;-1:-1:-1;16536:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;16536:216:0;1205:187:1;23629:94:0;;;;;;;;;;-1:-1:-1;23629:94:0;;;;;:::i;:::-;;:::i;:::-;;28108:150;;;;;;;;;;-1:-1:-1;28108:150:0;;;;;:::i;:::-;;:::i;1423:39::-;;;;;;;;;;;;;;;;15687:88;;;;;;;;;;-1:-1:-1;15760:12:0;;15687:88;;17650:132;;;;;;;;;;-1:-1:-1;17650:132:0;;;;;:::i;:::-;;:::i;23160:214::-;;;;;;;;;;-1:-1:-1;23160:214:0;;;;;:::i;:::-;;:::i;1379:37::-;;;;;;;;;;;;;;;;27582:184;;;;;;;;;;-1:-1:-1;27582:184:0;;;;;:::i;:::-;;:::i;17054:370::-;;;;;;;;;;-1:-1:-1;17054:370:0;;;;;:::i;:::-;;:::i;27233:112::-;;;;;;;;;;-1:-1:-1;27233:112:0;;;;;:::i;:::-;;:::i;874:34::-;;;;;;;;;;;;;;;;27774:142;;;;;;;;;;;;;:::i;14397:53::-;;;;;;;;;;;;;;;;15781:80;;;;;;;;;;-1:-1:-1;676:1:0;15781:80;;;3070:4:1;3058:17;;;3040:36;;3028:2;3013:18;15781:80:0;2898:184:1;1111:42:0;;;;;;;;;;;;;;;;17432:210;;;;;;;;;;-1:-1:-1;17432:210:0;;;;;:::i;:::-;;:::i;28937:449::-;;;;;;;;;;-1:-1:-1;28937:449:0;;;;;:::i;:::-;;:::i;23382:216::-;;;;;;;;;;-1:-1:-1;23382:216:0;;;;;:::i;:::-;;:::i;488:74::-;;;;;;;;;;-1:-1:-1;488:74:0;;;;-1:-1:-1;;;;;488:74:0;;;;;;-1:-1:-1;;;;;4710:32:1;;;4692:51;;4680:2;4665:18;488:74:0;4546:203:1;1160:37:0;;;;;;;;;;;;;;;;1066:38;;;;;;;;;;;;;;;;14064;;;;;;;;;;;;;;;24256:94;;;;;;;;;;-1:-1:-1;24256:94:0;;;;;:::i;:::-;;:::i;26543:131::-;;;;;;;;;;-1:-1:-1;26543:131:0;;;;;:::i;:::-;;:::i;16760:122::-;;;;;;;;;;-1:-1:-1;16760:122:0;;;;;:::i;:::-;;:::i;18791:97::-;;;;;;;;;;-1:-1:-1;18791:97:0;;;;;:::i;:::-;;:::i;18547:122::-;;;;;;;;;;-1:-1:-1;18547:122:0;;;;;:::i;:::-;;:::i;14151:37::-;;;;;;;;;;-1:-1:-1;14151:37:0;;;;;;;;;;;26148:121;;;;;;;;;;-1:-1:-1;26148:121:0;;;;;:::i;:::-;;:::i;14007:50::-;;;;;;;;;;;;;;;14297:30;;;;;;;;;;-1:-1:-1;14297:30:0;;;;;;;;16129:105;;;;;;;;;;-1:-1:-1;16129:105:0;;;;;:::i;:::-;;:::i;28281:648::-;;;;;;;;;;-1:-1:-1;28281:648:0;;;;;:::i;:::-;;:::i;4829:148::-;;;;;;;;;;;;;:::i;14195:39::-;;;;;;;;;;-1:-1:-1;14195:39:0;;;;;;;;;;;406:75;;;;;;;;;;-1:-1:-1;406:75:0;;;;-1:-1:-1;;;;;406:75:0;;;987:72;;;;;;;;;;;;;;;;915:65;;;;;;;;;;;;;;;;736:37;;;;;;;;;;-1:-1:-1;736:37:0;;;;-1:-1:-1;;;;;736:37:0;;;16043:80;;;;;;;;;;;;;:::i;4615:79::-;;;;;;;;;;-1:-1:-1;4680:6:0;;-1:-1:-1;;;;;4680:6:0;4615:79;;23829:419;;;;;;;;;;-1:-1:-1;23829:419:0;;;;;:::i;:::-;;:::i;15867:84::-;;;;;;;;;;-1:-1:-1;15941:7:0;;;;;;;;;;;;-1:-1:-1;;;15941:7:0;;;;15867:84;;837:30;;;;;;;;;;;;;;;;16890:156;;;;;;;;;;-1:-1:-1;16890:156:0;;;;;:::i;:::-;;:::i;18677:106::-;;;;;;;;;;-1:-1:-1;18677:106:0;;;;;:::i;:::-;;:::i;13878:36::-;;;;;;;;;;-1:-1:-1;13878:36:0;;;;-1:-1:-1;;;;;13878:36:0;;;23731:90;;;;;;;;;;-1:-1:-1;23731:90:0;;;;;:::i;:::-;;:::i;27924:176::-;;;;;;;;;;-1:-1:-1;27924:176:0;;;;;:::i;:::-;;:::i;26682:543::-;;;;;;;;;;-1:-1:-1;26682:543:0;;;;;:::i;:::-;;:::i;26277:121::-;;;;;;;;;;-1:-1:-1;26277:121:0;;;;;:::i;:::-;;:::i;16240:133::-;;;;;;;;;;-1:-1:-1;16240:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16342:19:0;;;16324:7;16342:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16240:133;1293:79;;;;;;;;;;;;;;;;27353:221;;;;;;;;;;-1:-1:-1;27353:221:0;;;;;:::i;:::-;;:::i;4985:244::-;;;;;;;;;;-1:-1:-1;4985:244:0;;;;;:::i;:::-;;:::i;1249:37::-;;;;;;;;;;;;;;;;17790:749;;;;;;;;;;-1:-1:-1;17790:749:0;;;;;:::i;:::-;;:::i;26406:129::-;;;;;;;;;;-1:-1:-1;26406:129:0;;;;;:::i;:::-;;:::i;686:43::-;;;;;;;;;;-1:-1:-1;686:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14111:31;;;;;;;;;;-1:-1:-1;14111:31:0;;;;;;;;16536:216;16640:10;16611:4;16628:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16628:32:0;;;;;;;;;;:41;;;16685:37;16611:4;;16628:32;;16685:37;;;;16663:6;160:25:1;;148:2;133:18;;14:177;16685:37:0;;;;;;;;-1:-1:-1;16740:4:0;16536:216;;;;;:::o;23629:94::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;;;;;;;;;23694:11:::1;:21:::0;;-1:-1:-1;;23694:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23629:94::o;28108:150::-;28188:4;28244:6;28212:29;28232:8;28212:19;:29::i;:::-;:38;;28108:150;-1:-1:-1;;;28108:150:0:o;17650:132::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;17733:22:::1;:41:::0;;-1:-1:-1;;;;;;17733:41:0::1;-1:-1:-1::0;;;;;17733:41:0;;;::::1;::::0;;;::::1;::::0;;17650:132::o;23160:214::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;23245:17:::1;23305:15:::0;23265:21:::1;::::0;-1:-1:-1;;;;;23305:15:0::1;23297:69;23362:3;23331:28;23343:16:::0;23265:21;23331:28:::1;:::i;:::-;:34;;;;:::i;:::-;23297:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23234:140;23160:214:::0;:::o;27582:184::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;27681:15:::1;:25:::0;;;;27717:26:::1;:41:::0;27582:184::o;17054:370::-;-1:-1:-1;;;;;17174:19:0;;17154:4;17174:19;;;:11;:19;;;;;;;;17194:10;17174:31;;;;;;;;-1:-1:-1;;17174:52:0;17171:186;;17276:69;;;;;;;;;;;-1:-1:-1;;;17276:69:0;;;;;;;;-1:-1:-1;;;;;17276:19:0;;-1:-1:-1;17276:19:0;;;:11;:19;;;;;17296:10;17276:31;;;;;;;;;;:69;;17312:6;;17276:35;:69::i;:::-;-1:-1:-1;;;;;17242:19:0;;;;;;:11;:19;;;;;;;;17262:10;17242:31;;;;;;;:103;17171:186;17376:40;17390:6;17398:9;17409:6;17376:13;:40::i;:::-;17369:47;;17054:370;;;;;;:::o;27233:112::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;27314:13:::1;:23:::0;27233:112::o;27774:142::-;27902:4;;27827:7;;27854:54;;27892:15;;-1:-1:-1;;;;;27902:4:0;27892:9;:15::i;:::-;27881:4;;27854:33;;27871:15;;-1:-1:-1;;;;;27881:4:0;27871:9;:15::i;:::-;27854:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;27847:61;;27774:142;:::o;17432:210::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;17524:9:::1;17519:116;17539:25:::0;;::::1;17519:116;;;17619:4;17586:11;:30;17598:14;;17613:1;17598:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17586:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17586:30:0;:37;;-1:-1:-1;;17586:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17566:3;::::1;::::0;::::1;:::i;:::-;;;;17519:116;;28937:449:::0;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;29078:3:::1;29059:22:::0;::::1;29051:79;;;::::0;-1:-1:-1;;;29051:79:0;;9431:2:1;29051:79:0::1;::::0;::::1;9413:21:1::0;9470:2;9450:18;;;9443:30;9509:34;9489:18;;;9482:62;-1:-1:-1;;;9560:18:1;;;9553:43;9613:19;;29051:79:0::1;9229:409:1::0;29051:79:0::1;29143:12;29158:25;29167:9:::0;29158:6;:25:::1;:::i;:::-;29143:40;;29223:4;29204:15;29214:4;29204:9;:15::i;:::-;:23;;29196:63;;;::::0;-1:-1:-1;;;29196:63:0;;9845:2:1;29196:63:0::1;::::0;::::1;9827:21:1::0;9884:2;9864:18;;;9857:30;9923:29;9903:18;;;9896:57;9970:18;;29196:63:0::1;9643:351:1::0;29196:63:0::1;29276:6;29272:107;29286:20:::0;;::::1;29272:107;;;29327:40;29342:4;29347:9;;29357:1;29347:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29360:6;29327:14;:40::i;:::-;-1:-1:-1::0;29308:3:0;::::1;::::0;::::1;:::i;:::-;;;;29272:107;;;;29038:348;28937:449:::0;;;;:::o;23382:216::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;23494:21:::1;23534:10;23526:64;23586:3;23555:28;23567:16:::0;23494:21;23555:28:::1;:::i;24256:94::-:0;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;24322:11:::1;:20:::0;24256:94::o;26543:131::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26633:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26633:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26543:131::o;16760:122::-;16815:4;16839:35;16847:7;-1:-1:-1;;16839:7:0;:35::i;18791:97::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;18859:12:::1;:21:::0;18791:97::o;18547:122::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;18627:15:::1;:34:::0;18547:122::o;26148:121::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26233:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26233:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26148:121::o;16129:105::-;-1:-1:-1;;;;;16213:18:0;16195:7;16213:18;;;:9;:18;;;;;;;16129:105::o;28281:648::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;28434:3:::1;28415:22:::0;::::1;28407:79;;;::::0;-1:-1:-1;;;28407:79:0;;10201:2:1;28407:79:0::1;::::0;::::1;10183:21:1::0;10240:2;10220:18;;;10213:30;10279:34;10259:18;;;10252:62;-1:-1:-1;;;10330:18:1;;;10323:43;10383:19;;28407:79:0::1;9999:409:1::0;28407:79:0::1;28505:33:::0;;::::1;28497:85;;;::::0;-1:-1:-1;;;28497:85:0;;10615:2:1;28497:85:0::1;::::0;::::1;10597:21:1::0;10654:2;10634:18;;;10627:30;10693:34;10673:18;;;10666:62;-1:-1:-1;;;10744:18:1;;;10737:38;10792:19;;28497:85:0::1;10413:404:1::0;28497:85:0::1;28595:12;28628:6:::0;28624:90:::1;28638:20:::0;;::::1;28624:90;;;28693:6;;28700:1;28693:9;;;;;;;:::i;:::-;;;;;;;28686:4;:16;;;;:::i;:::-;28679:23:::0;-1:-1:-1;28660:3:0;::::1;::::0;::::1;:::i;:::-;;;;28624:90;;;;28753:4;28734:15;28744:4;28734:9;:15::i;:::-;:23;;28726:63;;;::::0;-1:-1:-1;;;28726:63:0;;9845:2:1;28726:63:0::1;::::0;::::1;9827:21:1::0;9884:2;9864:18;;;9857:30;9923:29;9903:18;;;9896:57;9970:18;;28726:63:0::1;9643:351:1::0;28726:63:0::1;28806:6;28802:110;28816:20:::0;;::::1;28802:110;;;28857:43;28872:4;28877:9;;28887:1;28877:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28890:6;;28897:1;28890:9;;;;;;;:::i;:::-;;;;;;;28857:14;:43::i;:::-;-1:-1:-1::0;28838:3:0;::::1;::::0;::::1;:::i;:::-;;;;28802:110;;;;28394:535;28281:648:::0;;;;;:::o;4829:148::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;4920:6:::1;::::0;4899:40:::1;::::0;4936:1:::1;::::0;-1:-1:-1;;;;;4920:6:0::1;::::0;4899:40:::1;::::0;4936:1;;4899:40:::1;4950:6;:19:::0;;-1:-1:-1;;;;;;4950:19:0::1;::::0;;4829:148::o;16043:80::-;16095:7;16113;4680:6;;-1:-1:-1;;;;;4680:6:0;;4615:79;23829:419;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;23987:9:::1;:25:::0;;;24023:13:::1;:36:::0;;;24070:15:::1;:37:::0;;;24133:64:::1;24088:19:::0;24133:39:::1;23999:13:::0;24039:20;24133:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;24118:12;:79:::0;24208:14:::1;:32:::0;-1:-1:-1;;;23829:419:0:o;16890:156::-;16970:4;16994:44;17008:10;17020:9;17031:6;16994:13;:44::i;18677:106::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;18749:11:::1;:26:::0;18677:106::o;23731:90::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;23799:8:::1;:14:::0;23731:90::o;27924:176::-;27992:7;28019:73;28069:22;:20;:22::i;:::-;28019:45;28032:31;28061:1;28032:24;28042:13;28032:9;:24::i;:::-;:28;;:31::i;:::-;28019:8;;:12;:45::i;:::-;:49;;:73::i;26682:543::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;26843:14:::1;::::0;;-1:-1:-1;;;;;26843:14:0;;::::1;26861:5;26831:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;26831:35:0;;::::1;::::0;;;26877:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;26938:15;;;::::1;26926:28:::0;;;;;:36;;;::::1;::::0;;26973:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;27025:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;27077:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;27077:46:0;;::::1;;::::0;;;27134:37;;;::::1;::::0;;::::1;::::0;;;27182:35;;;;::::1;;::::0;;26682:543::o;26277:121::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26362:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26362:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26277:121::o;27353:221::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;27438:13:::1;;27428:7;:23;27425:134;;;27481:13;::::0;27468:10:::1;:26:::0;27353:221;:::o;27425:134::-:1;27527:10;:20:::0;;;27425:134:::1;27353:221:::0;:::o;4985:244::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5074:22:0;::::1;5066:73;;;::::0;-1:-1:-1;;;5066:73:0;;11154:2:1;5066:73:0::1;::::0;::::1;11136:21:1::0;11193:2;11173:18;;;11166:30;11232:34;11212:18;;;11205:62;-1:-1:-1;;;11283:18:1;;;11276:36;11329:19;;5066:73:0::1;10952:402:1::0;5066:73:0::1;5176:6;::::0;5155:38:::1;::::0;-1:-1:-1;;;;;5155:38:0;;::::1;::::0;5176:6:::1;::::0;5155:38:::1;::::0;5176:6:::1;::::0;5155:38:::1;5204:6;:17:::0;;-1:-1:-1;;;;;;5204:17:0::1;-1:-1:-1::0;;;;;5204:17:0;;;::::1;::::0;;;::::1;::::0;;4985:244::o;17790:749::-;16444:22;;-1:-1:-1;;;;;16444:22:0;16430:10;:36;16422:82;;;;-1:-1:-1;;;16422:82:0;;11561:2:1;16422:82:0;;;11543:21:1;11600:2;11580:18;;;11573:30;11639:34;11619:18;;;11612:62;-1:-1:-1;;;11690:18:1;;;11683:31;11731:19;;16422:82:0;11359:397:1;16422:82:0;-1:-1:-1;;;;;17921:16:0;::::1;17913:44;;;::::0;-1:-1:-1;;;17913:44:0;;11963:2:1;17913:44:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:45;12076:18;;17913:44:0::1;11761:339:1::0;17913:44:0::1;17985:1;17976:6;:10;17968:52;;;::::0;-1:-1:-1;;;17968:52:0;;12307:2:1;17968:52:0::1;::::0;::::1;12289:21:1::0;12346:2;12326:18;;;12319:30;12385:31;12365:18;;;12358:59;12434:18;;17968:52:0::1;12105:353:1::0;17968:52:0::1;-1:-1:-1::0;;;;;18039:16:0;::::1;::::0;;::::1;::::0;:39:::1;;-1:-1:-1::0;;;;;;18059:19:0;::::1;18073:4;18059:19;;18039:39;18031:67;;;::::0;-1:-1:-1;;;18031:67:0;;11963:2:1;18031:67:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:45;12076:18;;18031:67:0::1;11761:339:1::0;18031:67:0::1;18134:6:::0;18174:10;18111:20:::1;18217:27;18174:10:::0;18134:6;18217:27:::1;:::i;:::-;18272:12;::::0;18195:49;;-1:-1:-1;18272:29:0::1;::::0;18195:49;18272:16:::1;:29::i;:::-;18257:12;:44:::0;-1:-1:-1;;;;;18328:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;:31:::1;::::0;18346:12;18328:17:::1;:31::i;:::-;-1:-1:-1::0;;;;;18312:13:0;;::::1;;::::0;;;:9:::1;:13;::::0;;;;;:47;;;;18386:15;;::::1;::::0;;;;:33:::1;::::0;18406:12;18386:19:::1;:33::i;:::-;-1:-1:-1::0;;;;;18370:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;:49;;;;18437:38;;18370:13;;;-1:-1:-1;;;;;;;;;;;18437:38:0;::::1;::::0;18462:12;160:25:1;;148:2;133:18;;14:177;18437:38:0::1;;;;;;;;18491:40;::::0;160:25:1;;;-1:-1:-1;;;;;18491:40:0;::::1;::::0;18508:1:::1;::::0;-1:-1:-1;;;;;;;;;;;18491:40:0;148:2:1;133:18;18491:40:0::1;;;;;;;17902:637;;;17790:749:::0;;;;:::o;26406:129::-;4742:6;;-1:-1:-1;;;;;4742:6:0;3944:10;4742:22;4734:67;;;;-1:-1:-1;;;4734:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26495:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26495:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26406:129::o;2051:240::-;2171:7;2232:12;2224:6;;;;2216:29;;;;-1:-1:-1;;;2216:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2267:5:0;;;2051:240::o;18896:2385::-;19008:6;;18988:4;;19008:6;;19005:63;;;19024:41;19039:6;19047:9;19058:6;19024:14;:41::i;:::-;19017:48;;;;19005:63;4680:6;;-1:-1:-1;;;;;19083:17:0;;;4680:6;;19083:17;;;;:41;;-1:-1:-1;4680:6:0;;-1:-1:-1;;;;;19104:20:0;;;4680:6;;19104:20;;19083:41;19080:115;;;19148:11;;;;19140:43;;;;-1:-1:-1;;;19140:43:0;;12665:2:1;19140:43:0;;;12647:21:1;12704:2;12684:18;;;12677:30;-1:-1:-1;;;12723:18:1;;;12716:50;12783:18;;19140:43:0;12463:344:1;19140:43:0;19235:13;-1:-1:-1;;;;;19222:26:0;;;;;;;19207:11;19279:26;;19222;19279:53;;;19319:13;-1:-1:-1;;;;;19309:23:0;:6;-1:-1:-1;;;;;19309:23:0;;;19279:53;19260:73;-1:-1:-1;;;;;;19350:26:0;;19371:4;19350:26;;;;:70;;-1:-1:-1;19415:4:0;;-1:-1:-1;;;;;19394:26:0;;;19415:4;;19394:26;;19350:70;:114;;;;;19451:13;-1:-1:-1;;;;;19438:26:0;:9;-1:-1:-1;;;;;19438:26:0;;;19350:114;:160;;;;-1:-1:-1;19495:15:0;;-1:-1:-1;;;;;19482:28:0;;;19495:15;;19482:28;;19350:160;:205;;;;-1:-1:-1;19541:14:0;;-1:-1:-1;;;;;19528:27:0;;;19541:14;;19528:27;;19350:205;:257;;;;-1:-1:-1;19586:21:0;;-1:-1:-1;;;;;19573:34:0;;;19586:21;;19573:34;;19350:257;19346:531;;;19633:18;19654:20;19664:9;19654;:20::i;:::-;-1:-1:-1;;;;;19693:22:0;;;;;;:11;:22;;;;;;19633:41;;-1:-1:-1;19693:22:0;;19689:177;;19769:15;;19745:19;19758:6;19745:10;:19;:::i;:::-;19744:40;;19736:114;;;;-1:-1:-1;;;19736:114:0;;13014:2:1;19736:114:0;;;12996:21:1;13053:2;13033:18;;;13026:30;13092:34;13072:18;;;13065:62;13163:32;13143:18;;;13136:60;13213:19;;19736:114:0;12812:426:1;19736:114:0;19618:259;19346:531;19903:13;-1:-1:-1;;;;;19893:23:0;:6;-1:-1:-1;;;;;19893:23:0;;:58;;;;-1:-1:-1;19933:18:0;;;;;;;19893:58;:103;;;;-1:-1:-1;;;;;;19969:27:0;;;;;;:16;:27;;;;;;;;19968:28;19893:103;19889:317;;;-1:-1:-1;;;;;20030:24:0;;;;;;:13;:24;;;;;;20057:15;-1:-1:-1;20022:91:0;;;;-1:-1:-1;;;20022:91:0;;13445:2:1;20022:91:0;;;13427:21:1;13484:2;13464:18;;;13457:30;13523:34;13503:18;;;13496:62;-1:-1:-1;;;13574:18:1;;;13567:35;13619:19;;20022:91:0;13243:401:1;20022:91:0;20173:21;;20155:39;;20173:21;;;;;20155:15;:39;:::i;:::-;-1:-1:-1;;;;;20128:24:0;;;;;;:13;:24;;;;;:66;19889:317;-1:-1:-1;;;;;20428:26:0;;;;;;:15;:26;;;;;;;;20424:87;;20471:28;20484:6;20492;20471:12;:28::i;:::-;20570:53;;;;;;;;;;;-1:-1:-1;;;20570:53:0;;;;;;;;-1:-1:-1;;;;;20570:17:0;;-1:-1:-1;20570:17:0;;;:9;:17;;;;;;;;:53;;20592:6;;20570:21;:53::i;:::-;-1:-1:-1;;;;;20550:17:0;;;;;;:9;:17;;;;;:73;20661:6;20797:318;;;;20830:8;;:12;20827:100;;20880:31;20896:6;20904;20880:15;:31::i;:::-;20863:48;;20827:100;20797:318;;;-1:-1:-1;;;;;21888:19:0;;21863:4;21888:19;;;:11;:19;;;;;;;;21887:20;20976:64;;21034:6;20976:64;;;21000:31;21008:6;21016;21024;21000:7;:31::i;:::-;20959:81;;21072:16;:14;:16::i;:::-;21069:35;;;21091:10;:8;:10::i;:::-;-1:-1:-1;;;;;21150:20:0;;;;;;:9;:20;;;;;;:40;;21175:14;21150:24;:40::i;:::-;-1:-1:-1;;;;;21127:20:0;;;;;;;:9;:20;;;;;;;:63;;;;21208:43;;;;;;-1:-1:-1;;;;;;;;;;;21208:43:0;;;21236:14;160:25:1;;148:2;133:18;;14:177;21208:43:0;;;;;;;;-1:-1:-1;21269:4:0;;18896:2385;-1:-1:-1;;;;;;18896:2385:0:o;1627:98::-;1685:7;1712:5;1716:1;1712;:5;:::i;21289:330::-;21419:53;;;;;;;;;;;-1:-1:-1;;;21419:53:0;;;;;;;;-1:-1:-1;;;;;21419:17:0;;21382:4;21419:17;;;:9;:17;;;;;;;:53;;21441:6;;21419:21;:53::i;:::-;-1:-1:-1;;;;;21399:17:0;;;;;;;:9;:17;;;;;;:73;;;;21506:20;;;;;;;:32;;21531:6;21506:24;:32::i;:::-;-1:-1:-1;;;;;21483:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21554:35;;;;;;-1:-1:-1;;;;;;;;;;;21554:35:0;;;21582:6;160:25:1;;148:2;133:18;;14:177;21554:35:0;;;;;;;;-1:-1:-1;21607:4:0;21289:330;;;;;:::o;1521:98::-;1579:7;1606:5;1610:1;1606;:5;:::i;1733:98::-;1791:7;1818:5;1822:1;1818;:5;:::i;1839:98::-;1897:7;1924:5;1928:1;1924;:5;:::i;21627:166::-;21724:12;;21714:6;:22;;:49;;;-1:-1:-1;;;;;;21740:23:0;;;;;;:15;:23;;;;;;;;21714:49;21706:79;;;;-1:-1:-1;;;21706:79:0;;13984:2:1;21706:79:0;;;13966:21:1;14023:2;14003:18;;;13996:30;-1:-1:-1;;;14042:18:1;;;14035:47;14099:18;;21706:79:0;13782:341:1;21706:79:0;21627:166;;:::o;21923:406::-;21998:7;22020:17;22040:8;;22020:28;;22059:17;22079:56;22114:14;;22131:3;22114:20;;;;:::i;:::-;22079:30;22105:3;22079:21;:6;22090:9;22079:10;:21::i;:56::-;22201:4;22183:24;;;;:9;:24;;;;;;22059:76;;-1:-1:-1;22183:39:0;;22059:76;22183:28;:39::i;:::-;22174:4;22156:24;;;;:9;:24;;;;;;;:66;;;;22238:42;;-1:-1:-1;;;;;22238:42:0;;;-1:-1:-1;;;;;;;;;;;22238:42:0;;;22270:9;160:25:1;;148:2;133:18;;14:177;22238:42:0;;;;;;;;22300:21;:6;22311:9;22300:10;:21::i;:::-;22293:28;21923:406;-1:-1:-1;;;;;21923:406:0:o;22337:601::-;-1:-1:-1;;;;;22469:19:0;;22417:7;22469:19;;;:11;:19;;;;;;22417:7;;22469:19;;22465:191;;;-1:-1:-1;22517:2:0;22465:191;;;22609:6;:35;;22633:11;;22609:35;;;22618:12;;22609:35;22597:47;;22465:191;22668:17;22688:56;22723:14;;22740:3;22723:20;;;;:::i;:::-;22688:30;22714:3;22688:21;:6;22699:9;22688:10;:21::i;:56::-;22810:4;22792:24;;;;:9;:24;;;;;;22668:76;;-1:-1:-1;22792:39:0;;22668:76;22792:28;:39::i;:::-;22783:4;22765:24;;;;:9;:24;;;;;;;:66;;;;22847:42;;-1:-1:-1;;;;;22847:42:0;;;-1:-1:-1;;;;;;;;;;;22847:42:0;;;22879:9;160:25:1;;148:2;133:18;;14:177;22847:42:0;;;;;;;;22909:21;:6;22920:9;22909:10;:21::i;:::-;22902:28;22337:601;-1:-1:-1;;;;;;22337:601:0:o;22946:206::-;22995:4;23019:10;-1:-1:-1;;;;;23033:13:0;23019:27;;;;;:47;;-1:-1:-1;23060:6:0;;;;23059:7;23019:47;:71;;;;-1:-1:-1;23079:11:0;;;;23019:71;:125;;;;-1:-1:-1;;23131:13:0;;23121:4;23103:24;;;;:9;:24;;;;;;:41;;;22946:206::o;24358:1782::-;14499:6;:13;;-1:-1:-1;;14499:13:0;14508:4;14499:13;;;24453:15:::1;::::0;24470:26:::1;::::0;14499:6;;24437:60:::1;::::0;:15:::1;:60::i;:::-;:76;;24504:9;;24437:76;;;24500:1;24437:76;24407:106;;24524:23;24550:60;24608:1;24550:53;24590:12;;24550:35;24565:19;24550:10;;:14;;:35;;;;:::i;:60::-;24524:86;;24621:20;24644:31;24659:15;24644:10;;:14;;:31;;;;:::i;:::-;24712:16;::::0;;24726:1:::1;24712:16:::0;;;;;::::1;::::0;;24621:54;;-1:-1:-1;24688:21:0::1;::::0;24712:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24712:16:0::1;24688:40;;24757:4;24739;24744:1;24739:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24739:23:0::1;;;-1:-1:-1::0;;;;;24739:23:0::1;;;::::0;::::1;24783:14;-1:-1:-1::0;;;;;24783:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24773:4;24778:1;24773:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24773:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;24875:196:::1;::::0;-1:-1:-1;;;24875:196:0;;24841:21:::1;::::0;24875:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;24955:12;;24817:21:::1;::::0;24998:4;;25025::::1;::::0;25045:15:::1;::::0;24875:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25084:17;25104:40;25130:13;25104:21;:25;;:40;;;;:::i;:::-;25084:60:::0;-1:-1:-1;25157:19:0::1;25179:44;25196:26;:19:::0;25220:1:::1;25196:23;:26::i;:::-;25179:12;::::0;;:16:::1;:44::i;:::-;25157:66;;25236:26;25265:48;25311:1;25265:41;25294:11;25265:24;25279:9;;25265;:13;;:24;;;;:::i;:48::-;25236:77;;25324:26;25353:45;25386:11;25353:28;25367:13;;25353:9;:13;;:28;;;;:::i;:45::-;25324:74;;25409:25;25437:47;25472:11;25437:30;25451:15;;25437:9;:13;;:30;;;;:::i;:47::-;25498:15;25526::::0;;25518:72:::1;::::0;25409:75;;-1:-1:-1;25498:15:0;;-1:-1:-1;;;;;25526:15:0;;::::1;::::0;25580:5:::1;::::0;25555:18;;25498:15;25518:72;25498:15;25518:72;25555:18;25526:15;25580:5;25518:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25625:14:0::1;::::0;25617:70:::1;::::0;25497:93;;-1:-1:-1;;;;;;25625:14:0::1;::::0;25677:5:::1;::::0;25653:17;;25617:70:::1;::::0;;;25653:17;25625:14;25677:5;25617:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25745:5:0::1;::::0;-1:-1:-1;;25766:19:0;;;-1:-1:-1;25763:370:0::1;;25983:21;::::0;25801:252:::1;::::0;-1:-1:-1;;;25801:252:0;;25885:4:::1;25801:252;::::0;::::1;16052:34:1::0;16102:18;;;16095:34;;;-1:-1:-1;16145:18:1;;;16138:34;;;16188:18;;;16181:34;-1:-1:-1;;;;;25983:21:0;;::::1;16231:19:1::0;;;16224:44;26023:15:0::1;16284:19:1::0;;;16277:35;25801:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;25839:18;;15986:19:1;;25801:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26073:48:0::1;::::0;;16808:25:1;;;16864:2;16849:18;;16842:34;;;26073:48:0::1;::::0;-1:-1:-1;16781:18:1;26073:48:0::1;;;;;;;25763:370;-1:-1:-1::0;;14517:6:0;:14;;-1:-1:-1;;14517:14:0;;;-1:-1:-1;;;;;;;;;24358:1782: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:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:247::-;2059:6;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;2167:9;2154:23;2186:31;2211:5;2186:31;:::i;2252:180::-;2311:6;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;-1:-1:-1;2403:23:1;;2252:180;-1:-1:-1;2252:180:1:o;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;3087:367::-;3150:8;3160:6;3214:3;3207:4;3199:6;3195:17;3191:27;3181:55;;3232:1;3229;3222:12;3181:55;-1:-1:-1;3255:20:1;;3298:18;3287:30;;3284:50;;;3330:1;3327;3320:12;3284:50;3367:4;3359:6;3355:17;3343:29;;3427:3;3420:4;3410:6;3407:1;3403:14;3395:6;3391:27;3387:38;3384:47;3381:67;;;3444:1;3441;3434:12;3381:67;3087:367;;;;;:::o;3459:437::-;3545:6;3553;3606:2;3594:9;3585:7;3581:23;3577:32;3574:52;;;3622:1;3619;3612:12;3574:52;3662:9;3649:23;3695:18;3687:6;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3766:70;3828:7;3819:6;3808:9;3804:22;3766:70;:::i;:::-;3855:8;;3740:96;;-1:-1:-1;3459:437:1;-1:-1:-1;;;;3459:437:1:o;3901:640::-;4005:6;4013;4021;4029;4082:2;4070:9;4061:7;4057:23;4053:32;4050:52;;;4098:1;4095;4088:12;4050:52;4137:9;4124:23;4156:31;4181:5;4156:31;:::i;:::-;4206:5;-1:-1:-1;4262:2:1;4247:18;;4234:32;4289:18;4278:30;;4275:50;;;4321:1;4318;4311:12;4275:50;4360:70;4422:7;4413:6;4402:9;4398:22;4360:70;:::i;:::-;3901:640;;4449:8;;-1:-1:-1;4334:96:1;;4531:2;4516:18;4503:32;;3901:640;-1:-1:-1;;;;3901:640:1:o;4754:315::-;4819:6;4827;4880:2;4868:9;4859:7;4855:23;4851:32;4848:52;;;4896:1;4893;4886:12;4848:52;4935:9;4922:23;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5028:35:1;5059:2;5044:18;;5028:35;:::i;:::-;5018:45;;4754:315;;;;;:::o;5309:908::-;5440:6;5448;5456;5464;5472;5525:2;5513:9;5504:7;5500:23;5496:32;5493:52;;;5541:1;5538;5531:12;5493:52;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5705:2:1;5690:18;;5677:32;5728:18;5758:14;;;5755:34;;;5785:1;5782;5775:12;5755:34;5824:70;5886:7;5877:6;5866:9;5862:22;5824:70;:::i;:::-;5913:8;;-1:-1:-1;5798:96:1;-1:-1:-1;6001:2:1;5986:18;;5973:32;;-1:-1:-1;6017:16:1;;;6014:36;;;6046:1;6043;6036:12;6014:36;;6085:72;6149:7;6138:8;6127:9;6123:24;6085:72;:::i;:::-;5309:908;;;;-1:-1:-1;5309:908:1;;-1:-1:-1;6176:8:1;;6059:98;5309:908;-1:-1:-1;;;5309:908:1:o;6222:385::-;6308:6;6316;6324;6332;6385:3;6373:9;6364:7;6360:23;6356:33;6353:53;;;6402:1;6399;6392:12;6353:53;-1:-1:-1;;6425:23:1;;;6495:2;6480:18;;6467:32;;-1:-1:-1;6546:2:1;6531:18;;6518:32;;6597:2;6582:18;6569:32;;-1:-1:-1;6222:385:1;-1:-1:-1;6222:385:1:o;6612:529::-;6689:6;6697;6705;6758:2;6746:9;6737:7;6733:23;6729:32;6726:52;;;6774:1;6771;6764:12;6726:52;6813:9;6800:23;6832:31;6857:5;6832:31;:::i;:::-;6882:5;-1:-1:-1;6939:2:1;6924:18;;6911:32;6952:33;6911:32;6952:33;:::i;:::-;7004:7;-1:-1:-1;7063:2:1;7048:18;;7035:32;7076:33;7035:32;7076:33;:::i;:::-;7128:7;7118:17;;;6612:529;;;;;:::o;7146:388::-;7214:6;7222;7275:2;7263:9;7254:7;7250:23;7246:32;7243:52;;;7291:1;7288;7281:12;7243:52;7330:9;7317:23;7349:31;7374:5;7349:31;:::i;:::-;7399:5;-1:-1:-1;7456:2:1;7441:18;;7428:32;7469:33;7428:32;7469:33;:::i;:::-;7521:7;7511:17;;;7146:388;;;;;:::o;7539:525::-;7625:6;7633;7641;7649;7702:3;7690:9;7681:7;7677:23;7673:33;7670:53;;;7719:1;7716;7709:12;7670:53;7758:9;7745:23;7777:31;7802:5;7777:31;:::i;:::-;7827:5;-1:-1:-1;7884:2:1;7869:18;;7856:32;7897:33;7856:32;7897:33;:::i;:::-;7539:525;;7949:7;;-1:-1:-1;;;;8003:2:1;7988:18;;7975:32;;8054:2;8039:18;8026:32;;7539:525::o;8069:356::-;8271:2;8253:21;;;8290:18;;;8283:30;8349:34;8344:2;8329:18;;8322:62;8416:2;8401:18;;8069:356::o;8430:127::-;8491:10;8486:3;8482:20;8479:1;8472:31;8522:4;8519:1;8512:15;8546:4;8543:1;8536:15;8562:168;8635:9;;;8666;;8683:15;;;8677:22;;8663:37;8653:71;;8704:18;;:::i;8735:217::-;8775:1;8801;8791:132;;8845:10;8840:3;8836:20;8833:1;8826:31;8880:4;8877:1;8870:15;8908:4;8905:1;8898:15;8791:132;-1:-1:-1;8937:9:1;;8735:217::o;8957:127::-;9018:10;9013:3;9009:20;9006:1;8999:31;9049:4;9046:1;9039:15;9073:4;9070:1;9063:15;9089:135;9128:3;9149:17;;;9146:43;;9169:18;;:::i;:::-;-1:-1:-1;9216:1:1;9205:13;;9089:135::o;10822:125::-;10887:9;;;10908:10;;;10905:36;;;10921:18;;:::i;13649:128::-;13716:9;;;13737:11;;;13734:37;;;13751:18;;:::i;14260:251::-;14330:6;14383:2;14371:9;14362:7;14358:23;14354:32;14351:52;;;14399:1;14396;14389:12;14351:52;14431:9;14425:16;14450:31;14475:5;14450:31;:::i;14516:980::-;14778:4;14826:3;14815:9;14811:19;14857:6;14846:9;14839:25;14883:2;14921:6;14916:2;14905:9;14901:18;14894:34;14964:3;14959:2;14948:9;14944:18;14937:31;14988:6;15023;15017:13;15054:6;15046;15039:22;15092:3;15081:9;15077:19;15070:26;;15131:2;15123:6;15119:15;15105:29;;15152:1;15162:195;15176:6;15173:1;15170:13;15162:195;;;15241:13;;-1:-1:-1;;;;;15237:39:1;15225:52;;15332:15;;;;15297:12;;;;15273:1;15191:9;15162:195;;;-1:-1:-1;;;;;;;15413:32:1;;;;15408:2;15393:18;;15386:60;-1:-1:-1;;;15477:3:1;15462:19;15455:35;15374:3;14516:980;-1:-1:-1;;;14516:980:1:o;16323:306::-;16411:6;16419;16427;16480:2;16468:9;16459:7;16455:23;16451:32;16448:52;;;16496:1;16493;16486:12;16448:52;16525:9;16519:16;16509:26;;16575:2;16564:9;16560:18;16554:25;16544:35;;16619:2;16608:9;16604:18;16598:25;16588:35;;16323:306;;;;;:::o

Swarm Source

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