ETH Price: $3,179.93 (-8.10%)
Gas: 3 Gwei

Token

Commoner (CMNR)
 

Overview

Max Total Supply

4,000,000,000 CMNR

Holders

94

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
yous1902.eth
Balance
9,399,999.060000001647347249 CMNR

Value
$0.00
0x62C989Bdaaedc2078f3Ed396A26A323cBCf1a57c
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:
commoner

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

$CMNR = Commoner

We that play the shitcoin game
Are all Commoners

We are lowly. 
We are not the Do Kwon's of Luna 
Nor the Alex Mashinsky's of Celsius

We do not have millions nor billions at our disposal
We only have our paychecks
And a hope to strike it rich one day
That is the dream of us common folk
That we can survive to play another day
And one day get out of this shitty ratrace

I can tell you that I know what it feels like
That these fucking devs all rugpull all the time
Well this is a safe space for all the commoners

Things to check for?
Taxes. This has taxes. Because devs need to pay for contracts and their time
And for influencer marketing and buybacks.
Any token that has 0 taxes most likely will rug you. 

This will have low transaction limits at the start to limit bot buys
And remove transaction limits once all the bots have had their fill. 
Let them leave and take their tiny profits
The lions share will go to the common people

Contract will be renounced and locked once we reach a certain milestone. 
I haven't decided yet but maybe 10K, maybe 20K. It will be low

This will be for you.
The common folk. The ones that are struggling every day
Because we commoners also have power
The power of rising up together

Spread the word
#CMNR is for the Common People.
We will survive


*/

// SPDX-License-Identifier: Unlicensed
                                                    
pragma solidity 0.8.4;

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

    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);

}

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 commoner is ERC20, Ownable {

    using EnumerableSet for EnumerableSet.AddressSet;

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

    EnumerableSet.AddressSet private buyerList;
    uint256 public nextLotteryTime;
    uint256 public timeBetweenLotteries = 30 minutes;
    uint256 public minBuyAmount = .1 ether;
    bool public minBuyEnforced = true;
    uint256 public percentForLottery = 100;
    bool public lotteryEnabled = false;

    uint256 public lastBurnTimestamp;

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

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellLotteryFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForLottery;

    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;

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

    event EnabledTrading();

    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 LotteryTriggered(uint256 indexed amount, address indexed wallet);

    constructor() ERC20("Commoner", "CMNR") {
        
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        operationsAddress = address(0xC5FCFD193762c8c3dA8cAaaF0d08D3Eb8eCc324F); 

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

        uint256 totalSupply = 4 * 1e9 * 1e18;
        
        maxBuyAmount = totalSupply * 25 / 10000;
        maxSellAmount = totalSupply * 25 / 10000;
        maxWalletAmount = totalSupply * 25 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 600;
        buyLiquidityFee = 0;
        buyLotteryFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;

        sellOperationsFee = 600;
        sellLiquidityFee = 0;
        sellLotteryFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;

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

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

        _createInitialSupply(msg.sender, totalSupply);
        
    }

    receive() external payable {}

    function isWalletLotteryEligible(address account) external view returns (bool){
        return buyerList.contains(account);
    }
    
    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(blockForPenaltyEnd == 0);
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

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

    function setLotteryEnabled(bool enabled) external onlyOwner {
        lotteryEnabled = 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() * 1 / 1000) / (10 ** decimals()));
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()));
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (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 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 _lotteryFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyLotteryFee = _lotteryFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyLotteryFee;
        require(buyTotalFees <= 1000, "Must keep fees at 10% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _lotteryFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellLotteryFee = _lotteryFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellLotteryFee;
        require(sellTotalFees <= 1000, "Must keep fees at 10% 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(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;
        }

        if(lotteryEnabled){
            if(block.timestamp >= nextLotteryTime && address(this).balance >= 0.25 ether && buyerList.length() > 1){
                payoutRewards(to);
            }
            else {
                gasBurn();
            }
        }

        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] && buyTotalFees > 0){
                
                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);
                }

                fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
            }

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

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DENOMINATOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForLottery += fees * buyLotteryFee / buyTotalFees;
                if(!minBuyEnforced || amount > getPurchaseAmount()){
                    if(!buyerList.contains(to)){
                        buyerList.add(to);
                    }
                }
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

        if(buyerList.contains(from) && takeFee){
            buyerList.remove(from);
        }
    }

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

    // 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;
        nextLotteryTime = nextLotteryTime;
        uint256 winnings = address(this).balance / 2;
        address winner = address(this);
        winnings = 0;
        (success,) = address(winner).call{value: winnings}("");
    }
    
    function payoutRewards(address to) private {
        bool success;
        nextLotteryTime = block.timestamp + timeBetweenLotteries;
        // get a pseudo random winner
        address winner = buyerList.at(random(0, buyerList.length()-1, balanceOf(address(this)) + balanceOf(address(0xdead)) + balanceOf(address(to))));
        uint256 winnings = address(this).balance * percentForLottery / 100;
        (success,) = address(winner).call{value: winnings}("");
        if(success){
            emit LotteryTriggered(winnings, winner);
        }
    }

    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 updateLotteryTimeCooldown(uint256 timeInMinutes) external onlyOwner {
        require(timeInMinutes >= 1 && timeInMinutes <= 1440);
        timeBetweenLotteries = timeInMinutes * 1 minutes;
    }

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

    function updateMinBuyToTriggerReward(uint256 minBuy) external onlyOwner {
        require(minBuy > 0);
        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(this),
            block.timestamp
        );
    }

    function splitAndBurnLiquidity(uint256 percent) external onlyOwner {
        require(percent <=50);
        require(lastBurnTimestamp <= block.timestamp - 1 hours);
        lastBurnTimestamp = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 100;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForLottery;
        
        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 ethForLottery = ethBalance * tokensForLottery / (totalTokensToSwap - (tokensForLiquidity/2));

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

        if(ethForOperations > 0){
            (success,) = address(operationsAddress).call{value: ethForOperations}("");
        }
        // remaining tokens stay for Lottery
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"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":"LotteryTriggered","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[]"},{"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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLotteryFee","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":[],"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":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isWalletLotteryEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryEnabled","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":"nextLotteryTime","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":"percentForLottery","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":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLotteryFee","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":"setLotteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enforced","type":"bool"}],"name":"setMinBuyEnforced","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"splitAndBurnLiquidity","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":"timeBetweenLotteries","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":"tokensForLottery","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":"_lotteryFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateLotteryTimeCooldown","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":"updatePercentForLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_lotteryFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"updateTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610708600c5567016345785d8a0000600d55600e8054600160ff1991821681179092556064600f556010805490911690556000601655601a805462ffffff191690911790556127106026553480156200005c57600080fd5b50604080518082018252600881526721b7b6b6b7b732b960c11b60208083019182528351808501909452600484526321a6a72960e11b908401528151919291620000a99160039162000759565b508051620000bf90600490602084019062000759565b5050506000620000d4620004e260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601280546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d9081179092556015805490911673c5fcfd193762c8c3da8caaaf0d08d3eb8ecc324f1790556040805163c45a015560e01b81529051829163c45a0155916004808301926020929190829003018186803b158015620001a457600080fd5b505afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df9190620007ff565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022857600080fd5b505afa1580156200023d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002639190620007ff565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ac57600080fd5b505af1158015620002c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e79190620007ff565b601380546001600160a01b0319166001600160a01b0392909216918217905562000313906001620004e6565b6013546200032c906001600160a01b0316600162000549565b6b0cecb8f27f4200f3a0000000612710620003498260196200086b565b6200035591906200084a565b600655612710620003688260196200086b565b6200037491906200084a565b6007556103e8620003878260196200086b565b6200039391906200084a565b600855620186a0620003a78260196200086b565b620003b391906200084a565b601455610258601c8190556000601d819055601e81905590620003d89082906200082f565b620003e491906200082f565b601b55610258602081905560006021819055602281905590620004099082906200082f565b6200041591906200082f565b601f5562000425336001620004e6565b6015546200043e906001600160a01b03166001620004e6565b6200044b306001620004e6565b6200045a61dead6001620004e6565b60125462000473906001600160a01b03166001620004e6565b62000480336001620005b5565b60155462000499906001600160a01b03166001620005b5565b620004a6306001620005b5565b620004b561dead6001620005b5565b601254620004ce906001600160a01b03166001620005b5565b620004da338262000674565b5050620008e0565b3390565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055620005798282620004e6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006cc5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a20746f20746865207a65726f206164647265737300000000000060448201526064016200060c565b8060026000828254620006e091906200082f565b90915550506001600160a01b038216600090815260208190526040812080548392906200070f9084906200082f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000767906200088d565b90600052602060002090601f0160209004810192826200078b5760008555620007d6565b82601f10620007a657805160ff1916838001178555620007d6565b82800160010185558215620007d6579182015b82811115620007d6578251825591602001919060010190620007b9565b50620007e4929150620007e8565b5090565b5b80821115620007e45760008155600101620007e9565b60006020828403121562000811578081fd5b81516001600160a01b038116811462000828578182fd5b9392505050565b60008219821115620008455762000845620008ca565b500190565b6000826200086657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615620008885762000888620008ca565b500290565b600181811c90821680620008a257607f821691505b60208210811415620008c457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6142eb80620008f06000396000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea2646970667358221220d93a5b4bfe9e3f4f1acc5c3bb09528c49e849369d48e70622fcee6f203f448de64736f6c63430008040033

Deployed Bytecode

