ETH Price: $2,594.06 (-3.73%)

Token

Rotten Egg (RTN)
 

Overview

Max Total Supply

1,000,000,000 RTN

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,100,001 RTN

Value
$0.00
0x12e6276b3a6364427c22e6ad5e131388545956f0
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:
RottenEgg

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-02
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.15;

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

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

library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];
                set._values[toDeleteIndex] = lastValue;
                set._indexes[lastValue] = valueIndex;
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }


    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20 {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract Ownable is Context {
    address private _owner;

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}

interface IDexPair {

    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;

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

contract RottenEgg is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    address[] public buyerList;
    uint256 public timeBetweenBuysForJackpot = 30 minutes;
    uint256 public numberOfBuysForJackpot = 10;
    uint256 public minBuyAmount = .15 ether;
    bool public minBuyEnforced = false;
    uint256 public percentForJackpot = 25;
    bool public jackpotEnabled = true;
    uint256 public lastBuyTimestamp;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address operationsAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public restrictedWallet;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyJackpotFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellJackpotFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForJackpot;

    uint256 public FEE_DENOMINATOR = 10000;
    
    /******************/

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    // whitelist
    mapping(address => bool) public whitelistedWallets;
    bool public whitelistEnabled = true;
    event DisabledWhitelist();

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event EnabledLimits();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtBot(address sniper);

    event TransferForeignToken(address token, uint256 amount);

    event JackpotTriggered(uint256 indexed amount, address indexed wallet);

    constructor() ERC20("Rotten Egg", "RTN") payable {
        
        address newOwner = msg.sender;

        dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);        

        operationsAddress = address(0x35aa600D34BA3305c81EA04213623c1e8A00b43e);

        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxBuyAmount = totalSupply * 32 / 10000; // 0.32%
        maxSellAmount = totalSupply * 32 / 10000; // 0.32%
        maxWalletAmount = totalSupply * 32 / 10000; // 0.32%
        swapTokensAtAmount = totalSupply * 25 / 100000; // 0.025%

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyJackpotFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyJackpotFee;

        sellOperationsFee = 400;
        sellLiquidityFee = 0;
        sellJackpotFee = 700;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellJackpotFee;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(msg.sender, true);
        _excludeFromMaxTransaction(operationsAddress, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(0x2eA9e630154d6Ba1b1A01136dbb78F7FDD32DcC4, true);

        excludeFromFees(newOwner, true);
        excludeFromFees(msg.sender, true);
        excludeFromFees(operationsAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(0x2eA9e630154d6Ba1b1A01136dbb78F7FDD32DcC4, true);

        _createInitialSupply(
            0x2eA9e630154d6Ba1b1A01136dbb78F7FDD32DcC4,
            (totalSupply * 5) / 100
        ); // Team wallet
        _createInitialSupply(address(0xdead), (totalSupply * 83) / 100); // Burn
        _createInitialSupply(address(this), (totalSupply * 12) / 100); // Tokens for liquidity        

        transferOwnership(newOwner);
    }

    receive() external payable {}
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(blockForPenaltyEnd == 0);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        lastBuyTimestamp = block.timestamp;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function enableLimits() external onlyOwner {
        limitsInEffect = true;
        emit EnabledLimits();
    }    

    function disableWhitelistForever() external onlyOwner {
        whitelistEnabled = false;
        emit DisabledWhitelist();
    }    

    // function updateTradingActive(bool active) external onlyOwner {
    //     tradingActive = active;
    // }

    function setJackpotEnabled(bool enabled) external onlyOwner {
        jackpotEnabled = enabled;
    }

    function manageRestrictedWallets(address[] calldata wallets, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallet[wallets[i]] = restricted;
        }
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 25 / 10000) / (10 ** decimals()));
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 25 / 10000) / (10 ** decimals()));
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 25 / 10000) / (10 ** decimals()));
        maxWalletAmount = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000);
  	    require(newAmount <= totalSupply() * 1 / 1000);
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length);
        require(wallets.length < 600); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            super._transfer(msg.sender, wallets[i], amountsInTokens[i]);
        }
    }

    function setNumberOfBuysForJackpot(uint256 num) external onlyOwner {
        require(num >= 2 && num <= 100, "Must keep number of buys between 2 and 100");
        numberOfBuysForJackpot = num;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        
        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _jackpotFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyJackpotFee = _jackpotFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyJackpotFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _jackpotFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellJackpotFee = _jackpotFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellJackpotFee;
        require(sellTotalFees <= 2000, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: transfer must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!restrictedWallet[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if (whitelistEnabled) {
            // Buy
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(whitelistedWallets[to], "You wallet is not whitelisted!");
            } 
            //when sell
            else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                revert("No selling allowed during whitelist period!");
            } 
            else if (!_isExcludedMaxTransactionAmount[to]){
                revert("No token transfers allowed during whitelist period!");
            }            
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                               
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount);
                        require(amount + balanceOf(to) <= maxWalletAmount);
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount);
                } 
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount);
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }       

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if((earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 5 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!restrictedWallet[to]){
                    restrictedWallet[to] = true;
                    botsCaught += 1;
                    emit CaughtBot(to);
                }

                if(buyTotalFees > 0){
                    fees = amount * (buyTotalFees) / FEE_DENOMINATOR;
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                    tokensForJackpot += fees * buyJackpotFee / buyTotalFees;
                }
            }            

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * (sellTotalFees) / FEE_DENOMINATOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForJackpot += fees * sellJackpotFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from]){
                if(jackpotEnabled){
                    if(block.timestamp >= lastBuyTimestamp + timeBetweenBuysForJackpot && address(this).balance > 0.1 ether && buyerList.length >= numberOfBuysForJackpot){
                        payoutRewards(to);
                    }
                    else {
                        gasBurn();
                    }
                }

                if(!minBuyEnforced || amount > getPurchaseAmount()){
                    buyerList.push(to);
                }

                lastBuyTimestamp = block.timestamp;

                if(buyTotalFees > 0){
                    fees = amount * (buyTotalFees) / FEE_DENOMINATOR;
                    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                    tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                    tokensForJackpot += fees * buyJackpotFee / buyTotalFees;
                }    
            }            
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    function getPurchaseAmount() public view returns (uint256){
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        
        uint256[] memory amounts = new uint256[](2);
        amounts = dexRouter.getAmountsOut(minBuyAmount, path);
        return amounts[1];
    }

    // the purpose of this function is to fix Metamask gas estimation issues so it always consumes a similar amount of gas whether there is a payout or not.
    function gasBurn() private {
        bool success;
        uint256 randomNum = random(1, 10, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(lpPair)));
        uint256 winnings = address(this).balance / 2;
        address winner = address(this);
        winnings = 0;
        randomNum = 0;
        (success,) = address(winner).call{value: winnings}("");
    }
    
    function payoutRewards(address to) private {
        bool success;
        // get a pseudo random winner
        uint256 randomNum = random(1, numberOfBuysForJackpot, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to)));
        address winner = buyerList[buyerList.length-randomNum];
        uint256 winnings = address(this).balance * percentForJackpot / 100;
        (success,) = address(winner).call{value: winnings}("");
        if(success){
            emit JackpotTriggered(winnings, winner);
        }
        delete buyerList;
    }

    function random(uint256 from, uint256 to, uint256 salty) private view returns (uint256) {
        uint256 seed = uint256(
            keccak256(
                abi.encodePacked(
                    block.timestamp + block.difficulty +
                    ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (block.timestamp)) +
                    block.gaslimit +
                    ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (block.timestamp)) +
                    block.number +
                    salty
                )
            )
        );
        return seed % (to - from) + from;
    }

    function updateJackpotTimeCooldown(uint256 timeInMinutes) external onlyOwner {
        require(timeInMinutes > 0 && timeInMinutes <= 360);
        timeBetweenBuysForJackpot = timeInMinutes * 1 minutes;
    }

    function updatePercentForJackpot(uint256 percent) external onlyOwner {
        require(percent >= 10 && percent <= 100);
        percentForJackpot = percent;
    }

    function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner {
        minBuyAmount = minBuy;
    }

    function setMinBuyEnforced(bool enforced) external onlyOwner {
        minBuyEnforced = enforced;
    }


    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForJackpot;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 10){
            contractBalance = swapTokensAtAmount * 10;
        }

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractBalance - liquidityTokens);
        
        uint256 ethBalance = address(this).balance - initialBalance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForJackpot = ethBalance * tokensForJackpot / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForJackpot;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForJackpot = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        if(ethForOperations > 0){
            (success,) = address(operationsAddress).call{value: ethForOperations}("");
        }
        // remaining ETH stays for Jackpot
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0));
        require(_token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0));
        operationsAddress = payable(_operationsAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch(address[] memory wallets, uint256[] memory amountsInTokens, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 500, "Can only airdrop 500 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(msg.sender),
            block.timestamp
        );        

        lastBuyTimestamp = block.timestamp;
    }

    function addWhitelistedWalets(
        address[] memory wallets
    ) external onlyOwner {

        for (uint256 i = 0; i < wallets.length; i++) {
            address wallet = wallets[i];
            whitelistedWallets[wallet] = true;
        }
    }    

    function launchWithWhitelist(address[] memory wallets, uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty < 10, "Cannot make penalty blocks more than 10");

        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            whitelistedWallets[wallet] = true;
        }        

         //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(msg.sender),
            block.timestamp
        );

        lastBuyTimestamp = block.timestamp;
    }        

    function getBuyerListLength() external view returns (uint256){
        return buyerList.length;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtBot","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledWhitelist","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"JackpotTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"addWhitelistedWalets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyJackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyerList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableWhitelistForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyerListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPurchaseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"jackpotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchWithWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"manageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfBuysForJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellJackpotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setJackpotEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"setNumberOfBuysForJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenBuysForJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_jackpotFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateJackpotTimeCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuy","type":"uint256"}],"name":"updateMinBuyToTriggerReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"updatePercentForJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_jackpotFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