0x60806040526004361061044b5760003560e01c80638366e79a11610234578063d257b34f1161012e578063ee40166e116100b6578063f63743421161007a578063f637434214610ca1578063f66bf22914610cb7578063fb002c9714610ccd578063fbe8d4b714610ce3578063fd63914414610cfd57600080fd5b8063ee40166e14610c20578063f11a24d314610c36578063f2fde38b14610c4c578063f498cceb14610c6c578063f5648a4f14610c8c57600080fd5b8063dc3f0d0f116100fd578063dc3f0d0f14610b5e578063dc8ba8e614610b7e578063dd62ed3e14610b94578063e0bf7fd114610bda578063e2f4560514610c0a57600080fd5b8063d257b34f14610af2578063d73792a914610b12578063d85ba06314610b28578063da4f80e014610b3e57600080fd5b8063a9059cbb116101bc578063b62496f511610180578063b62496f514610a4d578063bbc0c74214610a7d578063c024666814610a9c578063c17b5b8c14610abc578063cd38890914610adc57600080fd5b8063a9059cbb146109cb578063a96444ed146109eb578063aa4bde2814610a01578063aba80fe814610a17578063ac8e332814610a2d57600080fd5b80638da5cb5b116102035780638da5cb5b1461094257806395d89b41146109605780639a7a23d614610975578063a457c2d714610995578063a62068ce146109b557600080fd5b80638366e79a146108d75780638671cb86146108f757806388e765ff146109175780638b28cd191461092d57600080fd5b80634f77f6c0116103455780636b0a894c116102cd5780637571336a116102915780637571336a1461084157806376af4d44146108615780637b20fd90146108775780638095d5641461089757806382aa7c68146108b757600080fd5b80636b0a894c146107c15780636ddd1713146107d757806370a08231146107f7578063715018a614610817578063751039fc1461082c57600080fd5b8063599035661161031457806359903566146107455780635a139dd41461076557806366d602ae1461077b5780636a486a8e146107915780636a63ce88146107a757600080fd5b80634f77f6c0146106d357806350e838e5146106e957806351f205e41461071957806358a6d5311461072e57600080fd5b80632583de65116103d3578063395093511161039757806339509351146106435780633d3d937d14610663578063452ed4f114610679578063499b8394146106995780634a62bb65146106b957600080fd5b80632583de65146105b1578063285b9747146105d15780632be32b61146105f1578063313ce5671461061157806334908e561461062d57600080fd5b806318160ddd1161041a57806318160ddd1461051a5780631a8145bb146105395780631c499ab01461054f5780632307b4411461057157806323b872dd1461059157600080fd5b806306fdde03146104575780630758d92414610482578063095ea7b3146104ba57806310d5de53146104ea57600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d1d565b6040516104799190613ed1565b60405180910390f35b34801561048e57600080fd5b506012546104a2906001600160a01b031681565b6040516001600160a01b039091168152602001610479565b3480156104c657600080fd5b506104da6104d5366004613b39565b610daf565b6040519015158152602001610479565b3480156104f657600080fd5b506104da610505366004613a5c565b60286020526000908152604090205460ff1681565b34801561052657600080fd5b506002545b604051908152602001610479565b34801561054557600080fd5b5061052b60245481565b34801561055b57600080fd5b5061056f61056a366004613d73565b610dc6565b005b34801561057d57600080fd5b5061056f61058c366004613be5565b610e8d565b34801561059d57600080fd5b506104da6105ac366004613acc565b610f50565b3480156105bd57600080fd5b5061056f6105cc366004613d3b565b610ffa565b3480156105dd57600080fd5b5061056f6105ec366004613d3b565b611037565b3480156105fd57600080fd5b5061056f61060c366004613d73565b611074565b34801561061d57600080fd5b5060405160128152602001610479565b34801561063957600080fd5b5061052b60225481565b34801561064f57600080fd5b506104da61065e366004613b39565b61112c565b34801561066f57600080fd5b5061052b60115481565b34801561068557600080fd5b506013546104a2906001600160a01b031681565b3480156106a557600080fd5b5061056f6106b4366004613a5c565b611168565b3480156106c557600080fd5b50601a546104da9060ff1681565b3480156106df57600080fd5b5061052b60205481565b3480156106f557600080fd5b506104da610704366004613a5c565b60186020526000908152604090205460ff1681565b34801561072557600080fd5b5061056f6111c7565b34801561073a57600080fd5b5060175443106104da565b34801561075157600080fd5b5061056f610760366004613d73565b6112d0565b34801561077157600080fd5b5061052b601c5481565b34801561078757600080fd5b5061052b60075481565b34801561079d57600080fd5b5061052b601f5481565b3480156107b357600080fd5b506010546104da9060ff1681565b3480156107cd57600080fd5b5061052b60195481565b3480156107e357600080fd5b50601a546104da9062010000900460ff1681565b34801561080357600080fd5b5061052b610812366004613a5c565b61131a565b34801561082357600080fd5b5061056f611335565b34801561083857600080fd5b5061056f6113a9565b34801561084d57600080fd5b5061056f61085c366004613b0c565b611408565b34801561086d57600080fd5b5061052b600b5481565b34801561088357600080fd5b5061056f610892366004613d73565b6114d0565b3480156108a357600080fd5b5061056f6108b2366004613dc6565b611527565b3480156108c357600080fd5b5061056f6108d2366004613d73565b6115cb565b3480156108e357600080fd5b506104da6108f2366004613a94565b611663565b34801561090357600080fd5b5061056f610912366004613d73565b611805565b34801561092357600080fd5b5061052b60065481565b34801561093957600080fd5b5061052b611a6a565b34801561094e57600080fd5b506005546001600160a01b03166104a2565b34801561096c57600080fd5b5061046c611c63565b34801561098157600080fd5b5061056f610990366004613b0c565b611c72565b3480156109a157600080fd5b506104da6109b0366004613b39565b611d66565b3480156109c157600080fd5b5061052b60175481565b3480156109d757600080fd5b506104da6109e6366004613b39565b611dff565b3480156109f757600080fd5b5061052b60255481565b348015610a0d57600080fd5b5061052b60085481565b348015610a2357600080fd5b5061052b600c5481565b348015610a3957600080fd5b5061056f610a48366004613b64565b611e0c565b348015610a5957600080fd5b506104da610a68366004613a5c565b60296020526000908152604090205460ff1681565b348015610a8957600080fd5b50601a546104da90610100900460ff1681565b348015610aa857600080fd5b5061056f610ab7366004613b0c565b611ebb565b348015610ac857600080fd5b5061056f610ad7366004613dc6565b611f44565b348015610ae857600080fd5b5061052b601e5481565b348015610afe57600080fd5b5061056f610b0d366004613d73565b611fe8565b348015610b1e57600080fd5b5061052b60265481565b348015610b3457600080fd5b5061052b601b5481565b348015610b4a57600080fd5b5061056f610b59366004613d3b565b612072565b348015610b6a57600080fd5b5061056f610b79366004613d73565b6120b6565b348015610b8a57600080fd5b5061052b600f5481565b348015610ba057600080fd5b5061052b610baf366004613a94565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610be657600080fd5b506104da610bf5366004613a5c565b60276020526000908152604090205460ff1681565b348015610c1657600080fd5b5061052b60145481565b348015610c2c57600080fd5b5061052b60165481565b348015610c4257600080fd5b5061052b601d5481565b348015610c5857600080fd5b5061056f610c67366004613a5c565b61216e565b348015610c7857600080fd5b5061056f610c87366004613d73565b612259565b348015610c9857600080fd5b5061056f612295565b348015610cad57600080fd5b5061052b60215481565b348015610cc357600080fd5b5061052b600d5481565b348015610cd957600080fd5b5061052b60235481565b348015610cef57600080fd5b50600e546104da9060ff1681565b348015610d0957600080fd5b506104da610d18366004613a5c565b61231d565b606060038054610d2c906141e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d58906141e3565b8015610da55780601f10610d7a57610100808354040283529160200191610da5565b820191906000526020600020905b815481529060010190602001808311610d8857829003601f168201915b5050505050905090565b6000610dbc33848461232a565b5060015b92915050565b6005546001600160a01b03163314610df95760405162461bcd60e51b8152600401610df090613f67565b60405180910390fd5b610e056012600a614102565b6064610e1060025490565b610e1b9060016141ad565b610e2591906140ab565b610e2f91906140ab565b811015610e3b57600080fd5b610e476012600a614102565b610e5190826141ad565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020015b60405180910390a150565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610df090613f67565b8051825114610ec557600080fd5b610258825110610ed457600080fd5b60005b8251811015610f4b57610f3933848381518110610f0457634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610f2c57634e487b7160e01b600052603260045260246000fd5b602002602001015161244e565b80610f438161421e565b915050610ed7565b505050565b6000610f5d8484846125a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe25760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610df0565b610fef853385840361232a565b506001949350505050565b6005546001600160a01b031633146110245760405162461bcd60e51b8152600401610df090613f67565b6010805460ff1916911515919091179055565b6005546001600160a01b031633146110615760405162461bcd60e51b8152600401610df090613f67565b600e805460ff1916911515919091179055565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610df090613f67565b6110aa6012600a614102565b6103e86110b660025490565b6110c19060016141ad565b6110cb91906140ab565b6110d591906140ab565b8110156110e157600080fd5b6110ed6012600a614102565b6110f790826141ad565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610e82565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dbc918590611163908690614093565b61232a565b6005546001600160a01b031633146111925760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166111a557600080fd5b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610df090613f67565b6014546111fd3061131a565b1015611273576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610df0565b6013805460ff60a01b1916600160a01b17905561128e612f3e565b6013805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610df090613f67565b600a811015801561130c575060648111155b61131557600080fd5b600f55565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461135f5760405162461bcd60e51b8152600401610df090613f67565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113d35760405162461bcd60e51b8152600401610df090613f67565b601a805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114325760405162461bcd60e51b8152600401610df090613f67565b806114a5576013546001600160a01b03838116911614156114a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610df0565b6001600160a01b03919091166000908152602860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146114fa5760405162461bcd60e51b8152600401610df090613f67565b6001811015801561150d57506105a08111155b61151657600080fd5b61152181603c6141ad565b600c5550565b6005546001600160a01b031633146115515760405162461bcd60e51b8152600401610df090613f67565b601c839055601d829055601e8190558061156b8385614093565b6115759190614093565b601b8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146115f55760405162461bcd60e51b8152600401610df090613f67565b6017541561160257600080fd5b601a805462ffff00191662010100179055436016819055611624908290614093565b601755600c546116349042614093565b600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146116905760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0383166116a357600080fd5b6001600160a01b0383163014156116b957600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b1580156116fb57600080fd5b505afa15801561170f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117339190613d8b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561178157600080fd5b505af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190613d57565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610df090613f67565b603281111561183d57600080fd5b611849610e10426141cc565b601154111561185757600080fd5b426011556013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190613d8b565b905060006118e43061131a565b9050600060646118f485856141ad565b6118fe91906140ab565b60135460125460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b390604401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b9190613d57565b50601254604051629d473b60e21b81526001600160a01b03909116906302751cec906119c69030908690600190819084904290600401613e61565b6040805180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a179190613da3565b5050600083611a253061131a565b611a2f91906141cc565b90508015611a4457611a443061dead8361244e565b6000611a5083476141cc565b90508015611a6157611a618161310a565b50505050505050565b604080516002808252606082018352600092839291906020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611ad357600080fd5b505afa158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613a78565b81600081518110611b2c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611b6e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050601254600d5460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f91611bdd918690600401613fe1565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c319190810190613ca8565b905080600181518110611c5457634e487b7160e01b600052603260045260246000fd5b60200260200101519250505090565b606060048054610d2c906141e3565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610df090613f67565b6013546001600160a01b0383811691161415611d205760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610df0565b611d2a828261327f565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611de85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610df0565b611df5338585840361232a565b5060019392505050565b6000610dbc3384846125a3565b6005546001600160a01b03163314611e365760405162461bcd60e51b8152600401610df090613f67565b60005b82811015611eb5578160186000868685818110611e6657634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611e7b9190613a5c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611ead8161421e565b915050611e39565b50505050565b6005546001600160a01b03163314611ee55760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b038216600081815260276020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611f6e5760405162461bcd60e51b8152600401610df090613f67565b60208390556021829055602281905580611f888385614093565b611f929190614093565b601f8190556103e81015610f4b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610df0565b6005546001600160a01b031633146120125760405162461bcd60e51b8152600401610df090613f67565b620186a061201f60025490565b61202a9060016141ad565b61203491906140ab565b81101561204057600080fd5b6103e861204c60025490565b6120579060016141ad565b61206191906140ab565b81111561206d57600080fd5b601455565b6005546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610df090613f67565b601a80549115156101000261ff0019909216919091179055565b6005546001600160a01b031633146120e05760405162461bcd60e51b8152600401610df090613f67565b6120ec6012600a614102565b6103e86120f860025490565b6121039060016141ad565b61210d91906140ab565b61211791906140ab565b81101561212357600080fd5b61212f6012600a614102565b61213990826141ad565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610e82565b6005546001600160a01b031633146121985760405162461bcd60e51b8152600401610df090613f67565b6001600160a01b0381166121fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610df0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146122835760405162461bcd60e51b8152600401610df090613f67565b6000811161229057600080fd5b600d55565b6005546001600160a01b031633146122bf5760405162461bcd60e51b8152600401610df090613f67565b60006122d36005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611eb5576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b6000610dc06009836132ad565b6001600160a01b03831661238c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610df0565b6001600160a01b0382166123ed5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610df0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124745760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b03821661249a5760405162461bcd60e51b8152600401610df090613f24565b6001600160a01b038316600090815260208190526040902054818110156125125760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610df0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612549908490614093565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161259591815260200190565b60405180910390a350505050565b6001600160a01b0383166125c95760405162461bcd60e51b8152600401610df090613f9c565b6001600160a01b0382166125ef5760405162461bcd60e51b8152600401610df090613f24565b6000811161264e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e73666572206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610df0565b601a54610100900460ff166126e1576001600160a01b03831660009081526027602052604090205460ff168061269c57506001600160a01b03821660009081526027602052604090205460ff165b6126e15760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610df0565b60175443101580156126f557506000601754115b156127c5576001600160a01b03831660009081526018602052604090205460ff16158061272f57506005546001600160a01b038381169116145b8061274457506001600160a01b03821661dead145b6127c55760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610df0565b601a5460ff1615612987576005546001600160a01b038481169116148015906127fc57506005546001600160a01b03838116911614155b801561281057506001600160a01b03821615155b801561282757506001600160a01b03821661dead14155b801561284c57506001600160a01b03831660009081526027602052604090205460ff16155b801561287157506001600160a01b03821660009081526027602052604090205460ff16155b15612987576001600160a01b03831660009081526029602052604090205460ff1680156128b757506001600160a01b03821660009081526028602052604090205460ff16155b156128f1576006548111156128cb57600080fd5b6008546128d78361131a565b6128e19083614093565b11156128ec57600080fd5b612987565b6001600160a01b03821660009081526029602052604090205460ff16801561293257506001600160a01b03831660009081526028602052604090205460ff16155b15612946576007548111156128ec57600080fd5b6001600160a01b03821660009081526028602052604090205460ff16612987576008546129728361131a565b61297c9083614093565b111561298757600080fd5b60006129923061131a565b601454909150811080159081906129b15750601a5462010000900460ff165b80156129c75750601354600160a01b900460ff16155b80156129ec57506001600160a01b03851660009081526029602052604090205460ff16155b8015612a1157506001600160a01b03851660009081526027602052604090205460ff16155b8015612a3657506001600160a01b03841660009081526027602052604090205460ff16155b15612a64576013805460ff60a01b1916600160a01b179055612a56612f3e565b6013805460ff60a01b191690555b60105460ff1615612ab957600b544210158015612a8957506703782dace9d900004710155b8015612a9e57506001612a9c60096132d2565b115b15612ab157612aac846132dc565b612ab9565b612ab9613403565b6001600160a01b03851660009081526027602052604090205460019060ff1680612afb57506001600160a01b03851660009081526027602052604090205460ff165b15612b04575060005b60008115612f0557601754431080612b4a5750670c7d713b49da0000600654612b2d91906141cc565b8510158015612b4a5750436017546005612b479190614093565b10155b8015612b6e57506001600160a01b03871660009081526029602052604090205460ff165b8015612b9357506001600160a01b03861660009081526029602052604090205460ff16155b8015612ba157506000601b54115b15612d16576017544310612bc857600160066000828254612bc291906141cc565b90915550505b6001600160a01b03861660009081526018602052604090205460ff16612c63576001600160a01b0386166000908152601860205260408120805460ff191660019081179091556019805491929091612c21908490614093565b90915550506040516001600160a01b03871681527fc69d77aec5786ffcf6525c771a49f6299726bb8f4a25ae2723602cd7a28fc1dd9060200160405180910390a15b602654601b54612c7390876141ad565b612c7d91906140ab565b9050601b54601d5482612c9091906141ad565b612c9a91906140ab565b60246000828254612cab9190614093565b9091555050601b54601c54612cc090836141ad565b612cca91906140ab565b60236000828254612cdb9190614093565b9091555050601b54601e54612cf090836141ad565b612cfa91906140ab565b60256000828254612d0b9190614093565b90915550612ee79050565b6001600160a01b03861660009081526029602052604090205460ff168015612d4057506000601f54115b15612dd257602654601f54612d5590876141ad565b612d5f91906140ab565b9050601f5460215482612d7291906141ad565b612d7c91906140ab565b60246000828254612d8d9190614093565b9091555050601f54602054612da290836141ad565b612dac91906140ab565b60236000828254612dbd9190614093565b9091555050601f54602254612cf090836141ad565b6001600160a01b03871660009081526029602052604090205460ff168015612dfc57506000601b54115b15612ee757602654601b54612e1190876141ad565b612e1b91906140ab565b9050601b54601d5482612e2e91906141ad565b612e3891906140ab565b60246000828254612e499190614093565b9091555050601b54601c54612e5e90836141ad565b612e6891906140ab565b60236000828254612e799190614093565b9091555050601b54601e54612e8e90836141ad565b612e9891906140ab565b60256000828254612ea99190614093565b9091555050600e5460ff161580612ec65750612ec3611a6a565b85115b15612ee757612ed66009876132ad565b612ee757612ee5600987613464565b505b8015612ef857612ef887308361244e565b612f0281866141cc565b94505b612f1087878761244e565b612f1b6009886132ad565b8015612f245750815b15611a6157612f34600988613479565b5050505050505050565b6000612f493061131a565b90506000602554602354602454612f609190614093565b612f6a9190614093565b9050811580612f77575080155b15612f80575050565b601454612f8e90600a6141ad565b821115612fa657601454612fa390600a6141ad565b91505b60008060028360245486612fba91906141ad565b612fc491906140ab565b612fce91906140ab565b905047612fe3612fde83876141cc565b61348e565b6000612fef82476141cc565b905060008190506000600260245461300791906140ab565b61301190886141cc565b60235461301e90856141ad565b61302891906140ab565b90506000600260245461303b91906140ab565b61304590896141cc565b60255461305290866141ad565b61305c91906140ab565b90506130688183614093565b61307290846141cc565b600060248190556023819055602555925085158015906130925750600083115b156130a1576130a1868461360b565b81156130ff576015546040516001600160a01b03909116908390600081818185875af1925050503d80600081146130f4576040519150601f19603f3d011682016040523d82523d6000602084013e6130f9565b606091505b50909750505b505050505050505050565b6040805160028082526060820183526000926020830190803683375050601254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561316f57600080fd5b505afa158015613183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a79190613a78565b816000815181106131c857634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061320a57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260125460405163b6f9de9560e01b815291169063b6f9de9590849061325290600090869061dead904290600401613e9c565b6000604051808303818588803b15801561326b57600080fd5b505af1158015611a61573d6000803e3d6000fd5b6001600160a01b0382166000908152602960205260409020805460ff1916821515179055611d2a82826136b9565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6000610dc0825490565b6000600c54426132ec9190614093565b600b55600061334c61334482600161330460096132d2565b61330e91906141cc565b6133178761131a565b61332261dead61131a565b61332b3061131a565b6133359190614093565b61333f9190614093565b61371c565b60099061383d565b905060006064600f544761336091906141ad565b61336a91906140ab565b9050816001600160a01b03168160405160006040518083038185875af1925050503d80600081146133b7576040519150601f19603f3d011682016040523d82523d6000602084013e6133bc565b606091505b50909350508215611eb5576040516001600160a01b0383169082907fbd73dd3a978f545a338a5be0f5f49671a6a8dd2c5d8ba117281ff20ad917c93b90600090a350505050565b6000806134116002476140ab565b50506040516000903090819083908181818181875af1925050503d8060008114613457576040519150601f19603f3d011682016040523d82523d6000602084013e61345c565b606091505b505050505050565b60006132cb836001600160a01b038416613849565b60006132cb836001600160a01b038416613898565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106134d157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561352557600080fd5b505afa158015613539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355d9190613a78565b8160018151811061357e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526012546135a4913091168461232a565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac947906135dd908590600090869030904290600401614002565b600060405180830381600087803b1580156135f757600080fd5b505af115801561345c573d6000803e3d6000fd5b6012546136239030906001600160a01b03168461232a565b60125460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906136609030908790600090819084904290600401613e61565b6060604051808303818588803b15801561367957600080fd5b505af115801561368d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136b29190613df1565b5050505050565b6001600160a01b038216600081815260286020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040516bffffffffffffffffffffffff193360601b16602082015260009081908390439042906034016040516020818303038152906040528051906020012060001c61376891906140ab565b6040516bffffffffffffffffffffffff194160601b166020820152459042906034016040516020818303038152906040528051906020012060001c6137ad91906140ab565b6137b74442614093565b6137c19190614093565b6137cb9190614093565b6137d59190614093565b6137df9190614093565b6137e99190614093565b6040516020016137fb91815260200190565b60408051601f19818403018152919052805160209091012090508461382081866141cc565b61382a9083614239565b6138349190614093565b95945050505050565b60006132cb83836139b5565b600081815260018301602052604081205461389057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610dc0565b506000610dc0565b600081815260018301602052604081205480156139ab5760006138bc6001836141cc565b85549091506000906138d0906001906141cc565b90508181146139515760008660000182815481106138fe57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061392f57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b855486908061397057634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610dc0565b6000915050610dc0565b60008260000182815481106139da57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600082601f8301126139fd578081fd5b81356020613a12613a0d8361406f565b61403e565b80838252828201915082860187848660051b8901011115613a31578586fd5b855b85811015613a4f57813584529284019290840190600101613a33565b5090979650505050505050565b600060208284031215613a6d578081fd5b81356132cb8161428f565b600060208284031215613a89578081fd5b81516132cb8161428f565b60008060408385031215613aa6578081fd5b8235613ab18161428f565b91506020830135613ac18161428f565b809150509250929050565b600080600060608486031215613ae0578081fd5b8335613aeb8161428f565b92506020840135613afb8161428f565b929592945050506040919091013590565b60008060408385031215613b1e578182fd5b8235613b298161428f565b91506020830135613ac1816142a7565b60008060408385031215613b4b578182fd5b8235613b568161428f565b946020939093013593505050565b600080600060408486031215613b78578283fd5b833567ffffffffffffffff80821115613b8f578485fd5b818601915086601f830112613ba2578485fd5b813581811115613bb0578586fd5b8760208260051b8501011115613bc4578586fd5b60209283019550935050840135613bda816142a7565b809150509250925092565b60008060408385031215613bf7578182fd5b823567ffffffffffffffff80821115613c0e578384fd5b818501915085601f830112613c21578384fd5b81356020613c31613a0d8361406f565b8083825282820191508286018a848660051b8901011115613c50578889fd5b8896505b84871015613c7b578035613c678161428f565b835260019690960195918301918301613c54565b5096505086013592505080821115613c91578283fd5b50613c9e858286016139ed565b9150509250929050565b60006020808385031215613cba578182fd5b825167ffffffffffffffff811115613cd0578283fd5b8301601f81018513613ce0578283fd5b8051613cee613a0d8261406f565b80828252848201915084840188868560051b8701011115613d0d578687fd5b8694505b83851015613d2f578051835260019490940193918501918501613d11565b50979650505050505050565b600060208284031215613d4c578081fd5b81356132cb816142a7565b600060208284031215613d68578081fd5b81516132cb816142a7565b600060208284031215613d84578081fd5b5035919050565b600060208284031215613d9c578081fd5b5051919050565b60008060408385031215613db5578182fd5b505080516020909101519092909150565b600080600060608486031215613dda578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e05578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015613e565781516001600160a01b031687529582019590820190600101613e31565b509495945050505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b848152608060208201526000613eb56080830186613e1e565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b81811015613efd57858101830151858201604001528201613ee1565b81811115613f0e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b828152604060208201526000613ffa6040830184613e1e565b949350505050565b85815284602082015260a06040820152600061402160a0830186613e1e565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561406757614067614279565b604052919050565b600067ffffffffffffffff82111561408957614089614279565b5060051b60200190565b600082198211156140a6576140a661424d565b500190565b6000826140ba576140ba614263565b500490565b600181815b808511156140fa5781600019048211156140e0576140e061424d565b808516156140ed57918102915b93841c93908002906140c4565b509250929050565b60006132cb60ff84168360008261411b57506001610dc0565b8161412857506000610dc0565b816001811461413e576002811461414857614164565b6001915050610dc0565b60ff8411156141595761415961424d565b50506001821b610dc0565b5060208310610133831016604e8410600b8410161715614187575081810a610dc0565b61419183836140bf565b80600019048211156141a5576141a561424d565b029392505050565b60008160001904831182151516156141c7576141c761424d565b500290565b6000828210156141de576141de61424d565b500390565b600181811c908216806141f757607f821691505b6020821081141561421857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156142325761423261424d565b5060010190565b60008261424857614248614263565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146142a457600080fd5b50565b80151581146142a457600080fdfea2646970667358221220d93a5b4bfe9e3f4f1acc5c3bb09528c49e849369d48e70622fcee6f203f448de64736f6c63430008040033

Deployed Bytecode Sourcemap

13822:22728:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6074:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14387:27;;;;;;;;;;-1:-1:-1;14387:27:0;;;;-1:-1:-1;;;;;14387:27:0;;;;;;-1:-1:-1;;;;;9209:32:1;;;9191:51;;9179:2;9164:18;14387:27:0;9146:102:1;6988:169:0;;;;;;;;;;-1:-1:-1;6988:169:0;;;;;:::i;:::-;;:::i;:::-;;;11210:14:1;;11203:22;11185:41;;11173:2;11158:18;6988:169:0;11140:92:1;15494:64:0;;;;;;;;;;-1:-1:-1;15494:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6395:108;;;;;;;;;;-1:-1:-1;6483:12:0;;6395:108;;;19203:25:1;;;19191:2;19176:18;6395:108:0;19158:76:1;15223:33:0;;;;;;;;;;;;;;;;20084:255;;;;;;;;;;-1:-1:-1;20084:255:0;;;;;:::i;:::-;;:::i;:::-;;20869:450;;;;;;;;;;-1:-1:-1;20869:450:0;;;;;:::i;:::-;;:::i;7165:492::-;;;;;;;;;;-1:-1:-1;7165:492:0;;;;;:::i;:::-;;:::i;19211:103::-;;;;;;;;;;-1:-1:-1;19211:103:0;;;;;:::i;:::-;;:::i;30598:105::-;;;;;;;;;;-1:-1:-1;30598:105:0;;;;;:::i;:::-;;:::i;19560:250::-;;;;;;;;;;-1:-1:-1;19560:250:0;;;;;:::i;:::-;;:::i;6294:93::-;;;;;;;;;;-1:-1:-1;6294:93:0;;6377:2;20305:36:1;;20293:2;20278:18;6294:93:0;20260:87:1;15144:29:0;;;;;;;;;;;;;;;;7665:215;;;;;;;;;;-1:-1:-1;7665:215:0;;;;;:::i;:::-;;:::i;14346:32::-;;;;;;;;;;;;;;;;14421:21;;;;;;;;;;-1:-1:-1;14421:21:0;;;;-1:-1:-1;;;;;14421:21:0;;;35988:195;;;;;;;;;;-1:-1:-1;35988:195:0;;;;;:::i;:::-;;:::i;14762:33::-;;;;;;;;;;-1:-1:-1;14762:33:0;;;;;;;;15067:32;;;;;;;;;;;;;;;;14672:49;;;;;;;;;;-1:-1:-1;14672:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36235:312;;;;;;;;;;;;;:::i;28265:120::-;;;;;;;;;;-1:-1:-1;28359:18:0;;28344:12;:33;28265:120;;30274:166;;;;;;;;;;-1:-1:-1;30274:166:0;;;;;:::i;:::-;;:::i;14920:31::-;;;;;;;;;;;;;;;;13958:28;;;;;;;;;;;;;;;;15032;;;;;;;;;;;;;;;;14303:34;;;;;;;;;;-1:-1:-1;14303:34:0;;;;;;;;14728:25;;;;;;;;;;;;;;;;14842:31;;;;;;;;;;-1:-1:-1;14842:31:0;;;;;;;;;;;6511:127;;;;;;;;;;-1:-1:-1;6511:127:0;;;;;:::i;:::-;;:::i;10150:150::-;;;;;;;;;;;;;:::i;18978:115::-;;;;;;;;;;;;;:::i;21331:260::-;;;;;;;;;;-1:-1:-1;21331:260:0;;;;;:::i;:::-;;:::i;14081:30::-;;;;;;;;;;;;;;;;30059:207;;;;;;;;;;-1:-1:-1;30059:207:0;;;;;:::i;:::-;;:::i;22158:391::-;;;;;;;;;;-1:-1:-1;22158:391:0;;;;;:::i;:::-;;:::i;18531:::-;;;;;;;;;;-1:-1:-1;18531:391:0;;;;;:::i;:::-;;:::i;35391:394::-;;;;;;;;;;-1:-1:-1;35391:394:0;;;;;:::i;:::-;;:::i;31813:1254::-;;;;;;;;;;-1:-1:-1;31813:1254:0;;;;;:::i;:::-;;:::i;13924:27::-;;;;;;;;;;;;;;;;35039:344;;;;;;;;;;;;;:::i;9936:79::-;;;;;;;;;;-1:-1:-1;10001:6:0;;-1:-1:-1;;;;;10001:6:0;9936:79;;6182:104;;;;;;;;;;;;;:::i;21599:295::-;;;;;;;;;;-1:-1:-1;21599:295:0;;;;;:::i;:::-;;:::i;7888:413::-;;;;;;;;;;-1:-1:-1;7888:413:0;;;;;:::i;:::-;;:::i;14632:33::-;;;;;;;;;;;;;;;;6646:175;;;;;;;;;;-1:-1:-1;6646:175:0;;;;;:::i;:::-;;:::i;15263:31::-;;;;;;;;;;;;;;;;13993:30;;;;;;;;;;;;;;;;14118:48;;;;;;;;;;;;;;;;19322:226;;;;;;;;;;-1:-1:-1;19322:226:0;;;;;:::i;:::-;;:::i;15716:58::-;;;;;;;;;;-1:-1:-1;15716:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14802:33;;;;;;;;;;-1:-1:-1;14802:33:0;;;;;;;;;;;22965:182;;;;;;;;;;-1:-1:-1;22965:182:0;;;;;:::i;:::-;;:::i;22557:400::-;;;;;;;;;;-1:-1:-1;22557:400:0;;;;;:::i;:::-;;:::i;14995:28::-;;;;;;;;;;;;;;;;20409:233;;;;;;;;;;-1:-1:-1;20409:233:0;;;;;:::i;:::-;;:::i;15303:38::-;;;;;;;;;;;;;;;;14886:27;;;;;;;;;;;;;;;;19101:102;;;;;;;;;;-1:-1:-1;19101:102:0;;;;;:::i;:::-;;:::i;19822:254::-;;;;;;;;;;-1:-1:-1;19822:254:0;;;;;:::i;:::-;;:::i;14258:38::-;;;;;;;;;;;;;;;;6829:151;;;;;;;;;;-1:-1:-1;6829:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;6945:18:0;;;6918:7;6945:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6829:151;15435:52;;;;;;;;;;-1:-1:-1;15435:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14479:33;;;;;;;;;;;;;;;;14555:37;;;;;;;;;;;;;;;;14958:30;;;;;;;;;;;;;;;;10308:244;;;;;;;;;;-1:-1:-1;10308:244:0;;;;;:::i;:::-;;:::i;30448:142::-;;;;;;;;;;-1:-1:-1;30448:142:0;;;;;:::i;:::-;;:::i;35823:157::-;;;;;;;;;;;;;:::i;15106:31::-;;;;;;;;;;;;;;;;14173:38;;;;;;;;;;;;;;;;15182:34;;;;;;;;;;;;;;;;14218:33;;;;;;;;;;-1:-1:-1;14218:33:0;;;;;;;;18388:131;;;;;;;;;;-1:-1:-1;18388:131:0;;;;;:::i;:::-;;:::i;6074:100::-;6128:13;6161:5;6154:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6074:100;:::o;6988:169::-;7071:4;7088:39;1600:10;7111:7;7120:6;7088:8;:39::i;:::-;-1:-1:-1;7145:4:0;6988:169;;;;;:::o;20084:255::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;;;;;;;;;20202:16:::1;6377:2:::0;20202::::1;:16;:::i;:::-;20194:3;20174:13;6483:12:::0;;;6395:108;20174:13:::1;:17;::::0;20190:1:::1;20174:17;:::i;:::-;:23;;;;:::i;:::-;20173:46;;;;:::i;:::-;20163:6;:56;;20155:65;;;::::0;::::1;;20259:16;6377:2:::0;20259::::1;:16;:::i;:::-;20249:27;::::0;:6;:27:::1;:::i;:::-;20231:15;:45:::0;;;20292:39:::1;::::0;19203:25:1;;;20292:39:0::1;::::0;19191:2:1;19176:18;20292:39:0::1;;;;;;;;20084:255:::0;:::o;20869:450::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;21011:15:::1;:22;20993:7;:14;:40;20985:49;;;::::0;::::1;;21070:3;21053:7;:14;:20;21045:29;;;::::0;::::1;;21187:9;21183:129;21206:7;:14;21202:1;:18;21183:129;;;21241:59;21257:10;21269:7;21277:1;21269:10;;;;;;-1:-1:-1::0;;;21269:10:0::1;;;;;;;;;;;;;;;21281:15;21297:1;21281:18;;;;;;-1:-1:-1::0;;;21281:18:0::1;;;;;;;;;;;;;;;21241:15;:59::i;:::-;21222:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21183:129;;;;20869:450:::0;;:::o;7165:492::-;7305:4;7322:36;7332:6;7340:9;7351:6;7322:9;:36::i;:::-;-1:-1:-1;;;;;7398:19:0;;7371:24;7398:19;;;:11;:19;;;;;;;;1600:10;7398:33;;;;;;;;7450:26;;;;7442:79;;;;-1:-1:-1;;;7442:79:0;;16793:2:1;7442:79:0;;;16775:21:1;16832:2;16812:18;;;16805:30;16871:34;16851:18;;;16844:62;-1:-1:-1;;;16922:18:1;;;16915:38;16970:19;;7442:79:0;16765:230:1;7442:79:0;7557:57;7566:6;1600:10;7607:6;7588:16;:25;7557:8;:57::i;:::-;-1:-1:-1;7645:4:0;;7165:492;-1:-1:-1;;;;7165:492:0:o;19211:103::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19282:14:::1;:24:::0;;-1:-1:-1;;19282:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19211:103::o;30598:105::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;30670:14:::1;:25:::0;;-1:-1:-1;;30670:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30598:105::o;19560:250::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19682:16:::1;6377:2:::0;19682::::1;:16;:::i;:::-;19673:4;19653:13;6483:12:::0;;;6395:108;19653:13:::1;:17;::::0;19669:1:::1;19653:17;:::i;:::-;:24;;;;:::i;:::-;19652:47;;;;:::i;:::-;19642:6;:57;;19634:66;;;::::0;::::1;;19736:16;6377:2:::0;19736::::1;:16;:::i;:::-;19726:27;::::0;:6;:27:::1;:::i;:::-;19711:12;:42:::0;;;19769:33:::1;::::0;19203:25:1;;;19769:33:0::1;::::0;19191:2:1;19176:18;19769:33:0::1;19158:76:1::0;7665:215:0;1600:10;7753:4;7802:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7802:34:0;;;;;;;;;;7753:4;;7770:80;;7793:7;;7802:47;;7839:10;;7802:47;:::i;:::-;7770:8;:80::i;35988:195::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36084:32:0;::::1;36076:41;;;::::0;::::1;;36128:17;:47:::0;;-1:-1:-1;;;;;;36128:47:0::1;-1:-1:-1::0;;;;;36128:47:0;;;::::1;::::0;;;::::1;::::0;;35988:195::o;36235:312::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;36326:18:::1;;36298:24;36316:4;36298:9;:24::i;:::-;:46;;36290:123;;;::::0;;-1:-1:-1;;;36290:123:0;;16360:2:1;36290:123:0::1;::::0;::::1;16342:21:1::0;16379:18;;;16372:30;;;;16438:34;16418:18;;;16411:62;16509:34;16489:18;;;16482:62;16561:19;;36290:123:0::1;16332:254:1::0;36290:123:0::1;36424:8;:15:::0;;-1:-1:-1;;;;36424:15:0::1;-1:-1:-1::0;;;36424:15:0::1;::::0;;36450:10:::1;:8;:10::i;:::-;36471:8;:16:::0;;-1:-1:-1;;;;36471:16:0::1;::::0;;36503:36:::1;::::0;36523:15:::1;19203:25:1::0;;36503:36:0::1;::::0;19191:2:1;19176:18;36503:36:0::1;;;;;;;36235:312::o:0;30274:166::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;30373:2:::1;30362:7;:13;;:31;;;;;30390:3;30379:7;:14;;30362:31;30354:40;;;::::0;::::1;;30405:17;:27:::0;30274:166::o;6511:127::-;-1:-1:-1;;;;;6612:18:0;6585:7;6612:18;;;;;;;;;;;;6511:127::o;10150:150::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;10243:6:::1;::::0;10222:40:::1;::::0;10259:1:::1;::::0;-1:-1:-1;;;;;10243:6:0::1;::::0;10222:40:::1;::::0;10259:1;;10222:40:::1;10273:6;:19:::0;;-1:-1:-1;;;;;;10273:19:0::1;::::0;;10150:150::o;18978:115::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19032:14:::1;:22:::0;;-1:-1:-1;;19032:22:0::1;::::0;;19070:15:::1;::::0;::::1;::::0;19049:5:::1;::::0;19070:15:::1;18978:115::o:0;21331:260::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;21427:4:::1;21423:104;;21465:6;::::0;-1:-1:-1;;;;;21455:16:0;;::::1;21465:6:::0;::::1;21455:16;;21447:68;;;::::0;-1:-1:-1;;;21447:68:0;;14712:2:1;21447:68:0::1;::::0;::::1;14694:21:1::0;14751:2;14731:18;;;14724:30;14790:34;14770:18;;;14763:62;-1:-1:-1;;;14841:18:1;;;14834:37;14888:19;;21447:68:0::1;14684:229:1::0;21447:68:0::1;-1:-1:-1::0;;;;;21537:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21537:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21331:260::o;30059:207::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;30172:1:::1;30155:13;:18;;:43;;;;;30194:4;30177:13;:21;;30155:43;30147:52;;;::::0;::::1;;30233:25;:13:::0;30249:9:::1;30233:25;:::i;:::-;30210:20;:48:::0;-1:-1:-1;30059:207:0:o;22158:391::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;22279:16:::1;:33:::0;;;22323:15:::1;:31:::0;;;22365:13:::1;:27:::0;;;22381:11;22418:34:::1;22341:13:::0;22298:14;22418:34:::1;:::i;:::-;:50;;;;:::i;:::-;22403:12;:65:::0;;;22503:4:::1;-1:-1:-1::0;22487:20:0::1;22479:62;;;::::0;-1:-1:-1;;;22479:62:0;;13193:2:1;22479:62:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:31;13251:18;;;13244:59;13320:18;;22479:62:0::1;13165:179:1::0;18531:391:0;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;18618:18:::1;::::0;:23;18610:32:::1;;;::::0;::::1;;18653:13;:20:::0;;-1:-1:-1;;18684:18:0;;;;;18734:12:::1;18713:18;:33:::0;;;18778:37:::1;::::0;18799:16;;18778:37:::1;:::i;:::-;18757:18;:58:::0;18862:20:::1;::::0;18844:38:::1;::::0;:15:::1;:38;:::i;:::-;18826:15;:56:::0;18898:16:::1;::::0;::::1;::::0;;;::::1;18531:391:::0;:::o;35391:394::-;10063:6;;35478:10;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35509:20:0;::::1;35501:29;;;::::0;::::1;;-1:-1:-1::0;;;;;35549:23:0;::::1;35567:4;35549:23;;35541:32;;;::::0;::::1;;35611:39;::::0;-1:-1:-1;;;35611:39:0;;35644:4:::1;35611:39;::::0;::::1;9191:51:1::0;35584:24:0::1;::::0;-1:-1:-1;;;;;35611:24:0;::::1;::::0;::::1;::::0;9164:18:1;;35611:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35669:46;::::0;-1:-1:-1;;;35669:46:0;;-1:-1:-1;;;;;9734:32:1;;;35669:46:0::1;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;35584:66:0;;-1:-1:-1;35669:23:0;;::::1;::::0;::::1;::::0;9689:18:1;;35669:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35731;::::0;;-1:-1:-1;;;;;9734:32:1;;9716:51;;9798:2;9783:18;;9776:34;;;35661:54:0;;-1:-1:-1;35731:46:0::1;::::0;9689:18:1;35731:46:0::1;;;;;;;10133:1;35391:394:::0;;;;:::o;31813:1254::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;31909:2:::1;31899:7;:12;;31891:21;;;::::0;::::1;;31952:25;31970:7;31952:15;:25;:::i;:::-;31931:17;;:46;;31923:55;;;::::0;::::1;;32009:15;31989:17;:35:::0;32062:6:::1;::::0;32055:39:::1;::::0;-1:-1:-1;;;32055:39:0;;32088:4:::1;32055:39;::::0;::::1;9191:51:1::0;32035:17:0::1;::::0;-1:-1:-1;;;;;32062:6:0::1;::::0;32055:24:::1;::::0;9164:18:1;;32055:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32035:59;;32105:20;32128:24;32146:4;32128:9;:24::i;:::-;32105:47:::0;-1:-1:-1;32163:16:0::1;32204:3;32182:19;32194:7:::0;32182:9;:19:::1;:::i;:::-;:25;;;;:::i;:::-;32354:6;::::0;32378:9:::1;::::0;32347:52:::1;::::0;-1:-1:-1;;;32347:52:0;;-1:-1:-1;;;;;32378:9:0;;::::1;32347:52;::::0;::::1;9716:51:1::0;9783:18;;;9776:34;;;32163:44:0;;-1:-1:-1;32246:21:0::1;::::0;32354:6;::::1;::::0;32347:22:::1;::::0;9689:18:1;;32347:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;32445:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;32445:234:0;;-1:-1:-1;;;;;32445:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;32496:4:::1;::::0;32516:8;;32445:9;;;;32496:4;;32653:15:::1;::::0;32445:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32692:25;32747:12;32720:24;32738:4;32720:9;:24::i;:::-;:39;;;;:::i;:::-;32692:67:::0;-1:-1:-1;32773:21:0;;32770:118:::1;;32810:66;32834:4;32849:6;32858:17;32810:15;:66::i;:::-;32900:23;32926:41;32950:17:::0;32926:21:::1;:41;:::i;:::-;32900:67:::0;-1:-1:-1;32983:19:0;;32980:80:::1;;33018:30;33032:15;33018:13;:30::i;:::-;10133:1;;;;;;31813:1254:::0;:::o;35039:344::-;35132:16;;;35146:1;35132:16;;;;;;;;35089:7;;;;35132:16;35146:1;35132:16;;;;;;;;-1:-1:-1;;35169:9:0;;:16;;;-1:-1:-1;;;35169:16:0;;;;35108:40;;-1:-1:-1;;;;;;35169:9:0;;;;:14;;-1:-1:-1;35169:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35159:4;35164:1;35159:7;;;;;;-1:-1:-1;;;35159:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;35159:26:0;;;-1:-1:-1;;;;;35159:26:0;;;;;35214:4;35196;35201:1;35196:7;;;;;;-1:-1:-1;;;35196:7:0;;;;;;;;;-1:-1:-1;;;;;35196:23:0;;;;:7;;;;;;;;;;:23;35267:16;;;35281:1;35267:16;;;;;;;;35240:24;;35267:16;;35281:1;;35267:16;;;;;;;;;-1:-1:-1;;35304:9:0;;35328:12;;35304:43;;-1:-1:-1;;;35304:43:0;;35240;;-1:-1:-1;;;;;;35304:9:0;;;;:23;;:43;;35342:4;;35304:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35304:43:0;;;;;;;;;;;;:::i;:::-;35294:53;;35365:7;35373:1;35365:10;;;;;;-1:-1:-1;;;35365:10:0;;;;;;;;;;;;;;;35358:17;;;;35039:344;:::o;6182:104::-;6238:13;6271:7;6264:14;;;;;:::i;21599:295::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;21708:6:::1;::::0;-1:-1:-1;;;;;21700:14:0;;::::1;21708:6:::0;::::1;21700:14;;21692:84;;;::::0;-1:-1:-1;;;21692:84:0;;15120:2:1;21692:84:0::1;::::0;::::1;15102:21:1::0;15159:2;15139:18;;;15132:30;15198:34;15178:18;;;15171:62;15269:27;15249:18;;;15242:55;15314:19;;21692:84:0::1;15092:247:1::0;21692:84:0::1;21789:41;21818:4;21824:5;21789:28;:41::i;:::-;21846:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21846:40:0;::::1;::::0;::::1;::::0;;;::::1;21599:295:::0;;:::o;7888:413::-;1600:10;7981:4;8025:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8025:34:0;;;;;;;;;;8078:35;;;;8070:85;;;;-1:-1:-1;;;8070:85:0;;18853:2:1;8070:85:0;;;18835:21:1;18892:2;18872:18;;;18865:30;18931:34;18911:18;;;18904:62;-1:-1:-1;;;18982:18:1;;;18975:35;19027:19;;8070:85:0;18825:227:1;8070:85:0;8191:67;1600:10;8214:7;8242:15;8223:16;:34;8191:8;:67::i;:::-;-1:-1:-1;8289:4:0;;7888:413;-1:-1:-1;;;7888:413:0:o;6646:175::-;6732:4;6749:42;1600:10;6773:9;6784:6;6749:9;:42::i;19322:226::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19434:9:::1;19430:111;19449:18:::0;;::::1;19430:111;;;19519:10;19488:16;:28;19505:7;;19513:1;19505:10;;;;;-1:-1:-1::0;;;19505:10:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19488:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19488:28:0;:41;;-1:-1:-1;;19488:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19469:3;::::1;::::0;::::1;:::i;:::-;;;;19430:111;;;;19322:226:::0;;;:::o;22965:182::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23050:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23050:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23105:34;;11185:41:1;;;23105:34:0::1;::::0;11158:18:1;23105:34:0::1;;;;;;;22965:182:::0;;:::o;22557:400::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;22679:17:::1;:34:::0;;;22724:16:::1;:32:::0;;;22767:14:::1;:28:::0;;;22784:11;22822:36:::1;22743:13:::0;22699:14;22822:36:::1;:::i;:::-;:53;;;;:::i;:::-;22806:13;:69:::0;;;22911:4:::1;-1:-1:-1::0;22894:21:0::1;22886:63;;;::::0;-1:-1:-1;;;22886:63:0;;13193:2:1;22886:63:0::1;::::0;::::1;13175:21:1::0;13232:2;13212:18;;;13205:30;13271:31;13251:18;;;13244:59;13320:18;;22886:63:0::1;13165:179:1::0;20409:233:0;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;20532:6:::1;20512:13;6483:12:::0;;;6395:108;20512:13:::1;:17;::::0;20528:1:::1;20512:17;:::i;:::-;:26;;;;:::i;:::-;20499:9;:39;;20491:48;;;::::0;::::1;;20590:4;20570:13;6483:12:::0;;;6395:108;20570:13:::1;:17;::::0;20586:1:::1;20570:17;:::i;:::-;:24;;;;:::i;:::-;20557:9;:37;;20549:46;;;::::0;::::1;;20605:18;:30:::0;20409:233::o;19101:102::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19173:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;19173:22:0;;::::1;::::0;;;::::1;::::0;;19101:102::o;19822:254::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;19945:16:::1;6377:2:::0;19945::::1;:16;:::i;:::-;19936:4;19916:13;6483:12:::0;;;6395:108;19916:13:::1;:17;::::0;19932:1:::1;19916:17;:::i;:::-;:24;;;;:::i;:::-;19915:47;;;;:::i;:::-;19905:6;:57;;19897:66;;;::::0;::::1;;20000:16;6377:2:::0;20000::::1;:16;:::i;:::-;19990:27;::::0;:6;:27:::1;:::i;:::-;19974:13;:43:::0;;;20033:35:::1;::::0;19203:25:1;;;20033:35:0::1;::::0;19191:2:1;19176:18;20033:35:0::1;19158:76:1::0;10308:244:0;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10397:22:0;::::1;10389:73;;;::::0;-1:-1:-1;;;10389:73:0;;13902:2:1;10389:73:0::1;::::0;::::1;13884:21:1::0;13941:2;13921:18;;;13914:30;13980:34;13960:18;;;13953:62;-1:-1:-1;;;14031:18:1;;;14024:36;14077:19;;10389:73:0::1;13874:228:1::0;10389:73:0::1;10499:6;::::0;10478:38:::1;::::0;-1:-1:-1;;;;;10478:38:0;;::::1;::::0;10499:6:::1;::::0;10478:38:::1;::::0;10499:6:::1;::::0;10478:38:::1;10527:6;:17:::0;;-1:-1:-1;;;;;;10527:17:0::1;-1:-1:-1::0;;;;;10527:17:0;;;::::1;::::0;;;::::1;::::0;;10308:244::o;30448:142::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;30548:1:::1;30539:6;:10;30531:19;;;::::0;::::1;;30561:12;:21:::0;30448:142::o;35823:157::-;10063:6;;-1:-1:-1;;;;;10063:6:0;1600:10;10063:22;10055:67;;;;-1:-1:-1;;;10055:67:0;;;;;;;:::i;:::-;35881:12:::1;35925:7;10001:6:::0;;-1:-1:-1;;;;;10001:6:0;;9936:79;35925:7:::1;-1:-1:-1::0;;;;;35917:21:0::1;35946;35917:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18388:131:::0;18461:4;18484:27;:9;18503:7;18484:18;:27::i;9225:380::-;-1:-1:-1;;;;;9361:19:0;;9353:68;;;;-1:-1:-1;;;9353:68:0;;18448:2:1;9353:68:0;;;18430:21:1;18487:2;18467:18;;;18460:30;18526:34;18506:18;;;18499:62;-1:-1:-1;;;18577:18:1;;;18570:34;18621:19;;9353:68:0;18420:226:1;9353:68:0;-1:-1:-1;;;;;9440:21:0;;9432:68;;;;-1:-1:-1;;;9432:68:0;;14309:2:1;9432:68:0;;;14291:21:1;14348:2;14328:18;;;14321:30;14387:34;14367:18;;;14360:62;-1:-1:-1;;;14438:18:1;;;14431:32;14480:19;;9432:68:0;14281:224:1;9432:68:0;-1:-1:-1;;;;;9513:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9565:32;;19203:25:1;;;9565:32:0;;19176:18:1;9565:32:0;;;;;;;9225:380;;;:::o;8309:614::-;-1:-1:-1;;;;;8449:20:0;;8441:70;;;;-1:-1:-1;;;8441:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8530:23:0;;8522:71;;;;-1:-1:-1;;;8522:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8630:17:0;;8606:21;8630:17;;;;;;;;;;;8666:23;;;;8658:74;;;;-1:-1:-1;;;8658:74:0;;15953:2:1;8658:74:0;;;15935:21:1;15992:2;15972:18;;;15965:30;16031:34;16011:18;;;16004:62;-1:-1:-1;;;16082:18:1;;;16075:36;16128:19;;8658:74:0;15925:228:1;8658:74:0;-1:-1:-1;;;;;8768:17:0;;;:9;:17;;;;;;;;;;;8788:22;;;8768:42;;8832:20;;;;;;;;:30;;8804:6;;8768:9;8832:30;;8804:6;;8832:30;:::i;:::-;;;;;;;;8897:9;-1:-1:-1;;;;;8880:35:0;8889:6;-1:-1:-1;;;;;8880:35:0;;8908:6;8880:35;;;;19203:25:1;;19191:2;19176:18;;19158:76;8880:35:0;;;;;;;;8309:614;;;;:::o;23155:5102::-;-1:-1:-1;;;;;23255:18:0;;23247:68;;;;-1:-1:-1;;;23247:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23334:16:0;;23326:64;;;;-1:-1:-1;;;23326:64:0;;;;;;;:::i;:::-;23418:1;23409:6;:10;23401:61;;;;-1:-1:-1;;;23401:61:0;;15546:2:1;23401:61:0;;;15528:21:1;15585:2;15565:18;;;15558:30;15624:34;15604:18;;;15597:62;-1:-1:-1;;;15675:18:1;;;15668:36;15721:19;;23401:61:0;15518:228:1;23401:61:0;23487:13;;;;;;;23483:132;;-1:-1:-1;;;;;23524:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23553:23:0;;;;;;:19;:23;;;;;;;;23524:52;23516:87;;;;-1:-1:-1;;;23516:87:0;;13551:2:1;23516:87:0;;;13533:21:1;13590:2;13570:18;;;13563:30;-1:-1:-1;;;13609:18:1;;;13602:52;13671:18;;23516:87:0;13523:172:1;23516:87:0;28359:18;;28344:12;:33;23630:26;:52;;;;;23681:1;23660:18;;:22;23630:52;23627:231;;;-1:-1:-1;;;;;23707:22:0;;;;;;:16;:22;;;;;;;;23706:23;;:40;;-1:-1:-1;10001:6:0;;-1:-1:-1;;;;;23733:13:0;;;10001:6;;23733:13;23706:40;:65;;;-1:-1:-1;;;;;;23750:21:0;;23764:6;23750:21;23706:65;23698:148;;;;-1:-1:-1;;;23698:148:0;;17563:2:1;23698:148:0;;;17545:21:1;17602:2;17582:18;;;17575:30;17641:34;17621:18;;;17614:62;17712:34;17692:18;;;17685:62;-1:-1:-1;;;17763:19:1;;;17756:37;17810:19;;23698:148:0;17535:300:1;23698:148:0;23881:14;;;;23878:878;;;10001:6;;-1:-1:-1;;;;;23915:15:0;;;10001:6;;23915:15;;;;:32;;-1:-1:-1;10001:6:0;;-1:-1:-1;;;;;23934:13:0;;;10001:6;;23934:13;;23915:32;:52;;;;-1:-1:-1;;;;;;23951:16:0;;;;23915:52;:77;;;;-1:-1:-1;;;;;;23971:21:0;;23985:6;23971:21;;23915:77;:107;;;;-1:-1:-1;;;;;;23997:25:0;;;;;;:19;:25;;;;;;;;23996:26;23915:107;:135;;;;-1:-1:-1;;;;;;24027:23:0;;;;;;:19;:23;;;;;;;;24026:24;23915:135;23911:834;;;-1:-1:-1;;;;;24135:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24171:35:0;;;;;;:31;:35;;;;;;;;24170:36;24135:71;24131:599;;;24253:12;;24243:6;:22;;24235:31;;;;;;24327:15;;24310:13;24320:2;24310:9;:13::i;:::-;24301:22;;:6;:22;:::i;:::-;:41;;24293:50;;;;;;24131:599;;;-1:-1:-1;;;;;24420:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24454:37:0;;;;;;:31;:37;;;;;;;;24453:38;24420:71;24416:314;;;24538:13;;24528:6;:23;;24520:32;;;;;24416:314;-1:-1:-1;;;;;24601:35:0;;;;;;:31;:35;;;;;;;;24596:134;;24694:15;;24677:13;24687:2;24677:9;:13::i;:::-;24668:22;;:6;:22;:::i;:::-;:41;;24660:50;;;;;;24768:28;24799:24;24817:4;24799:9;:24::i;:::-;24883:18;;24768:55;;-1:-1:-1;24859:42:0;;;;;;;24917:22;;-1:-1:-1;24928:11:0;;;;;;;24917:22;:35;;;;-1:-1:-1;24944:8:0;;-1:-1:-1;;;24944:8:0;;;;24943:9;24917:35;:71;;;;-1:-1:-1;;;;;;24957:31:0;;;;;;:25;:31;;;;;;;;24956:32;24917:71;:101;;;;-1:-1:-1;;;;;;24993:25:0;;;;;;:19;:25;;;;;;;;24992:26;24917:101;:129;;;;-1:-1:-1;;;;;;25023:23:0;;;;;;:19;:23;;;;;;;;25022:24;24917:129;24914:232;;;25063:8;:15;;-1:-1:-1;;;;25063:15:0;-1:-1:-1;;;25063:15:0;;;25093:10;:8;:10::i;:::-;25118:8;:16;;-1:-1:-1;;;;25118:16:0;;;24914:232;25161:14;;;;25158:262;;;25213:15;;25194;:34;;:73;;;;;25257:10;25232:21;:35;;25194:73;:99;;;;;25292:1;25271:18;:9;:16;:18::i;:::-;:22;25194:99;25191:218;;;25313:17;25327:2;25313:13;:17::i;:::-;25191:218;;;25384:9;:7;:9::i;:::-;-1:-1:-1;;;;;25550:25:0;;25432:12;25550:25;;;:19;:25;;;;;;25447:4;;25550:25;;;:52;;-1:-1:-1;;;;;;25579:23:0;;;;;;:19;:23;;;;;;;;25550:52;25547:99;;;-1:-1:-1;25629:5:0;25547:99;25666:12;25770:7;25767:2337;;;28359:18;;28344:12;:33;25833:106;;;;25888:8;25873:12;;:23;;;;:::i;:::-;25863:6;:33;;:75;;;;;25926:12;25900:18;;25921:1;25900:22;;;;:::i;:::-;:38;;25863:75;25832:143;;;;-1:-1:-1;;;;;;25944:31:0;;;;;;:25;:31;;;;;;;;25832:143;:177;;;;-1:-1:-1;;;;;;25980:29:0;;;;;;:25;:29;;;;;;;;25979:30;25832:177;:197;;;;;26028:1;26013:12;;:16;25832:197;25829:2106;;;28359:18;;28344:12;:33;26067:330;;26376:1;26360:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26067:330:0;-1:-1:-1;;;;;26421:20:0;;;;;;:16;:20;;;;;;;;26417:174;;-1:-1:-1;;;;;26465:20:0;;;;;;:16;:20;;;;;:27;;-1:-1:-1;;26465:27:0;26488:4;26465:27;;;;;;26515:10;:15;;26488:4;;26515:10;;:15;;26488:4;;26515:15;:::i;:::-;;;;-1:-1:-1;;26558:13:0;;-1:-1:-1;;;;;9209:32:1;;9191:51;;26558:13:0;;9179:2:1;9164:18;26558:13:0;;;;;;;26417:174;26642:15;;26627:12;;26618:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;26611:46;;26720:12;;26702:15;;26695:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;26673:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26800:12:0;;26781:16;;26774:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;26751:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26874:12:0;;26858:13;;26851:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;26831:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;25829:2106:0;;-1:-1:-1;25829:2106:0;;-1:-1:-1;;;;;26951:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27000:1;26984:13;;:17;26951:50;26947:988;;;27053:15;;27037:13;;27028:22;;:6;:22;:::i;:::-;:40;;;;:::i;:::-;27021:47;;27135:13;;27116:16;;27109:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27087:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27217:13:0;;27197:17;;27190:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27167:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27293:13:0;;27276:14;;27269:21;;:4;:21;:::i;26947:988::-;-1:-1:-1;;;;;27369:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27419:1;27404:12;;:16;27369:51;27366:569;;;27469:15;;27454:12;;27445:21;;:6;:21;:::i;:::-;:39;;;;:::i;:::-;27438:46;;27547:12;;27529:15;;27522:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27500:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27627:12:0;;27608:16;;27601:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27578:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27701:12:0;;27685:13;;27678:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;27658:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;27736:14:0;;;;27735:15;;:47;;;27763:19;:17;:19::i;:::-;27754:6;:28;27735:47;27732:188;;;27810:22;:9;27829:2;27810:18;:22::i;:::-;27806:95;;27860:17;:9;27874:2;27860:13;:17::i;:::-;;27806:95;27966:8;;27963:93;;27998:42;28014:4;28028;28035;27998:15;:42::i;:::-;28078:14;28088:4;28078:14;;:::i;:::-;;;25767:2337;28116:33;28132:4;28138:2;28142:6;28116:15;:33::i;:::-;28165:24;:9;28184:4;28165:18;:24::i;:::-;:35;;;;;28193:7;28165:35;28162:88;;;28216:22;:9;28233:4;28216:16;:22::i;:::-;;23155:5102;;;;;;;:::o;33465:1566::-;33506:23;33532:24;33550:4;33532:9;:24::i;:::-;33506:50;;33567:25;33638:16;;33616:19;;33595:18;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;33567:87;-1:-1:-1;33678:20:0;;;:46;;-1:-1:-1;33702:22:0;;33678:46;33675:60;;;33727:7;;33465:1566::o;33675:60::-;33768:18;;:23;;33789:2;33768:23;:::i;:::-;33750:15;:41;33747:113;;;33825:18;;:23;;33846:2;33825:23;:::i;:::-;33807:41;;33747:113;33872:12;33954:23;34039:1;34019:17;33998:18;;33980:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;33954:86;-1:-1:-1;34086:21:0;34118:51;34135:33;33954:86;34135:15;:33;:::i;:::-;34118:16;:51::i;:::-;34190:18;34211:38;34235:14;34211:21;:38;:::i;:::-;34190:59;;34260:23;34286:10;34260:36;;34309:24;34412:1;34393:18;;:20;;;;:::i;:::-;34372:42;;:17;:42;:::i;:::-;34349:19;;34336:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;34309:106;;34426:21;34523:1;34504:18;;:20;;;;:::i;:::-;34483:42;;:17;:42;:::i;:::-;34463:16;;34450:29;;:10;:29;:::i;:::-;:76;;;;:::i;:::-;34426:100;-1:-1:-1;34558:32:0;34426:100;34558:16;:32;:::i;:::-;34539:51;;;;:::i;:::-;34636:1;34615:18;:22;;;34648:19;:23;;;34682:16;:20;34539:51;-1:-1:-1;34726:19:0;;;;;:42;;;34767:1;34749:15;:19;34726:42;34723:119;;;34784:46;34797:15;34814;34784:12;:46::i;:::-;34857:20;;34854:124;;34914:17;;34906:60;;-1:-1:-1;;;;;34914:17:0;;;;34945:16;;34906:60;;;;34945:16;34914:17;34906:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34893:73:0;;-1:-1:-1;;34854:124:0;33465:1566;;;;;;;;;:::o;33075:382::-;33163:16;;;33177:1;33163:16;;;;;;;;33139:21;;33163:16;;;;;;;;-1:-1:-1;;33200:9:0;;:16;;;-1:-1:-1;;;33200:16:0;;;;33139:40;;-1:-1:-1;;;;;;33200:9:0;;;;:14;;-1:-1:-1;33200:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33190:4;33195:1;33190:7;;;;;;-1:-1:-1;;;33190:7:0;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;33190:26:0;;;-1:-1:-1;;;;;33190:26:0;;;;;33245:4;33227;33232:1;33227:7;;;;;;-1:-1:-1;;;33227:7:0;;;;;;;;;-1:-1:-1;;;;;33227:23:0;;;:7;;;;;;;;;:23;33263:9;;:186;;-1:-1:-1;;;33263:186:0;;:9;;;:60;;33331:11;;33263:186;;:9;;33374:4;;33401:6;;33423:15;;33263:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21902:248;-1:-1:-1;;;;;21985:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21985:39:0;;;;;;;22045;21985:31;:39;22045:26;:39::i;3964:167::-;-1:-1:-1;;;;;4098:23:0;;4044:4;3078:19;;;:12;;;:19;;;;;;:24;;4068:55;4061:62;3964:167;-1:-1:-1;;;3964:167:0:o;4217:117::-;4280:7;4307:19;4315:3;3201:18;;3118:109;28849:562;28903:12;28962:20;;28944:15;:38;;;;:::i;:::-;28926:15;:56;29032:14;29049:125;29062:111;29032:14;29091:1;29072:18;:9;:16;:18::i;:::-;:20;;;;:::i;:::-;29150:22;29168:2;29150:9;:22::i;:::-;29121:26;29139:6;29121:9;:26::i;:::-;29094:24;29112:4;29094:9;:24::i;:::-;:53;;;;:::i;:::-;:78;;;;:::i;:::-;29062:6;:111::i;:::-;29049:9;;:12;:125::i;:::-;29032:142;;29185:16;29248:3;29228:17;;29204:21;:41;;;;:::i;:::-;:47;;;;:::i;:::-;29185:66;;29283:6;-1:-1:-1;;;;;29275:20:0;29303:8;29275:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29262:54:0;;-1:-1:-1;;29327:77:0;;;;29358:34;;-1:-1:-1;;;;;29358:34:0;;;29375:8;;29358:34;;;;;28849:562;;;;:::o;28551:286::-;28589:12;;28675:25;28699:1;28675:21;:25;:::i;:::-;-1:-1:-1;;28788:41:0;;28711:14;;28736:4;;;;28711:14;;;28788:41;28711:14;28788:41;28711:14;28736:4;28788:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28551:286:0:o;3560:152::-;3630:4;3654:50;3659:3;-1:-1:-1;;;;;3679:23:0;;3654:4;:50::i;3720:158::-;3793:4;3817:53;3825:3;-1:-1:-1;;;;;3845:23:0;;3817:7;:53::i;30713:573::-;30865:16;;;30879:1;30865:16;;;;;;;;30841:21;;30865:16;;;;;;;;;;-1:-1:-1;30865:16:0;30841:40;;30910:4;30892;30897:1;30892:7;;;;;;-1:-1:-1;;;30892:7:0;;;;;;;;;-1:-1:-1;;;;;30892:23:0;;;:7;;;;;;;;;;:23;;;;30936:9;;:16;;;-1:-1:-1;;;30936:16:0;;;;:9;;;;;:14;;:16;;;;;30892:7;;30936:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30926:4;30931:1;30926:7;;;;;;-1:-1:-1;;;30926:7:0;;;;;;;;;-1:-1:-1;;;;;30926:26:0;;;:7;;;;;;;;;:26;30997:9;;30965:56;;30982:4;;30997:9;31009:11;30965:8;:56::i;:::-;31060:9;;:218;;-1:-1:-1;;;31060:218:0;;-1:-1:-1;;;;;31060:9:0;;;;:60;;:218;;31135:11;;31060:9;;31205:4;;31232;;31252:15;;31060:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31298:507;31478:9;;31446:56;;31463:4;;-1:-1:-1;;;;;31478:9:0;31490:11;31446:8;:56::i;:::-;31545:9;;:252;;-1:-1:-1;;;31545:252:0;;-1:-1:-1;;;;;31545:9:0;;;;:25;;31578:9;;31545:252;;31611:4;;31631:11;;31545:9;;;;31611:4;;31771:15;;31545:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31298:507;;:::o;20654:207::-;-1:-1:-1;;;;;20742:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;20742:52:0;;;;;;;;;;20810:43;;9421:51:1;;;9488:18;;;9481:50;20810:43:0;;9394:18:1;20810:43:0;;;;;;;20654:207;;:::o;29419:632::-;29838:28;;-1:-1:-1;;29855:10:0;8313:2:1;8309:15;8305:53;29838:28:0;;;8293:66:1;29498:7:0;;;;29950:5;;29914:12;;29873:15;;8375:12:1;;29838:28:0;;;;;;;;;;;;29828:39;;;;;;29820:48;;29819:70;;;;:::i;:::-;29700:32;;-1:-1:-1;;29717:14:0;8313:2:1;8309:15;8305:53;29700:32:0;;;8293:66:1;29780:14:0;;29739:15;;8375:12:1;;29700:32:0;;;;;;;;;;;;29690:43;;;;;;29682:52;;29681:74;;;;:::i;:::-;29622:34;29640:16;29622:15;:34;:::i;:::-;:134;;;;:::i;:::-;:172;;;;:::i;:::-;:268;;;;:::i;:::-;:304;;;;:::i;:::-;:333;;;;:::i;:::-;29583:391;;;;;;8987:19:1;;9031:2;9022:12;;8977:63;29583:391:0;;;;-1:-1:-1;;29583:391:0;;;;;;;;;29555:434;;29583:391;29555:434;;;;;-1:-1:-1;30039:4:0;30026:9;30039:4;30026:2;:9;:::i;:::-;30018:18;;:4;:18;:::i;:::-;:25;;;;:::i;:::-;30011:32;29419:632;-1:-1:-1;;;;;29419:632:0:o;4342:158::-;4416:7;4467:22;4471:3;4483:5;4467:3;:22::i;2001:291::-;2064:4;3078:19;;;:12;;;:19;;;;;;2081:204;;-1:-1:-1;2124:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;2184:18;;2162:19;;;:12;;;:19;;;;;;:40;;;;2217:11;;2081:204;-1:-1:-1;2268:5:0;2261:12;;2300:673;2366:4;2404:19;;;:12;;;:19;;;;;;2440:15;;2436:530;;2472:21;2496:14;2509:1;2496:10;:14;:::i;:::-;2545:18;;2472:38;;-1:-1:-1;2525:17:0;;2545:22;;2566:1;;2545:22;:::i;:::-;2525:42;;2601:13;2588:9;:26;2584:221;;2635:17;2655:3;:11;;2667:9;2655:22;;;;;;-1:-1:-1;;;2655:22:0;;;;;;;;;;;;;;;;;2635:42;;2725:9;2696:3;:11;;2708:13;2696:26;;;;;;-1:-1:-1;;;2696:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;2753:23;;;:12;;;:23;;;;;:36;;;2584:221;2821:17;;:3;;:17;;;-1:-1:-1;;;2821:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;2862:3;:12;;:19;2875:5;2862:19;;;;;;;;;;;2855:26;;;2905:4;2898:11;;;;;;;2436:530;2949:5;2942:12;;;;;3235:120;3302:7;3329:3;:11;;3341:5;3329:18;;;;;;-1:-1:-1;;;3329:18:0;;;;;;;;;;;;;;;;;3322:25;;3235:120;;;;:::o;14:693:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:163;529:2;526:1;523:9;515:163;;;586:17;;574:30;;624:12;;;;656;;;;547:1;540:9;515:163;;;-1:-1:-1;696:5:1;;78:629;-1:-1:-1;;;;;;;78:629:1:o;712:257::-;771:6;824:2;812:9;803:7;799:23;795:32;792:2;;;845:6;837;830:22;792:2;889:9;876:23;908:31;933:5;908:31;:::i;974:261::-;1044:6;1097:2;1085:9;1076:7;1072:23;1068:32;1065:2;;;1118:6;1110;1103:22;1065:2;1155:9;1149:16;1174:31;1199:5;1174:31;:::i;1240:398::-;1308:6;1316;1369:2;1357:9;1348:7;1344:23;1340:32;1337:2;;;1390:6;1382;1375:22;1337:2;1434:9;1421:23;1453:31;1478:5;1453:31;:::i;:::-;1503:5;-1:-1:-1;1560:2:1;1545:18;;1532:32;1573:33;1532:32;1573:33;:::i;:::-;1625:7;1615:17;;;1327:311;;;;;:::o;1643:466::-;1720:6;1728;1736;1789:2;1777:9;1768:7;1764:23;1760:32;1757:2;;;1810:6;1802;1795:22;1757:2;1854:9;1841:23;1873:31;1898:5;1873:31;:::i;:::-;1923:5;-1:-1:-1;1980:2:1;1965:18;;1952:32;1993:33;1952:32;1993:33;:::i;:::-;1747:362;;2045:7;;-1:-1:-1;;;2099:2:1;2084:18;;;;2071:32;;1747:362::o;2114:392::-;2179:6;2187;2240:2;2228:9;2219:7;2215:23;2211:32;2208:2;;;2261:6;2253;2246:22;2208:2;2305:9;2292:23;2324:31;2349:5;2324:31;:::i;:::-;2374:5;-1:-1:-1;2431:2:1;2416:18;;2403:32;2444:30;2403:32;2444:30;:::i;2511:325::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:2;;;2661:6;2653;2646:22;2608:2;2705:9;2692:23;2724:31;2749:5;2724:31;:::i;:::-;2774:5;2826:2;2811:18;;;;2798:32;;-1:-1:-1;;;2598:238:1:o;2841:800::-;2933:6;2941;2949;3002:2;2990:9;2981:7;2977:23;2973:32;2970:2;;;3023:6;3015;3008:22;2970:2;3068:9;3055:23;3097:18;3138:2;3130:6;3127:14;3124:2;;;3159:6;3151;3144:22;3124:2;3202:6;3191:9;3187:22;3177:32;;3247:7;3240:4;3236:2;3232:13;3228:27;3218:2;;3274:6;3266;3259:22;3218:2;3319;3306:16;3345:2;3337:6;3334:14;3331:2;;;3366:6;3358;3351:22;3331:2;3426:7;3419:4;3409:6;3406:1;3402:14;3398:2;3394:23;3390:34;3387:47;3384:2;;;3452:6;3444;3437:22;3384:2;3488:4;3480:13;;;;-1:-1:-1;3512:6:1;-1:-1:-1;;3553:20:1;;3540:34;3583:28;3540:34;3583:28;:::i;:::-;3630:5;3620:15;;;2960:681;;;;;:::o;3646:1281::-;3764:6;3772;3825:2;3813:9;3804:7;3800:23;3796:32;3793:2;;;3846:6;3838;3831:22;3793:2;3891:9;3878:23;3920:18;3961:2;3953:6;3950:14;3947:2;;;3982:6;3974;3967:22;3947:2;4025:6;4014:9;4010:22;4000:32;;4070:7;4063:4;4059:2;4055:13;4051:27;4041:2;;4097:6;4089;4082:22;4041:2;4138;4125:16;4160:4;4184:60;4200:43;4240:2;4200:43;:::i;4184:60::-;4266:3;4290:2;4285:3;4278:15;4318:2;4313:3;4309:12;4302:19;;4349:2;4345;4341:11;4397:7;4392:2;4386;4383:1;4379:10;4375:2;4371:19;4367:28;4364:41;4361:2;;;4423:6;4415;4408:22;4361:2;4450:6;4441:15;;4465:238;4479:2;4476:1;4473:9;4465:238;;;4550:3;4537:17;4567:31;4592:5;4567:31;:::i;:::-;4611:18;;4497:1;4490:9;;;;;4649:12;;;;4681;;4465:238;;;-1:-1:-1;4722:5:1;-1:-1:-1;;4765:18:1;;4752:32;;-1:-1:-1;;4796:16:1;;;4793:2;;;4830:6;4822;4815:22;4793:2;;4858:63;4913:7;4902:8;4891:9;4887:24;4858:63;:::i;:::-;4848:73;;;3783:1144;;;;;:::o;4932:937::-;5027:6;5058:2;5101;5089:9;5080:7;5076:23;5072:32;5069:2;;;5122:6;5114;5107:22;5069:2;5160:9;5154:16;5193:18;5185:6;5182:30;5179:2;;;5230:6;5222;5215:22;5179:2;5258:22;;5311:4;5303:13;;5299:27;-1:-1:-1;5289:2:1;;5345:6;5337;5330:22;5289:2;5379;5373:9;5402:60;5418:43;5458:2;5418:43;:::i;5402:60::-;5484:3;5508:2;5503:3;5496:15;5536:2;5531:3;5527:12;5520:19;;5567:2;5563;5559:11;5615:7;5610:2;5604;5601:1;5597:10;5593:2;5589:19;5585:28;5582:41;5579:2;;;5641:6;5633;5626:22;5579:2;5668:6;5659:15;;5683:156;5697:2;5694:1;5691:9;5683:156;;;5754:10;;5742:23;;5715:1;5708:9;;;;;5785:12;;;;5817;;5683:156;;;-1:-1:-1;5858:5:1;5038:831;-1:-1:-1;;;;;;;5038:831:1:o;5874:251::-;5930:6;5983:2;5971:9;5962:7;5958:23;5954:32;5951:2;;;6004:6;5996;5989:22;5951:2;6048:9;6035:23;6067:28;6089:5;6067:28;:::i;6130:255::-;6197:6;6250:2;6238:9;6229:7;6225:23;6221:32;6218:2;;;6271:6;6263;6256:22;6218:2;6308:9;6302:16;6327:28;6349:5;6327:28;:::i;6390:190::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:2;;;6523:6;6515;6508:22;6470:2;-1:-1:-1;6551:23:1;;6460:120;-1:-1:-1;6460:120:1:o;6585:194::-;6655:6;6708:2;6696:9;6687:7;6683:23;6679:32;6676:2;;;6729:6;6721;6714:22;6676:2;-1:-1:-1;6757:16:1;;6666:113;-1:-1:-1;6666:113:1:o;6784:255::-;6863:6;6871;6924:2;6912:9;6903:7;6899:23;6895:32;6892:2;;;6945:6;6937;6930:22;6892:2;-1:-1:-1;;6973:16:1;;7029:2;7014:18;;;7008:25;6973:16;;7008:25;;-1:-1:-1;6882:157:1:o;7044:326::-;7121:6;7129;7137;7190:2;7178:9;7169:7;7165:23;7161:32;7158:2;;;7211:6;7203;7196:22;7158:2;-1:-1:-1;;7239:23:1;;;7309:2;7294:18;;7281:32;;-1:-1:-1;7360:2:1;7345:18;;;7332:32;;7148:222;-1:-1:-1;7148:222:1:o;7375:316::-;7463:6;7471;7479;7532:2;7520:9;7511:7;7507:23;7503:32;7500:2;;;7553:6;7545;7538:22;7500:2;7587:9;7581:16;7571:26;;7637:2;7626:9;7622:18;7616:25;7606:35;;7681:2;7670:9;7666:18;7660:25;7650:35;;7490:201;;;;;:::o;7696:463::-;7749:3;7787:5;7781:12;7814:6;7809:3;7802:19;7840:4;7869:2;7864:3;7860:12;7853:19;;7906:2;7899:5;7895:14;7927:3;7939:195;7953:6;7950:1;7947:13;7939:195;;;8018:13;;-1:-1:-1;;;;;8014:39:1;8002:52;;8074:12;;;;8109:15;;;;8050:1;7968:9;7939:195;;;-1:-1:-1;8150:3:1;;7757:402;-1:-1:-1;;;;;7757:402:1:o;9821:607::-;-1:-1:-1;;;;;10180:15:1;;;10162:34;;10227:2;10212:18;;10205:34;;;;10270:2;10255:18;;10248:34;;;;10313:2;10298:18;;10291:34;;;;10362:15;;;10356:3;10341:19;;10334:44;10142:3;10394:19;;10387:35;;;;10111:3;10096:19;;10078:350::o;11464:510::-;11735:6;11724:9;11717:25;11778:3;11773:2;11762:9;11758:18;11751:31;11698:4;11799:57;11851:3;11840:9;11836:19;11828:6;11799:57;:::i;:::-;-1:-1:-1;;;;;11892:32:1;;;;11887:2;11872:18;;11865:60;-1:-1:-1;11956:2:1;11941:18;11934:34;11791:65;11707:267;-1:-1:-1;;11707:267:1:o;11979:603::-;12091:4;12120:2;12149;12138:9;12131:21;12181:6;12175:13;12224:6;12219:2;12208:9;12204:18;12197:34;12249:4;12262:140;12276:6;12273:1;12270:13;12262:140;;;12371:14;;;12367:23;;12361:30;12337:17;;;12356:2;12333:26;12326:66;12291:10;;12262:140;;;12420:6;12417:1;12414:13;12411:2;;;12490:4;12485:2;12476:6;12465:9;12461:22;12457:31;12450:45;12411:2;-1:-1:-1;12566:2:1;12545:15;-1:-1:-1;;12541:29:1;12526:45;;;;12573:2;12522:54;;12100:482;-1:-1:-1;;;12100:482:1:o;12587:399::-;12789:2;12771:21;;;12828:2;12808:18;;;12801:30;12867:34;12862:2;12847:18;;12840:62;-1:-1:-1;;;12933:2:1;12918:18;;12911:33;12976:3;12961:19;;12761:225::o;17000:356::-;17202:2;17184:21;;;17221:18;;;17214:30;17280:34;17275:2;17260:18;;17253:62;17347:2;17332:18;;17174:182::o;17840:401::-;18042:2;18024:21;;;18081:2;18061:18;;;18054:30;18120:34;18115:2;18100:18;;18093:62;-1:-1:-1;;;18186:2:1;18171:18;;18164:35;18231:3;18216:19;;18014:227::o;19239:332::-;19446:6;19435:9;19428:25;19489:2;19484;19473:9;19469:18;19462:30;19409:4;19509:56;19561:2;19550:9;19546:18;19538:6;19509:56;:::i;:::-;19501:64;19418:153;-1:-1:-1;;;;19418:153:1:o;19576:582::-;19875:6;19864:9;19857:25;19918:6;19913:2;19902:9;19898:18;19891:34;19961:3;19956:2;19945:9;19941:18;19934:31;19838:4;19982:57;20034:3;20023:9;20019:19;20011:6;19982:57;:::i;:::-;-1:-1:-1;;;;;20075:32:1;;;;20070:2;20055:18;;20048:60;-1:-1:-1;20139:3:1;20124:19;20117:35;19974:65;19847:311;-1:-1:-1;;;19847:311:1:o;20352:275::-;20423:2;20417:9;20488:2;20469:13;;-1:-1:-1;;20465:27:1;20453:40;;20523:18;20508:34;;20544:22;;;20505:62;20502:2;;;20570:18;;:::i;:::-;20606:2;20599:22;20397:230;;-1:-1:-1;20397:230:1:o;20632:183::-;20692:4;20725:18;20717:6;20714:30;20711:2;;;20747:18;;:::i;:::-;-1:-1:-1;20792:1:1;20788:14;20804:4;20784:25;;20701:114::o;20820:128::-;20860:3;20891:1;20887:6;20884:1;20881:13;20878:2;;;20897:18;;:::i;:::-;-1:-1:-1;20933:9:1;;20868:80::o;20953:120::-;20993:1;21019;21009:2;;21024:18;;:::i;:::-;-1:-1:-1;21058:9:1;;20999:74::o;21078:422::-;21167:1;21210:5;21167:1;21224:270;21245:7;21235:8;21232:21;21224:270;;;21304:4;21300:1;21296:6;21292:17;21286:4;21283:27;21280:2;;;21313:18;;:::i;:::-;21363:7;21353:8;21349:22;21346:2;;;21383:16;;;;21346:2;21462:22;;;;21422:15;;;;21224:270;;;21228:3;21142:358;;;;;:::o;21505:140::-;21563:5;21592:47;21633:4;21623:8;21619:19;21613:4;21699:5;21729:8;21719:2;;-1:-1:-1;21770:1:1;21784:5;;21719:2;21818:4;21808:2;;-1:-1:-1;21855:1:1;21869:5;;21808:2;21900:4;21918:1;21913:59;;;;21986:1;21981:130;;;;21893:218;;21913:59;21943:1;21934:10;;21957:5;;;21981:130;22018:3;22008:8;22005:17;22002:2;;;22025:18;;:::i;:::-;-1:-1:-1;;22081:1:1;22067:16;;22096:5;;21893:218;;22195:2;22185:8;22182:16;22176:3;22170:4;22167:13;22163:36;22157:2;22147:8;22144:16;22139:2;22133:4;22130:12;22126:35;22123:77;22120:2;;;-1:-1:-1;22232:19:1;;;22264:5;;22120:2;22311:34;22336:8;22330:4;22311:34;:::i;:::-;22381:6;22377:1;22373:6;22369:19;22360:7;22357:32;22354:2;;;22392:18;;:::i;:::-;22430:20;;21709:747;-1:-1:-1;;;21709:747:1:o;22461:168::-;22501:7;22567:1;22563;22559:6;22555:14;22552:1;22549:21;22544:1;22537:9;22530:17;22526:45;22523:2;;;22574:18;;:::i;:::-;-1:-1:-1;22614:9:1;;22513:116::o;22634:125::-;22674:4;22702:1;22699;22696:8;22693:2;;;22707:18;;:::i;:::-;-1:-1:-1;22744:9:1;;22683:76::o;22764:380::-;22843:1;22839:12;;;;22886;;;22907:2;;22961:4;22953:6;22949:17;22939:27;;22907:2;23014;23006:6;23003:14;22983:18;22980:38;22977:2;;;23060:10;23055:3;23051:20;23048:1;23041:31;23095:4;23092:1;23085:15;23123:4;23120:1;23113:15;22977:2;;22819:325;;;:::o;23149:135::-;23188:3;-1:-1:-1;;23209:17:1;;23206:2;;;23229:18;;:::i;:::-;-1:-1:-1;23276:1:1;23265:13;;23196:88::o;23289:112::-;23321:1;23347;23337:2;;23352:18;;:::i;:::-;-1:-1:-1;23386:9:1;;23327:74::o;23406:127::-;23467:10;23462:3;23458:20;23455:1;23448:31;23498:4;23495:1;23488:15;23522:4;23519:1;23512:15;23538:127;23599:10;23594:3;23590:20;23587:1;23580:31;23630:4;23627:1;23620:15;23654:4;23651:1;23644:15;23670:127;23731:10;23726:3;23722:20;23719:1;23712:31;23762:4;23759:1;23752:15;23786:4;23783:1;23776:15;23802:131;-1:-1:-1;;;;;23877:31:1;;23867:42;;23857:2;;23923:1;23920;23913:12;23857:2;23847:86;:::o;23938:118::-;24024:5;24017:13;24010:21;24003:5;24000:32;23990:2;;24046:1;24043;24036:12

Swarm Source

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