610708600a908155600b819055670214e8348c4f0000600c55600d805460ff199081169091556019600e819055600f8054831660019081179091556000601555815462ffffff19168117909155612710602555602a8054909216179055608090815269526f7474656e2045676760b01b60a052610100604052600360c081815262292a2760e91b60e0529062000096838262000966565b506004620000a5828262000966565b5050506000620000ba6200055e60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005335833981519152908290a350601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905133929163c45a01559160048083019260209291908290030181865afa1580156200015e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000184919062000a32565b6001600160a01b031663c9c6539630601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020d919062000a32565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000281919062000a32565b601280546001600160a01b0319166001600160a01b03929092169182179055620002ad90600162000562565b601254620002c6906001600160a01b03166001620005c5565b601480546001600160a01b0319167335aa600d34ba3305c81ea04213623c1e8a00b43e1790556b033b2e3c9fd0803ce80000006127106200030982602062000a7a565b62000315919062000a9c565b6006556127106200032882602062000a7a565b62000334919062000a9c565b6007556127106200034782602062000a7a565b62000353919062000a9c565b600855620186a06200036782601962000a7a565b62000373919062000a9c565b6013556000601b819055601c819055601d81905562000393818062000abf565b6200039f919062000abf565b601a55610190601f819055600060208190556102bc602181905591620003c6919062000abf565b620003d2919062000abf565b601e55620003e282600162000562565b620003ef33600162000562565b60145462000408906001600160a01b0316600162000562565b6200041530600162000562565b6200042461dead600162000562565b6011546200043d906001600160a01b0316600162000562565b6200045e732ea9e630154d6ba1b1a01136dbb78f7fdd32dcc4600162000562565b6200046b82600162000631565b6200047833600162000631565b60145462000491906001600160a01b0316600162000631565b6200049e30600162000631565b620004ad61dead600162000631565b601154620004c6906001600160a01b0316600162000631565b620004e7732ea9e630154d6ba1b1a01136dbb78f7fdd32dcc4600162000631565b62000521732ea9e630154d6ba1b1a01136dbb78f7fdd32dcc460646200050f84600562000a7a565b6200051b919062000a9c565b620006df565b6200053761dead60646200050f84605362000a7a565b6200054b3060646200050f84600c62000a7a565b6200055682620007c4565b505062000ada565b3390565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055620005f5828262000562565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006805760405162461bcd60e51b815260206004820181905260248201526000805160206200531583398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007375760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f2061646472657373000000000000604482015260640162000677565b80600260008282546200074b919062000abf565b90915550506001600160a01b038216600090815260208190526040812080548392906200077a90849062000abf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200080f5760405162461bcd60e51b8152602060048201819052602482015260008051602062005315833981519152604482015260640162000677565b6001600160a01b038116620008765760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000677565b6005546040516001600160a01b038084169216906000805160206200533583398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008ec57607f821691505b6020821081036200090d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096157600081815260208120601f850160051c810160208610156200093c5750805b601f850160051c820191505b818110156200095d5782815560010162000948565b5050505b505050565b81516001600160401b03811115620009825762000982620008c1565b6200099a81620009938454620008d7565b8462000913565b602080601f831160018114620009d25760008415620009b95750858301515b600019600386901b1c1916600185901b1785556200095d565b600085815260208120601f198616915b8281101562000a0357888601518255948401946001909101908401620009e2565b508582101562000a225787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a4557600080fd5b81516001600160a01b038116811462000a5d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a975762000a9762000a64565b500290565b60008262000aba57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000ad55762000ad562000a64565b500190565b61482b8062000aea6000396000f3fe6080604052600436106104985760003560e01c806382aa7c6811610260578063c2cca05e11610144578063e2f45605116100c1578063f498cceb11610085578063f498cceb14610d9e578063f5648a4f14610dbe578063f637434214610dd3578063f66bf22914610de9578063fb002c9714610dff578063fbe8d4b714610e1557600080fd5b8063e2f4560514610d1c578063ead010ae14610d32578063ee40166e14610d52578063f11a24d314610d68578063f2fde38b14610d7e57600080fd5b8063dc3f0d0f11610108578063dc3f0d0f14610c50578063dd4aca8914610c70578063dd62ed3e14610c90578063e0bf7fd114610cd6578063e2277cbb14610d0657600080fd5b8063c2cca05e14610bc4578063c8b6887514610be4578063d257b34f14610c04578063d73792a914610c24578063d85ba06314610c3a57600080fd5b8063a457c2d7116101dd578063ac8e3328116101a1578063ac8e332814610af5578063af401ef714610b15578063b62496f514610b35578063bbc0c74214610b65578063c024666814610b84578063c17b5b8c14610ba457600080fd5b8063a457c2d714610a59578063a62068ce14610a79578063a80dcfee14610a8f578063a9059cbb14610abf578063aa4bde2814610adf57600080fd5b806395d89b411161022457806395d89b41146109de5780639a7a23d6146109f35780639bc738cf14610a135780639cb9cd4814610a295780639d2aee5f14610a3f57600080fd5b806382aa7c68146109555780638366e79a1461097557806388e765ff146109955780638b28cd19146109ab5780638da5cb5b146109c057600080fd5b80634985746f116103875780636902ca6111610304578063715018a6116102c8578063715018a6146108c057806371a03d55146108d55780637455df62146108ea578063751039fc146109005780637571336a146109155780638095d5641461093557600080fd5b80636902ca611461083f5780636a486a8e146108545780636b0a894c1461086a5780636ddd17131461088057806370a08231146108a057600080fd5b806351f205e41161034b57806351f205e4146107cd57806351fb012d146107e257806358a6d531146107fc5780635a139dd41461081357806366d602ae1461082957600080fd5b80634985746f14610737578063499b83941461074d5780634a62bb651461076d5780634f77f6c01461078757806350e838e51461079d57600080fd5b80631f6df910116104155780632be32b61116103d95780632be32b61146106a5578063313ce567146106c557806339509351146106e15780633a2bbd6f14610701578063452ed4f11461071757600080fd5b80631f6df9101461061a5780632307b4411461063057806323684d241461065057806323b872dd14610665578063285b97471461068557600080fd5b806310d5de531161045c57806310d5de531461057557806316d7b6f3146105a557806318160ddd146105c55780631a8145bb146105e45780631c499ab0146105fa57600080fd5b806306132a94146104a457806306fdde03146104e15780630758d92414610503578063095ea7b3146105235780630c69dfae1461055357600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104c46104bf366004613d54565b610e2f565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104ed57600080fd5b506104f6610e59565b6040516104d89190613d6d565b34801561050f57600080fd5b506011546104c4906001600160a01b031681565b34801561052f57600080fd5b5061054361053e366004613dd7565b610eeb565b60405190151581526020016104d8565b34801561055f57600080fd5b5061057361056e366004613d54565b610f02565b005b34801561058157600080fd5b50610543610590366004613e03565b60276020526000908152604090205460ff1681565b3480156105b157600080fd5b506105736105c0366004613d54565b610f61565b3480156105d157600080fd5b506002545b6040519081526020016104d8565b3480156105f057600080fd5b506105d660235481565b34801561060657600080fd5b50610573610615366004613d54565b610fab565b34801561062657600080fd5b506105d6600a5481565b34801561063c57600080fd5b5061057361064b366004613f61565b61106a565b34801561065c57600080fd5b50610573611111565b34801561067157600080fd5b50610543610680366004613fc5565b611170565b34801561069157600080fd5b506105736106a0366004614014565b61121a565b3480156106b157600080fd5b506105736106c0366004613d54565b611257565b3480156106d157600080fd5b50604051601281526020016104d8565b3480156106ed57600080fd5b506105436106fc366004613dd7565b61130f565b34801561070d57600080fd5b506105d6600b5481565b34801561072357600080fd5b506012546104c4906001600160a01b031681565b34801561074357600080fd5b506105d660105481565b34801561075957600080fd5b50610573610768366004613e03565b61134b565b34801561077957600080fd5b506019546105439060ff1681565b34801561079357600080fd5b506105d6601f5481565b3480156107a957600080fd5b506105436107b8366004613e03565b60176020526000908152604090205460ff1681565b3480156107d957600080fd5b506105736113aa565b3480156107ee57600080fd5b50602a546105439060ff1681565b34801561080857600080fd5b506016544310610543565b34801561081f57600080fd5b506105d6601b5481565b34801561083557600080fd5b506105d660075481565b34801561084b57600080fd5b506105736114b3565b34801561086057600080fd5b506105d6601e5481565b34801561087657600080fd5b506105d660185481565b34801561088c57600080fd5b506019546105439062010000900460ff1681565b3480156108ac57600080fd5b506105d66108bb366004613e03565b611515565b3480156108cc57600080fd5b50610573611530565b3480156108e157600080fd5b506009546105d6565b3480156108f657600080fd5b506105d6601d5481565b34801561090c57600080fd5b506105736115a4565b34801561092157600080fd5b50610573610930366004614031565b611603565b34801561094157600080fd5b5061057361095036600461406a565b6116cb565b34801561096157600080fd5b50610573610970366004613d54565b61176f565b34801561098157600080fd5b50610543610990366004614096565b6117fb565b3480156109a157600080fd5b506105d660065481565b3480156109b757600080fd5b506105d661197e565b3480156109cc57600080fd5b506005546001600160a01b03166104c4565b3480156109ea57600080fd5b506104f6611b2f565b3480156109ff57600080fd5b50610573610a0e366004614031565b611b3e565b348015610a1f57600080fd5b506105d660245481565b348015610a3557600080fd5b506105d660215481565b348015610a4b57600080fd5b50600f546105439060ff1681565b348015610a6557600080fd5b50610543610a74366004613dd7565b611c32565b348015610a8557600080fd5b506105d660165481565b348015610a9b57600080fd5b50610543610aaa366004613e03565b60296020526000908152604090205460ff1681565b348015610acb57600080fd5b50610543610ada366004613dd7565b611ccb565b348015610aeb57600080fd5b506105d660085481565b348015610b0157600080fd5b50610573610b103660046140c4565b611cd8565b348015610b2157600080fd5b50610573610b3036600461414a565b611d79565b348015610b4157600080fd5b50610543610b50366004613e03565b60286020526000908152604090205460ff1681565b348015610b7157600080fd5b5060195461054390610100900460ff1681565b348015610b9057600080fd5b50610573610b9f366004614031565b611f8e565b348015610bb057600080fd5b50610573610bbf36600461406a565b612017565b348015610bd057600080fd5b50610573610bdf366004613d54565b6120bb565b348015610bf057600080fd5b50610573610bff366004614014565b61215b565b348015610c1057600080fd5b50610573610c1f366004613d54565b612198565b348015610c3057600080fd5b506105d660255481565b348015610c4657600080fd5b506105d6601a5481565b348015610c5c57600080fd5b50610573610c6b366004613d54565b612222565b348015610c7c57600080fd5b50610573610c8b36600461418f565b6122da565b348015610c9c57600080fd5b506105d6610cab366004614096565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ce257600080fd5b50610543610cf1366004613e03565b60266020526000908152604090205460ff1681565b348015610d1257600080fd5b506105d6600e5481565b348015610d2857600080fd5b506105d660135481565b348015610d3e57600080fd5b50610573610d4d3660046141cc565b612369565b348015610d5e57600080fd5b506105d660155481565b348015610d7457600080fd5b506105d6601c5481565b348015610d8a57600080fd5b50610573610d99366004613e03565b612648565b348015610daa57600080fd5b50610573610db9366004613d54565b612733565b348015610dca57600080fd5b50610573612762565b348015610ddf57600080fd5b506105d660205481565b348015610df557600080fd5b506105d6600c5481565b348015610e0b57600080fd5b506105d660225481565b348015610e2157600080fd5b50600d546105439060ff1681565b60098181548110610e3f57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060038054610e6890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9490614239565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b6000610ef83384846127ea565b5060015b92915050565b6005546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c90614273565b60405180910390fd5b600081118015610f4757506101688111155b610f5057600080fd5b610f5b81603c6142be565b600a5550565b6005546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610f2c90614273565b600a8110158015610f9d575060648111155b610fa657600080fd5b600e55565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610f2c90614273565b610fe16012600a6143c1565b612710610fed60025490565b610ff89060196142be565b61100291906143e6565b61100c91906143e6565b81101561101857600080fd5b6110246012600a6143c1565b61102e90826142be565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b031633146110945760405162461bcd60e51b8152600401610f2c90614273565b80518251146110a257600080fd5b6102588251106110b157600080fd5b60005b825181101561110c576110fa338483815181106110d3576110d36143fa565b60200260200101518484815181106110ed576110ed6143fa565b602002602001015161290e565b8061110481614410565b9150506110b4565b505050565b6005546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610f2c90614273565b602a805460ff191690556040517f444d749f50748902c0619b43347eae6dc13e5be86420419b6c606e6e3fc9822290600090a1565b600061117d848484612a63565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f2c565b61120f85338584036127ea565b506001949350505050565b6005546001600160a01b031633146112445760405162461bcd60e51b8152600401610f2c90614273565b600d805460ff1916911515919091179055565b6005546001600160a01b031633146112815760405162461bcd60e51b8152600401610f2c90614273565b61128d6012600a6143c1565b61271061129960025490565b6112a49060196142be565b6112ae91906143e6565b6112b891906143e6565b8110156112c457600080fd5b6112d06012600a6143c1565b6112da90826142be565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161105f565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ef8918590611346908690614429565b6127ea565b6005546001600160a01b031633146113755760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b03811661138857600080fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113d45760405162461bcd60e51b8152600401610f2c90614273565b6013546113e030611515565b1015611456576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f2c565b6012805460ff60a01b1916600160a01b1790556114716135ed565b6012805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114dd5760405162461bcd60e51b8152600401610f2c90614273565b6019805460ff191660011790556040517f10d778167c503500f2cf7f114521871c5ab9b6ac8e63dfc9284c73e05d94b49690600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461155a5760405162461bcd60e51b8152600401610f2c90614273565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610f2c90614273565b6019805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610f2c90614273565b806116a0576012546001600160a01b03908116908316036116a05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f2c565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610f2c90614273565b601b839055601c829055601d8190558061170f8385614429565b6117199190614429565b601a8190556105dc101561110c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f2c565b6005546001600160a01b031633146117995760405162461bcd60e51b8152600401610f2c90614273565b601654156117a657600080fd5b6019805462ffff001916620101001790554360158190556117c8908290614429565b601655426010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118285760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b03831661183b57600080fd5b306001600160a01b0384160361185057600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bb9190614441565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611932919061445a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b604080516002808252606082018352600092839291906020830190803683375050601154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a109190614477565b81600081518110611a2357611a236143fa565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611a5757611a576143fa565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601154600c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611ac69186906004016144d8565b600060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b0b91908101906144f1565b905080600181518110611b2057611b206143fa565b60200260200101519250505090565b606060048054610e6890614239565b6005546001600160a01b03163314611b685760405162461bcd60e51b8152600401610f2c90614273565b6012546001600160a01b0390811690831603611bec5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f2c565b611bf682826137b9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611cb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f2c565b611cc133858584036127ea565b5060019392505050565b6000610ef8338484612a63565b6005546001600160a01b03163314611d025760405162461bcd60e51b8152600401610f2c90614273565b60005b82811015611d73578160176000868685818110611d2457611d246143fa565b9050602002016020810190611d399190613e03565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d6b81614410565b915050611d05565b50505050565b6005546001600160a01b03163314611da35760405162461bcd60e51b8152600401610f2c90614273565b601954610100900460ff1615611dcb5760405162461bcd60e51b8152600401610f2c90614582565b600a8110611deb5760405162461bcd60e51b8152600401610f2c906145cd565b60005b8251811015611e4c576000838281518110611e0b57611e0b6143fa565b6020908102919091018101516001600160a01b03166000908152602990915260409020805460ff191660011790555080611e4481614410565b915050611dee565b506019805462ffff00191662010100179055436015819055611e6f908290614429565b6016556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611ebb5760405162461bcd60e51b8152600401610f2c90614614565b6000611ec630611515565b11611ee35760405162461bcd60e51b8152600401610f2c90614657565b601154611efe9030906001600160a01b031661134682611515565b6011546001600160a01b031663f305d7194730611f1a81611515565b60008033426040518863ffffffff1660e01b8152600401611f409695949392919061469d565b60606040518083038185885af1158015611f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f8391906146d8565b505042601055505050565b6005546001600160a01b03163314611fb85760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120415760405162461bcd60e51b8152600401610f2c90614273565b601f839055602082905560218190558061205b8385614429565b6120659190614429565b601e8190556107d0101561110c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f2c565b6005546001600160a01b031633146120e55760405162461bcd60e51b8152600401610f2c90614273565b600281101580156120f7575060648111155b6121565760405162461bcd60e51b815260206004820152602a60248201527f4d757374206b656570206e756d626572206f662062757973206265747765656e6044820152690203220616e64203130360b41b6064820152608401610f2c565b600b55565b6005546001600160a01b031633146121855760405162461bcd60e51b8152600401610f2c90614273565b600f805460ff1916911515919091179055565b6005546001600160a01b031633146121c25760405162461bcd60e51b8152600401610f2c90614273565b620186a06121cf60025490565b6121da9060016142be565b6121e491906143e6565b8110156121f057600080fd5b6103e86121fc60025490565b6122079060016142be565b61221191906143e6565b81111561221d57600080fd5b601355565b6005546001600160a01b0316331461224c5760405162461bcd60e51b8152600401610f2c90614273565b6122586012600a6143c1565b61271061226460025490565b61226f9060196142be565b61227991906143e6565b61228391906143e6565b81101561228f57600080fd5b61229b6012600a6143c1565b6122a590826142be565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161105f565b6005546001600160a01b031633146123045760405162461bcd60e51b8152600401610f2c90614273565b60005b8151811015612365576000828281518110612324576123246143fa565b6020908102919091018101516001600160a01b03166000908152602990915260409020805460ff19166001179055508061235d81614410565b915050612307565b5050565b6005546001600160a01b031633146123935760405162461bcd60e51b8152600401610f2c90614273565b601954610100900460ff16156123bb5760405162461bcd60e51b8152600401610f2c90614582565b600a81106123db5760405162461bcd60e51b8152600401610f2c906145cd565b815183511461242c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f2c565b6101f483511061249d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203530302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f2c565b60005b83518110156125055760008482815181106124bd576124bd6143fa565b6020026020010151905060008483815181106124db576124db6143fa565b602002602001015190506124f033838361290e565b505080806124fd90614410565b9150506124a0565b506019805462ffff00191662010100179055436015819055612528908290614429565b6016556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116125745760405162461bcd60e51b8152600401610f2c90614614565b600061257f30611515565b1161259c5760405162461bcd60e51b8152600401610f2c90614657565b6011546125b79030906001600160a01b031661134682611515565b6011546001600160a01b031663f305d71947306125d381611515565b60008033426040518863ffffffff1660e01b81526004016125f99695949392919061469d565b60606040518083038185885af1158015612617573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061263c91906146d8565b50504260105550505050565b6005546001600160a01b031633146126725760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b0381166126d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f2c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461275d5760405162461bcd60e51b8152600401610f2c90614273565b600c55565b6005546001600160a01b0316331461278c5760405162461bcd60e51b8152600401610f2c90614273565b60006127a06005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d73565b6001600160a01b03831661284c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f2c565b6001600160a01b0382166128ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f2c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129345760405162461bcd60e51b8152600401610f2c90614706565b6001600160a01b03821661295a5760405162461bcd60e51b8152600401610f2c9061474b565b6001600160a01b038316600090815260208190526040902054818110156129d25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f2c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a09908490614429565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a5591815260200190565b60405180910390a350505050565b6001600160a01b038316612a895760405162461bcd60e51b8152600401610f2c90614706565b6001600160a01b038216612aaf5760405162461bcd60e51b8152600401610f2c9061474b565b60008111612b0e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610f2c565b601954610100900460ff16612ba1576001600160a01b03831660009081526026602052604090205460ff1680612b5c57506001600160a01b03821660009081526026602052604090205460ff165b612ba15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f2c565b6016544310158015612bb557506000601654115b15612c85576001600160a01b03831660009081526017602052604090205460ff161580612bef57506005546001600160a01b038381169116145b80612c0457506001600160a01b03821661dead145b612c855760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f2c565b602a5460ff1615612e69576001600160a01b03831660009081526028602052604090205460ff168015612cd157506001600160a01b03821660009081526027602052604090205460ff16155b15612d43576001600160a01b03821660009081526029602052604090205460ff16612d3e5760405162461bcd60e51b815260206004820152601e60248201527f596f752077616c6c6574206973206e6f742077686974656c69737465642100006044820152606401610f2c565b612e69565b6001600160a01b03821660009081526028602052604090205460ff168015612d8457506001600160a01b03831660009081526027602052604090205460ff16155b15612de55760405162461bcd60e51b815260206004820152602b60248201527f4e6f2073656c6c696e6720616c6c6f77656420647572696e672077686974656c60448201526a69737420706572696f642160a81b6064820152608401610f2c565b6001600160a01b03821660009081526027602052604090205460ff16612e695760405162461bcd60e51b815260206004820152603360248201527f4e6f20746f6b656e207472616e736665727320616c6c6f77656420647572696e604482015272672077686974656c69737420706572696f642160681b6064820152608401610f2c565b60195460ff161561302b576005546001600160a01b03848116911614801590612ea057506005546001600160a01b03838116911614155b8015612eb457506001600160a01b03821615155b8015612ecb57506001600160a01b03821661dead14155b8015612ef057506001600160a01b03831660009081526026602052604090205460ff16155b8015612f1557506001600160a01b03821660009081526026602052604090205460ff16155b1561302b576001600160a01b03831660009081526028602052604090205460ff168015612f5b57506001600160a01b03821660009081526027602052604090205460ff16155b15612f9557600654811115612f6f57600080fd5b600854612f7b83611515565b612f859083614429565b1115612f9057600080fd5b61302b565b6001600160a01b03821660009081526028602052604090205460ff168015612fd657506001600160a01b03831660009081526027602052604090205460ff16155b15612fea57600754811115612f9057600080fd5b6001600160a01b03821660009081526027602052604090205460ff1661302b5760085461301683611515565b6130209083614429565b111561302b57600080fd5b600061303630611515565b60135490915081108015908190613055575060195462010000900460ff165b801561306b5750601254600160a01b900460ff16155b801561309057506001600160a01b03851660009081526028602052604090205460ff16155b80156130b557506001600160a01b03851660009081526026602052604090205460ff16155b80156130da57506001600160a01b03841660009081526026602052604090205460ff16155b15613108576012805460ff60a01b1916600160a01b1790556130fa6135ed565b6012805460ff60a01b191690555b6001600160a01b03851660009081526026602052604090205460019060ff168061314a57506001600160a01b03851660009081526026602052604090205460ff165b15613153575060005b600081156135d9576016544310806131995750670c7d713b49da000060065461317c919061478e565b851015801561319957504360165460056131969190614429565b10155b80156131bd57506001600160a01b03871660009081526028602052604090205460ff165b80156131e257506001600160a01b03861660009081526028602052604090205460ff16155b1561335f57601654431061320957600160066000828254613203919061478e565b90915550505b6001600160a01b03861660009081526017602052604090205460ff166132a4576001600160a01b0386166000908152601760205260408120805460ff191660019081179091556018805491929091613262908490614429565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b601a541561335a57602554601a546132bc90876142be565b6132c691906143e6565b9050601a54601c54826132d991906142be565b6132e391906143e6565b602360008282546132f49190614429565b9091555050601a54601b5461330990836142be565b61331391906143e6565b602260008282546133249190614429565b9091555050601a54601d5461333990836142be565b61334391906143e6565b602460008282546133549190614429565b90915550505b6135bb565b6001600160a01b03861660009081526028602052604090205460ff16801561338957506000601e54115b1561341b57602554601e5461339e90876142be565b6133a891906143e6565b9050601e54602054826133bb91906142be565b6133c591906143e6565b602360008282546133d69190614429565b9091555050601e54601f546133eb90836142be565b6133f591906143e6565b602260008282546134069190614429565b9091555050601e5460215461333990836142be565b6001600160a01b03871660009081526028602052604090205460ff16156135bb57600f5460ff161561349857600a546010546134579190614429565b421015801561346d575067016345785d8a000047115b801561347d5750600b5460095410155b156134905761348b866137e7565b613498565b613498613926565b600d5460ff1615806134b057506134ad61197e565b85115b1561350157600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0388161790555b42601055601a54156135bb57602554601a5461351d90876142be565b61352791906143e6565b9050601a54601c548261353a91906142be565b61354491906143e6565b602360008282546135559190614429565b9091555050601a54601b5461356a90836142be565b61357491906143e6565b602260008282546135859190614429565b9091555050601a54601d5461359a90836142be565b6135a491906143e6565b602460008282546135b59190614429565b90915550505b80156135cc576135cc87308361290e565b6135d6818661478e565b94505b6135e487878761290e565b50505050505050565b60006135f830611515565b9050600060245460225460235461360f9190614429565b6136199190614429565b9050811580613626575080155b1561362f575050565b60135461363d90600a6142be565b8211156136555760135461365290600a6142be565b91505b6000806002836023548661366991906142be565b61367391906143e6565b61367d91906143e6565b90504761369261368d838761478e565b6139a2565b600061369e824761478e565b90506000819050600060026023546136b691906143e6565b6136c0908861478e565b6022546136cd90856142be565b6136d791906143e6565b9050600060026023546136ea91906143e6565b6136f4908961478e565b60245461370190866142be565b61370b91906143e6565b90506137178183614429565b613721908461478e565b600060238190556022819055602455925085158015906137415750600083115b15613750576137508684613afc565b81156137ae576014546040516001600160a01b03909116908390600081818185875af1925050503d80600081146137a3576040519150601f19603f3d011682016040523d82523d6000602084013e6137a8565b606091505b50909750505b505050505050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055611bf68282613b96565b6000806138286001600b546137fb86611515565b61380661dead611515565b61380f30611515565b6138199190614429565b6138239190614429565b613bf9565b6009805491925060009161383d90849061478e565b8154811061384d5761384d6143fa565b6000918252602082200154600e546001600160a01b03909116925060649061387590476142be565b61387f91906143e6565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b50909450508315613913576040516001600160a01b0383169082907f1c444bb01a9b6955e398726cbe1735a08d6bf37c11d2a5054a3925bf66f3156b90600090a35b61391f60096000613d1a565b5050505050565b601254600090819061394a90600190600a906137fb906001600160a01b0316611515565b905060006139596002476143e6565b50506040516000915081903090819083908181818181875af1925050503d80600081146135e4576040519150601f19603f3d011682016040523d82523d6000602084013e6135e4565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139d7576139d76143fa565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a549190614477565b81600181518110613a6757613a676143fa565b6001600160a01b039283166020918202929092010152601154613a8d91309116846127ea565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ac69085906000908690309042906004016147a5565b600060405180830381600087803b158015613ae057600080fd5b505af1158015613af4573d6000803e3d6000fd5b505050505050565b601154613b149030906001600160a01b0316846127ea565b60115460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b539030908790600090819061dead90429060040161469d565b60606040518083038185885af1158015613b71573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061391f91906146d8565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c613c4591906143e6565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c613c8a91906143e6565b613c944442614429565b613c9e9190614429565b613ca89190614429565b613cb29190614429565b613cbc9190614429565b613cc69190614429565b604051602001613cd891815260200190565b60408051601f198184030181529190528051602090910120905084613cfd818661478e565b613d0790836147e1565b613d119190614429565b95945050505050565b5080546000825590600052602060002090810190613d389190613d3b565b50565b5b80821115613d505760008155600101613d3c565b5090565b600060208284031215613d6657600080fd5b5035919050565b600060208083528351808285015260005b81811015613d9a57858101830151858201604001528201613d7e565b81811115613dac576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613d3857600080fd5b60008060408385031215613dea57600080fd5b8235613df581613dc2565b946020939093013593505050565b600060208284031215613e1557600080fd5b8135613e2081613dc2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e6657613e66613e27565b604052919050565b600067ffffffffffffffff821115613e8857613e88613e27565b5060051b60200190565b600082601f830112613ea357600080fd5b81356020613eb8613eb383613e6e565b613e3d565b82815260059290921b84018101918181019086841115613ed757600080fd5b8286015b84811015613efb578035613eee81613dc2565b8352918301918301613edb565b509695505050505050565b600082601f830112613f1757600080fd5b81356020613f27613eb383613e6e565b82815260059290921b84018101918181019086841115613f4657600080fd5b8286015b84811015613efb5780358352918301918301613f4a565b60008060408385031215613f7457600080fd5b823567ffffffffffffffff80821115613f8c57600080fd5b613f9886838701613e92565b93506020850135915080821115613fae57600080fd5b50613fbb85828601613f06565b9150509250929050565b600080600060608486031215613fda57600080fd5b8335613fe581613dc2565b92506020840135613ff581613dc2565b929592945050506040919091013590565b8015158114613d3857600080fd5b60006020828403121561402657600080fd5b8135613e2081614006565b6000806040838503121561404457600080fd5b823561404f81613dc2565b9150602083013561405f81614006565b809150509250929050565b60008060006060848603121561407f57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156140a957600080fd5b82356140b481613dc2565b9150602083013561405f81613dc2565b6000806000604084860312156140d957600080fd5b833567ffffffffffffffff808211156140f157600080fd5b818601915086601f83011261410557600080fd5b81358181111561411457600080fd5b8760208260051b850101111561412957600080fd5b6020928301955093505084013561413f81614006565b809150509250925092565b6000806040838503121561415d57600080fd5b823567ffffffffffffffff81111561417457600080fd5b61418085828601613e92565b95602094909401359450505050565b6000602082840312156141a157600080fd5b813567ffffffffffffffff8111156141b857600080fd5b6141c484828501613e92565b949350505050565b6000806000606084860312156141e157600080fd5b833567ffffffffffffffff808211156141f957600080fd5b61420587838801613e92565b9450602086013591508082111561421b57600080fd5b5061422886828701613f06565b925050604084013590509250925092565b600181811c9082168061424d57607f821691505b60208210810361426d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142d8576142d86142a8565b500290565b600181815b808511156143185781600019048211156142fe576142fe6142a8565b8085161561430b57918102915b93841c93908002906142e2565b509250929050565b60008261432f57506001610efc565b8161433c57506000610efc565b8160018114614352576002811461435c57614378565b6001915050610efc565b60ff84111561436d5761436d6142a8565b50506001821b610efc565b5060208310610133831016604e8410600b841016171561439b575081810a610efc565b6143a583836142dd565b80600019048211156143b9576143b96142a8565b029392505050565b6000613e2060ff841683614320565b634e487b7160e01b600052601260045260246000fd5b6000826143f5576143f56143d0565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201614422576144226142a8565b5060010190565b6000821982111561443c5761443c6142a8565b500190565b60006020828403121561445357600080fd5b5051919050565b60006020828403121561446c57600080fd5b8151613e2081614006565b60006020828403121561448957600080fd5b8151613e2081613dc2565b600081518084526020808501945080840160005b838110156144cd5781516001600160a01b0316875295820195908201906001016144a8565b509495945050505050565b8281526040602082015260006141c46040830184614494565b6000602080838503121561450457600080fd5b825167ffffffffffffffff81111561451b57600080fd5b8301601f8101851361452c57600080fd5b805161453a613eb382613e6e565b81815260059190911b8201830190838101908783111561455957600080fd5b928401925b828410156145775783518252928401929084019061455e565b979650505050505050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146ed57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156147a0576147a06142a8565b500390565b85815284602082015260a0604082015260006147c460a0830186614494565b6001600160a01b0394909416606083015250608001529392505050565b6000826147f0576147f06143d0565b50069056fea26469706673582212208a73b24a74d060780ee32f2328d4ae7612e406be48e31840d6e86b1a6d32834364736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104985760003560e01c806382aa7c6811610260578063c2cca05e11610144578063e2f45605116100c1578063f498cceb11610085578063f498cceb14610d9e578063f5648a4f14610dbe578063f637434214610dd3578063f66bf22914610de9578063fb002c9714610dff578063fbe8d4b714610e1557600080fd5b8063e2f4560514610d1c578063ead010ae14610d32578063ee40166e14610d52578063f11a24d314610d68578063f2fde38b14610d7e57600080fd5b8063dc3f0d0f11610108578063dc3f0d0f14610c50578063dd4aca8914610c70578063dd62ed3e14610c90578063e0bf7fd114610cd6578063e2277cbb14610d0657600080fd5b8063c2cca05e14610bc4578063c8b6887514610be4578063d257b34f14610c04578063d73792a914610c24578063d85ba06314610c3a57600080fd5b8063a457c2d7116101dd578063ac8e3328116101a1578063ac8e332814610af5578063af401ef714610b15578063b62496f514610b35578063bbc0c74214610b65578063c024666814610b84578063c17b5b8c14610ba457600080fd5b8063a457c2d714610a59578063a62068ce14610a79578063a80dcfee14610a8f578063a9059cbb14610abf578063aa4bde2814610adf57600080fd5b806395d89b411161022457806395d89b41146109de5780639a7a23d6146109f35780639bc738cf14610a135780639cb9cd4814610a295780639d2aee5f14610a3f57600080fd5b806382aa7c68146109555780638366e79a1461097557806388e765ff146109955780638b28cd19146109ab5780638da5cb5b146109c057600080fd5b80634985746f116103875780636902ca6111610304578063715018a6116102c8578063715018a6146108c057806371a03d55146108d55780637455df62146108ea578063751039fc146109005780637571336a146109155780638095d5641461093557600080fd5b80636902ca611461083f5780636a486a8e146108545780636b0a894c1461086a5780636ddd17131461088057806370a08231146108a057600080fd5b806351f205e41161034b57806351f205e4146107cd57806351fb012d146107e257806358a6d531146107fc5780635a139dd41461081357806366d602ae1461082957600080fd5b80634985746f14610737578063499b83941461074d5780634a62bb651461076d5780634f77f6c01461078757806350e838e51461079d57600080fd5b80631f6df910116104155780632be32b61116103d95780632be32b61146106a5578063313ce567146106c557806339509351146106e15780633a2bbd6f14610701578063452ed4f11461071757600080fd5b80631f6df9101461061a5780632307b4411461063057806323684d241461065057806323b872dd14610665578063285b97471461068557600080fd5b806310d5de531161045c57806310d5de531461057557806316d7b6f3146105a557806318160ddd146105c55780631a8145bb146105e45780631c499ab0146105fa57600080fd5b806306132a94146104a457806306fdde03146104e15780630758d92414610503578063095ea7b3146105235780630c69dfae1461055357600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104c46104bf366004613d54565b610e2f565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104ed57600080fd5b506104f6610e59565b6040516104d89190613d6d565b34801561050f57600080fd5b506011546104c4906001600160a01b031681565b34801561052f57600080fd5b5061054361053e366004613dd7565b610eeb565b60405190151581526020016104d8565b34801561055f57600080fd5b5061057361056e366004613d54565b610f02565b005b34801561058157600080fd5b50610543610590366004613e03565b60276020526000908152604090205460ff1681565b3480156105b157600080fd5b506105736105c0366004613d54565b610f61565b3480156105d157600080fd5b506002545b6040519081526020016104d8565b3480156105f057600080fd5b506105d660235481565b34801561060657600080fd5b50610573610615366004613d54565b610fab565b34801561062657600080fd5b506105d6600a5481565b34801561063c57600080fd5b5061057361064b366004613f61565b61106a565b34801561065c57600080fd5b50610573611111565b34801561067157600080fd5b50610543610680366004613fc5565b611170565b34801561069157600080fd5b506105736106a0366004614014565b61121a565b3480156106b157600080fd5b506105736106c0366004613d54565b611257565b3480156106d157600080fd5b50604051601281526020016104d8565b3480156106ed57600080fd5b506105436106fc366004613dd7565b61130f565b34801561070d57600080fd5b506105d6600b5481565b34801561072357600080fd5b506012546104c4906001600160a01b031681565b34801561074357600080fd5b506105d660105481565b34801561075957600080fd5b50610573610768366004613e03565b61134b565b34801561077957600080fd5b506019546105439060ff1681565b34801561079357600080fd5b506105d6601f5481565b3480156107a957600080fd5b506105436107b8366004613e03565b60176020526000908152604090205460ff1681565b3480156107d957600080fd5b506105736113aa565b3480156107ee57600080fd5b50602a546105439060ff1681565b34801561080857600080fd5b506016544310610543565b34801561081f57600080fd5b506105d6601b5481565b34801561083557600080fd5b506105d660075481565b34801561084b57600080fd5b506105736114b3565b34801561086057600080fd5b506105d6601e5481565b34801561087657600080fd5b506105d660185481565b34801561088c57600080fd5b506019546105439062010000900460ff1681565b3480156108ac57600080fd5b506105d66108bb366004613e03565b611515565b3480156108cc57600080fd5b50610573611530565b3480156108e157600080fd5b506009546105d6565b3480156108f657600080fd5b506105d6601d5481565b34801561090c57600080fd5b506105736115a4565b34801561092157600080fd5b50610573610930366004614031565b611603565b34801561094157600080fd5b5061057361095036600461406a565b6116cb565b34801561096157600080fd5b50610573610970366004613d54565b61176f565b34801561098157600080fd5b50610543610990366004614096565b6117fb565b3480156109a157600080fd5b506105d660065481565b3480156109b757600080fd5b506105d661197e565b3480156109cc57600080fd5b506005546001600160a01b03166104c4565b3480156109ea57600080fd5b506104f6611b2f565b3480156109ff57600080fd5b50610573610a0e366004614031565b611b3e565b348015610a1f57600080fd5b506105d660245481565b348015610a3557600080fd5b506105d660215481565b348015610a4b57600080fd5b50600f546105439060ff1681565b348015610a6557600080fd5b50610543610a74366004613dd7565b611c32565b348015610a8557600080fd5b506105d660165481565b348015610a9b57600080fd5b50610543610aaa366004613e03565b60296020526000908152604090205460ff1681565b348015610acb57600080fd5b50610543610ada366004613dd7565b611ccb565b348015610aeb57600080fd5b506105d660085481565b348015610b0157600080fd5b50610573610b103660046140c4565b611cd8565b348015610b2157600080fd5b50610573610b3036600461414a565b611d79565b348015610b4157600080fd5b50610543610b50366004613e03565b60286020526000908152604090205460ff1681565b348015610b7157600080fd5b5060195461054390610100900460ff1681565b348015610b9057600080fd5b50610573610b9f366004614031565b611f8e565b348015610bb057600080fd5b50610573610bbf36600461406a565b612017565b348015610bd057600080fd5b50610573610bdf366004613d54565b6120bb565b348015610bf057600080fd5b50610573610bff366004614014565b61215b565b348015610c1057600080fd5b50610573610c1f366004613d54565b612198565b348015610c3057600080fd5b506105d660255481565b348015610c4657600080fd5b506105d6601a5481565b348015610c5c57600080fd5b50610573610c6b366004613d54565b612222565b348015610c7c57600080fd5b50610573610c8b36600461418f565b6122da565b348015610c9c57600080fd5b506105d6610cab366004614096565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ce257600080fd5b50610543610cf1366004613e03565b60266020526000908152604090205460ff1681565b348015610d1257600080fd5b506105d6600e5481565b348015610d2857600080fd5b506105d660135481565b348015610d3e57600080fd5b50610573610d4d3660046141cc565b612369565b348015610d5e57600080fd5b506105d660155481565b348015610d7457600080fd5b506105d6601c5481565b348015610d8a57600080fd5b50610573610d99366004613e03565b612648565b348015610daa57600080fd5b50610573610db9366004613d54565b612733565b348015610dca57600080fd5b50610573612762565b348015610ddf57600080fd5b506105d660205481565b348015610df557600080fd5b506105d6600c5481565b348015610e0b57600080fd5b506105d660225481565b348015610e2157600080fd5b50600d546105439060ff1681565b60098181548110610e3f57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060038054610e6890614239565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9490614239565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b6000610ef83384846127ea565b5060015b92915050565b6005546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c90614273565b60405180910390fd5b600081118015610f4757506101688111155b610f5057600080fd5b610f5b81603c6142be565b600a5550565b6005546001600160a01b03163314610f8b5760405162461bcd60e51b8152600401610f2c90614273565b600a8110158015610f9d575060648111155b610fa657600080fd5b600e55565b6005546001600160a01b03163314610fd55760405162461bcd60e51b8152600401610f2c90614273565b610fe16012600a6143c1565b612710610fed60025490565b610ff89060196142be565b61100291906143e6565b61100c91906143e6565b81101561101857600080fd5b6110246012600a6143c1565b61102e90826142be565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b031633146110945760405162461bcd60e51b8152600401610f2c90614273565b80518251146110a257600080fd5b6102588251106110b157600080fd5b60005b825181101561110c576110fa338483815181106110d3576110d36143fa565b60200260200101518484815181106110ed576110ed6143fa565b602002602001015161290e565b8061110481614410565b9150506110b4565b505050565b6005546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610f2c90614273565b602a805460ff191690556040517f444d749f50748902c0619b43347eae6dc13e5be86420419b6c606e6e3fc9822290600090a1565b600061117d848484612a63565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112025760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f2c565b61120f85338584036127ea565b506001949350505050565b6005546001600160a01b031633146112445760405162461bcd60e51b8152600401610f2c90614273565b600d805460ff1916911515919091179055565b6005546001600160a01b031633146112815760405162461bcd60e51b8152600401610f2c90614273565b61128d6012600a6143c1565b61271061129960025490565b6112a49060196142be565b6112ae91906143e6565b6112b891906143e6565b8110156112c457600080fd5b6112d06012600a6143c1565b6112da90826142be565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de410099060200161105f565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ef8918590611346908690614429565b6127ea565b6005546001600160a01b031633146113755760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b03811661138857600080fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113d45760405162461bcd60e51b8152600401610f2c90614273565b6013546113e030611515565b1015611456576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f2c565b6012805460ff60a01b1916600160a01b1790556114716135ed565b6012805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146114dd5760405162461bcd60e51b8152600401610f2c90614273565b6019805460ff191660011790556040517f10d778167c503500f2cf7f114521871c5ab9b6ac8e63dfc9284c73e05d94b49690600090a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461155a5760405162461bcd60e51b8152600401610f2c90614273565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115ce5760405162461bcd60e51b8152600401610f2c90614273565b6019805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b0316331461162d5760405162461bcd60e51b8152600401610f2c90614273565b806116a0576012546001600160a01b03908116908316036116a05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f2c565b6001600160a01b03919091166000908152602760205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146116f55760405162461bcd60e51b8152600401610f2c90614273565b601b839055601c829055601d8190558061170f8385614429565b6117199190614429565b601a8190556105dc101561110c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f2c565b6005546001600160a01b031633146117995760405162461bcd60e51b8152600401610f2c90614273565b601654156117a657600080fd5b6019805462ffff001916620101001790554360158190556117c8908290614429565b601655426010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118285760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b03831661183b57600080fd5b306001600160a01b0384160361185057600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bb9190614441565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611932919061445a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b604080516002808252606082018352600092839291906020830190803683375050601154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a109190614477565b81600081518110611a2357611a236143fa565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611a5757611a576143fa565b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601154600c5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611ac69186906004016144d8565b600060405180830381865afa158015611ae3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b0b91908101906144f1565b905080600181518110611b2057611b206143fa565b60200260200101519250505090565b606060048054610e6890614239565b6005546001600160a01b03163314611b685760405162461bcd60e51b8152600401610f2c90614273565b6012546001600160a01b0390811690831603611bec5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f2c565b611bf682826137b9565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611cb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f2c565b611cc133858584036127ea565b5060019392505050565b6000610ef8338484612a63565b6005546001600160a01b03163314611d025760405162461bcd60e51b8152600401610f2c90614273565b60005b82811015611d73578160176000868685818110611d2457611d246143fa565b9050602002016020810190611d399190613e03565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611d6b81614410565b915050611d05565b50505050565b6005546001600160a01b03163314611da35760405162461bcd60e51b8152600401610f2c90614273565b601954610100900460ff1615611dcb5760405162461bcd60e51b8152600401610f2c90614582565b600a8110611deb5760405162461bcd60e51b8152600401610f2c906145cd565b60005b8251811015611e4c576000838281518110611e0b57611e0b6143fa565b6020908102919091018101516001600160a01b03166000908152602990915260409020805460ff191660011790555080611e4481614410565b915050611dee565b506019805462ffff00191662010100179055436015819055611e6f908290614429565b6016556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a160004711611ebb5760405162461bcd60e51b8152600401610f2c90614614565b6000611ec630611515565b11611ee35760405162461bcd60e51b8152600401610f2c90614657565b601154611efe9030906001600160a01b031661134682611515565b6011546001600160a01b031663f305d7194730611f1a81611515565b60008033426040518863ffffffff1660e01b8152600401611f409695949392919061469d565b60606040518083038185885af1158015611f5e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f8391906146d8565b505042601055505050565b6005546001600160a01b03163314611fb85760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b038216600081815260266020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146120415760405162461bcd60e51b8152600401610f2c90614273565b601f839055602082905560218190558061205b8385614429565b6120659190614429565b601e8190556107d0101561110c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f2c565b6005546001600160a01b031633146120e55760405162461bcd60e51b8152600401610f2c90614273565b600281101580156120f7575060648111155b6121565760405162461bcd60e51b815260206004820152602a60248201527f4d757374206b656570206e756d626572206f662062757973206265747765656e6044820152690203220616e64203130360b41b6064820152608401610f2c565b600b55565b6005546001600160a01b031633146121855760405162461bcd60e51b8152600401610f2c90614273565b600f805460ff1916911515919091179055565b6005546001600160a01b031633146121c25760405162461bcd60e51b8152600401610f2c90614273565b620186a06121cf60025490565b6121da9060016142be565b6121e491906143e6565b8110156121f057600080fd5b6103e86121fc60025490565b6122079060016142be565b61221191906143e6565b81111561221d57600080fd5b601355565b6005546001600160a01b0316331461224c5760405162461bcd60e51b8152600401610f2c90614273565b6122586012600a6143c1565b61271061226460025490565b61226f9060196142be565b61227991906143e6565b61228391906143e6565b81101561228f57600080fd5b61229b6012600a6143c1565b6122a590826142be565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161105f565b6005546001600160a01b031633146123045760405162461bcd60e51b8152600401610f2c90614273565b60005b8151811015612365576000828281518110612324576123246143fa565b6020908102919091018101516001600160a01b03166000908152602990915260409020805460ff19166001179055508061235d81614410565b915050612307565b5050565b6005546001600160a01b031633146123935760405162461bcd60e51b8152600401610f2c90614273565b601954610100900460ff16156123bb5760405162461bcd60e51b8152600401610f2c90614582565b600a81106123db5760405162461bcd60e51b8152600401610f2c906145cd565b815183511461242c5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f2c565b6101f483511061249d5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203530302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f2c565b60005b83518110156125055760008482815181106124bd576124bd6143fa565b6020026020010151905060008483815181106124db576124db6143fa565b602002602001015190506124f033838361290e565b505080806124fd90614410565b9150506124a0565b506019805462ffff00191662010100179055436015819055612528908290614429565b6016556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116125745760405162461bcd60e51b8152600401610f2c90614614565b600061257f30611515565b1161259c5760405162461bcd60e51b8152600401610f2c90614657565b6011546125b79030906001600160a01b031661134682611515565b6011546001600160a01b031663f305d71947306125d381611515565b60008033426040518863ffffffff1660e01b81526004016125f99695949392919061469d565b60606040518083038185885af1158015612617573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061263c91906146d8565b50504260105550505050565b6005546001600160a01b031633146126725760405162461bcd60e51b8152600401610f2c90614273565b6001600160a01b0381166126d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f2c565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461275d5760405162461bcd60e51b8152600401610f2c90614273565b600c55565b6005546001600160a01b0316331461278c5760405162461bcd60e51b8152600401610f2c90614273565b60006127a06005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d73565b6001600160a01b03831661284c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f2c565b6001600160a01b0382166128ad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f2c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129345760405162461bcd60e51b8152600401610f2c90614706565b6001600160a01b03821661295a5760405162461bcd60e51b8152600401610f2c9061474b565b6001600160a01b038316600090815260208190526040902054818110156129d25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f2c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a09908490614429565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a5591815260200190565b60405180910390a350505050565b6001600160a01b038316612a895760405162461bcd60e51b8152600401610f2c90614706565b6001600160a01b038216612aaf5760405162461bcd60e51b8152600401610f2c9061474b565b60008111612b0e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610f2c565b601954610100900460ff16612ba1576001600160a01b03831660009081526026602052604090205460ff1680612b5c57506001600160a01b03821660009081526026602052604090205460ff165b612ba15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f2c565b6016544310158015612bb557506000601654115b15612c85576001600160a01b03831660009081526017602052604090205460ff161580612bef57506005546001600160a01b038381169116145b80612c0457506001600160a01b03821661dead145b612c855760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f2c565b602a5460ff1615612e69576001600160a01b03831660009081526028602052604090205460ff168015612cd157506001600160a01b03821660009081526027602052604090205460ff16155b15612d43576001600160a01b03821660009081526029602052604090205460ff16612d3e5760405162461bcd60e51b815260206004820152601e60248201527f596f752077616c6c6574206973206e6f742077686974656c69737465642100006044820152606401610f2c565b612e69565b6001600160a01b03821660009081526028602052604090205460ff168015612d8457506001600160a01b03831660009081526027602052604090205460ff16155b15612de55760405162461bcd60e51b815260206004820152602b60248201527f4e6f2073656c6c696e6720616c6c6f77656420647572696e672077686974656c60448201526a69737420706572696f642160a81b6064820152608401610f2c565b6001600160a01b03821660009081526027602052604090205460ff16612e695760405162461bcd60e51b815260206004820152603360248201527f4e6f20746f6b656e207472616e736665727320616c6c6f77656420647572696e604482015272672077686974656c69737420706572696f642160681b6064820152608401610f2c565b60195460ff161561302b576005546001600160a01b03848116911614801590612ea057506005546001600160a01b03838116911614155b8015612eb457506001600160a01b03821615155b8015612ecb57506001600160a01b03821661dead14155b8015612ef057506001600160a01b03831660009081526026602052604090205460ff16155b8015612f1557506001600160a01b03821660009081526026602052604090205460ff16155b1561302b576001600160a01b03831660009081526028602052604090205460ff168015612f5b57506001600160a01b03821660009081526027602052604090205460ff16155b15612f9557600654811115612f6f57600080fd5b600854612f7b83611515565b612f859083614429565b1115612f9057600080fd5b61302b565b6001600160a01b03821660009081526028602052604090205460ff168015612fd657506001600160a01b03831660009081526027602052604090205460ff16155b15612fea57600754811115612f9057600080fd5b6001600160a01b03821660009081526027602052604090205460ff1661302b5760085461301683611515565b6130209083614429565b111561302b57600080fd5b600061303630611515565b60135490915081108015908190613055575060195462010000900460ff165b801561306b5750601254600160a01b900460ff16155b801561309057506001600160a01b03851660009081526028602052604090205460ff16155b80156130b557506001600160a01b03851660009081526026602052604090205460ff16155b80156130da57506001600160a01b03841660009081526026602052604090205460ff16155b15613108576012805460ff60a01b1916600160a01b1790556130fa6135ed565b6012805460ff60a01b191690555b6001600160a01b03851660009081526026602052604090205460019060ff168061314a57506001600160a01b03851660009081526026602052604090205460ff165b15613153575060005b600081156135d9576016544310806131995750670c7d713b49da000060065461317c919061478e565b851015801561319957504360165460056131969190614429565b10155b80156131bd57506001600160a01b03871660009081526028602052604090205460ff165b80156131e257506001600160a01b03861660009081526028602052604090205460ff16155b1561335f57601654431061320957600160066000828254613203919061478e565b90915550505b6001600160a01b03861660009081526017602052604090205460ff166132a4576001600160a01b0386166000908152601760205260408120805460ff191660019081179091556018805491929091613262908490614429565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b601a541561335a57602554601a546132bc90876142be565b6132c691906143e6565b9050601a54601c54826132d991906142be565b6132e391906143e6565b602360008282546132f49190614429565b9091555050601a54601b5461330990836142be565b61331391906143e6565b602260008282546133249190614429565b9091555050601a54601d5461333990836142be565b61334391906143e6565b602460008282546133549190614429565b90915550505b6135bb565b6001600160a01b03861660009081526028602052604090205460ff16801561338957506000601e54115b1561341b57602554601e5461339e90876142be565b6133a891906143e6565b9050601e54602054826133bb91906142be565b6133c591906143e6565b602360008282546133d69190614429565b9091555050601e54601f546133eb90836142be565b6133f591906143e6565b602260008282546134069190614429565b9091555050601e5460215461333990836142be565b6001600160a01b03871660009081526028602052604090205460ff16156135bb57600f5460ff161561349857600a546010546134579190614429565b421015801561346d575067016345785d8a000047115b801561347d5750600b5460095410155b156134905761348b866137e7565b613498565b613498613926565b600d5460ff1615806134b057506134ad61197e565b85115b1561350157600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0388161790555b42601055601a54156135bb57602554601a5461351d90876142be565b61352791906143e6565b9050601a54601c548261353a91906142be565b61354491906143e6565b602360008282546135559190614429565b9091555050601a54601b5461356a90836142be565b61357491906143e6565b602260008282546135859190614429565b9091555050601a54601d5461359a90836142be565b6135a491906143e6565b602460008282546135b59190614429565b90915550505b80156135cc576135cc87308361290e565b6135d6818661478e565b94505b6135e487878761290e565b50505050505050565b60006135f830611515565b9050600060245460225460235461360f9190614429565b6136199190614429565b9050811580613626575080155b1561362f575050565b60135461363d90600a6142be565b8211156136555760135461365290600a6142be565b91505b6000806002836023548661366991906142be565b61367391906143e6565b61367d91906143e6565b90504761369261368d838761478e565b6139a2565b600061369e824761478e565b90506000819050600060026023546136b691906143e6565b6136c0908861478e565b6022546136cd90856142be565b6136d791906143e6565b9050600060026023546136ea91906143e6565b6136f4908961478e565b60245461370190866142be565b61370b91906143e6565b90506137178183614429565b613721908461478e565b600060238190556022819055602455925085158015906137415750600083115b15613750576137508684613afc565b81156137ae576014546040516001600160a01b03909116908390600081818185875af1925050503d80600081146137a3576040519150601f19603f3d011682016040523d82523d6000602084013e6137a8565b606091505b50909750505b505050505050505050565b6001600160a01b0382166000908152602860205260409020805460ff1916821515179055611bf68282613b96565b6000806138286001600b546137fb86611515565b61380661dead611515565b61380f30611515565b6138199190614429565b6138239190614429565b613bf9565b6009805491925060009161383d90849061478e565b8154811061384d5761384d6143fa565b6000918252602082200154600e546001600160a01b03909116925060649061387590476142be565b61387f91906143e6565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146138cc576040519150601f19603f3d011682016040523d82523d6000602084013e6138d1565b606091505b50909450508315613913576040516001600160a01b0383169082907f1c444bb01a9b6955e398726cbe1735a08d6bf37c11d2a5054a3925bf66f3156b90600090a35b61391f60096000613d1a565b5050505050565b601254600090819061394a90600190600a906137fb906001600160a01b0316611515565b905060006139596002476143e6565b50506040516000915081903090819083908181818181875af1925050503d80600081146135e4576040519150601f19603f3d011682016040523d82523d6000602084013e6135e4565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106139d7576139d76143fa565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a549190614477565b81600181518110613a6757613a676143fa565b6001600160a01b039283166020918202929092010152601154613a8d91309116846127ea565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790613ac69085906000908690309042906004016147a5565b600060405180830381600087803b158015613ae057600080fd5b505af1158015613af4573d6000803e3d6000fd5b505050505050565b601154613b149030906001600160a01b0316846127ea565b60115460405163f305d71960e01b81526001600160a01b039091169063f305d719908390613b539030908790600090819061dead90429060040161469d565b60606040518083038185885af1158015613b71573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061391f91906146d8565b6001600160a01b038216600081815260276020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c613c4591906143e6565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c613c8a91906143e6565b613c944442614429565b613c9e9190614429565b613ca89190614429565b613cb29190614429565b613cbc9190614429565b613cc69190614429565b604051602001613cd891815260200190565b60408051601f198184030181529190528051602090910120905084613cfd818661478e565b613d0790836147e1565b613d119190614429565b95945050505050565b5080546000825590600052602060002090810190613d389190613d3b565b50565b5b80821115613d505760008155600101613d3c565b5090565b600060208284031215613d6657600080fd5b5035919050565b600060208083528351808285015260005b81811015613d9a57858101830151858201604001528201613d7e565b81811115613dac576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613d3857600080fd5b60008060408385031215613dea57600080fd5b8235613df581613dc2565b946020939093013593505050565b600060208284031215613e1557600080fd5b8135613e2081613dc2565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e6657613e66613e27565b604052919050565b600067ffffffffffffffff821115613e8857613e88613e27565b5060051b60200190565b600082601f830112613ea357600080fd5b81356020613eb8613eb383613e6e565b613e3d565b82815260059290921b84018101918181019086841115613ed757600080fd5b8286015b84811015613efb578035613eee81613dc2565b8352918301918301613edb565b509695505050505050565b600082601f830112613f1757600080fd5b81356020613f27613eb383613e6e565b82815260059290921b84018101918181019086841115613f4657600080fd5b8286015b84811015613efb5780358352918301918301613f4a565b60008060408385031215613f7457600080fd5b823567ffffffffffffffff80821115613f8c57600080fd5b613f9886838701613e92565b93506020850135915080821115613fae57600080fd5b50613fbb85828601613f06565b9150509250929050565b600080600060608486031215613fda57600080fd5b8335613fe581613dc2565b92506020840135613ff581613dc2565b929592945050506040919091013590565b8015158114613d3857600080fd5b60006020828403121561402657600080fd5b8135613e2081614006565b6000806040838503121561404457600080fd5b823561404f81613dc2565b9150602083013561405f81614006565b809150509250929050565b60008060006060848603121561407f57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156140a957600080fd5b82356140b481613dc2565b9150602083013561405f81613dc2565b6000806000604084860312156140d957600080fd5b833567ffffffffffffffff808211156140f157600080fd5b818601915086601f83011261410557600080fd5b81358181111561411457600080fd5b8760208260051b850101111561412957600080fd5b6020928301955093505084013561413f81614006565b809150509250925092565b6000806040838503121561415d57600080fd5b823567ffffffffffffffff81111561417457600080fd5b61418085828601613e92565b95602094909401359450505050565b6000602082840312156141a157600080fd5b813567ffffffffffffffff8111156141b857600080fd5b6141c484828501613e92565b949350505050565b6000806000606084860312156141e157600080fd5b833567ffffffffffffffff808211156141f957600080fd5b61420587838801613e92565b9450602086013591508082111561421b57600080fd5b5061422886828701613f06565b925050604084013590509250925092565b600181811c9082168061424d57607f821691505b60208210810361426d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156142d8576142d86142a8565b500290565b600181815b808511156143185781600019048211156142fe576142fe6142a8565b8085161561430b57918102915b93841c93908002906142e2565b509250929050565b60008261432f57506001610efc565b8161433c57506000610efc565b8160018114614352576002811461435c57614378565b6001915050610efc565b60ff84111561436d5761436d6142a8565b50506001821b610efc565b5060208310610133831016604e8410600b841016171561439b575081810a610efc565b6143a583836142dd565b80600019048211156143b9576143b96142a8565b029392505050565b6000613e2060ff841683614320565b634e487b7160e01b600052601260045260246000fd5b6000826143f5576143f56143d0565b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201614422576144226142a8565b5060010190565b6000821982111561443c5761443c6142a8565b500190565b60006020828403121561445357600080fd5b5051919050565b60006020828403121561446c57600080fd5b8151613e2081614006565b60006020828403121561448957600080fd5b8151613e2081613dc2565b600081518084526020808501945080840160005b838110156144cd5781516001600160a01b0316875295820195908201906001016144a8565b509495945050505050565b8281526040602082015260006141c46040830184614494565b6000602080838503121561450457600080fd5b825167ffffffffffffffff81111561451b57600080fd5b8301601f8101851361452c57600080fd5b805161453a613eb382613e6e565b81815260059190911b8201830190838101908783111561455957600080fd5b928401925b828410156145775783518252928401929084019061455e565b979650505050505050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b60208082526026908201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206040820152650d8c2eadcc6d60d31b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146ed57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156147a0576147a06142a8565b500390565b85815284602082015260a0604082015260006147c460a0830186614494565b6001600160a01b0394909416606083015250608001529392505050565b6000826147f0576147f06143d0565b50069056fea26469706673582212208a73b24a74d060780ee32f2328d4ae7612e406be48e31840d6e86b1a6d32834364736f6c634300080f0033

Deployed Bytecode Sourcemap

12340:26415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:26;;;;;;;;;;-1:-1:-1;12494:26:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:1;;;345:51;;333:2;318:18;12494:26:0;;;;;;;;4780:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12847:27::-;;;;;;;;;;-1:-1:-1;12847:27:0;;;;-1:-1:-1;;;;;12847:27:0;;;5694:169;;;;;;;;;;-1:-1:-1;5694:169:0;;;;;:::i;:::-;;:::i;:::-;;;1857:14:1;;1850:22;1832:41;;1820:2;1805:18;5694:169:0;1692:187:1;30895:210:0;;;;;;;;;;-1:-1:-1;30895:210:0;;;;;:::i;:::-;;:::i;:::-;;13954:64;;;;;;;;;;-1:-1:-1;13954:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31113:166;;;;;;;;;;-1:-1:-1;31113:166:0;;;;;:::i;:::-;;:::i;5101:108::-;;;;;;;;;;-1:-1:-1;5189:12:0;;5101:108;;;2282:25:1;;;2270:2;2255:18;5101:108:0;2136:177:1;13683:33:0;;;;;;;;;;;;;;;;19446:258;;;;;;;;;;-1:-1:-1;19446:258:0;;;;;:::i;:::-;;:::i;12527:53::-;;;;;;;;;;;;;;;;20234:450;;;;;;;;;;-1:-1:-1;20234:450:0;;;;;:::i;:::-;;:::i;18306:132::-;;;;;;;;;;;;;:::i;5871:492::-;;;;;;;;;;-1:-1:-1;5871:492:0;;;;;:::i;:::-;;:::i;31407:105::-;;;;;;;;;;-1:-1:-1;31407:105:0;;;;;:::i;:::-;;:::i;18918:252::-;;;;;;;;;;-1:-1:-1;18918:252:0;;;;;:::i;:::-;;:::i;5000:93::-;;;;;;;;;;-1:-1:-1;5000:93:0;;5083:2;5899:36:1;;5887:2;5872:18;5000:93:0;5757:184:1;6371:215:0;;;;;;;;;;-1:-1:-1;6371:215:0;;;;;:::i;:::-;;:::i;12587:42::-;;;;;;;;;;;;;;;;12881:21;;;;;;;;;;-1:-1:-1;12881:21:0;;;;-1:-1:-1;;;;;12881:21:0;;;12807:31;;;;;;;;;;;;;;;;34784:195;;;;;;;;;;-1:-1:-1;34784:195:0;;;;;:::i;:::-;;:::i;13222:33::-;;;;;;;;;;-1:-1:-1;13222:33:0;;;;;;;;13527:32;;;;;;;;;;;;;;;;13132:49;;;;;;;;;;-1:-1:-1;13132:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35031:312;;;;;;;;;;;;;:::i;14318:35::-;;;;;;;;;;-1:-1:-1;14318:35:0;;;;;;;;28625:120;;;;;;;;;;-1:-1:-1;28719:18:0;;28704:12;:33;28625:120;;13380:31;;;;;;;;;;;;;;;;12420:28;;;;;;;;;;;;;;;;18180:114;;;;;;;;;;;;;:::i;13492:28::-;;;;;;;;;;;;;;;;13188:25;;;;;;;;;;;;;;;;13302:31;;;;;;;;;;-1:-1:-1;13302:31:0;;;;;;;;;;;5217:127;;;;;;;;;;-1:-1:-1;5217:127:0;;;;;:::i;:::-;;:::i;8856:150::-;;;;;;;;;;;;;:::i;38649:103::-;;;;;;;;;;-1:-1:-1;38728:9:0;:16;38649:103;;13455:28;;;;;;;;;;;;;;;;18057:115;;;;;;;;;;;;;:::i;20906:260::-;;;;;;;;;;-1:-1:-1;20906:260:0;;;;;:::i;:::-;;:::i;21733:391::-;;;;;;;;;;-1:-1:-1;21733:391:0;;;;;:::i;:::-;;:::i;17632:369::-;;;;;;;;;;-1:-1:-1;17632:369:0;;;;;:::i;:::-;;:::i;34196:394::-;;;;;;;;;;-1:-1:-1;34196:394:0;;;;;:::i;:::-;;:::i;12386:27::-;;;;;;;;;;;;;;;;28753:344;;;;;;;;;;;;;:::i;8642:79::-;;;;;;;;;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;8707:6:0;8642:79;;4888:104;;;;;;;;;;;;;:::i;21174:295::-;;;;;;;;;;-1:-1:-1;21174:295:0;;;;;:::i;:::-;;:::i;13723:31::-;;;;;;;;;;;;;;;;13604:29;;;;;;;;;;;;;;;;12767:33;;;;;;;;;;-1:-1:-1;12767:33:0;;;;;;;;6594:413;;;;;;;;;;-1:-1:-1;6594:413:0;;;;;:::i;:::-;;:::i;13092:33::-;;;;;;;;;;;;;;;;14261:50;;;;;;;;;;-1:-1:-1;14261:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5352:175;;;;;;;;;;-1:-1:-1;5352:175:0;;;;;:::i;:::-;;:::i;12455:30::-;;;;;;;;;;;;;;;;18680:226;;;;;;;;;;-1:-1:-1;18680:226:0;;;;;:::i;:::-;;:::i;37316:1317::-;;;;;;;;;;-1:-1:-1;37316:1317:0;;;;;:::i;:::-;;:::i;14176:58::-;;;;;;;;;;-1:-1:-1;14176:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13262:33;;;;;;;;;;-1:-1:-1;13262:33:0;;;;;;;;;;;22540:182;;;;;;;;;;-1:-1:-1;22540:182:0;;;;;:::i;:::-;;:::i;22132:400::-;;;;;;;;;;-1:-1:-1;22132:400:0;;;;;:::i;:::-;;:::i;20692:202::-;;;;;;;;;;-1:-1:-1;20692:202:0;;;;;:::i;:::-;;:::i;18569:103::-;;;;;;;;;;-1:-1:-1;18569:103:0;;;;;:::i;:::-;;:::i;19774:233::-;;;;;;;;;;-1:-1:-1;19774:233:0;;;;;:::i;:::-;;:::i;13763:38::-;;;;;;;;;;;;;;;;13346:27;;;;;;;;;;;;;;;;19182:256;;;;;;;;;;-1:-1:-1;19182:256:0;;;;;:::i;:::-;;:::i;37046:258::-;;;;;;;;;;-1:-1:-1;37046:258:0;;;;;:::i;:::-;;:::i;5535:151::-;;;;;;;;;;-1:-1:-1;5535:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5651:18:0;;;5624:7;5651:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5535:151;13895:52;;;;;;;;;;-1:-1:-1;13895:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12723:37;;;;;;;;;;;;;;;;12939:33;;;;;;;;;;;;;;;;35351:1687;;;;;;;;;;-1:-1:-1;35351:1687:0;;;;;:::i;:::-;;:::i;13015:37::-;;;;;;;;;;;;;;;;13418:30;;;;;;;;;;;;;;;;9014:244;;;;;;;;;;-1:-1:-1;9014:244:0;;;;;:::i;:::-;;:::i;31287:112::-;;;;;;;;;;-1:-1:-1;31287:112:0;;;;;:::i;:::-;;:::i;34619:157::-;;;;;;;;;;;;;:::i;13566:31::-;;;;;;;;;;;;;;;;12636:39;;;;;;;;;;;;;;;;13642:34;;;;;;;;;;;;;;;;12682;;;;;;;;;;-1:-1:-1;12682:34:0;;;;;;;;12494:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12494:26:0;;-1:-1:-1;12494:26:0;:::o;4780:100::-;4834:13;4867:5;4860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4780:100;:::o;5694:169::-;5777:4;5794:39;306:10;5817:7;5826:6;5794:8;:39::i;:::-;-1:-1:-1;5851:4:0;5694:169;;;;;:::o;30895:210::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;;;;;;;;;31007:1:::1;30991:13;:17;:41;;;;;31029:3;31012:13;:20;;30991:41;30983:50;;;::::0;::::1;;31072:25;:13:::0;31088:9:::1;31072:25;:::i;:::-;31044;:53:::0;-1:-1:-1;30895:210:0:o;31113:166::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;31212:2:::1;31201:7;:13;;:31;;;;;31229:3;31218:7;:14;;31201:31;31193:40;;;::::0;::::1;;31244:17;:27:::0;31113:166::o;19446:258::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19567:16:::1;5083:2:::0;19567::::1;:16;:::i;:::-;19557:5;19536:13;5189:12:::0;;;5101:108;19536:13:::1;:18;::::0;19552:2:::1;19536:18;:::i;:::-;:26;;;;:::i;:::-;19535:49;;;;:::i;:::-;19525:6;:59;;19517:68;;;::::0;::::1;;19624:16;5083:2:::0;19624::::1;:16;:::i;:::-;19614:27;::::0;:6;:27:::1;:::i;:::-;19596:15;:45:::0;;;19657:39:::1;::::0;2282:25:1;;;19657:39:0::1;::::0;2270:2:1;2255:18;19657:39:0::1;;;;;;;;19446:258:::0;:::o;20234:450::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;20376:15:::1;:22;20358:7;:14;:40;20350:49;;;::::0;::::1;;20435:3;20418:7;:14;:20;20410:29;;;::::0;::::1;;20552:9;20548:129;20571:7;:14;20567:1;:18;20548:129;;;20606:59;20622:10;20634:7;20642:1;20634:10;;;;;;;;:::i;:::-;;;;;;;20646:15;20662:1;20646:18;;;;;;;;:::i;:::-;;;;;;;20606:15;:59::i;:::-;20587:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20548:129;;;;20234:450:::0;;:::o;18306:132::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18371:16:::1;:24:::0;;-1:-1:-1;;18371:24:0::1;::::0;;18411:19:::1;::::0;::::1;::::0;18390:5:::1;::::0;18411:19:::1;18306:132::o:0;5871:492::-;6011:4;6028:36;6038:6;6046:9;6057:6;6028:9;:36::i;:::-;-1:-1:-1;;;;;6104:19:0;;6077:24;6104:19;;;:11;:19;;;;;;;;306:10;6104:33;;;;;;;;6156:26;;;;6148:79;;;;-1:-1:-1;;;6148:79:0;;12409:2:1;6148:79:0;;;12391:21:1;12448:2;12428:18;;;12421:30;12487:34;12467:18;;;12460:62;-1:-1:-1;;;12538:18:1;;;12531:38;12586:19;;6148:79:0;12207:404:1;6148:79:0;6263:57;6272:6;306:10;6313:6;6294:16;:25;6263:8;:57::i;:::-;-1:-1:-1;6351:4:0;;5871:492;-1:-1:-1;;;;5871:492:0:o;31407:105::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;31479:14:::1;:25:::0;;-1:-1:-1;;31479:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31407:105::o;18918:252::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19042:16:::1;5083:2:::0;19042::::1;:16;:::i;:::-;19032:5;19011:13;5189:12:::0;;;5101:108;19011:13:::1;:18;::::0;19027:2:::1;19011:18;:::i;:::-;:26;;;;:::i;:::-;19010:49;;;;:::i;:::-;19000:6;:59;;18992:68;;;::::0;::::1;;19096:16;5083:2:::0;19096::::1;:16;:::i;:::-;19086:27;::::0;:6;:27:::1;:::i;:::-;19071:12;:42:::0;;;19129:33:::1;::::0;2282:25:1;;;19129:33:0::1;::::0;2270:2:1;2255:18;19129:33:0::1;2136:177:1::0;6371:215:0;306:10;6459:4;6508:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6508:34:0;;;;;;;;;;6459:4;;6476:80;;6499:7;;6508:47;;6545:10;;6508:47;:::i;:::-;6476:8;:80::i;34784:195::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34880:32:0;::::1;34872:41;;;::::0;::::1;;34924:17;:47:::0;;-1:-1:-1;;;;;;34924:47:0::1;-1:-1:-1::0;;;;;34924:47:0;;;::::1;::::0;;;::::1;::::0;;34784:195::o;35031:312::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;35122:18:::1;;35094:24;35112:4;35094:9;:24::i;:::-;:46;;35086:123;;;::::0;;-1:-1:-1;;;35086:123:0;;12951:2:1;35086:123:0::1;::::0;::::1;12933:21:1::0;12970:18;;;12963:30;;;;13029:34;13009:18;;;13002:62;13100:34;13080:18;;;13073:62;13152:19;;35086:123:0::1;12749:428:1::0;35086:123:0::1;35220:8;:15:::0;;-1:-1:-1;;;;35220:15:0::1;-1:-1:-1::0;;;35220:15:0::1;::::0;;35246:10:::1;:8;:10::i;:::-;35267:8;:16:::0;;-1:-1:-1;;;;35267:16:0::1;::::0;;35299:36:::1;::::0;35319:15:::1;2282:25:1::0;;35299:36:0::1;::::0;2270:2:1;2255:18;35299:36:0::1;;;;;;;35031:312::o:0;18180:114::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18234:14:::1;:21:::0;;-1:-1:-1;;18234:21:0::1;18251:4;18234:21;::::0;;18271:15:::1;::::0;::::1;::::0;18234:14:::1;::::0;18271:15:::1;18180:114::o:0;5217:127::-;-1:-1:-1;;;;;5318:18:0;5291:7;5318:18;;;;;;;;;;;;5217:127::o;8856:150::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;8949:6:::1;::::0;8928:40:::1;::::0;8965:1:::1;::::0;-1:-1:-1;;;;;8949:6:0::1;::::0;8928:40:::1;::::0;8965:1;;8928:40:::1;8979:6;:19:::0;;-1:-1:-1;;;;;;8979:19:0::1;::::0;;8856:150::o;18057:115::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18111:14:::1;:22:::0;;-1:-1:-1;;18111:22:0::1;::::0;;18149:15:::1;::::0;::::1;::::0;18128:5:::1;::::0;18149:15:::1;18057:115::o:0;20906:260::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;21002:4:::1;20998:104;;21040:6;::::0;-1:-1:-1;;;;;21040:6:0;;::::1;21030:16:::0;;::::1;::::0;21022:68:::1;;;::::0;-1:-1:-1;;;21022:68:0;;13384:2:1;21022:68:0::1;::::0;::::1;13366:21:1::0;13423:2;13403:18;;;13396:30;13462:34;13442:18;;;13435:62;-1:-1:-1;;;13513:18:1;;;13506:37;13560:19;;21022:68:0::1;13182:403:1::0;21022:68:0::1;-1:-1:-1::0;;;;;21112:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21112:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20906:260::o;21733:391::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;21854:16:::1;:33:::0;;;21898:15:::1;:31:::0;;;21940:13:::1;:27:::0;;;21956:11;21993:34:::1;21916:13:::0;21873:14;21993:34:::1;:::i;:::-;:50;;;;:::i;:::-;21978:12;:65:::0;;;22078:4:::1;-1:-1:-1::0;22062:20:0::1;22054:62;;;::::0;-1:-1:-1;;;22054:62:0;;13792:2:1;22054:62:0::1;::::0;::::1;13774:21:1::0;13831:2;13811:18;;;13804:30;13870:31;13850:18;;;13843:59;13919:18;;22054:62:0::1;13590:353:1::0;17632:369:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;17719:18:::1;::::0;:23;17711:32:::1;;;::::0;::::1;;17754:13;:20:::0;;-1:-1:-1;;17785:18:0;;;;;17835:12:::1;17814:18;:33:::0;;;17879:37:::1;::::0;17900:16;;17879:37:::1;:::i;:::-;17858:18;:58:::0;17946:15:::1;17927:16;:34:::0;17977:16:::1;::::0;::::1;::::0;-1:-1:-1;;17977:16:0::1;17632:369:::0;:::o;34196:394::-;8769:6;;34283:10;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34314:20:0;::::1;34306:29;;;::::0;::::1;;34372:4;-1:-1:-1::0;;;;;34354:23:0;::::1;::::0;34346:32:::1;;;::::0;::::1;;34416:39;::::0;-1:-1:-1;;;34416:39:0;;34449:4:::1;34416:39;::::0;::::1;345:51:1::0;34389:24:0::1;::::0;-1:-1:-1;;;;;34416:24:0;::::1;::::0;::::1;::::0;318:18:1;;34416:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34474:46;::::0;-1:-1:-1;;;34474:46:0;;-1:-1:-1;;;;;14329:32:1;;;34474:46:0::1;::::0;::::1;14311:51:1::0;14378:18;;;14371:34;;;34389:66:0;;-1:-1:-1;34474:23:0;;::::1;::::0;::::1;::::0;14284:18:1;;34474:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34536;::::0;;-1:-1:-1;;;;;14329:32:1;;14311:51;;14393:2;14378:18;;14371:34;;;34466:54:0;;-1:-1:-1;34536:46:0::1;::::0;14284:18:1;34536:46:0::1;;;;;;;34295:295;34196:394:::0;;;;:::o;28753:344::-;28846:16;;;28860:1;28846:16;;;;;;;;28803:7;;;;28846:16;28860:1;28846:16;;;;;;;;-1:-1:-1;;28883:9:0;;:16;;;-1:-1:-1;;;28883:16:0;;;;28822:40;;-1:-1:-1;;;;;;28883:9:0;;;;:14;;-1:-1:-1;28883:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28873:4;28878:1;28873:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;28873:26:0;;;-1:-1:-1;;;;;28873:26:0;;;;;28928:4;28910;28915:1;28910:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28910:23:0;;;;:7;;;;;;;;;;:23;28981:16;;;28995:1;28981:16;;;;;;;;28954:24;;28981:16;;28995:1;;28981:16;;;;;;;;;-1:-1:-1;;29018:9:0;;29042:12;;29018:43;;-1:-1:-1;;;29018:43:0;;28954;;-1:-1:-1;;;;;;29018:9:0;;;;:23;;:43;;29056:4;;29018:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29018:43:0;;;;;;;;;;;;:::i;:::-;29008:53;;29079:7;29087:1;29079:10;;;;;;;;:::i;:::-;;;;;;;29072:17;;;;28753:344;:::o;4888:104::-;4944:13;4977:7;4970:14;;;;;:::i;21174:295::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;21283:6:::1;::::0;-1:-1:-1;;;;;21283:6:0;;::::1;21275:14:::0;;::::1;::::0;21267:84:::1;;;::::0;-1:-1:-1;;;21267:84:0;;16813:2:1;21267:84:0::1;::::0;::::1;16795:21:1::0;16852:2;16832:18;;;16825:30;16891:34;16871:18;;;16864:62;16962:27;16942:18;;;16935:55;17007:19;;21267:84:0::1;16611:421:1::0;21267:84:0::1;21364:41;21393:4;21399:5;21364:28;:41::i;:::-;21421:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21421:40:0;::::1;::::0;::::1;::::0;;;::::1;21174:295:::0;;:::o;6594:413::-;306:10;6687:4;6731:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6731:34:0;;;;;;;;;;6784:35;;;;6776:85;;;;-1:-1:-1;;;6776:85:0;;17239:2:1;6776:85:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:35;17413:19;;6776:85:0;17037:401:1;6776:85:0;6897:67;306:10;6920:7;6948:15;6929:16;:34;6897:8;:67::i;:::-;-1:-1:-1;6995:4:0;;6594:413;-1:-1:-1;;;6594:413:0:o;5352:175::-;5438:4;5455:42;306:10;5479:9;5490:6;5455:9;:42::i;18680:226::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18792:9:::1;18788:111;18807:18:::0;;::::1;18788:111;;;18877:10;18846:16;:28;18863:7;;18871:1;18863:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18846:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18846:28:0;:41;;-1:-1:-1;;18846:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18827:3;::::1;::::0;::::1;:::i;:::-;;;;18788:111;;;;18680:226:::0;;;:::o;37316:1317::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;37436:13:::1;::::0;::::1;::::0;::::1;;;37435:14;37427:70;;;;-1:-1:-1::0;;;37427:70:0::1;;;;;;;:::i;:::-;37535:2;37516:16;:21;37508:73;;;;-1:-1:-1::0;;;37508:73:0::1;;;;;;;:::i;:::-;37598:9;37594:145;37617:7;:14;37613:1;:18;37594:145;;;37652:14;37669:7;37677:1;37669:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;37694:26:0::1;;::::0;;;:18:::1;:26:::0;;;;;;:33;;-1:-1:-1;;37694:33:0::1;37723:4;37694:33;::::0;;-1:-1:-1;37633:3:0;::::1;::::0;::::1;:::i;:::-;;;;37594:145;;;-1:-1:-1::0;37795:13:0::1;:20:::0;;-1:-1:-1;;37826:18:0;;;;;37876:12:::1;37855:18;:33:::0;;;37920:37:::1;::::0;37941:16;;37920:37:::1;:::i;:::-;37899:18;:58:::0;37973:16:::1;::::0;::::1;::::0;;;::::1;38069:1;38045:21;:25;38037:73;;;;-1:-1:-1::0;;;38037:73:0::1;;;;;;;:::i;:::-;38158:1;38131:24;38149:4;38131:9;:24::i;:::-;:28;38123:79;;;;-1:-1:-1::0;;;38123:79:0::1;;;;;;;:::i;:::-;38247:9;::::0;38215:69:::1;::::0;38232:4:::1;::::0;-1:-1:-1;;;;;38247:9:0::1;38259:24;38232:4:::0;38259:9:::1;:24::i;38215:69::-;38295:9;::::0;-1:-1:-1;;;;;38295:9:0::1;:25;38328:21;38373:4;38393:24;38373:4:::0;38393:9:::1;:24::i;:::-;38432:1;38475::::0;38526:10:::1;38552:15;38295:283;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;38610:15:0::1;38591:16;:34:::0;-1:-1:-1;;;37316:1317:0:o;22540:182::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22625:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22625:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22680:34;;1832:41:1;;;22680:34:0::1;::::0;1805:18:1;22680:34:0::1;;;;;;;22540:182:::0;;:::o;22132:400::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;22254:17:::1;:34:::0;;;22299:16:::1;:32:::0;;;22342:14:::1;:28:::0;;;22359:11;22397:36:::1;22318:13:::0;22274:14;22397:36:::1;:::i;:::-;:53;;;;:::i;:::-;22381:13;:69:::0;;;22486:4:::1;-1:-1:-1::0;22469:21:0::1;22461:63;;;::::0;-1:-1:-1;;;22461:63:0;;20199:2:1;22461:63:0::1;::::0;::::1;20181:21:1::0;20238:2;20218:18;;;20211:30;20277:31;20257:18;;;20250:59;20326:18;;22461:63:0::1;19997:353:1::0;20692:202:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;20785:1:::1;20778:3;:8;;:22;;;;;20797:3;20790;:10;;20778:22;20770:77;;;::::0;-1:-1:-1;;;20770:77:0;;20557:2:1;20770:77:0::1;::::0;::::1;20539:21:1::0;20596:2;20576:18;;;20569:30;20635:34;20615:18;;;20608:62;-1:-1:-1;;;20686:18:1;;;20679:40;20736:19;;20770:77:0::1;20355:406:1::0;20770:77:0::1;20858:22;:28:::0;20692:202::o;18569:103::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;18640:14:::1;:24:::0;;-1:-1:-1;;18640:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18569:103::o;19774:233::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19897:6:::1;19877:13;5189:12:::0;;;5101:108;19877:13:::1;:17;::::0;19893:1:::1;19877:17;:::i;:::-;:26;;;;:::i;:::-;19864:9;:39;;19856:48;;;::::0;::::1;;19955:4;19935:13;5189:12:::0;;;5101:108;19935:13:::1;:17;::::0;19951:1:::1;19935:17;:::i;:::-;:24;;;;:::i;:::-;19922:9;:37;;19914:46;;;::::0;::::1;;19970:18;:30:::0;19774:233::o;19182:256::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;19307:16:::1;5083:2:::0;19307::::1;:16;:::i;:::-;19297:5;19276:13;5189:12:::0;;;5101:108;19276:13:::1;:18;::::0;19292:2:::1;19276:18;:::i;:::-;:26;;;;:::i;:::-;19275:49;;;;:::i;:::-;19265:6;:59;;19257:68;;;::::0;::::1;;19362:16;5083:2:::0;19362::::1;:16;:::i;:::-;19352:27;::::0;:6;:27:::1;:::i;:::-;19336:13;:43:::0;;;19395:35:::1;::::0;2282:25:1;;;19395:35:0::1;::::0;2270:2:1;2255:18;19395:35:0::1;2136:177:1::0;37046:258:0;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;37155:9:::1;37150:147;37174:7;:14;37170:1;:18;37150:147;;;37210:14;37227:7;37235:1;37227:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;37252:26:0::1;;::::0;;;:18:::1;:26:::0;;;;;;:33;;-1:-1:-1;;37252:33:0::1;37281:4;37252:33;::::0;;-1:-1:-1;37190:3:0;::::1;::::0;::::1;:::i;:::-;;;;37150:147;;;;37046:258:::0;:::o;35351:1687::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;35492:13:::1;::::0;::::1;::::0;::::1;;;35491:14;35483:70;;;;-1:-1:-1::0;;;35483:70:0::1;;;;;;;:::i;:::-;35591:2;35572:16;:21;35564:73;;;;-1:-1:-1::0;;;35564:73:0::1;;;;;;;:::i;:::-;35676:15;:22;35658:7;:14;:40;35650:83;;;::::0;-1:-1:-1;;;35650:83:0;;20968:2:1;35650:83:0::1;::::0;::::1;20950:21:1::0;21007:2;20987:18;;;20980:30;21046:32;21026:18;;;21019:60;21096:18;;35650:83:0::1;20766:354:1::0;35650:83:0::1;35769:3;35752:7;:14;:20;35744:87;;;::::0;-1:-1:-1;;;35744:87:0;;21327:2:1;35744:87:0::1;::::0;::::1;21309:21:1::0;21366:2;21346:18;;;21339:30;21405:34;21385:18;;;21378:62;-1:-1:-1;;;21456:18:1;;;21449:52;21518:19;;35744:87:0::1;21125:418:1::0;35744:87:0::1;35944:9;35940:205;35963:7;:14;35959:1;:18;35940:205;;;35998:14;36015:7;36023:1;36015:10;;;;;;;;:::i;:::-;;;;;;;35998:27;;36040:14;36057:15;36073:1;36057:18;;;;;;;;:::i;:::-;;;;;;;36040:35;;36090:43;36106:10;36118:6;36126;36090:15;:43::i;:::-;35983:162;;35979:3;;;;;:::i;:::-;;;;35940:205;;;-1:-1:-1::0;36192:13:0::1;:20:::0;;-1:-1:-1;;36223:18:0;;;;;36273:12:::1;36252:18;:33:::0;;;36317:37:::1;::::0;36338:16;;36317:37:::1;:::i;:::-;36296:18;:58:::0;36370:16:::1;::::0;::::1;::::0;;;::::1;36466:1;36442:21;:25;36434:73;;;;-1:-1:-1::0;;;36434:73:0::1;;;;;;;:::i;:::-;36555:1;36528:24;36546:4;36528:9;:24::i;:::-;:28;36520:79;;;;-1:-1:-1::0;;;36520:79:0::1;;;;;;;:::i;:::-;36644:9;::::0;36612:69:::1;::::0;36629:4:::1;::::0;-1:-1:-1;;;;;36644:9:0::1;36656:24;36629:4:::0;36656:9:::1;:24::i;36612:69::-;36692:9;::::0;-1:-1:-1;;;;;36692:9:0::1;:25;36725:21;36770:4;36790:24;36770:4:::0;36790:9:::1;:24::i;:::-;36829:1;36872::::0;36923:10:::1;36949:15;36692:283;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37015:15:0::1;36996:16;:34:::0;-1:-1:-1;;;;35351:1687:0:o;9014:244::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9103:22:0;::::1;9095:73;;;::::0;-1:-1:-1;;;9095:73:0;;21750:2:1;9095:73:0::1;::::0;::::1;21732:21:1::0;21789:2;21769:18;;;21762:30;21828:34;21808:18;;;21801:62;-1:-1:-1;;;21879:18:1;;;21872:36;21925:19;;9095:73:0::1;21548:402:1::0;9095:73:0::1;9205:6;::::0;9184:38:::1;::::0;-1:-1:-1;;;;;9184:38:0;;::::1;::::0;9205:6:::1;::::0;9184:38:::1;::::0;9205:6:::1;::::0;9184:38:::1;9233:6;:17:::0;;-1:-1:-1;;;;;;9233:17:0::1;-1:-1:-1::0;;;;;9233:17:0;;;::::1;::::0;;;::::1;::::0;;9014:244::o;31287:112::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;31370:12:::1;:21:::0;31287:112::o;34619:157::-;8769:6;;-1:-1:-1;;;;;8769:6:0;306:10;8769:22;8761:67;;;;-1:-1:-1;;;8761:67:0;;;;;;;:::i;:::-;34677:12:::1;34721:7;8707:6:::0;;-1:-1:-1;;;;;8707:6:0;;8642:79;34721:7:::1;-1:-1:-1::0;;;;;34713:21:0::1;34742;34713:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7931:380:::0;-1:-1:-1;;;;;8067:19:0;;8059:68;;;;-1:-1:-1;;;8059:68:0;;22367:2:1;8059:68:0;;;22349:21:1;22406:2;22386:18;;;22379:30;22445:34;22425:18;;;22418:62;-1:-1:-1;;;22496:18:1;;;22489:34;22540:19;;8059:68:0;22165:400:1;8059:68:0;-1:-1:-1;;;;;8146:21:0;;8138:68;;;;-1:-1:-1;;;8138:68:0;;22772:2:1;8138:68:0;;;22754:21:1;22811:2;22791:18;;;22784:30;22850:34;22830:18;;;22823:62;-1:-1:-1;;;22901:18:1;;;22894:32;22943:19;;8138:68:0;22570:398:1;8138:68:0;-1:-1:-1;;;;;8219:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8271:32;;2282:25:1;;;8271:32:0;;2255:18:1;8271:32:0;;;;;;;7931:380;;;:::o;7015:614::-;-1:-1:-1;;;;;7155:20:0;;7147:70;;;;-1:-1:-1;;;7147:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7236:23:0;;7228:71;;;;-1:-1:-1;;;7228:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7336:17:0;;7312:21;7336:17;;;;;;;;;;;7372:23;;;;7364:74;;;;-1:-1:-1;;;7364:74:0;;23985:2:1;7364:74:0;;;23967:21:1;24024:2;24004:18;;;23997:30;24063:34;24043:18;;;24036:62;-1:-1:-1;;;24114:18:1;;;24107:36;24160:19;;7364:74:0;23783:402:1;7364:74:0;-1:-1:-1;;;;;7474:17:0;;;:9;:17;;;;;;;;;;;7494:22;;;7474:42;;7538:20;;;;;;;;:30;;7510:6;;7474:9;7538:30;;7510:6;;7538:30;:::i;:::-;;;;;;;;7603:9;-1:-1:-1;;;;;7586:35:0;7595:6;-1:-1:-1;;;;;7586:35:0;;7614:6;7586:35;;;;2282:25:1;;2270:2;2255:18;;2136:177;7586:35:0;;;;;;;;7136:493;7015:614;;;:::o;22730:5887::-;-1:-1:-1;;;;;22830:18:0;;22822:68;;;;-1:-1:-1;;;22822:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22909:16:0;;22901:64;;;;-1:-1:-1;;;22901:64:0;;;;;;;:::i;:::-;22993:1;22984:6;:10;22976:61;;;;-1:-1:-1;;;22976:61:0;;24392:2:1;22976:61:0;;;24374:21:1;24431:2;24411:18;;;24404:30;24470:34;24450:18;;;24443:62;-1:-1:-1;;;24521:18:1;;;24514:36;24567:19;;22976:61:0;24190:402:1;22976:61:0;23062:13;;;;;;;23058:132;;-1:-1:-1;;;;;23099:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23128:23:0;;;;;;:19;:23;;;;;;;;23099:52;23091:87;;;;-1:-1:-1;;;23091:87:0;;24799:2:1;23091:87:0;;;24781:21:1;24838:2;24818:18;;;24811:30;-1:-1:-1;;;24857:18:1;;;24850:52;24919:18;;23091:87:0;24597:346:1;23091:87:0;28719:18;;28704:12;:33;23205:26;:52;;;;;23256:1;23235:18;;:22;23205:52;23202:231;;;-1:-1:-1;;;;;23282:22:0;;;;;;:16;:22;;;;;;;;23281:23;;:40;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;23308:13:0;;;8707:6;;23308:13;23281:40;:65;;;-1:-1:-1;;;;;;23325:21:0;;23339:6;23325:21;23281:65;23273:148;;;;-1:-1:-1;;;23273:148:0;;25150:2:1;23273:148:0;;;25132:21:1;25189:2;25169:18;;;25162:30;25228:34;25208:18;;;25201:62;25299:34;25279:18;;;25272:62;-1:-1:-1;;;25350:19:1;;;25343:37;25397:19;;23273:148:0;24948:474:1;23273:148:0;23449:16;;;;23445:624;;;-1:-1:-1;;;;;23506:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;23542:35:0;;;;;;:31;:35;;;;;;;;23541:36;23506:71;23502:544;;;-1:-1:-1;;;;;23606:22:0;;;;;;:18;:22;;;;;;;;23598:65;;;;-1:-1:-1;;;23598:65:0;;25629:2:1;23598:65:0;;;25611:21:1;25668:2;25648:18;;;25641:30;25707:32;25687:18;;;25680:60;25757:18;;23598:65:0;25427:354:1;23598:65:0;23502:544;;;-1:-1:-1;;;;;23728:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;23762:37:0;;;;;;:31;:37;;;;;;;;23761:38;23728:71;23724:322;;;23820:53;;-1:-1:-1;;;23820:53:0;;25988:2:1;23820:53:0;;;25970:21:1;26027:2;26007:18;;;26000:30;26066:34;26046:18;;;26039:62;-1:-1:-1;;;26117:18:1;;;26110:41;26168:19;;23820:53:0;25786:407:1;23724:322:0;-1:-1:-1;;;;;23914:35:0;;;;;;:31;:35;;;;;;;;23909:137;;23969:61;;-1:-1:-1;;;23969:61:0;;26400:2:1;23969:61:0;;;26382:21:1;26439:2;26419:18;;;26412:30;26478:34;26458:18;;;26451:62;-1:-1:-1;;;26529:18:1;;;26522:49;26588:19;;23969:61:0;26198:415:1;23909:137:0;24092:14;;;;24089:878;;;8707:6;;-1:-1:-1;;;;;24126:15:0;;;8707:6;;24126:15;;;;:32;;-1:-1:-1;8707:6:0;;-1:-1:-1;;;;;24145:13:0;;;8707:6;;24145:13;;24126:32;:52;;;;-1:-1:-1;;;;;;24162:16:0;;;;24126:52;:77;;;;-1:-1:-1;;;;;;24182:21:0;;24196:6;24182:21;;24126:77;:107;;;;-1:-1:-1;;;;;;24208:25:0;;;;;;:19;:25;;;;;;;;24207:26;24126:107;:135;;;;-1:-1:-1;;;;;;24238:23:0;;;;;;:19;:23;;;;;;;;24237:24;24126:135;24122:834;;;-1:-1:-1;;;;;24346:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24382:35:0;;;;;;:31;:35;;;;;;;;24381:36;24346:71;24342:599;;;24464:12;;24454:6;:22;;24446:31;;;;;;24538:15;;24521:13;24531:2;24521:9;:13::i;:::-;24512:22;;:6;:22;:::i;:::-;:41;;24504:50;;;;;;24342:599;;;-1:-1:-1;;;;;24631:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24665:37:0;;;;;;:31;:37;;;;;;;;24664:38;24631:71;24627:314;;;24749:13;;24739:6;:23;;24731:32;;;;;24627:314;-1:-1:-1;;;;;24812:35:0;;;;;;:31;:35;;;;;;;;24807:134;;24905:15;;24888:13;24898:2;24888:9;:13::i;:::-;24879:22;;:6;:22;:::i;:::-;:41;;24871:50;;;;;;24979:28;25010:24;25028:4;25010:9;:24::i;:::-;25094:18;;24979:55;;-1:-1:-1;25070:42:0;;;;;;;25128:22;;-1:-1:-1;25139:11:0;;;;;;;25128:22;:35;;;;-1:-1:-1;25155:8:0;;-1:-1:-1;;;25155:8:0;;;;25154:9;25128:35;:71;;;;-1:-1:-1;;;;;;25168:31:0;;;;;;:25;:31;;;;;;;;25167:32;25128:71;:101;;;;-1:-1:-1;;;;;;25204:25:0;;;;;;:19;:25;;;;;;;;25203:26;25128:101;:129;;;;-1:-1:-1;;;;;;25234:23:0;;;;;;:19;:23;;;;;;;;25233:24;25128:129;25125:232;;;25274:8;:15;;-1:-1:-1;;;;25274:15:0;-1:-1:-1;;;25274:15:0;;;25304:10;:8;:10::i;:::-;25329:8;:16;;-1:-1:-1;;;;25329:16:0;;;25125:232;-1:-1:-1;;;;;25494:25:0;;25376:12;25494:25;;;:19;:25;;;;;;25391:4;;25494:25;;;:52;;-1:-1:-1;;;;;;25523:23:0;;;;;;:19;:23;;;;;;;;25494:52;25491:99;;;-1:-1:-1;25573:5:0;25491:99;25610:12;25714:7;25711:2853;;;28719:18;;28704:12;:33;25777:106;;;;25832:8;25817:12;;:23;;;;:::i;:::-;25807:6;:33;;:75;;;;;25870:12;25844:18;;25865:1;25844:22;;;;:::i;:::-;:38;;25807:75;25776:143;;;;-1:-1:-1;;;;;;25888:31:0;;;;;;:25;:31;;;;;;;;25776:143;:177;;;;-1:-1:-1;;;;;;25924:29:0;;;;;;:25;:29;;;;;;;;25923:30;25776:177;25773:2610;;;28719:18;;28704:12;:33;25991:330;;26300:1;26284:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;25991:330:0;-1:-1:-1;;;;;26345:20:0;;;;;;:16;:20;;;;;;;;26341:174;;-1:-1:-1;;;;;26389:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;26389:27:0;26412:4;26389:27;;;;;;26439:10;:15;;26412:4;;26439:10;;:15;;26412:4;;26439:15;:::i;:::-;;;;-1:-1:-1;;26482:13:0;;-1:-1:-1;;;;;363:32:1;;345:51;;26482:13:0;;333:2:1;318:18;26482:13:0;;;;;;;26341:174;26538:12;;:16;26535:355;;26611:15;;26595:12;;26585:23;;:6;:23;:::i;:::-;:41;;;;:::i;:::-;26578:48;;26696:12;;26678:15;;26671:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26649:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26780:12:0;;26761:16;;26754:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26731:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26858:12:0;;26842:13;;26835:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26815:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;26535:355:0;25773:2610;;;-1:-1:-1;;;;;26966:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27015:1;26999:13;;:17;26966:50;26962:1421;;;27070:15;;27053:13;;27043:24;;:6;:24;:::i;:::-;:42;;;;:::i;:::-;27036:49;;27152:13;;27133:16;;27126:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27104:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27234:13:0;;27214:17;;27207:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27184:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27310:13:0;;27293:14;;27286:21;;:4;:21;:::i;26962:1421::-;-1:-1:-1;;;;;27386:31:0;;;;;;:25;:31;;;;;;;;27383:1000;;;27440:14;;;;27437:365;;;27519:25;;27500:16;;:44;;;;:::i;:::-;27481:15;:63;;:100;;;;;27572:9;27548:21;:33;27481:100;:146;;;;-1:-1:-1;27605:22:0;;27585:9;:16;:42;;27481:146;27478:305;;;27655:17;27669:2;27655:13;:17::i;:::-;27478:305;;;27750:9;:7;:9::i;:::-;27826:14;;;;27825:15;;:47;;;27853:19;:17;:19::i;:::-;27844:6;:28;27825:47;27822:112;;;27896:9;:18;;;;;;;-1:-1:-1;27896:18:0;;;;;;;;-1:-1:-1;;;;;;27896:18:0;-1:-1:-1;;;;;27896:18:0;;;;;27822:112;27973:15;27954:16;:34;28012:12;;:16;28009:355;;28085:15;;28069:12;;28059:23;;:6;:23;:::i;:::-;:41;;;;:::i;:::-;28052:48;;28170:12;;28152:15;;28145:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;28123:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28254:12:0;;28235:16;;28228:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;28205:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28332:12:0;;28316:13;;28309:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;28289:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;28009:355:0;28426:8;;28423:93;;28458:42;28474:4;28488;28495;28458:15;:42::i;:::-;28538:14;28548:4;28538:14;;:::i;:::-;;;25711:2853;28576:33;28592:4;28598:2;28602:6;28576:15;:33::i;:::-;22809:5808;;;;22730:5887;;;:::o;32624:1564::-;32665:23;32691:24;32709:4;32691:9;:24::i;:::-;32665:50;;32726:25;32797:16;;32775:19;;32754:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;32726:87;-1:-1:-1;32837:20:0;;;:46;;-1:-1:-1;32861:22:0;;32837:46;32834:60;;;32886:7;;32624:1564::o;32834:60::-;32927:18;;:23;;32948:2;32927:23;:::i;:::-;32909:15;:41;32906:113;;;32984:18;;:23;;33005:2;32984:23;:::i;:::-;32966:41;;32906:113;33031:12;33113:23;33198:1;33178:17;33157:18;;33139:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;33113:86;-1:-1:-1;33245:21:0;33277:51;33294:33;33113:86;33294:15;:33;:::i;:::-;33277:16;:51::i;:::-;33349:18;33370:38;33394:14;33370:21;:38;:::i;:::-;33349:59;;33419:23;33445:10;33419:36;;33468:24;33571:1;33552:18;;:20;;;;:::i;:::-;33531:42;;:17;:42;:::i;:::-;33508:19;;33495:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;33468:106;;33585:21;33682:1;33663:18;;:20;;;;:::i;:::-;33642:42;;:17;:42;:::i;:::-;33622:16;;33609:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;33585:100;-1:-1:-1;33717:32:0;33585:100;33717:16;:32;:::i;:::-;33698:51;;;;:::i;:::-;33795:1;33774:18;:22;;;33807:19;:23;;;33841:16;:20;33698:51;-1:-1:-1;33885:19:0;;;;;:42;;;33926:1;33908:15;:19;33885:42;33882:119;;;33943:46;33956:15;33973;33943:12;:46::i;:::-;34016:20;;34013:124;;34073:17;;34065:60;;-1:-1:-1;;;;;34073:17:0;;;;34104:16;;34065:60;;;;34104:16;34073:17;34065:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34052:73:0;;-1:-1:-1;;34013:124:0;32652:1536;;;;;;;;;32624:1564::o;21477:248::-;-1:-1:-1;;;;;21560:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21560:39:0;;;;;;;21620;21560:31;:39;21620:26;:39::i;29669:578::-;29723:12;29785:17;29805:113;29812:1;29815:22;;29895;29913:2;29895:9;:22::i;:::-;29866:26;29884:6;29866:9;:26::i;:::-;29839:24;29857:4;29839:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;29805:6;:113::i;:::-;29946:9;29956:16;;29785:133;;-1:-1:-1;29929:14:0;;29956:26;;29785:133;;29956:26;:::i;:::-;29946:37;;;;;;;;:::i;:::-;;;;;;;;;;30037:17;;-1:-1:-1;;;;;29946:37:0;;;;-1:-1:-1;30057:3:0;;30013:41;;:21;:41;:::i;:::-;:47;;;;:::i;:::-;29994:66;;30092:6;-1:-1:-1;;;;;30084:20:0;30112:8;30084:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30071:54:0;;-1:-1:-1;;30136:77:0;;;;30167:34;;-1:-1:-1;;;;;30167:34:0;;;30184:8;;30167:34;;;;;30136:77;30223:16;30230:9;;30223:16;:::i;:::-;29712:535;;;;29669:578;:::o;29263:394::-;29432:6;;29301:12;;;;29344:97;;29351:1;;29354:2;;29414:26;;-1:-1:-1;;;;;29432:6:0;29414:9;:26::i;29344:97::-;29324:117;-1:-1:-1;29452:16:0;29471:25;29495:1;29471:21;:25;:::i;:::-;-1:-1:-1;;29608:41:0;;29507:14;;-1:-1:-1;29507:14:0;;29532:4;;;;29507:14;;;29608:41;29507:14;29608:41;29507:14;29532:4;29608:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31522:573;31674:16;;;31688:1;31674:16;;;;;;;;31650:21;;31674:16;;;;;;;;;;-1:-1:-1;31674:16:0;31650:40;;31719:4;31701;31706:1;31701:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31701:23:0;;;:7;;;;;;;;;;:23;;;;31745:9;;:16;;;-1:-1:-1;;;31745:16:0;;;;:9;;;;;:14;;:16;;;;;31701:7;;31745:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31735:4;31740:1;31735:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31735:26:0;;;:7;;;;;;;;;:26;31806:9;;31774:56;;31791:4;;31806:9;31818:11;31774:8;:56::i;:::-;31869:9;;:218;;-1:-1:-1;;;31869:218:0;;-1:-1:-1;;;;;31869:9:0;;;;:60;;:218;;31944:11;;31869:9;;32014:4;;32041;;32061:15;;31869:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31577:518;31522:573;:::o;32107:509::-;32287:9;;32255:56;;32272:4;;-1:-1:-1;;;;;32287:9:0;32299:11;32255:8;:56::i;:::-;32354:9;;:254;;-1:-1:-1;;;32354:254:0;;-1:-1:-1;;;;;32354:9:0;;;;:25;;32387:9;;32354:254;;32420:4;;32440:11;;32354:9;;;;32560:6;;32582:15;;32354:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20019:207::-;-1:-1:-1;;;;;20107:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20107:52:0;;;;;;;;;;20175:43;;27503:51:1;;;27570:18;;;27563:50;20175:43:0;;27476:18:1;20175:43:0;;;;;;;20019:207;;:::o;30255:632::-;30674:28;;-1:-1:-1;;30691:10:0;27773:2:1;27769:15;27765:53;30674:28:0;;;27753:66:1;30334:7:0;;;;30786:5;;30750:12;;30709:15;;27835:12:1;;30674:28:0;;;;;;;;;;;;30664:39;;;;;;30656:48;;30655:70;;;;:::i;:::-;30536:32;;-1:-1:-1;;30553:14:0;27773:2:1;27769:15;27765:53;30536:32:0;;;27753:66:1;30616:14:0;;30575:15;;27835:12:1;;30536:32:0;;;;;;;;;;;;30526:43;;;;;;30518:52;;30517:74;;;;:::i;:::-;30458:34;30476:16;30458:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;30419:391;;;;;;28237:19:1;;28281:2;28272:12;;28108:182;30419:391:0;;;;-1:-1:-1;;30419:391:0;;;;;;;;;30391:434;;30419:391;30391:434;;;;;-1:-1:-1;30875:4:0;30862:9;30875:4;30862:2;:9;:::i;:::-;30854:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;30847:32;30255:632;-1:-1:-1;;;;;30255:632:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;407:597::-;519:4;548:2;577;566:9;559:21;609:6;603:13;652:6;647:2;636:9;632:18;625:34;677:1;687:140;701:6;698:1;695:13;687:140;;;796:14;;;792:23;;786:30;762:17;;;781:2;758:26;751:66;716:10;;687:140;;;845:6;842:1;839:13;836:91;;;915:1;910:2;901:6;890:9;886:22;882:31;875:42;836:91;-1:-1:-1;988:2:1;967:15;-1:-1:-1;;963:29:1;948:45;;;;995:2;944:54;;407:597;-1:-1:-1;;;407:597:1:o;1236:131::-;-1:-1:-1;;;;;1311:31:1;;1301:42;;1291:70;;1357:1;1354;1347:12;1372:315;1440:6;1448;1501:2;1489:9;1480:7;1476:23;1472:32;1469:52;;;1517:1;1514;1507:12;1469:52;1556:9;1543:23;1575:31;1600:5;1575:31;:::i;:::-;1625:5;1677:2;1662:18;;;;1649:32;;-1:-1:-1;;;1372:315:1:o;1884:247::-;1943:6;1996:2;1984:9;1975:7;1971:23;1967:32;1964:52;;;2012:1;2009;2002:12;1964:52;2051:9;2038:23;2070:31;2095:5;2070:31;:::i;:::-;2120:5;1884:247;-1:-1:-1;;;1884:247:1:o;2318:127::-;2379:10;2374:3;2370:20;2367:1;2360:31;2410:4;2407:1;2400:15;2434:4;2431:1;2424:15;2450:275;2521:2;2515:9;2586:2;2567:13;;-1:-1:-1;;2563:27:1;2551:40;;2621:18;2606:34;;2642:22;;;2603:62;2600:88;;;2668:18;;:::i;:::-;2704:2;2697:22;2450:275;;-1:-1:-1;2450:275:1:o;2730:183::-;2790:4;2823:18;2815:6;2812:30;2809:56;;;2845:18;;:::i;:::-;-1:-1:-1;2890:1:1;2886:14;2902:4;2882:25;;2730:183::o;2918:737::-;2972:5;3025:3;3018:4;3010:6;3006:17;3002:27;2992:55;;3043:1;3040;3033:12;2992:55;3079:6;3066:20;3105:4;3129:60;3145:43;3185:2;3145:43;:::i;:::-;3129:60;:::i;:::-;3223:15;;;3309:1;3305:10;;;;3293:23;;3289:32;;;3254:12;;;;3333:15;;;3330:35;;;3361:1;3358;3351:12;3330:35;3397:2;3389:6;3385:15;3409:217;3425:6;3420:3;3417:15;3409:217;;;3505:3;3492:17;3522:31;3547:5;3522:31;:::i;:::-;3566:18;;3604:12;;;;3442;;3409:217;;;-1:-1:-1;3644:5:1;2918:737;-1:-1:-1;;;;;;2918:737:1:o;3660:662::-;3714:5;3767:3;3760:4;3752:6;3748:17;3744:27;3734:55;;3785:1;3782;3775:12;3734:55;3821:6;3808:20;3847:4;3871:60;3887:43;3927:2;3887:43;:::i;3871:60::-;3965:15;;;4051:1;4047:10;;;;4035:23;;4031:32;;;3996:12;;;;4075:15;;;4072:35;;;4103:1;4100;4093:12;4072:35;4139:2;4131:6;4127:15;4151:142;4167:6;4162:3;4159:15;4151:142;;;4233:17;;4221:30;;4271:12;;;;4184;;4151:142;;4327:595;4445:6;4453;4506:2;4494:9;4485:7;4481:23;4477:32;4474:52;;;4522:1;4519;4512:12;4474:52;4562:9;4549:23;4591:18;4632:2;4624:6;4621:14;4618:34;;;4648:1;4645;4638:12;4618:34;4671:61;4724:7;4715:6;4704:9;4700:22;4671:61;:::i;:::-;4661:71;;4785:2;4774:9;4770:18;4757:32;4741:48;;4814:2;4804:8;4801:16;4798:36;;;4830:1;4827;4820:12;4798:36;;4853:63;4908:7;4897:8;4886:9;4882:24;4853:63;:::i;:::-;4843:73;;;4327:595;;;;;:::o;4927:456::-;5004:6;5012;5020;5073:2;5061:9;5052:7;5048:23;5044:32;5041:52;;;5089:1;5086;5079:12;5041:52;5128:9;5115:23;5147:31;5172:5;5147:31;:::i;:::-;5197:5;-1:-1:-1;5254:2:1;5239:18;;5226:32;5267:33;5226:32;5267:33;:::i;:::-;4927:456;;5319:7;;-1:-1:-1;;;5373:2:1;5358:18;;;;5345:32;;4927:456::o;5388:118::-;5474:5;5467:13;5460:21;5453:5;5450:32;5440:60;;5496:1;5493;5486:12;5511:241;5567:6;5620:2;5608:9;5599:7;5595:23;5591:32;5588:52;;;5636:1;5633;5626:12;5588:52;5675:9;5662:23;5694:28;5716:5;5694:28;:::i;5946:382::-;6011:6;6019;6072:2;6060:9;6051:7;6047:23;6043:32;6040:52;;;6088:1;6085;6078:12;6040:52;6127:9;6114:23;6146:31;6171:5;6146:31;:::i;:::-;6196:5;-1:-1:-1;6253:2:1;6238:18;;6225:32;6266:30;6225:32;6266:30;:::i;:::-;6315:7;6305:17;;;5946:382;;;;;:::o;6333:316::-;6410:6;6418;6426;6479:2;6467:9;6458:7;6454:23;6450:32;6447:52;;;6495:1;6492;6485:12;6447:52;-1:-1:-1;;6518:23:1;;;6588:2;6573:18;;6560:32;;-1:-1:-1;6639:2:1;6624:18;;;6611:32;;6333:316;-1:-1:-1;6333:316:1:o;6654:388::-;6722:6;6730;6783:2;6771:9;6762:7;6758:23;6754:32;6751:52;;;6799:1;6796;6789:12;6751:52;6838:9;6825:23;6857:31;6882:5;6857:31;:::i;:::-;6907:5;-1:-1:-1;6964:2:1;6949:18;;6936:32;6977:33;6936:32;6977:33;:::i;7047:750::-;7139:6;7147;7155;7208:2;7196:9;7187:7;7183:23;7179:32;7176:52;;;7224:1;7221;7214:12;7176:52;7264:9;7251:23;7293:18;7334:2;7326:6;7323:14;7320:34;;;7350:1;7347;7340:12;7320:34;7388:6;7377:9;7373:22;7363:32;;7433:7;7426:4;7422:2;7418:13;7414:27;7404:55;;7455:1;7452;7445:12;7404:55;7495:2;7482:16;7521:2;7513:6;7510:14;7507:34;;;7537:1;7534;7527:12;7507:34;7592:7;7585:4;7575:6;7572:1;7568:14;7564:2;7560:23;7556:34;7553:47;7550:67;;;7613:1;7610;7603:12;7550:67;7644:4;7636:13;;;;-1:-1:-1;7668:6:1;-1:-1:-1;;7709:20:1;;7696:34;7739:28;7696:34;7739:28;:::i;:::-;7786:5;7776:15;;;7047:750;;;;;:::o;7802:416::-;7895:6;7903;7956:2;7944:9;7935:7;7931:23;7927:32;7924:52;;;7972:1;7969;7962:12;7924:52;8012:9;7999:23;8045:18;8037:6;8034:30;8031:50;;;8077:1;8074;8067:12;8031:50;8100:61;8153:7;8144:6;8133:9;8129:22;8100:61;:::i;:::-;8090:71;8208:2;8193:18;;;;8180:32;;-1:-1:-1;;;;7802:416:1:o;8223:348::-;8307:6;8360:2;8348:9;8339:7;8335:23;8331:32;8328:52;;;8376:1;8373;8366:12;8328:52;8416:9;8403:23;8449:18;8441:6;8438:30;8435:50;;;8481:1;8478;8471:12;8435:50;8504:61;8557:7;8548:6;8537:9;8533:22;8504:61;:::i;:::-;8494:71;8223:348;-1:-1:-1;;;;8223:348:1:o;8576:663::-;8703:6;8711;8719;8772:2;8760:9;8751:7;8747:23;8743:32;8740:52;;;8788:1;8785;8778:12;8740:52;8828:9;8815:23;8857:18;8898:2;8890:6;8887:14;8884:34;;;8914:1;8911;8904:12;8884:34;8937:61;8990:7;8981:6;8970:9;8966:22;8937:61;:::i;:::-;8927:71;;9051:2;9040:9;9036:18;9023:32;9007:48;;9080:2;9070:8;9067:16;9064:36;;;9096:1;9093;9086:12;9064:36;;9119:63;9174:7;9163:8;9152:9;9148:24;9119:63;:::i;:::-;9109:73;;;9229:2;9218:9;9214:18;9201:32;9191:42;;8576:663;;;;;:::o;9244:380::-;9323:1;9319:12;;;;9366;;;9387:61;;9441:4;9433:6;9429:17;9419:27;;9387:61;9494:2;9486:6;9483:14;9463:18;9460:38;9457:161;;9540:10;9535:3;9531:20;9528:1;9521:31;9575:4;9572:1;9565:15;9603:4;9600:1;9593:15;9457:161;;9244:380;;;:::o;9629:356::-;9831:2;9813:21;;;9850:18;;;9843:30;9909:34;9904:2;9889:18;;9882:62;9976:2;9961:18;;9629:356::o;9990:127::-;10051:10;10046:3;10042:20;10039:1;10032:31;10082:4;10079:1;10072:15;10106:4;10103:1;10096:15;10122:168;10162:7;10228:1;10224;10220:6;10216:14;10213:1;10210:21;10205:1;10198:9;10191:17;10187:45;10184:71;;;10235:18;;:::i;:::-;-1:-1:-1;10275:9:1;;10122:168::o;10295:422::-;10384:1;10427:5;10384:1;10441:270;10462:7;10452:8;10449:21;10441:270;;;10521:4;10517:1;10513:6;10509:17;10503:4;10500:27;10497:53;;;10530:18;;:::i;:::-;10580:7;10570:8;10566:22;10563:55;;;10600:16;;;;10563:55;10679:22;;;;10639:15;;;;10441:270;;;10445:3;10295:422;;;;;:::o;10722:806::-;10771:5;10801:8;10791:80;;-1:-1:-1;10842:1:1;10856:5;;10791:80;10890:4;10880:76;;-1:-1:-1;10927:1:1;10941:5;;10880:76;10972:4;10990:1;10985:59;;;;11058:1;11053:130;;;;10965:218;;10985:59;11015:1;11006:10;;11029:5;;;11053:130;11090:3;11080:8;11077:17;11074:43;;;11097:18;;:::i;:::-;-1:-1:-1;;11153:1:1;11139:16;;11168:5;;10965:218;;11267:2;11257:8;11254:16;11248:3;11242:4;11239:13;11235:36;11229:2;11219:8;11216:16;11211:2;11205:4;11202:12;11198:35;11195:77;11192:159;;;-1:-1:-1;11304:19:1;;;11336:5;;11192:159;11383:34;11408:8;11402:4;11383:34;:::i;:::-;11453:6;11449:1;11445:6;11441:19;11432:7;11429:32;11426:58;;;11464:18;;:::i;:::-;11502:20;;10722:806;-1:-1:-1;;;10722:806:1:o;11533:140::-;11591:5;11620:47;11661:4;11651:8;11647:19;11641:4;11620:47;:::i;11678:127::-;11739:10;11734:3;11730:20;11727:1;11720:31;11770:4;11767:1;11760:15;11794:4;11791:1;11784:15;11810:120;11850:1;11876;11866:35;;11881:18;;:::i;:::-;-1:-1:-1;11915:9:1;;11810:120::o;11935:127::-;11996:10;11991:3;11987:20;11984:1;11977:31;12027:4;12024:1;12017:15;12051:4;12048:1;12041:15;12067:135;12106:3;12127:17;;;12124:43;;12147:18;;:::i;:::-;-1:-1:-1;12194:1:1;12183:13;;12067:135::o;12616:128::-;12656:3;12687:1;12683:6;12680:1;12677:13;12674:39;;;12693:18;;:::i;:::-;-1:-1:-1;12729:9:1;;12616:128::o;13948:184::-;14018:6;14071:2;14059:9;14050:7;14046:23;14042:32;14039:52;;;14087:1;14084;14077:12;14039:52;-1:-1:-1;14110:16:1;;13948:184;-1:-1:-1;13948:184:1:o;14416:245::-;14483:6;14536:2;14524:9;14515:7;14511:23;14507:32;14504:52;;;14552:1;14549;14542:12;14504:52;14584:9;14578:16;14603:28;14625:5;14603:28;:::i;14666:251::-;14736:6;14789:2;14777:9;14768:7;14764:23;14760:32;14757:52;;;14805:1;14802;14795:12;14757:52;14837:9;14831:16;14856:31;14881:5;14856:31;:::i;14922:461::-;14975:3;15013:5;15007:12;15040:6;15035:3;15028:19;15066:4;15095:2;15090:3;15086:12;15079:19;;15132:2;15125:5;15121:14;15153:1;15163:195;15177:6;15174:1;15171:13;15163:195;;;15242:13;;-1:-1:-1;;;;;15238:39:1;15226:52;;15298:12;;;;15333:15;;;;15274:1;15192:9;15163:195;;;-1:-1:-1;15374:3:1;;14922:461;-1:-1:-1;;;;;14922:461:1:o;15388:332::-;15595:6;15584:9;15577:25;15638:2;15633;15622:9;15618:18;15611:30;15558:4;15658:56;15710:2;15699:9;15695:18;15687:6;15658:56;:::i;15725:881::-;15820:6;15851:2;15894;15882:9;15873:7;15869:23;15865:32;15862:52;;;15910:1;15907;15900:12;15862:52;15943:9;15937:16;15976:18;15968:6;15965:30;15962:50;;;16008:1;16005;15998:12;15962:50;16031:22;;16084:4;16076:13;;16072:27;-1:-1:-1;16062:55:1;;16113:1;16110;16103:12;16062:55;16142:2;16136:9;16165:60;16181:43;16221:2;16181:43;:::i;16165:60::-;16259:15;;;16341:1;16337:10;;;;16329:19;;16325:28;;;16290:12;;;;16365:19;;;16362:39;;;16397:1;16394;16387:12;16362:39;16421:11;;;;16441:135;16457:6;16452:3;16449:15;16441:135;;;16523:10;;16511:23;;16474:12;;;;16554;;;;16441:135;;;16595:5;15725:881;-1:-1:-1;;;;;;;15725:881:1:o;17443:407::-;17645:2;17627:21;;;17684:2;17664:18;;;17657:30;17723:34;17718:2;17703:18;;17696:62;-1:-1:-1;;;17789:2:1;17774:18;;17767:41;17840:3;17825:19;;17443:407::o;17855:403::-;18057:2;18039:21;;;18096:2;18076:18;;;18069:30;18135:34;18130:2;18115:18;;18108:62;-1:-1:-1;;;18201:2:1;18186:18;;18179:37;18248:3;18233:19;;17855:403::o;18263:399::-;18465:2;18447:21;;;18504:2;18484:18;;;18477:30;18543:34;18538:2;18523:18;;18516:62;-1:-1:-1;;;18609:2:1;18594:18;;18587:33;18652:3;18637:19;;18263:399::o;18667:402::-;18869:2;18851:21;;;18908:2;18888:18;;;18881:30;18947:34;18942:2;18927:18;;18920:62;-1:-1:-1;;;19013:2:1;18998:18;;18991:36;19059:3;19044:19;;18667:402::o;19074:607::-;-1:-1:-1;;;;;19433:15:1;;;19415:34;;19480:2;19465:18;;19458:34;;;;19523:2;19508:18;;19501:34;;;;19566:2;19551:18;;19544:34;;;;19615:15;;;19609:3;19594:19;;19587:44;19395:3;19647:19;;19640:35;;;;19364:3;19349:19;;19074:607::o;19686:306::-;19774:6;19782;19790;19843:2;19831:9;19822:7;19818:23;19814:32;19811:52;;;19859:1;19856;19849:12;19811:52;19888:9;19882:16;19872:26;;19938:2;19927:9;19923:18;19917:25;19907:35;;19982:2;19971:9;19967:18;19961:25;19951:35;;19686:306;;;;;:::o;22973:401::-;23175:2;23157:21;;;23214:2;23194:18;;;23187:30;23253:34;23248:2;23233:18;;23226:62;-1:-1:-1;;;23319:2:1;23304:18;;23297:35;23364:3;23349:19;;22973:401::o;23379:399::-;23581:2;23563:21;;;23620:2;23600:18;;;23593:30;23659:34;23654:2;23639:18;;23632:62;-1:-1:-1;;;23725:2:1;23710:18;;23703:33;23768:3;23753:19;;23379:399::o;26618:125::-;26658:4;26686:1;26683;26680:8;26677:34;;;26691:18;;:::i;:::-;-1:-1:-1;26728:9:1;;26618:125::o;26748:582::-;27047:6;27036:9;27029:25;27090:6;27085:2;27074:9;27070:18;27063:34;27133:3;27128:2;27117:9;27113:18;27106:31;27010:4;27154:57;27206:3;27195:9;27191:19;27183:6;27154:57;:::i;:::-;-1:-1:-1;;;;;27247:32:1;;;;27242:2;27227:18;;27220:60;-1:-1:-1;27311:3:1;27296:19;27289:35;27146:65;26748:582;-1:-1:-1;;;26748:582:1:o;28295:112::-;28327:1;28353;28343:35;;28358:18;;:::i;:::-;-1:-1:-1;28392:9:1;;28295:112::o

Swarm Source

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