ETH Price: $2,525.76 (+0.10%)
Gas: 0.79 Gwei

Token

Old GM (wagmi) (OG)
 

Overview

Max Total Supply

1,000,000,000,000 OG

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: OG 35
Balance
7,983,844,061.587825252 OG

Value
$0.00
0x55623e170ae61e3fc5fbc1b9c8280e18164c0cab
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:
OG

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-04
*/

// SPDX-License-Identifier: MIT
// https://t.me/OGEntry
// https://medium.com/@og_43808
// https://twitter.com/OldGoodMorning


pragma solidity 0.8.17;

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

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

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

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

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

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

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

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

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

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

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

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

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

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

interface IUniswapV2Pair {
    function factory() external view returns (address);
}

interface IUniswapV2Router {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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


contract OG  is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public ogAddress =
        payable(0x930E54fF2Dc0911205808c123fC3Dc2b94bE7d55);
    address payable public projectAddress =
        payable(0x2085eEA89683D4Dc901c170E05fA77b145834507);
    address payable public liquidityAddress =
        payable(0x2085eEA89683D4Dc901c170E05fA77b145834507);
    address payable public treasuryAddress =
        payable(0x4c8C413Cdf43a8F178F5EeA01b8c6285C092eFaB);

    address private _owner;

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

    
    bool public limitsInEffect = true;
    mapping(address => bool) public blacklist;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1_000_000_000_000 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Old GM (wagmi)";
    string private constant _symbol = "OG";
    uint8 private constant _decimals = 9;

    
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _teamFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    

    uint256 public _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyTeamFee = 4;

    uint256 public _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellTeamFee = 5;

    //   (300= 30%)
    // values must be lower than 1000 ( 100%)
    // Any leftover goes to og address
    uint256 public _percentTeamFundsToProject = 1000;
    uint256 public _percentTeamFundsToTreasury = 0;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    uint256 public _liquidityTokensToSwap;
    uint256 public _teamTokensToSwap;

    uint256 public maxTransactionAmount;
    uint256 public maxWalletAmount;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router public uniswapV2Router;
    address public uniswapV2Pair;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    event SetAutomatedMarketMakerPair(address pair, bool value);

    event ExcludeFromReward(address excludedAddress);

    event IncludeInReward(address includedAddress);

    event ExcludeFromFee(address excludedAddress);

    event IncludeInFee(address includedAddress);

    event SetBuyFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event SetSellFee(uint256 teamFee, uint256 liquidityFee, uint256 reflectFee);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedTeamAddress(address team);

    event UpdatedLiquidityAddress(address liquidity);

    event OwnerForcedSwapBack(uint256 timestamp);

    event BoughtEarly(address indexed sniper);

    event RemovedSniper(address indexed notsnipersupposedly);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() payable {
        _owner = msg.sender;
        _rOwned[_owner] = (_rTotal / 1000) * 30;
        _rOwned[address(this)] = (_rTotal / 1000) * 970;

        maxTransactionAmount = (_tTotal * 20) / 1000; // 2% maxTransactionAmountTxn
        maxWalletAmount = (_tTotal * 2) / 100; // 2% maxWalletAmount
        minimumTokensBeforeSwap = (_tTotal * 1) / 10000; // 0.01% swap tokens amount

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[ogAddress] = true;
        _isExcludedFromFee[projectAddress] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(ogAddress, true);
        excludeFromMaxTransaction(liquidityAddress, true);
        excludeFromMaxTransaction(projectAddress, true);
        excludeFromMaxTransaction(treasuryAddress, true);

        emit Transfer(address(0), _owner, (_tTotal * 30) / 1000);
        emit Transfer(address(0), address(this), (_tTotal * 970) / 1000);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }

    
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect =true;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // once enabled, can never be turned off
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
    }

    // send tokens and ETH for liquidity to contract directly
    function launch() external onlyOwner returns (bool) {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        enableTrading();
        IUniswapV2Router _uniswapV2Router = IUniswapV2Router(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        require(
            address(this).balance > 0,
            "Must have ETH on contract to launch"
        );
        addLiquidity(balanceOf(address(this)), address(this).balance);
        transferOwnership(_owner);
        return true;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if (value) {
            excludeFromReward(pair);
        }
        if (!value) {
            includeInReward(pair);
        }
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(
            _excluded.length + 1 <= 50,
            "Cannot exclude more than 50 accounts.  Include a previously excluded address."
        );
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!blacklist[from], "From address blacklist. Contact admin");
        require(!blacklist[to], "To address blacklist. Contact admin");

        if (!tradingActive) {
            require(
                _isExcludedFromFee[from] || _isExcludedFromFee[to],
                "Trading is not active yet."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ) {
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                }

                if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        balanceOf(to) + amount <= maxWalletAmount,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(
            _teamTokensToSwap
        );
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                buyOrSellSwitch = BUY;
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _buyTaxFee;
                    _liquidityFee = _buyLiquidityFee + _buyTeamFee;
                }
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                buyOrSellSwitch = SELL;
                
                if (block.number == tradingActiveBlock) {
                    _taxFee = 0;
                    _liquidityFee = 90;
                } else if (block.number == tradingActiveBlock + 1) {
                    _taxFee = 0;
                    _liquidityFee = 50;
                } else {
                    _taxFee = _sellTaxFee;
                    _liquidityFee = _sellLiquidityFee + _sellTeamFee;
                }
                // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER; // TRANSFERs do not pay a tax.
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _teamTokensToSwap;

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_teamTokensToSwap).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);

        uint256 ethForProject = ethForMarketing.mul(_percentTeamFundsToProject).div(
            1000
        );
        uint256 ethForTreasury = ethForMarketing
            .mul(_percentTeamFundsToTreasury)
            .div(1000);
        ethForMarketing -= ethForProject;
        ethForMarketing -= ethForTreasury;

        _liquidityTokensToSwap = 0;
        _teamTokensToSwap = 0;

        (bool success, ) = address(ogAddress).call{
            value: ethForMarketing
        }("");
        (success, ) = address(projectAddress).call{ value: ethForProject }("");
        (success, ) = address(treasuryAddress).call{ value: ethForTreasury }(
            ""
        );

        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(
            amountToSwapForETH,
            ethForLiquidity,
            tokensForLiquidity
        );

        
        if (address(this).balance > 1e17) {
            (success, ) = address(ogAddress).call{
                value: address(this).balance
            }("");
        }
    }

    
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(
            contractBalance >= _tTotal / 10,
            "Can only swap back if more than .1% of tokens stuck on contract"
        );
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

 
    function addToBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot blacklist 0 address");
        blacklist[account] = true;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        require(account != address(0), "Cannot use 0 address");
        blacklist[account] = false;
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{ value: ethAmount }(
            address(this),
            tokenAmount,
            0, 
            0, 
            liquidityAddress,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if (buyOrSellSwitch == BUY) {
            _liquidityTokensToSwap +=
                (tLiquidity * _buyLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _buyTeamFee) / _liquidityFee;
        } else if (buyOrSellSwitch == SELL) {
            _liquidityTokensToSwap +=
                (tLiquidity * _sellLiquidityFee) /
                _liquidityFee;
            _teamTokensToSwap += (tLiquidity * _sellTeamFee) / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setMaxTransactionAmount(uint256 newMaxBuy) external onlyOwner {
        require(newMaxBuy > 0, "Cannot be 0");
        maxTransactionAmount = (_tTotal * newMaxBuy) / 1000;
    }

    function setMaxWallet(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet > 0, "Cannot be 0");
        maxWalletAmount = (_tTotal * newMaxWallet) / 1000;
    }

    function setBuyFee(
        uint256 buyTaxFee,
        uint256 buyLiquidityFee,
        uint256 buyTeamFee
    ) external onlyOwner {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyTeamFee = buyTeamFee;
        require(
            _buyTaxFee + _buyLiquidityFee + _buyTeamFee <= 10,
            "Must keep buy taxes below 10%"
        );
        emit SetBuyFee(buyTeamFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(
        uint256 sellTaxFee,
        uint256 sellLiquidityFee,
        uint256 sellTeamFee
    ) external onlyOwner {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellTeamFee = sellTeamFee;
        require(
            _sellTaxFee + _sellLiquidityFee + _sellTeamFee <= 10,
            "Must keep sell taxes below 10%"
        );
        emit SetSellFee(sellTeamFee, sellLiquidityFee, sellTaxFee);
    }

    function setTeamSplit(uint256 treasurySplit, uint256 projectSplit)
        external
        onlyOwner
    {
        require(treasurySplit + projectSplit < 1000, "Split over 100%");
        _percentTeamFundsToTreasury = treasurySplit;
        _percentTeamFundsToProject = projectSplit;
    }

    function setogAddress(address _ogAddress) external onlyOwner {
        require(
            _ogAddress != address(0),
            "_marketingAddress address cannot be 0"
        );
        _isExcludedFromFee[ogAddress] = false;
        ogAddress = payable(_ogAddress);
        _isExcludedFromFee[ogAddress] = true;
        emit UpdatedTeamAddress(_ogAddress);
    }

    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        require(
            _liquidityAddress != address(0),
            "_liquidityAddress address cannot be 0"
        );
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setProjectAddress(address _projectAddress) external onlyOwner {
        require(_projectAddress != address(0), "Cannot be 0 address");
        projectAddress = payable(_projectAddress);
        _isExcludedFromFee[projectAddress] = true;
    }

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        require(_treasuryAddress != address(0), "Cannot be 0 address");
        treasuryAddress = payable(_treasuryAddress);
        _isExcludedFromFee[treasuryAddress] = true;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

   
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success, ) = address(msg.sender).call{ value: address(this).balance }(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","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":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team","type":"address"}],"name":"UpdatedTeamAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_percentTeamFundsToTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ogAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyTeamFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_projectAddress","type":"address"}],"name":"setProjectAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTeamFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treasurySplit","type":"uint256"},{"internalType":"uint256","name":"projectSplit","type":"uint256"}],"name":"setTeamSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ogAddress","type":"address"}],"name":"setogAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811673930e54ff2dc0911205808c123fc3dc2b94be7d5517909155600480548216732085eea89683d4dc901c170e05fa77b145834507908117909155600580548316909117905560068054909116734c8c413cdf43a8f178f5eea01b8c6285c092efab179055600b805460ff191660011790556200009c683635c9adc5dea00000600019620004b2565b620000aa90600019620004df565b6010556012546013556015546016556000601881905560016019556004601a55601b8190556002601c556005601d556103e8601e55601f81905560208190556029805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b031916331790556010546200015a906103e890620004fb565b6200016790601e62000512565b6007546001600160a01b031660009081526008602052604090205560105462000194906103e890620004fb565b620001a2906103ca62000512565b306000908152600860205260409020556103e8620001cb683635c9adc5dea00000601462000512565b620001d79190620004fb565b6023556064620001f2683635c9adc5dea00000600262000512565b620001fe9190620004fb565b6024556127106200021a683635c9adc5dea00000600162000512565b620002269190620004fb565b6027556001600d6000620002426000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d909352818320805485166001908117909155600354821684528284208054861682179055600454821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055620002ee620002e66000546001600160a01b031690565b600162000412565b620002fb30600162000412565b6200030a61dead600162000412565b60035462000323906001600160a01b0316600162000412565b6005546200033c906001600160a01b0316600162000412565b60045462000355906001600160a01b0316600162000412565b6006546200036e906001600160a01b0316600162000412565b6007546001600160a01b03166000600080516020620048008339815191526103e8620003a5683635c9adc5dea00000601e62000512565b620003b19190620004fb565b60405190815260200160405180910390a3306000600080516020620048008339815191526103e8620003ef683635c9adc5dea000006103ca62000512565b620003fb9190620004fb565b60405190815260200160405180910390a36200052c565b6000546001600160a01b03163314620004715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b634e487b7160e01b600052601260045260246000fd5b600082620004c457620004c46200049c565b500690565b634e487b7160e01b600052601160045260246000fd5b81810381811115620004f557620004f5620004c9565b92915050565b6000826200050d576200050d6200049c565b500490565b8082028115828204841417620004f557620004f5620004c9565b6142c4806200053c6000396000f3fe6080604052600436106104095760003560e01c806361cd759f11610213578063a9059cbb11610123578063dc44b6a0116100ab578063efcc52de1161007a578063efcc52de14610c31578063f2fde38b14610c47578063f5648a4f14610c67578063f9f92be414610c7c578063fce0f92814610cac57600080fd5b8063dc44b6a014610b9f578063dd62ed3e14610bb5578063ea2f0b3714610bfb578063ee40166e14610c1b57600080fd5b8063c469b6dd116100f2578063c469b6dd14610b1d578063c49b9a8014610b33578063c5f956af14610b53578063c8c8ebe414610b73578063cab0347114610b8957600080fd5b8063a9059cbb14610a96578063aa4bde2814610ab6578063b62496f514610acc578063bbc0c74214610afc57600080fd5b806380feb139116101a65780638da5cb5b116101755780638da5cb5b146109f857806395d89b4114610a165780639a7a23d614610a41578063a073d37f14610a61578063a457c2d714610a7657600080fd5b806380feb139146109695780638366e79a1461098957806388790a68146109a957806388f82020146109bf57600080fd5b806370a08231116101e257806370a08231146108ff578063715018a61461091f578063751039fc146109345780637571336a1461094957600080fd5b806361cd759f1461089357806362b72fb0146108a95780636605bfda146108c95780636eee65d2146108e957600080fd5b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b61461081557806354cb77f914610835578063557ed1ba1461084b5780635d0044ca1461085e578063602bc62b1461087e57600080fd5b806351f205e41461078757806352390c021461079c578063525fa81f146107bc5780635342acb4146107dc57600080fd5b806344337ea1116102e857806344337ea1146106ec5780634549b0391461070c57806349bd5a5e1461072c5780634a62bb651461074c5780634a74bb021461076657600080fd5b806339509351146106765780633cf96af1146106965780634047ea3e146106b6578063437823ec146106cc57600080fd5b80631d865c301161039c57806325519cf21161036b57806325519cf2146105da5780632d838119146105fa578063313ce5671461061a5780633221c93f146106365780633685d4191461065657600080fd5b80631d865c30146105645780631e293c1014610584578063200a692d146105a457806323b872dd146105ba57600080fd5b8063119c1840116103d8578063119c1840146104cf57806313114a9d146104f15780631694505e1461051057806318160ddd1461054857600080fd5b806301339c211461041557806306fdde031461043f578063095ea7b31461047f57806310d5de531461049f57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610ccc565b60405190151581526020015b60405180910390f35b34801561044b57600080fd5b5060408051808201909152600e81526d4f6c6420474d20287761676d692960901b60208201525b6040516104369190613e52565b34801561048b57600080fd5b5061042a61049a366004613eb8565b610fd9565b3480156104ab57600080fd5b5061042a6104ba366004613ee4565b60256020526000908152604090205460ff1681565b3480156104db57600080fd5b506104ef6104ea366004613f01565b610ff0565b005b3480156104fd57600080fd5b506011545b604051908152602001610436565b34801561051c57600080fd5b50602854610530906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561055457600080fd5b50683635c9adc5dea00000610502565b34801561057057600080fd5b506104ef61057f366004613f23565b611071565b34801561059057600080fd5b506104ef61059f366004613f4f565b611156565b3480156105b057600080fd5b50610502601b5481565b3480156105c657600080fd5b5061042a6105d5366004613f68565b6111e4565b3480156105e657600080fd5b506104ef6105f5366004613f23565b61124d565b34801561060657600080fd5b50610502610615366004613f4f565b611329565b34801561062657600080fd5b5060405160098152602001610436565b34801561064257600080fd5b50600554610530906001600160a01b031681565b34801561066257600080fd5b506104ef610671366004613ee4565b6113ad565b34801561068257600080fd5b5061042a610691366004613eb8565b611563565b3480156106a257600080fd5b50600454610530906001600160a01b031681565b3480156106c257600080fd5b5061050260215481565b3480156106d857600080fd5b506104ef6106e7366004613ee4565b611599565b3480156106f857600080fd5b506104ef610707366004613ee4565b61161e565b34801561071857600080fd5b50610502610727366004613fb7565b6116c2565b34801561073857600080fd5b50602954610530906001600160a01b031681565b34801561075857600080fd5b50600b5461042a9060ff1681565b34801561077257600080fd5b5060295461042a90600160a81b900460ff1681565b34801561079357600080fd5b506104ef611756565b3480156107a857600080fd5b506104ef6107b7366004613ee4565b61184e565b3480156107c857600080fd5b506104ef6107d7366004613ee4565b611a3c565b3480156107e857600080fd5b5061042a6107f7366004613ee4565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561082157600080fd5b506104ef610830366004613ee4565b611b32565b34801561084157600080fd5b50610502601e5481565b34801561085757600080fd5b5042610502565b34801561086a57600080fd5b506104ef610879366004613f4f565b611bca565b34801561088a57600080fd5b50600254610502565b34801561089f57600080fd5b50610502601f5481565b3480156108b557600080fd5b506104ef6108c4366004613ee4565b611c58565b3480156108d557600080fd5b506104ef6108e4366004613ee4565b611d64565b3480156108f557600080fd5b5061050260225481565b34801561090b57600080fd5b5061050261091a366004613ee4565b611e14565b34801561092b57600080fd5b506104ef611e73565b34801561094057600080fd5b5061042a611ee7565b34801561095557600080fd5b506104ef610964366004613fe7565b611f26565b34801561097557600080fd5b50600354610530906001600160a01b031681565b34801561099557600080fd5b5061042a6109a4366004614015565b611f7b565b3480156109b557600080fd5b50610502601c5481565b3480156109cb57600080fd5b5061042a6109da366004613ee4565b6001600160a01b03166000908152600e602052604090205460ff1690565b348015610a0457600080fd5b506000546001600160a01b0316610530565b348015610a2257600080fd5b506040805180820190915260028152614f4760f01b6020820152610472565b348015610a4d57600080fd5b506104ef610a5c366004613fe7565b612182565b348015610a6d57600080fd5b50602754610502565b348015610a8257600080fd5b5061042a610a91366004613eb8565b61223a565b348015610aa257600080fd5b5061042a610ab1366004613eb8565b612289565b348015610ac257600080fd5b5061050260245481565b348015610ad857600080fd5b5061042a610ae7366004613ee4565b60266020526000908152604090205460ff1681565b348015610b0857600080fd5b5060295461042a90600160b01b900460ff1681565b348015610b2957600080fd5b50610502601a5481565b348015610b3f57600080fd5b506104ef610b4e366004614043565b612296565b348015610b5f57600080fd5b50600654610530906001600160a01b031681565b348015610b7f57600080fd5b5061050260235481565b348015610b9557600080fd5b50610502601d5481565b348015610bab57600080fd5b5061050260195481565b348015610bc157600080fd5b50610502610bd0366004614015565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c0757600080fd5b506104ef610c16366004613ee4565b61230d565b348015610c2757600080fd5b5061050260205481565b348015610c3d57600080fd5b5061050260185481565b348015610c5357600080fd5b506104ef610c62366004613ee4565b612388565b348015610c7357600080fd5b506104ef612472565b348015610c8857600080fd5b5061042a610c97366004613ee4565b600c6020526000908152604090205460ff1681565b348015610cb857600080fd5b506104ef610cc7366004613ee4565b612557565b600080546001600160a01b03163314610d005760405162461bcd60e51b8152600401610cf790614060565b60405180910390fd5b602954600160b01b900460ff1615610d6e5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cf7565b610d76612607565b737a250d5630b4cf539739df2c5dacb4c659f2488d610d96816001611f26565b602880546001600160a01b0319166001600160a01b038316908117909155610dc9903090683635c9adc5dea0000061264c565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190614095565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c9190614095565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190614095565b602980546001600160a01b0319166001600160a01b03929092169182179055610f37906001611f26565b602954610f4e906001600160a01b03166001612770565b60004711610faa5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cf7565b610fbc610fb630611e14565b476127cb565b600754610fd1906001600160a01b0316612388565b600191505090565b6000610fe633848461264c565b5060015b92915050565b6000546001600160a01b0316331461101a5760405162461bcd60e51b8152600401610cf790614060565b6103e861102782846140c8565b106110665760405162461bcd60e51b815260206004820152600f60248201526e53706c6974206f766572203130302560881b6044820152606401610cf7565b601f91909155601e55565b6000546001600160a01b0316331461109b5760405162461bcd60e51b8152600401610cf790614060565b601b839055601c829055601d819055600a816110b784866140c8565b6110c191906140c8565b111561110f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031302500006044820152606401610cf7565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111805760405162461bcd60e51b8152600401610cf790614060565b600081116111be5760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf7565b6103e86111d482683635c9adc5dea000006140db565b6111de91906140f2565b60235550565b60006111f184848461287f565b611243843361123e85604051806060016040528060288152602001614242602891396001600160a01b038a166000908152600a60209081526040808320338452909152902054919061301a565b61264c565b5060019392505050565b6000546001600160a01b031633146112775760405162461bcd60e51b8152600401610cf790614060565b60188390556019829055601a819055600a8161129384866140c8565b61129d91906140c8565b11156112eb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610cf7565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611149565b60006010548211156113905760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cf7565b600061139a613054565b90506113a68382613077565b9392505050565b6000546001600160a01b031633146113d75760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000908152600e602052604090205460ff1661143f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610cf7565b60005b600f5481101561155f57816001600160a01b0316600f828154811061146957611469614114565b6000918252602090912001546001600160a01b03160361154d57600f80546114939060019061412a565b815481106114a3576114a3614114565b600091825260209091200154600f80546001600160a01b0390921691839081106114cf576114cf614114565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f8054806115275761152761413d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061155781614153565b915050611442565b5050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610fe691859061123e90866130b9565b6000546001600160a01b031633146115c35760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000546001600160a01b031633146116485760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b03811661169e5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c697374203020616464726573730000000000006044820152606401610cf7565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000683635c9adc5dea0000083111561171d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cf7565b8161173c57600061172d84613118565b50939550610fea945050505050565b600061174784613118565b50929550610fea945050505050565b6000546001600160a01b031633146117805760405162461bcd60e51b8152600401610cf790614060565b600061178b30611e14565b90506117a1600a683635c9adc5dea000006140f2565b8110156118165760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f2e3125206f6620746f6b656e7320737475636b206f6e20636f6e7472616374006064820152608401610cf7565b61181e613167565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611613565b6000546001600160a01b031633146118785760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000908152600e602052604090205460ff16156118e15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cf7565b600f546032906118f29060016140c8565b111561197c5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610cf7565b6001600160a01b038116600090815260086020526040902054156119d6576001600160a01b0381166000908152600860205260409020546119bc90611329565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a665760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611aca5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf7565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600d6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611613565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611ba95760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207573652030206164647265737360601b6044820152606401610cf7565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610cf790614060565b60008111611c325760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf7565b6103e8611c4882683635c9adc5dea000006140db565b611c5291906140f2565b60245550565b6000546001600160a01b03163314611c825760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf7565b600380546001600160a01b039081166000908152600d60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611613565b6000546001600160a01b03163314611d8e5760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611dda5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf7565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6001600160a01b0381166000908152600e602052604081205460ff1615611e5157506001600160a01b031660009081526009602052604090205490565b6001600160a01b038216600090815260086020526040902054610fea90611329565b6000546001600160a01b03163314611e9d5760405162461bcd60e51b8152600401610cf790614060565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611f125760405162461bcd60e51b8152600401610cf790614060565b50600b805460ff1916600190811790915590565b6000546001600160a01b03163314611f505760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fa65760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038316611ffc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cf7565b306001600160a01b038416036120545760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cf7565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf919061416c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190614185565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121ac5760405162461bcd60e51b8152600401610cf790614060565b6029546001600160a01b03908116908316036122305760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf7565b61155f8282612770565b6000610fe6338461123e8560405180606001604052806025815260200161426a60259139336000908152600a602090815260408083206001600160a01b038d168452909152902054919061301a565b6000610fe633848461287f565b6000546001600160a01b031633146122c05760405162461bcd60e51b8152600401610cf790614060565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161390831515815260200190565b6000546001600160a01b031633146123375760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611613565b6000546001600160a01b031633146123b25760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166124175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cf7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461249c5760405162461bcd60e51b8152600401610cf790614060565b602954600160b01b900460ff161561250a5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cf7565b604051600090339047908381818185875af1925050503d806000811461254c576040519150601f19603f3d011682016040523d82523d6000602084013e612551565b606091505b50505050565b6000546001600160a01b031633146125815760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166125cd5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf7565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146126315760405162461bcd60e51b8152600401610cf790614060565b6029805461ffff60a81b191661010160a81b17905543602055565b6001600160a01b0383166126ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf7565b6001600160a01b03821661270f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf7565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556127bd576127bd8261184e565b8061155f5761155f826113ad565b6028546127e39030906001600160a01b03168461264c565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612853573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061287891906141a2565b5050505050565b6001600160a01b0383166128e35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf7565b6001600160a01b0382166129455760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf7565b600081116129a75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cf7565b6001600160a01b0383166000908152600c602052604090205460ff1615612a1e5760405162461bcd60e51b815260206004820152602560248201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060448201526430b236b4b760d91b6064820152608401610cf7565b6001600160a01b0382166000908152600c602052604090205460ff1615612a935760405162461bcd60e51b815260206004820152602360248201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460448201526236b4b760e91b6064820152608401610cf7565b602954600160b01b900460ff16612b2f576001600160a01b0383166000908152600d602052604090205460ff1680612ae357506001600160a01b0382166000908152600d602052604090205460ff165b612b2f5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610cf7565b600b5460ff1615612d99576000546001600160a01b03848116911614801590612b6657506000546001600160a01b03838116911614155b8015612b7a57506001600160a01b03821615155b8015612b9157506001600160a01b03821661dead14155b8015612ba75750602954600160a01b900460ff16155b15612d99576001600160a01b03831660009081526026602052604090205460ff168015612bed57506001600160a01b03821660009081526025602052604090205460ff16155b15612c6757602354811115612c625760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cf7565b612d1e565b6001600160a01b03821660009081526026602052604090205460ff168015612ca857506001600160a01b03831660009081526025602052604090205460ff16155b15612d1e57602354811115612d1e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cf7565b6001600160a01b03821660009081526025602052604090205460ff16612d995760245481612d4b84611e14565b612d5591906140c8565b1115612d995760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cf7565b6000612db26022546021546130b990919063ffffffff16565b90506000612dbf30611e14565b60275460295491925082101590600160a01b900460ff16158015612dec5750602954600160a81b900460ff165b8015612e0d5750602954600090612e0b906001600160a01b0316611e14565b115b8015612e195750600083115b8015612e3e57506001600160a01b0385166000908152600d602052604090205460ff16155b8015612e6357506001600160a01b0386166000908152600d602052604090205460ff16155b8015612e8757506001600160a01b03851660009081526026602052604090205460ff165b8015612e905750805b15612e9d57612e9d613167565b6001600160a01b0386166000908152600d602052604090205460019060ff1680612edf57506001600160a01b0386166000908152600d602052604090205460ff165b15612ef1575060036017556000613005565b6001600160a01b03871660009081526026602052604090205460ff1615612f7857612f1a61343f565b60016017556020544303612f37576000601255605a601555613005565b602054612f459060016140c8565b4303612f5a5760006012556032601555613005565b601854601255601a54601954612f7091906140c8565b601555613005565b6001600160a01b03861660009081526026602052604090205460ff1615612ff757612fa161343f565b60026017556020544303612fbe576000601255605a601555613005565b602054612fcc9060016140c8565b4303612fe15760006012556032601555613005565b601b54601255601d54601c54612f7091906140c8565b612fff61343f565b60036017555b6130118787878461346d565b50505050505050565b6000818484111561303e5760405162461bcd60e51b8152600401610cf79190613e52565b50600061304b848661412a565b95945050505050565b6000806000613061613592565b90925090506130708282613077565b9250505090565b60006113a683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061372e565b6000806130c683856140c8565b9050838110156113a65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf7565b600080600080600080600080600061312f8a61375c565b925092509250600080600061314d8d8686613148613054565b61379e565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b179055600061318530611e14565b9050600060225460215461319991906140c8565b905060006131b3600260215461307790919063ffffffff16565b905060006131c184836137ee565b9050476131cd82613830565b60006131d947836137ee565b905060006131fc866131f66022548561398a90919063ffffffff16565b90613077565b9050600061320a83836137ee565b905060006132296103e86131f6601e548661398a90919063ffffffff16565b905060006132486103e86131f6601f548761398a90919063ffffffff16565b9050613254828561412a565b9350613260818561412a565b60006021819055602281905560035460405192965090916001600160a01b039091169086908381818185875af1925050503d80600081146132bd576040519150601f19603f3d011682016040523d82523d6000602084013e6132c2565b606091505b50506004546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613312576040519150601f19603f3d011682016040523d82523d6000602084013e613317565b606091505b50506006546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114613367576040519150601f19603f3d011682016040523d82523d6000602084013e61336c565b606091505b50508091505061337c89856127cb565b60408051898152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613425576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461341a576040519150601f19603f3d011682016040523d82523d6000602084013e61341f565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b60125415801561344f5750601554155b1561345657565b601280546013556015805460165560009182905555565b8061347a5761347a61343f565b6001600160a01b0384166000908152600e602052604090205460ff1680156134bb57506001600160a01b0383166000908152600e602052604090205460ff16155b156134d0576134cb848484613a0c565b61357c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561351157506001600160a01b0383166000908152600e602052604090205460ff165b15613521576134cb848484613b32565b6001600160a01b0384166000908152600e602052604090205460ff16801561356157506001600160a01b0383166000908152600e602052604090205460ff165b15613571576134cb848484613bdb565b61357c848484613c4e565b8061255157612551601354601255601654601555565b6010546000908190683635c9adc5dea00000825b600f548110156136f1578260086000600f84815481106135c8576135c8614114565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061363357508160096000600f848154811061360c5761360c614114565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561364f57505060105493683635c9adc5dea000009350915050565b61369560086000600f848154811061366957613669614114565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906137ee565b92506136dd60096000600f84815481106136b1576136b1614114565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906137ee565b9150806136e981614153565b9150506135a6565b5060105461370890683635c9adc5dea00000613077565b82101561372557505060105492683635c9adc5dea0000092509050565b90939092509050565b6000818361374f5760405162461bcd60e51b8152600401610cf79190613e52565b50600061304b84866140f2565b60008060008061376b85613c92565b9050600061377886613cae565b905060006137908261378a89866137ee565b906137ee565b979296509094509092505050565b60008080806137ad888661398a565b905060006137bb888761398a565b905060006137c9888861398a565b905060006137db8261378a86866137ee565b939b939a50919850919650505050505050565b60006113a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061301a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386557613865614114565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e29190614095565b816001815181106138f5576138f5614114565b6001600160a01b03928316602091820292909201015260285461391b913091168461264c565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906139549085906000908690309042906004016141d0565b600060405180830381600087803b15801561396e57600080fd5b505af1158015613982573d6000803e3d6000fd5b505050505050565b60008260000361399c57506000610fea565b60006139a883856140db565b9050826139b585836140f2565b146113a65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cf7565b600080600080600080613a1e87613118565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613a5090886137ee565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613a7f90876137ee565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054613aae90866130b9565b6001600160a01b038916600090815260086020526040902055613ad081613cca565b613ada8483613e2e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b1f91815260200190565b60405180910390a3505050505050505050565b600080600080600080613b4487613118565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613b7690876137ee565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054613bac90846130b9565b6001600160a01b038916600090815260096020908152604080832093909355600890522054613aae90866130b9565b600080600080600080613bed87613118565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613c1f90886137ee565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613b7690876137ee565b600080600080600080613c6087613118565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613a7f90876137ee565b6000610fea60646131f66012548561398a90919063ffffffff16565b6000610fea60646131f66015548561398a90919063ffffffff16565b600160175403613d3a57601554601954613ce490836140db565b613cee91906140f2565b60216000828254613cff91906140c8565b9091555050601554601a54613d1490836140db565b613d1e91906140f2565b60226000828254613d2f91906140c8565b90915550613da59050565b600260175403613da557601554601c54613d5490836140db565b613d5e91906140f2565b60216000828254613d6f91906140c8565b9091555050601554601d54613d8490836140db565b613d8e91906140f2565b60226000828254613d9f91906140c8565b90915550505b6000613daf613054565b90506000613dbd838361398a565b30600090815260086020526040902054909150613dda90826130b9565b30600090815260086020908152604080832093909355600e9052205460ff1615613e295730600090815260096020526040902054613e1890846130b9565b306000908152600960205260409020555b505050565b601054613e3b90836137ee565b601055601154613e4b90826130b9565b6011555050565b600060208083528351808285015260005b81811015613e7f57858101830151858201604001528201613e63565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613eb557600080fd5b50565b60008060408385031215613ecb57600080fd5b8235613ed681613ea0565b946020939093013593505050565b600060208284031215613ef657600080fd5b81356113a681613ea0565b60008060408385031215613f1457600080fd5b50508035926020909101359150565b600080600060608486031215613f3857600080fd5b505081359360208301359350604090920135919050565b600060208284031215613f6157600080fd5b5035919050565b600080600060608486031215613f7d57600080fd5b8335613f8881613ea0565b92506020840135613f9881613ea0565b929592945050506040919091013590565b8015158114613eb557600080fd5b60008060408385031215613fca57600080fd5b823591506020830135613fdc81613fa9565b809150509250929050565b60008060408385031215613ffa57600080fd5b823561400581613ea0565b91506020830135613fdc81613fa9565b6000806040838503121561402857600080fd5b823561403381613ea0565b91506020830135613fdc81613ea0565b60006020828403121561405557600080fd5b81356113a681613fa9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156140a757600080fd5b81516113a681613ea0565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fea57610fea6140b2565b8082028115828204841417610fea57610fea6140b2565b60008261410f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610fea57610fea6140b2565b634e487b7160e01b600052603160045260246000fd5b600060018201614165576141656140b2565b5060010190565b60006020828403121561417e57600080fd5b5051919050565b60006020828403121561419757600080fd5b81516113a681613fa9565b6000806000606084860312156141b757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142205784516001600160a01b0316835293830193918301916001016141fb565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4289c17cd86a46f8d1ff643db0305dcfd3ae46201b2a1fe18bb20898088c78464736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104095760003560e01c806361cd759f11610213578063a9059cbb11610123578063dc44b6a0116100ab578063efcc52de1161007a578063efcc52de14610c31578063f2fde38b14610c47578063f5648a4f14610c67578063f9f92be414610c7c578063fce0f92814610cac57600080fd5b8063dc44b6a014610b9f578063dd62ed3e14610bb5578063ea2f0b3714610bfb578063ee40166e14610c1b57600080fd5b8063c469b6dd116100f2578063c469b6dd14610b1d578063c49b9a8014610b33578063c5f956af14610b53578063c8c8ebe414610b73578063cab0347114610b8957600080fd5b8063a9059cbb14610a96578063aa4bde2814610ab6578063b62496f514610acc578063bbc0c74214610afc57600080fd5b806380feb139116101a65780638da5cb5b116101755780638da5cb5b146109f857806395d89b4114610a165780639a7a23d614610a41578063a073d37f14610a61578063a457c2d714610a7657600080fd5b806380feb139146109695780638366e79a1461098957806388790a68146109a957806388f82020146109bf57600080fd5b806370a08231116101e257806370a08231146108ff578063715018a61461091f578063751039fc146109345780637571336a1461094957600080fd5b806361cd759f1461089357806362b72fb0146108a95780636605bfda146108c95780636eee65d2146108e957600080fd5b8063395093511161031957806351f205e4116102a1578063537df3b611610270578063537df3b61461081557806354cb77f914610835578063557ed1ba1461084b5780635d0044ca1461085e578063602bc62b1461087e57600080fd5b806351f205e41461078757806352390c021461079c578063525fa81f146107bc5780635342acb4146107dc57600080fd5b806344337ea1116102e857806344337ea1146106ec5780634549b0391461070c57806349bd5a5e1461072c5780634a62bb651461074c5780634a74bb021461076657600080fd5b806339509351146106765780633cf96af1146106965780634047ea3e146106b6578063437823ec146106cc57600080fd5b80631d865c301161039c57806325519cf21161036b57806325519cf2146105da5780632d838119146105fa578063313ce5671461061a5780633221c93f146106365780633685d4191461065657600080fd5b80631d865c30146105645780631e293c1014610584578063200a692d146105a457806323b872dd146105ba57600080fd5b8063119c1840116103d8578063119c1840146104cf57806313114a9d146104f15780631694505e1461051057806318160ddd1461054857600080fd5b806301339c211461041557806306fdde031461043f578063095ea7b31461047f57806310d5de531461049f57600080fd5b3661041057005b600080fd5b34801561042157600080fd5b5061042a610ccc565b60405190151581526020015b60405180910390f35b34801561044b57600080fd5b5060408051808201909152600e81526d4f6c6420474d20287761676d692960901b60208201525b6040516104369190613e52565b34801561048b57600080fd5b5061042a61049a366004613eb8565b610fd9565b3480156104ab57600080fd5b5061042a6104ba366004613ee4565b60256020526000908152604090205460ff1681565b3480156104db57600080fd5b506104ef6104ea366004613f01565b610ff0565b005b3480156104fd57600080fd5b506011545b604051908152602001610436565b34801561051c57600080fd5b50602854610530906001600160a01b031681565b6040516001600160a01b039091168152602001610436565b34801561055457600080fd5b50683635c9adc5dea00000610502565b34801561057057600080fd5b506104ef61057f366004613f23565b611071565b34801561059057600080fd5b506104ef61059f366004613f4f565b611156565b3480156105b057600080fd5b50610502601b5481565b3480156105c657600080fd5b5061042a6105d5366004613f68565b6111e4565b3480156105e657600080fd5b506104ef6105f5366004613f23565b61124d565b34801561060657600080fd5b50610502610615366004613f4f565b611329565b34801561062657600080fd5b5060405160098152602001610436565b34801561064257600080fd5b50600554610530906001600160a01b031681565b34801561066257600080fd5b506104ef610671366004613ee4565b6113ad565b34801561068257600080fd5b5061042a610691366004613eb8565b611563565b3480156106a257600080fd5b50600454610530906001600160a01b031681565b3480156106c257600080fd5b5061050260215481565b3480156106d857600080fd5b506104ef6106e7366004613ee4565b611599565b3480156106f857600080fd5b506104ef610707366004613ee4565b61161e565b34801561071857600080fd5b50610502610727366004613fb7565b6116c2565b34801561073857600080fd5b50602954610530906001600160a01b031681565b34801561075857600080fd5b50600b5461042a9060ff1681565b34801561077257600080fd5b5060295461042a90600160a81b900460ff1681565b34801561079357600080fd5b506104ef611756565b3480156107a857600080fd5b506104ef6107b7366004613ee4565b61184e565b3480156107c857600080fd5b506104ef6107d7366004613ee4565b611a3c565b3480156107e857600080fd5b5061042a6107f7366004613ee4565b6001600160a01b03166000908152600d602052604090205460ff1690565b34801561082157600080fd5b506104ef610830366004613ee4565b611b32565b34801561084157600080fd5b50610502601e5481565b34801561085757600080fd5b5042610502565b34801561086a57600080fd5b506104ef610879366004613f4f565b611bca565b34801561088a57600080fd5b50600254610502565b34801561089f57600080fd5b50610502601f5481565b3480156108b557600080fd5b506104ef6108c4366004613ee4565b611c58565b3480156108d557600080fd5b506104ef6108e4366004613ee4565b611d64565b3480156108f557600080fd5b5061050260225481565b34801561090b57600080fd5b5061050261091a366004613ee4565b611e14565b34801561092b57600080fd5b506104ef611e73565b34801561094057600080fd5b5061042a611ee7565b34801561095557600080fd5b506104ef610964366004613fe7565b611f26565b34801561097557600080fd5b50600354610530906001600160a01b031681565b34801561099557600080fd5b5061042a6109a4366004614015565b611f7b565b3480156109b557600080fd5b50610502601c5481565b3480156109cb57600080fd5b5061042a6109da366004613ee4565b6001600160a01b03166000908152600e602052604090205460ff1690565b348015610a0457600080fd5b506000546001600160a01b0316610530565b348015610a2257600080fd5b506040805180820190915260028152614f4760f01b6020820152610472565b348015610a4d57600080fd5b506104ef610a5c366004613fe7565b612182565b348015610a6d57600080fd5b50602754610502565b348015610a8257600080fd5b5061042a610a91366004613eb8565b61223a565b348015610aa257600080fd5b5061042a610ab1366004613eb8565b612289565b348015610ac257600080fd5b5061050260245481565b348015610ad857600080fd5b5061042a610ae7366004613ee4565b60266020526000908152604090205460ff1681565b348015610b0857600080fd5b5060295461042a90600160b01b900460ff1681565b348015610b2957600080fd5b50610502601a5481565b348015610b3f57600080fd5b506104ef610b4e366004614043565b612296565b348015610b5f57600080fd5b50600654610530906001600160a01b031681565b348015610b7f57600080fd5b5061050260235481565b348015610b9557600080fd5b50610502601d5481565b348015610bab57600080fd5b5061050260195481565b348015610bc157600080fd5b50610502610bd0366004614015565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c0757600080fd5b506104ef610c16366004613ee4565b61230d565b348015610c2757600080fd5b5061050260205481565b348015610c3d57600080fd5b5061050260185481565b348015610c5357600080fd5b506104ef610c62366004613ee4565b612388565b348015610c7357600080fd5b506104ef612472565b348015610c8857600080fd5b5061042a610c97366004613ee4565b600c6020526000908152604090205460ff1681565b348015610cb857600080fd5b506104ef610cc7366004613ee4565b612557565b600080546001600160a01b03163314610d005760405162461bcd60e51b8152600401610cf790614060565b60405180910390fd5b602954600160b01b900460ff1615610d6e5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610cf7565b610d76612607565b737a250d5630b4cf539739df2c5dacb4c659f2488d610d96816001611f26565b602880546001600160a01b0319166001600160a01b038316908117909155610dc9903090683635c9adc5dea0000061264c565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190614095565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9c9190614095565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190614095565b602980546001600160a01b0319166001600160a01b03929092169182179055610f37906001611f26565b602954610f4e906001600160a01b03166001612770565b60004711610faa5760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610cf7565b610fbc610fb630611e14565b476127cb565b600754610fd1906001600160a01b0316612388565b600191505090565b6000610fe633848461264c565b5060015b92915050565b6000546001600160a01b0316331461101a5760405162461bcd60e51b8152600401610cf790614060565b6103e861102782846140c8565b106110665760405162461bcd60e51b815260206004820152600f60248201526e53706c6974206f766572203130302560881b6044820152606401610cf7565b601f91909155601e55565b6000546001600160a01b0316331461109b5760405162461bcd60e51b8152600401610cf790614060565b601b839055601c829055601d819055600a816110b784866140c8565b6110c191906140c8565b111561110f5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031302500006044820152606401610cf7565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000546001600160a01b031633146111805760405162461bcd60e51b8152600401610cf790614060565b600081116111be5760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf7565b6103e86111d482683635c9adc5dea000006140db565b6111de91906140f2565b60235550565b60006111f184848461287f565b611243843361123e85604051806060016040528060288152602001614242602891396001600160a01b038a166000908152600a60209081526040808320338452909152902054919061301a565b61264c565b5060019392505050565b6000546001600160a01b031633146112775760405162461bcd60e51b8152600401610cf790614060565b60188390556019829055601a819055600a8161129384866140c8565b61129d91906140c8565b11156112eb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610cf7565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611149565b60006010548211156113905760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cf7565b600061139a613054565b90506113a68382613077565b9392505050565b6000546001600160a01b031633146113d75760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000908152600e602052604090205460ff1661143f5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610cf7565b60005b600f5481101561155f57816001600160a01b0316600f828154811061146957611469614114565b6000918252602090912001546001600160a01b03160361154d57600f80546114939060019061412a565b815481106114a3576114a3614114565b600091825260209091200154600f80546001600160a01b0390921691839081106114cf576114cf614114565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600982526040808220829055600e90925220805460ff19169055600f8054806115275761152761413d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061155781614153565b915050611442565b5050565b336000818152600a602090815260408083206001600160a01b03871684529091528120549091610fe691859061123e90866130b9565b6000546001600160a01b031633146115c35760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000546001600160a01b031633146116485760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b03811661169e5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f7420626c61636b6c697374203020616464726573730000000000006044820152606401610cf7565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000683635c9adc5dea0000083111561171d5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610cf7565b8161173c57600061172d84613118565b50939550610fea945050505050565b600061174784613118565b50929550610fea945050505050565b6000546001600160a01b031633146117805760405162461bcd60e51b8152600401610cf790614060565b600061178b30611e14565b90506117a1600a683635c9adc5dea000006140f2565b8110156118165760405162461bcd60e51b815260206004820152603f60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f2e3125206f6620746f6b656e7320737475636b206f6e20636f6e7472616374006064820152608401610cf7565b61181e613167565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611613565b6000546001600160a01b031633146118785760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000908152600e602052604090205460ff16156118e15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610cf7565b600f546032906118f29060016140c8565b111561197c5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610cf7565b6001600160a01b038116600090815260086020526040902054156119d6576001600160a01b0381166000908152600860205260409020546119bc90611329565b6001600160a01b0382166000908152600960205260409020555b6001600160a01b03166000818152600e60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b03163314611a665760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611aca5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf7565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600d6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611613565b6000546001600160a01b03163314611b5c5760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611ba95760405162461bcd60e51b815260206004820152601460248201527343616e6e6f74207573652030206164647265737360601b6044820152606401610cf7565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b03163314611bf45760405162461bcd60e51b8152600401610cf790614060565b60008111611c325760405162461bcd60e51b815260206004820152600b60248201526a043616e6e6f7420626520360ac1b6044820152606401610cf7565b6103e8611c4882683635c9adc5dea000006140db565b611c5291906140f2565b60245550565b6000546001600160a01b03163314611c825760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611ce65760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610cf7565b600380546001600160a01b039081166000908152600d60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f17d8dfa8312c8aa744fab84e6f3d67f24e7553ac1ff2be20269f1220002137569101611613565b6000546001600160a01b03163314611d8e5760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038116611dda5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf7565b600680546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6001600160a01b0381166000908152600e602052604081205460ff1615611e5157506001600160a01b031660009081526009602052604090205490565b6001600160a01b038216600090815260086020526040902054610fea90611329565b6000546001600160a01b03163314611e9d5760405162461bcd60e51b8152600401610cf790614060565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b03163314611f125760405162461bcd60e51b8152600401610cf790614060565b50600b805460ff1916600190811790915590565b6000546001600160a01b03163314611f505760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611fa65760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b038316611ffc5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cf7565b306001600160a01b038416036120545760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cf7565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa15801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf919061416c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612112573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121369190614185565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b031633146121ac5760405162461bcd60e51b8152600401610cf790614060565b6029546001600160a01b03908116908316036122305760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cf7565b61155f8282612770565b6000610fe6338461123e8560405180606001604052806025815260200161426a60259139336000908152600a602090815260408083206001600160a01b038d168452909152902054919061301a565b6000610fe633848461287f565b6000546001600160a01b031633146122c05760405162461bcd60e51b8152600401610cf790614060565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161390831515815260200190565b6000546001600160a01b031633146123375760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611613565b6000546001600160a01b031633146123b25760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166124175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cf7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461249c5760405162461bcd60e51b8152600401610cf790614060565b602954600160b01b900460ff161561250a5760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610cf7565b604051600090339047908381818185875af1925050503d806000811461254c576040519150601f19603f3d011682016040523d82523d6000602084013e612551565b606091505b50505050565b6000546001600160a01b031633146125815760405162461bcd60e51b8152600401610cf790614060565b6001600160a01b0381166125cd5760405162461bcd60e51b815260206004820152601360248201527243616e6e6f742062652030206164647265737360681b6044820152606401610cf7565b600480546001600160a01b039092166001600160a01b0319909216821790556000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b031633146126315760405162461bcd60e51b8152600401610cf790614060565b6029805461ffff60a81b191661010160a81b17905543602055565b6001600160a01b0383166126ae5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf7565b6001600160a01b03821661270f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cf7565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260266020908152604080832080548515801560ff19928316811790935560259094529190932080549091169092179091556127bd576127bd8261184e565b8061155f5761155f826113ad565b6028546127e39030906001600160a01b03168461264c565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612853573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061287891906141a2565b5050505050565b6001600160a01b0383166128e35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cf7565b6001600160a01b0382166129455760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cf7565b600081116129a75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cf7565b6001600160a01b0383166000908152600c602052604090205460ff1615612a1e5760405162461bcd60e51b815260206004820152602560248201527f46726f6d206164647265737320626c61636b6c6973742e20436f6e746163742060448201526430b236b4b760d91b6064820152608401610cf7565b6001600160a01b0382166000908152600c602052604090205460ff1615612a935760405162461bcd60e51b815260206004820152602360248201527f546f206164647265737320626c61636b6c6973742e20436f6e7461637420616460448201526236b4b760e91b6064820152608401610cf7565b602954600160b01b900460ff16612b2f576001600160a01b0383166000908152600d602052604090205460ff1680612ae357506001600160a01b0382166000908152600d602052604090205460ff165b612b2f5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610cf7565b600b5460ff1615612d99576000546001600160a01b03848116911614801590612b6657506000546001600160a01b03838116911614155b8015612b7a57506001600160a01b03821615155b8015612b9157506001600160a01b03821661dead14155b8015612ba75750602954600160a01b900460ff16155b15612d99576001600160a01b03831660009081526026602052604090205460ff168015612bed57506001600160a01b03821660009081526025602052604090205460ff16155b15612c6757602354811115612c625760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610cf7565b612d1e565b6001600160a01b03821660009081526026602052604090205460ff168015612ca857506001600160a01b03831660009081526025602052604090205460ff16155b15612d1e57602354811115612d1e5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610cf7565b6001600160a01b03821660009081526025602052604090205460ff16612d995760245481612d4b84611e14565b612d5591906140c8565b1115612d995760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610cf7565b6000612db26022546021546130b990919063ffffffff16565b90506000612dbf30611e14565b60275460295491925082101590600160a01b900460ff16158015612dec5750602954600160a81b900460ff165b8015612e0d5750602954600090612e0b906001600160a01b0316611e14565b115b8015612e195750600083115b8015612e3e57506001600160a01b0385166000908152600d602052604090205460ff16155b8015612e6357506001600160a01b0386166000908152600d602052604090205460ff16155b8015612e8757506001600160a01b03851660009081526026602052604090205460ff165b8015612e905750805b15612e9d57612e9d613167565b6001600160a01b0386166000908152600d602052604090205460019060ff1680612edf57506001600160a01b0386166000908152600d602052604090205460ff165b15612ef1575060036017556000613005565b6001600160a01b03871660009081526026602052604090205460ff1615612f7857612f1a61343f565b60016017556020544303612f37576000601255605a601555613005565b602054612f459060016140c8565b4303612f5a5760006012556032601555613005565b601854601255601a54601954612f7091906140c8565b601555613005565b6001600160a01b03861660009081526026602052604090205460ff1615612ff757612fa161343f565b60026017556020544303612fbe576000601255605a601555613005565b602054612fcc9060016140c8565b4303612fe15760006012556032601555613005565b601b54601255601d54601c54612f7091906140c8565b612fff61343f565b60036017555b6130118787878461346d565b50505050505050565b6000818484111561303e5760405162461bcd60e51b8152600401610cf79190613e52565b50600061304b848661412a565b95945050505050565b6000806000613061613592565b90925090506130708282613077565b9250505090565b60006113a683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061372e565b6000806130c683856140c8565b9050838110156113a65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610cf7565b600080600080600080600080600061312f8a61375c565b925092509250600080600061314d8d8686613148613054565b61379e565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b179055600061318530611e14565b9050600060225460215461319991906140c8565b905060006131b3600260215461307790919063ffffffff16565b905060006131c184836137ee565b9050476131cd82613830565b60006131d947836137ee565b905060006131fc866131f66022548561398a90919063ffffffff16565b90613077565b9050600061320a83836137ee565b905060006132296103e86131f6601e548661398a90919063ffffffff16565b905060006132486103e86131f6601f548761398a90919063ffffffff16565b9050613254828561412a565b9350613260818561412a565b60006021819055602281905560035460405192965090916001600160a01b039091169086908381818185875af1925050503d80600081146132bd576040519150601f19603f3d011682016040523d82523d6000602084013e6132c2565b606091505b50506004546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114613312576040519150601f19603f3d011682016040523d82523d6000602084013e613317565b606091505b50506006546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114613367576040519150601f19603f3d011682016040523d82523d6000602084013e61336c565b606091505b50508091505061337c89856127cb565b60408051898152602081018690529081018a90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a0000471115613425576003546040516001600160a01b03909116904790600081818185875af1925050503d806000811461341a576040519150601f19603f3d011682016040523d82523d6000602084013e61341f565b606091505b50909150505b50506029805460ff60a01b19169055505050505050505050565b60125415801561344f5750601554155b1561345657565b601280546013556015805460165560009182905555565b8061347a5761347a61343f565b6001600160a01b0384166000908152600e602052604090205460ff1680156134bb57506001600160a01b0383166000908152600e602052604090205460ff16155b156134d0576134cb848484613a0c565b61357c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561351157506001600160a01b0383166000908152600e602052604090205460ff165b15613521576134cb848484613b32565b6001600160a01b0384166000908152600e602052604090205460ff16801561356157506001600160a01b0383166000908152600e602052604090205460ff165b15613571576134cb848484613bdb565b61357c848484613c4e565b8061255157612551601354601255601654601555565b6010546000908190683635c9adc5dea00000825b600f548110156136f1578260086000600f84815481106135c8576135c8614114565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061363357508160096000600f848154811061360c5761360c614114565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561364f57505060105493683635c9adc5dea000009350915050565b61369560086000600f848154811061366957613669614114565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906137ee565b92506136dd60096000600f84815481106136b1576136b1614114565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906137ee565b9150806136e981614153565b9150506135a6565b5060105461370890683635c9adc5dea00000613077565b82101561372557505060105492683635c9adc5dea0000092509050565b90939092509050565b6000818361374f5760405162461bcd60e51b8152600401610cf79190613e52565b50600061304b84866140f2565b60008060008061376b85613c92565b9050600061377886613cae565b905060006137908261378a89866137ee565b906137ee565b979296509094509092505050565b60008080806137ad888661398a565b905060006137bb888761398a565b905060006137c9888861398a565b905060006137db8261378a86866137ee565b939b939a50919850919650505050505050565b60006113a683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061301a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061386557613865614114565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156138be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e29190614095565b816001815181106138f5576138f5614114565b6001600160a01b03928316602091820292909201015260285461391b913091168461264c565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac947906139549085906000908690309042906004016141d0565b600060405180830381600087803b15801561396e57600080fd5b505af1158015613982573d6000803e3d6000fd5b505050505050565b60008260000361399c57506000610fea565b60006139a883856140db565b9050826139b585836140f2565b146113a65760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610cf7565b600080600080600080613a1e87613118565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613a5090886137ee565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613a7f90876137ee565b6001600160a01b03808b1660009081526008602052604080822093909355908a1681522054613aae90866130b9565b6001600160a01b038916600090815260086020526040902055613ad081613cca565b613ada8483613e2e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b1f91815260200190565b60405180910390a3505050505050505050565b600080600080600080613b4487613118565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613b7690876137ee565b6001600160a01b03808b16600090815260086020908152604080832094909455918b16815260099091522054613bac90846130b9565b6001600160a01b038916600090815260096020908152604080832093909355600890522054613aae90866130b9565b600080600080600080613bed87613118565b6001600160a01b038f16600090815260096020526040902054959b50939950919750955093509150613c1f90886137ee565b6001600160a01b038a16600090815260096020908152604080832093909355600890522054613b7690876137ee565b600080600080600080613c6087613118565b6001600160a01b038f16600090815260086020526040902054959b50939950919750955093509150613a7f90876137ee565b6000610fea60646131f66012548561398a90919063ffffffff16565b6000610fea60646131f66015548561398a90919063ffffffff16565b600160175403613d3a57601554601954613ce490836140db565b613cee91906140f2565b60216000828254613cff91906140c8565b9091555050601554601a54613d1490836140db565b613d1e91906140f2565b60226000828254613d2f91906140c8565b90915550613da59050565b600260175403613da557601554601c54613d5490836140db565b613d5e91906140f2565b60216000828254613d6f91906140c8565b9091555050601554601d54613d8490836140db565b613d8e91906140f2565b60226000828254613d9f91906140c8565b90915550505b6000613daf613054565b90506000613dbd838361398a565b30600090815260086020526040902054909150613dda90826130b9565b30600090815260086020908152604080832093909355600e9052205460ff1615613e295730600090815260096020526040902054613e1890846130b9565b306000908152600960205260409020555b505050565b601054613e3b90836137ee565b601055601154613e4b90826130b9565b6011555050565b600060208083528351808285015260005b81811015613e7f57858101830151858201604001528201613e63565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613eb557600080fd5b50565b60008060408385031215613ecb57600080fd5b8235613ed681613ea0565b946020939093013593505050565b600060208284031215613ef657600080fd5b81356113a681613ea0565b60008060408385031215613f1457600080fd5b50508035926020909101359150565b600080600060608486031215613f3857600080fd5b505081359360208301359350604090920135919050565b600060208284031215613f6157600080fd5b5035919050565b600080600060608486031215613f7d57600080fd5b8335613f8881613ea0565b92506020840135613f9881613ea0565b929592945050506040919091013590565b8015158114613eb557600080fd5b60008060408385031215613fca57600080fd5b823591506020830135613fdc81613fa9565b809150509250929050565b60008060408385031215613ffa57600080fd5b823561400581613ea0565b91506020830135613fdc81613fa9565b6000806040838503121561402857600080fd5b823561403381613ea0565b91506020830135613fdc81613ea0565b60006020828403121561405557600080fd5b81356113a681613fa9565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156140a757600080fd5b81516113a681613ea0565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fea57610fea6140b2565b8082028115828204841417610fea57610fea6140b2565b60008261410f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b81810381811115610fea57610fea6140b2565b634e487b7160e01b600052603160045260246000fd5b600060018201614165576141656140b2565b5060010190565b60006020828403121561417e57600080fd5b5051919050565b60006020828403121561419757600080fd5b81516113a681613fa9565b6000806000606084860312156141b757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142205784516001600160a01b0316835293830193918301916001016141fb565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a4289c17cd86a46f8d1ff643db0305dcfd3ae46201b2a1fe18bb20898088c78464736f6c63430008110033

Deployed Bytecode Sourcemap

8309:32588:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16861:1006;;;;;;;;;;;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;16861:1006:0;;;;;;;;13637:85;;;;;;;;;;-1:-1:-1;13709:5:0;;;;;;;;;;;;-1:-1:-1;;;13709:5:0;;;;13637:85;;;;;;;:::i;14634:193::-;;;;;;;;;;-1:-1:-1;14634:193:0;;;;;:::i;:::-;;:::i;10738:63::-;;;;;;;;;;-1:-1:-1;10738:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38298:297;;;;;;;;;;-1:-1:-1;38298:297:0;;;;;:::i;:::-;;:::i;:::-;;16173:89;;;;;;;;;;-1:-1:-1;16244:10:0;;16173:89;;;1866:25:1;;;1854:2;1839:18;16173:89:0;1720:177:1;10930:39:0;;;;;;;;;;-1:-1:-1;10930:39:0;;;;-1:-1:-1;;;;;10930:39:0;;;;;;-1:-1:-1;;;;;2090:32:1;;;2072:51;;2060:2;2045:18;10930:39:0;1902:227:1;13920:97:0;;;;;;;;;;-1:-1:-1;9386:23:0;13920:97;;37811:479;;;;;;;;;;-1:-1:-1;37811:479:0;;;;;:::i;:::-;;:::i;36955:189::-;;;;;;;;;;-1:-1:-1;36955:189:0;;;;;:::i;:::-;;:::i;10157:30::-;;;;;;;;;;;;;;;;14835:448;;;;;;;;;;-1:-1:-1;14835:448:0;;;;;:::i;:::-;;:::i;37342:461::-;;;;;;;;;;-1:-1:-1;37342:461:0;;;;;:::i;:::-;;:::i;19141:322::-;;;;;;;;;;-1:-1:-1;19141:322:0;;;;;:::i;:::-;;:::i;13827:85::-;;;;;;;;;;-1:-1:-1;13827:85:0;;9642:1;3243:36:1;;3231:2;3216:18;13827:85:0;3101:184:1;8633:102:0;;;;;;;;;;-1:-1:-1;8633:102:0;;;;-1:-1:-1;;;;;8633:102:0;;;19975:471;;;;;;;;;;-1:-1:-1;19975:471:0;;;;;:::i;:::-;;:::i;15291:302::-;;;;;;;;;;-1:-1:-1;15291:302:0;;;;;:::i;:::-;;:::i;8526:100::-;;;;;;;;;;-1:-1:-1;8526:100:0;;;;-1:-1:-1;;;;;8526:100:0;;;10574:37;;;;;;;;;;;;;;;;36638:152;;;;;;;;;;-1:-1:-1;36638:152:0;;;;;:::i;:::-;;:::i;27533:175::-;;;;;;;;;;-1:-1:-1;27533:175:0;;;;;:::i;:::-;;:::i;18652:481::-;;;;;;;;;;-1:-1:-1;18652:481:0;;;;;:::i;:::-;;:::i;10976:28::-;;;;;;;;;;-1:-1:-1;10976:28:0;;;;-1:-1:-1;;;;;10976:28:0;;;9065:33;;;;;;;;;;-1:-1:-1;9065:33:0;;;;;;;;11049:41;;;;;;;;;;-1:-1:-1;11049:41:0;;;;-1:-1:-1;;;11049:41:0;;;;;;27181:341;;;;;;;;;;;;;:::i;19471:496::-;;;;;;;;;;-1:-1:-1;19471:496:0;;;;;:::i;:::-;;:::i;38985:378::-;;;;;;;;;;-1:-1:-1;38985:378:0;;;;;:::i;:::-;;:::i;36504:126::-;;;;;;;;;;-1:-1:-1;36504:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;36595:27:0;36571:4;36595:27;;;:18;:27;;;;;;;;;36504:126;27716:175;;;;;;;;;;-1:-1:-1;27716:175:0;;;;;:::i;:::-;;:::i;10385:48::-;;;;;;;;;;;;;;;;1609:90;;;;;;;;;;-1:-1:-1;1676:15:0;1609:90;;37152:182;;;;;;;;;;-1:-1:-1;37152:182:0;;;;;:::i;:::-;;:::i;1511:90::-;;;;;;;;;;-1:-1:-1;1584:9:0;;1511:90;;10440:46;;;;;;;;;;;;;;;;38603:374;;;;;;;;;;-1:-1:-1;38603:374:0;;;;;:::i;:::-;;:::i;39634:261::-;;;;;;;;;;-1:-1:-1;39634:261:0;;;;;:::i;:::-;;:::i;10618:32::-;;;;;;;;;;;;;;;;14025:198;;;;;;;;;;-1:-1:-1;14025:198:0;;;;;:::i;:::-;;:::i;1066:148::-;;;;;;;;;;;;;:::i;16276:119::-;;;;;;;;;;;;;:::i;16403:167::-;;;;;;;;;;-1:-1:-1;16403:167:0;;;;;:::i;:::-;;:::i;8424:95::-;;;;;;;;;;-1:-1:-1;8424:95:0;;;;-1:-1:-1;;;;;8424:95:0;;;40124:488;;;;;;;;;;-1:-1:-1;40124:488:0;;;;;:::i;:::-;;:::i;10194:36::-;;;;;;;;;;;;;;;;16011:154;;;;;;;;;;-1:-1:-1;16011:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;16137:20:0;16108:4;16137:20;;;:11;:20;;;;;;;;;16011:154;852:79;;;;;;;;;;-1:-1:-1;890:7:0;917:6;-1:-1:-1;;;;;917:6:0;852:79;;13730:89;;;;;;;;;;-1:-1:-1;13804:7:0;;;;;;;;;;;;-1:-1:-1;;;13804:7:0;;;;13730:89;;18005:304;;;;;;;;;;-1:-1:-1;18005:304:0;;;;;:::i;:::-;;:::i;17875:122::-;;;;;;;;;;-1:-1:-1;17966:23:0;;17875:122;;15601:402;;;;;;;;;;-1:-1:-1;15601:402:0;;;;;:::i;:::-;;:::i;14231:201::-;;;;;;;;;;-1:-1:-1;14231:201:0;;;;;:::i;:::-;;:::i;10701:30::-;;;;;;;;;;;;;;;;10816:57;;;;;;;;;;-1:-1:-1;10816:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11097:33;;;;;;;;;;-1:-1:-1;11097:33:0;;;;-1:-1:-1;;;11097:33:0;;;;;;10118:30;;;;;;;;;;;;;;;;39903:171;;;;;;;;;;-1:-1:-1;39903:171:0;;;;;:::i;:::-;;:::i;8742:101::-;;;;;;;;;;-1:-1:-1;8742:101:0;;;;-1:-1:-1;;;;;8742:101:0;;;10659:35;;;;;;;;;;;;;;;;10237:31;;;;;;;;;;;;;;;;10076:35;;;;;;;;;;;;;;;;14440:186;;;;;;;;;;-1:-1:-1;14440:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;14591:18:0;;;14559:7;14591:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14440:186;36798:149;;;;;;;;;;-1:-1:-1;36798:149:0;;;;;:::i;:::-;;:::i;10495:37::-;;;;;;;;;;;;;;;;10040:29;;;;;;;;;;;;;;;;1222:281;;;;;;;;;;-1:-1:-1;1222:281:0;;;;;:::i;:::-;;:::i;40626:268::-;;;;;;;;;;;;;:::i;9105:41::-;;;;;;;;;;-1:-1:-1;9105:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39371:255;;;;;;;;;;-1:-1:-1;39371:255:0;;;;;:::i;:::-;;:::i;16861:1006::-;16907:4;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;;;;;;;;;16933:13:::1;::::0;-1:-1:-1;;;16933:13:0;::::1;;;16932:14;16924:70;;;::::0;-1:-1:-1;;;16924:70:0;;5748:2:1;16924:70:0::1;::::0;::::1;5730:21:1::0;5787:2;5767:18;;;5760:30;5826:34;5806:18;;;5799:62;-1:-1:-1;;;5877:18:1;;;5870:41;5928:19;;16924:70:0::1;5546:407:1::0;16924:70:0::1;17007:15;:13;:15::i;:::-;17100:42;17164:58;17100:42:::0;17217:4:::1;17164:25;:58::i;:::-;17233:15;:34:::0;;-1:-1:-1;;;;;;17233:34:0::1;-1:-1:-1::0;;;;;17233:34:0;::::1;::::0;;::::1;::::0;;;17278:58:::1;::::0;17295:4:::1;::::0;9386:23:::1;17278:8;:58::i;:::-;17381:16;-1:-1:-1::0;;;;;17381:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17363:70:0::1;;17442:4;17449:16;-1:-1:-1::0;;;;;17449:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17363:110;::::0;-1:-1:-1;;;;;;17363:110:0::1;::::0;;;;;;-1:-1:-1;;;;;6444:15:1;;;17363:110:0::1;::::0;::::1;6426:34:1::0;6496:15;;6476:18;;;6469:43;6361:18;;17363:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17347:13;:126:::0;;-1:-1:-1;;;;;;17347:126:0::1;-1:-1:-1::0;;;;;17347:126:0;;;::::1;::::0;;::::1;::::0;;17484:55:::1;::::0;-1:-1:-1;17484:25:0::1;:55::i;:::-;17587:13;::::0;17550:58:::1;::::0;-1:-1:-1;;;;;17587:13:0::1;::::0;17550:28:::1;:58::i;:::-;17665:1;17641:21;:25;17619:110;;;::::0;-1:-1:-1;;;17619:110:0;;6725:2:1;17619:110:0::1;::::0;::::1;6707:21:1::0;6764:2;6744:18;;;6737:30;6803:34;6783:18;;;6776:62;-1:-1:-1;;;6854:18:1;;;6847:33;6897:19;;17619:110:0::1;6523:399:1::0;17619:110:0::1;17740:61;17753:24;17771:4;17753:9;:24::i;:::-;17779:21;17740:12;:61::i;:::-;17830:6;::::0;17812:25:::1;::::0;-1:-1:-1;;;;;17830:6:0::1;17812:17;:25::i;:::-;17855:4;17848:11;;;16861:1006:::0;:::o;14634:193::-;14736:4;14758:39;290:10;14781:7;14790:6;14758:8;:39::i;:::-;-1:-1:-1;14815:4:0;14634:193;;;;;:::o;38298:297::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;38457:4:::1;38426:28;38442:12:::0;38426:13;:28:::1;:::i;:::-;:35;38418:63;;;::::0;-1:-1:-1;;;38418:63:0;;7391:2:1;38418:63:0::1;::::0;::::1;7373:21:1::0;7430:2;7410:18;;;7403:30;-1:-1:-1;;;7449:18:1;;;7442:45;7504:18;;38418:63:0::1;7189:339:1::0;38418:63:0::1;38492:27;:43:::0;;;;38546:26:::1;:41:::0;38298:297::o;37811:479::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;37962:11:::1;:24:::0;;;37997:17:::1;:36:::0;;;38044:12:::1;:26:::0;;;38153:2:::1;38059:11:::0;38103:31:::1;38017:16:::0;37976:10;38103:31:::1;:::i;:::-;:46;;;;:::i;:::-;:52;;38081:132;;;::::0;-1:-1:-1;;;38081:132:0;;7735:2:1;38081:132:0::1;::::0;::::1;7717:21:1::0;7774:2;7754:18;;;7747:30;7813:32;7793:18;;;7786:60;7863:18;;38081:132:0::1;7533:354:1::0;38081:132:0::1;38229:53;::::0;;8094:25:1;;;8150:2;8135:18;;8128:34;;;8178:18;;;8171:34;;;38229:53:0::1;::::0;8082:2:1;8067:18;38229:53:0::1;;;;;;;;37811:479:::0;;;:::o;36955:189::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;37057:1:::1;37045:9;:13;37037:37;;;::::0;-1:-1:-1;;;37037:37:0;;8418:2:1;37037:37:0::1;::::0;::::1;8400:21:1::0;8457:2;8437:18;;;8430:30;-1:-1:-1;;;8476:18:1;;;8469:41;8527:18;;37037:37:0::1;8216:335:1::0;37037:37:0::1;37132:4;37109:19;37119:9:::0;9386:23:::1;37109:19;:::i;:::-;37108:28;;;;:::i;:::-;37085:20;:51:::0;-1:-1:-1;36955:189:0:o;14835:448::-;14969:4;14986:36;14996:6;15004:9;15015:6;14986:9;:36::i;:::-;15033:220;15056:6;290:10;15104:138;15160:6;15104:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15104:19:0;;;;;;:11;:19;;;;;;;;290:10;15104:33;;;;;;;;;;:37;:138::i;:::-;15033:8;:220::i;:::-;-1:-1:-1;15271:4:0;14835:448;;;;;:::o;37342:461::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;37489:10:::1;:22:::0;;;37522:16:::1;:34:::0;;;37567:11:::1;:24:::0;;;37671:2:::1;37581:10:::0;37624:29:::1;37541:15:::0;37502:9;37624:29:::1;:::i;:::-;:43;;;;:::i;:::-;:49;;37602:128;;;::::0;-1:-1:-1;;;37602:128:0;;9153:2:1;37602:128:0::1;::::0;::::1;9135:21:1::0;9192:2;9172:18;;;9165:30;9231:31;9211:18;;;9204:59;9280:18;;37602:128:0::1;8951:353:1::0;37602:128:0::1;37746:49;::::0;;8094:25:1;;;8150:2;8135:18;;8128:34;;;8178:18;;;8171:34;;;37746:49:0::1;::::0;8082:2:1;8067:18;37746:49:0::1;7892:319:1::0;19141:322:0;19235:7;19293;;19282;:18;;19260:110;;;;-1:-1:-1;;;19260:110:0;;9511:2:1;19260:110:0;;;9493:21:1;9550:2;9530:18;;;9523:30;9589:34;9569:18;;;9562:62;-1:-1:-1;;;9640:18:1;;;9633:40;9690:19;;19260:110:0;9309:406:1;19260:110:0;19381:19;19403:10;:8;:10::i;:::-;19381:32;-1:-1:-1;19431:24:0;:7;19381:32;19431:11;:24::i;:::-;19424:31;19141:322;-1:-1:-1;;;19141:322:0:o;19975:471::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20053:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20045:56;;;::::0;-1:-1:-1;;;20045:56:0;;9922:2:1;20045:56:0::1;::::0;::::1;9904:21:1::0;9961:2;9941:18;;;9934:30;10000:25;9980:18;;;9973:53;10043:18;;20045:56:0::1;9720:347:1::0;20045:56:0::1;20117:9;20112:327;20136:9;:16:::0;20132:20;::::1;20112:327;;;20194:7;-1:-1:-1::0;;;;;20178:23:0::1;:9;20188:1;20178:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20178:12:0::1;:23:::0;20174:254:::1;;20237:9;20247:16:::0;;:20:::1;::::0;20266:1:::1;::::0;20247:20:::1;:::i;:::-;20237:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;20222:9:::1;:12:::0;;-1:-1:-1;;;;;20237:31:0;;::::1;::::0;20232:1;;20222:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;20222:46:0::1;-1:-1:-1::0;;;;;20222:46:0;;::::1;;::::0;;20287:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;20326:11:::1;:20:::0;;;;:28;;-1:-1:-1;;20326:28:0::1;::::0;;20373:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;20373:15:0;;;;;-1:-1:-1;;;;;;20373:15:0::1;::::0;;;;;20112:327:::1;19975:471:::0;:::o;20174:254::-:1;20154:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20112:327;;;;19975:471:::0;:::o;15291:302::-;290:10;15408:4;15502:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15502:34:0;;;;;;;;;;15408:4;;15430:133;;15480:7;;15502:50;;15541:10;15502:38;:50::i;36638:152::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36709:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;36709:34:0::1;36739:4;36709:34;::::0;;36759:23;;2072:51:1;;;36759:23:0::1;::::0;2045:18:1;36759:23:0::1;;;;;;;;36638:152:::0;:::o;27533:175::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27612:21:0;::::1;27604:60;;;::::0;-1:-1:-1;;;27604:60:0;;10811:2:1;27604:60:0::1;::::0;::::1;10793:21:1::0;10850:2;10830:18;;;10823:30;10889:28;10869:18;;;10862:56;10935:18;;27604:60:0::1;10609:350:1::0;27604:60:0::1;-1:-1:-1::0;;;;;27675:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;27675:25:0::1;27696:4;27675:25;::::0;;27533:175::o;18652:481::-;18772:7;9386:23;18805:7;:18;;18797:62;;;;-1:-1:-1;;;18797:62:0;;11166:2:1;18797:62:0;;;11148:21:1;11205:2;11185:18;;;11178:30;11244:33;11224:18;;;11217:61;11295:18;;18797:62:0;10964:355:1;18797:62:0;18875:17;18870:256;;18910:15;18939:19;18950:7;18939:10;:19::i;:::-;-1:-1:-1;18909:49:0;;-1:-1:-1;18973:14:0;;-1:-1:-1;;;;;18973:14:0;18870:256;19023:23;19058:19;19069:7;19058:10;:19::i;:::-;-1:-1:-1;19020:57:0;;-1:-1:-1;19092:22:0;;-1:-1:-1;;;;;19092:22:0;27181:341;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;27236:23:::1;27262:24;27280:4;27262:9;:24::i;:::-;27236:50:::0;-1:-1:-1;27338:12:0::1;27348:2;9386:23;27338:12;:::i;:::-;27319:15;:31;;27297:144;;;::::0;-1:-1:-1;;;27297:144:0;;11526:2:1;27297:144:0::1;::::0;::::1;11508:21:1::0;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;11675:33;11655:18;;;11648:61;11726:19;;27297:144:0::1;11324:427:1::0;27297:144:0::1;27452:10;:8;:10::i;:::-;27478:36;::::0;27498:15:::1;1866:25:1::0;;27478:36:0::1;::::0;1854:2:1;1839:18;27478:36:0::1;1720:177:1::0;19471:496:0;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19552:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19551:21;19543:61;;;::::0;-1:-1:-1;;;19543:61:0;;11958:2:1;19543:61:0::1;::::0;::::1;11940:21:1::0;11997:2;11977:18;;;11970:30;12036:29;12016:18;;;12009:57;12083:18;;19543:61:0::1;11756:351:1::0;19543:61:0::1;19637:9;:16:::0;19661:2:::1;::::0;19637:20:::1;::::0;19656:1:::1;19637:20;:::i;:::-;:26;;19615:153;;;::::0;-1:-1:-1;;;19615:153:0;;12314:2:1;19615:153:0::1;::::0;::::1;12296:21:1::0;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:19:1;;;12507:44;12568:19;;19615:153:0::1;12112:481:1::0;19615:153:0::1;-1:-1:-1::0;;;;;19783:16:0;::::1;19802:1;19783:16:::0;;;:7:::1;:16;::::0;;;;;:20;19779:109:::1;;-1:-1:-1::0;;;;;19859:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;19839:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;19820:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;19779:109:::1;-1:-1:-1::0;;;;;19898:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;19898:27:0::1;19921:4;19898:27:::0;;::::1;::::0;;;19936:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19936:23:0::1;::::0;;::::1;::::0;;19471:496::o;38985:378::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39091:31:0;::::1;39069:118;;;::::0;-1:-1:-1;;;39069:118:0;;12800:2:1;39069:118:0::1;::::0;::::1;12782:21:1::0;12839:2;12819:18;;;12812:30;12878:34;12858:18;;;12851:62;-1:-1:-1;;;12929:18:1;;;12922:35;12974:19;;39069:118:0::1;12598:401:1::0;39069:118:0::1;39198:16;:45:::0;;-1:-1:-1;;;;;;39198:45:0::1;-1:-1:-1::0;;;;;39198:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;39254:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;39254:43:0::1;-1:-1:-1::0;39254:43:0::1;::::0;;39313:42;;2072:51:1;;;39313:42:0::1;::::0;2045:18:1;39313:42:0::1;1902:227:1::0;27716:175:0;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27800:21:0;::::1;27792:54;;;::::0;-1:-1:-1;;;27792:54:0;;13206:2:1;27792:54:0::1;::::0;::::1;13188:21:1::0;13245:2;13225:18;;;13218:30;-1:-1:-1;;;13264:18:1;;;13257:50;13324:18;;27792:54:0::1;13004:344:1::0;27792:54:0::1;-1:-1:-1::0;;;;;27857:18:0::1;27878:5;27857:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;27857:26:0::1;::::0;;27716:175::o;37152:182::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;37249:1:::1;37234:12;:16;37226:40;;;::::0;-1:-1:-1;;;37226:40:0;;8418:2:1;37226:40:0::1;::::0;::::1;8400:21:1::0;8457:2;8437:18;;;8430:30;-1:-1:-1;;;8476:18:1;;;8469:41;8527:18;;37226:40:0::1;8216:335:1::0;37226:40:0::1;37322:4;37296:22;37306:12:::0;9386:23:::1;37296:22;:::i;:::-;37295:31;;;;:::i;:::-;37277:15;:49:::0;-1:-1:-1;37152:182:0:o;38603:374::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38697:24:0;::::1;38675:111;;;::::0;-1:-1:-1;;;38675:111:0;;13555:2:1;38675:111:0::1;::::0;::::1;13537:21:1::0;13594:2;13574:18;;;13567:30;13633:34;13613:18;;;13606:62;-1:-1:-1;;;13684:18:1;;;13677:35;13729:19;;38675:111:0::1;13353:401:1::0;38675:111:0::1;38816:9;::::0;;-1:-1:-1;;;;;38816:9:0;;::::1;38829:5;38797:29:::0;;;:18:::1;:29;::::0;;;;;;;:37;;-1:-1:-1;;38797:37:0;;::::1;::::0;;;38845:31;;-1:-1:-1;;;;;;38845:31:0::1;::::0;;::::1;::::0;;::::1;::::0;;;38887:29;;;;;;;:36;;;;::::1;-1:-1:-1::0;38887:36:0::1;::::0;;;38939:30;2072:51:1;;;38939:30:0::1;::::0;2045:18:1;38939:30:0::1;1902:227:1::0;39634:261:0;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39726:30:0;::::1;39718:62;;;::::0;-1:-1:-1;;;39718:62:0;;13961:2:1;39718:62:0::1;::::0;::::1;13943:21:1::0;14000:2;13980:18;;;13973:30;-1:-1:-1;;;14019:18:1;;;14012:49;14078:18;;39718:62:0::1;13759:343:1::0;39718:62:0::1;39791:15;:43:::0;;-1:-1:-1;;;;;39791:43:0;;::::1;-1:-1:-1::0;;;;;;39791:43:0;;::::1;::::0;::::1;::::0;;:15:::1;39845:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;39845:42:0::1;39791:43:::0;39845:42:::1;::::0;;39634:261::o;14025:198::-;-1:-1:-1;;;;;14115:20:0;;14091:7;14115:20;;;:11;:20;;;;;;;;14111:49;;;-1:-1:-1;;;;;;14144:16:0;;;;;:7;:16;;;;;;;14025:198::o;14111:49::-;-1:-1:-1;;;;;14198:16:0;;;;;;:7;:16;;;;;;14178:37;;:19;:37::i;1066:148::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;1173:1:::1;1157:6:::0;;1136:40:::1;::::0;-1:-1:-1;;;;;1157:6:0;;::::1;::::0;1136:40:::1;::::0;1173:1;;1136:40:::1;1204:1;1187:19:::0;;-1:-1:-1;;;;;;1187:19:0::1;::::0;;1066:148::o;16276:119::-;16328:4;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;16345:14:0::1;:20:::0;;-1:-1:-1;;16345:20:0::1;16361:4;16345:20:::0;;::::1;::::0;;;16276:119;:::o;16403:167::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16516:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16516:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16403:167::o;40124:488::-;40238:10;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40274:20:0;::::1;40266:59;;;::::0;-1:-1:-1;;;40266:59:0;;14309:2:1;40266:59:0::1;::::0;::::1;14291:21:1::0;14348:2;14328:18;;;14321:30;14387:28;14367:18;;;14360:56;14433:18;;40266:59:0::1;14107:350:1::0;40266:59:0::1;40362:4;-1:-1:-1::0;;;;;40344:23:0;::::1;::::0;40336:64:::1;;;::::0;-1:-1:-1;;;40336:64:0;;14664:2:1;40336:64:0::1;::::0;::::1;14646:21:1::0;14703:2;14683:18;;;14676:30;14742;14722:18;;;14715:58;14790:18;;40336:64:0::1;14462:352:1::0;40336:64:0::1;40438:39;::::0;-1:-1:-1;;;40438:39:0;;40471:4:::1;40438:39;::::0;::::1;2072:51:1::0;40411:24:0::1;::::0;-1:-1:-1;;;;;40438:24:0;::::1;::::0;::::1;::::0;2045:18:1;;40438:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40496:46;::::0;-1:-1:-1;;;40496:46:0;;-1:-1:-1;;;;;15200:32:1;;;40496:46:0::1;::::0;::::1;15182:51:1::0;15249:18;;;15242:34;;;40411:66:0;;-1:-1:-1;40496:23:0;;::::1;::::0;::::1;::::0;15155:18:1;;40496:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40558;::::0;;-1:-1:-1;;;;;15200:32:1;;15182:51;;15264:2;15249:18;;15242:34;;;40488:54:0;;-1:-1:-1;40558:46:0::1;::::0;15155:18:1;40558:46:0::1;;;;;;;40255:357;40124:488:::0;;;;:::o;18005:304::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;18149:13:::1;::::0;-1:-1:-1;;;;;18149:13:0;;::::1;18141:21:::0;;::::1;::::0;18119:128:::1;;;::::0;-1:-1:-1;;;18119:128:0;;15739:2:1;18119:128:0::1;::::0;::::1;15721:21:1::0;15778:2;15758:18;;;15751:30;15817:34;15797:18;;;15790:62;15888:27;15868:18;;;15861:55;15933:19;;18119:128:0::1;15537:421:1::0;18119:128:0::1;18260:41;18289:4;18295:5;18260:28;:41::i;15601:402::-:0;15723:4;15745:228;290:10;15795:7;15817:145;15874:15;15817:145;;;;;;;;;;;;;;;;;290:10;15817:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15817:34:0;;;;;;;;;;;;:38;:145::i;14231:201::-;14338:4;14360:42;290:10;14384:9;14395:6;14360:9;:42::i;39903:171::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;39980:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;39980:32:0::1;-1:-1:-1::0;;;;39980:32:0;;::::1;;::::0;;40028:38:::1;::::0;::::1;::::0;::::1;::::0;40004:8;179:14:1;172:22;154:41;;142:2;127:18;;14:187;36798:149:0;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36867:27:0;::::1;36897:5;36867:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;36867:35:0::1;::::0;;36918:21;;2072:51:1;;;36918:21:0::1;::::0;2045:18:1;36918:21:0::1;1902:227:1::0;1222:281:0;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1325:22:0;::::1;1303:110;;;::::0;-1:-1:-1;;;1303:110:0;;16165:2:1;1303:110:0::1;::::0;::::1;16147:21:1::0;16204:2;16184:18;;;16177:30;16243:34;16223:18;;;16216:62;-1:-1:-1;;;16294:18:1;;;16287:36;16340:19;;1303:110:0::1;15963:402:1::0;1303:110:0::1;1450:6;::::0;;1429:38:::1;::::0;-1:-1:-1;;;;;1429:38:0;;::::1;::::0;1450:6;::::1;::::0;1429:38:::1;::::0;::::1;1478:6;:17:::0;;-1:-1:-1;;;;;;1478:17:0::1;-1:-1:-1::0;;;;;1478:17:0;;;::::1;::::0;;;::::1;::::0;;1222:281::o;40626:268::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;40693:13:::1;::::0;-1:-1:-1;;;40693:13:0;::::1;;;40692:14;40684:70;;;::::0;-1:-1:-1;;;40684:70:0;;16572:2:1;40684:70:0::1;::::0;::::1;16554:21:1::0;16611:2;16591:18;;;16584:30;16650:34;16630:18;;;16623:62;-1:-1:-1;;;16701:18:1;;;16694:41;16752:19;;40684:70:0::1;16370:407:1::0;40684:70:0::1;40802:84;::::0;40765:12:::1;::::0;40810:10:::1;::::0;40835:21:::1;::::0;40765:12;40802:84;40765:12;40802:84;40835:21;40810:10;40802:84:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;40626:268:0:o;39371:255::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39461:29:0;::::1;39453:61;;;::::0;-1:-1:-1;;;39453:61:0;;13961:2:1;39453:61:0::1;::::0;::::1;13943:21:1::0;14000:2;13980:18;;;13973:30;-1:-1:-1;;;14019:18:1;;;14012:49;14078:18;;39453:61:0::1;13759:343:1::0;39453:61:0::1;39525:14;:41:::0;;-1:-1:-1;;;;;39525:41:0;;::::1;-1:-1:-1::0;;;;;;39525:41:0;;::::1;::::0;::::1;::::0;;:14:::1;39577:34:::0;;;:18:::1;:34;::::0;;;;:41;;-1:-1:-1;;39577:41:0::1;39525::::0;39577::::1;::::0;;39371:255::o;16624:166::-;979:6;;-1:-1:-1;;;;;979:6:0;290:10;979:22;971:67;;;;-1:-1:-1;;;971:67:0;;;;;;;:::i;:::-;16679:13:::1;:20:::0;;-1:-1:-1;;;;16710:28:0;-1:-1:-1;;;16710:28:0;;;16770:12:::1;16749:18;:33:::0;16624:166::o;20454:371::-;-1:-1:-1;;;;;20581:19:0;;20573:68;;;;-1:-1:-1;;;20573:68:0;;17194:2:1;20573:68:0;;;17176:21:1;17233:2;17213:18;;;17206:30;17272:34;17252:18;;;17245:62;-1:-1:-1;;;17323:18:1;;;17316:34;17367:19;;20573:68:0;16992:400:1;20573:68:0;-1:-1:-1;;;;;20660:21:0;;20652:68;;;;-1:-1:-1;;;20652:68:0;;17599:2:1;20652:68:0;;;17581:21:1;17638:2;17618:18;;;17611:30;17677:34;17657:18;;;17650:62;-1:-1:-1;;;17728:18:1;;;17721:32;17770:19;;20652:68:0;17397:398:1;20652:68:0;-1:-1:-1;;;;;20733:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20785:32;;1866:25:1;;;20785:32:0;;1839:18:1;20785:32:0;;;;;;;20454:371;;;:::o;18317:327::-;-1:-1:-1;;;;;18400:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;18400:39:0;;;;;;;;18450:31;:37;;;;;;;:45;;;;;;;;;;;18506:61;;18532:23;18550:4;18532:17;:23::i;:::-;18582:5;18577:60;;18604:21;18620:4;18604:15;:21::i;28379:373::-;28492:15;;28460:62;;28477:4;;-1:-1:-1;;;;;28492:15:0;28510:11;28460:8;:62::i;:::-;28533:15;;28687:16;;28533:211;;-1:-1:-1;;;28533:211:0;;28607:4;28533:211;;;18149:34:1;18199:18;;;18192:34;;;28533:15:0;18242:18:1;;;18235:34;;;18285:18;;;18278:34;-1:-1:-1;;;;;28687:16:0;;;18328:19:1;;;18321:44;28718:15:0;18381:19:1;;;18374:35;28533:15:0;;;:31;;28573:9;;18083:19:1;;28533:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28379:373;;:::o;20833:4481::-;-1:-1:-1;;;;;20955:18:0;;20947:68;;;;-1:-1:-1;;;20947:68:0;;18933:2:1;20947:68:0;;;18915:21:1;18972:2;18952:18;;;18945:30;19011:34;18991:18;;;18984:62;-1:-1:-1;;;19062:18:1;;;19055:35;19107:19;;20947:68:0;18731:401:1;20947:68:0;-1:-1:-1;;;;;21034:16:0;;21026:64;;;;-1:-1:-1;;;21026:64:0;;19339:2:1;21026:64:0;;;19321:21:1;19378:2;19358:18;;;19351:30;19417:34;19397:18;;;19390:62;-1:-1:-1;;;19468:18:1;;;19461:33;19511:19;;21026:64:0;19137:399:1;21026:64:0;21118:1;21109:6;:10;21101:64;;;;-1:-1:-1;;;21101:64:0;;19743:2:1;21101:64:0;;;19725:21:1;19782:2;19762:18;;;19755:30;19821:34;19801:18;;;19794:62;-1:-1:-1;;;19872:18:1;;;19865:39;19921:19;;21101:64:0;19541:405:1;21101:64:0;-1:-1:-1;;;;;21185:15:0;;;;;;:9;:15;;;;;;;;21184:16;21176:66;;;;-1:-1:-1;;;21176:66:0;;20153:2:1;21176:66:0;;;20135:21:1;20192:2;20172:18;;;20165:30;20231:34;20211:18;;;20204:62;-1:-1:-1;;;20282:18:1;;;20275:35;20327:19;;21176:66:0;19951:401:1;21176:66:0;-1:-1:-1;;;;;21262:13:0;;;;;;:9;:13;;;;;;;;21261:14;21253:62;;;;-1:-1:-1;;;21253:62:0;;20559:2:1;21253:62:0;;;20541:21:1;20598:2;20578:18;;;20571:30;20637:34;20617:18;;;20610:62;-1:-1:-1;;;20688:18:1;;;20681:33;20731:19;;21253:62:0;20357:399:1;21253:62:0;21333:13;;-1:-1:-1;;;21333:13:0;;;;21328:185;;-1:-1:-1;;;;;21389:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;21417:22:0;;;;;;:18;:22;;;;;;;;21389:50;21363:138;;;;-1:-1:-1;;;21363:138:0;;20963:2:1;21363:138:0;;;20945:21:1;21002:2;20982:18;;;20975:30;21041:28;21021:18;;;21014:56;21087:18;;21363:138:0;20761:350:1;21363:138:0;21529:14;;;;21525:1316;;;890:7;917:6;-1:-1:-1;;;;;21582:15:0;;;917:6;;21582:15;;;;:49;;-1:-1:-1;890:7:0;917:6;-1:-1:-1;;;;;21618:13:0;;;917:6;;21618:13;;21582:49;:86;;;;-1:-1:-1;;;;;;21652:16:0;;;;21582:86;:128;;;;-1:-1:-1;;;;;;21689:21:0;;21703:6;21689:21;;21582:128;:166;;;;-1:-1:-1;21732:16:0;;-1:-1:-1;;;21732:16:0;;;;21731:17;21582:166;21560:1270;;;-1:-1:-1;;;;;21837:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;21894:35:0;;;;;;:31;:35;;;;;;;;21893:36;21837:92;21811:753;;;22016:20;;22006:6;:30;;21972:169;;;;-1:-1:-1;;;21972:169:0;;21318:2:1;21972:169:0;;;21300:21:1;21357:2;21337:18;;;21330:30;21396:34;21376:18;;;21369:62;-1:-1:-1;;;21447:18:1;;;21440:51;21508:19;;21972:169:0;21116:417:1;21972:169:0;21811:753;;;-1:-1:-1;;;;;22239:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;22294:37:0;;;;;;:31;:37;;;;;;;;22293:38;22239:92;22213:351;;;22418:20;;22408:6;:30;;22374:170;;;;-1:-1:-1;;;22374:170:0;;21740:2:1;22374:170:0;;;21722:21:1;21779:2;21759:18;;;21752:30;21818:34;21798:18;;;21791:62;-1:-1:-1;;;21869:18:1;;;21862:52;21931:19;;22374:170:0;21538:418:1;22374:170:0;-1:-1:-1;;;;;22589:35:0;;;;;;:31;:35;;;;;;;;22584:231;;22709:15;;22699:6;22683:13;22693:2;22683:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;22649:146;;;;-1:-1:-1;;;22649:146:0;;22163:2:1;22649:146:0;;;22145:21:1;22202:2;22182:18;;;22175:30;-1:-1:-1;;;22221:18:1;;;22214:49;22280:18;;22649:146:0;21961:343:1;22649:146:0;22853:25;22881:69;22922:17;;22881:22;;:26;;:69;;;;:::i;:::-;22853:97;;22961:28;22992:24;23010:4;22992:9;:24::i;:::-;23095:23;;23179:16;;22961:55;;-1:-1:-1;23058:60:0;;;;-1:-1:-1;;;23179:16:0;;;;23178:17;:55;;;;-1:-1:-1;23212:21:0;;-1:-1:-1;;;23212:21:0;;;;23178:55;:100;;;;-1:-1:-1;23260:13:0;;23277:1;;23250:24;;-1:-1:-1;;;;;23260:13:0;23250:9;:24::i;:::-;:28;23178:100;:138;;;;;23315:1;23295:17;:21;23178:138;:178;;;;-1:-1:-1;;;;;;23334:22:0;;;;;;:18;:22;;;;;;;;23333:23;23178:178;:220;;;;-1:-1:-1;;;;;;23374:24:0;;;;;;:18;:24;;;;;;;;23373:25;23178:220;:266;;;;-1:-1:-1;;;;;;23415:29:0;;;;;;:25;:29;;;;;;;;23178:266;:306;;;;;23461:23;23178:306;23160:373;;;23511:10;:8;:10::i;:::-;-1:-1:-1;;;;;23666:24:0;;23545:12;23666:24;;;:18;:24;;;;;;23560:4;;23666:24;;;:50;;-1:-1:-1;;;;;;23694:22:0;;;;;;:18;:22;;;;;;;;23666:50;23662:1591;;;-1:-1:-1;9984:1:0;23763:15;:26;23743:5;23662:1591;;;-1:-1:-1;;;;;23877:31:0;;;;;;:25;:31;;;;;;;;23873:1369;;;23929:14;:12;:14::i;:::-;9900:1;23962:15;:21;24022:18;;24006:12;:34;24002:418;;24075:1;24065:7;:11;24115:2;24099:13;:18;23873:1369;;24002:418;24163:18;;:22;;24184:1;24163:22;:::i;:::-;24147:12;:38;24143:277;;24220:1;24210:7;:11;24260:2;24244:13;:18;23873:1369;;24143:277;24321:10;;24311:7;:20;24389:11;;24370:16;;:30;;24389:11;24370:30;:::i;:::-;24354:13;:46;23873:1369;;;-1:-1:-1;;;;;24479:29:0;;;;;;:25;:29;;;;;;;;24475:767;;;24529:14;:12;:14::i;:::-;9940:1;24562:15;:22;24641:18;;24625:12;:34;24621:421;;24694:1;24684:7;:11;24734:2;24718:13;:18;24475:767;;24621:421;24782:18;;:22;;24803:1;24782:22;:::i;:::-;24766:12;:38;24762:280;;24839:1;24829:7;:11;24879:2;24863:13;:18;23873:1369;;24762:280;24940:11;;24930:7;:21;25010:12;;24990:17;;:32;;25010:12;24990:32;:::i;24475:767::-;25136:14;:12;:14::i;:::-;9984:1;25169:15;:26;24475:767;25265:41;25280:4;25286:2;25290:6;25298:7;25265:14;:41::i;:::-;20936:4378;;;;20833:4481;;;:::o;7087:226::-;7207:7;7243:12;7235:6;;;;7227:29;;;;-1:-1:-1;;;7227:29:0;;;;;;;;:::i;:::-;-1:-1:-1;7267:9:0;7279:5;7283:1;7279;:5;:::i;:::-;7267:17;7087:226;-1:-1:-1;;;;;7087:226:0:o;34161:164::-;34203:7;34224:15;34241;34260:19;:17;:19::i;:::-;34223:56;;-1:-1:-1;34223:56:0;-1:-1:-1;34297:20:0;34223:56;;34297:11;:20::i;:::-;34290:27;;;;34161:164;:::o;7579:132::-;7637:7;7664:39;7668:1;7671;7664:39;;;;;;;;;;;;;;;;;:3;:39::i;6754:181::-;6812:7;;6844:5;6848:1;6844;:5;:::i;:::-;6832:17;;6873:1;6868;:6;;6860:46;;;;-1:-1:-1;;;6860:46:0;;22511:2:1;6860:46:0;;;22493:21:1;22550:2;22530:18;;;22523:30;22589:29;22569:18;;;22562:57;22636:18;;6860:46:0;22309:351:1;32429:742:0;32529:7;32551;32573;32595;32617;32639;32689:23;32727:12;32754:18;32786:20;32798:7;32786:11;:20::i;:::-;32674:132;;;;;;32818:15;32835:23;32860:12;32876:113;32902:7;32924:4;32943:10;32968;:8;:10::i;:::-;32876:11;:113::i;:::-;32817:172;;;;-1:-1:-1;32817:172:0;;-1:-1:-1;33093:15:0;;-1:-1:-1;33123:4:0;;-1:-1:-1;33142:10:0;;-1:-1:-1;32429:742:0;;-1:-1:-1;;;;;32429:742:0:o;25322:1845::-;12285:16;:23;;-1:-1:-1;;;;12285:23:0;-1:-1:-1;;;12285:23:0;;;;25399:24:::1;25417:4;25399:9;:24::i;:::-;25373:50;;25434:25;25487:17;;25462:22;;:42;;;;:::i;:::-;25434:70;;25566:26;25595:29;25622:1;25595:22;;:26;;:29;;;;:::i;:::-;25566:58:::0;-1:-1:-1;25635:26:0::1;25664:39;:15:::0;25566:58;25664:19:::1;:39::i;:::-;25635:68:::0;-1:-1:-1;25744:21:0::1;25778:36;25635:68:::0;25778:16:::1;:36::i;:::-;25827:18;25848:44;:21;25874:17:::0;25848:25:::1;:44::i;:::-;25827:65;;25905:23;25931:80;25983:17;25931:33;25946:17;;25931:10;:14;;:33;;;;:::i;:::-;:37:::0;::::1;:80::i;:::-;25905:106:::0;-1:-1:-1;26024:23:0::1;26050:31;:10:::0;25905:106;26050:14:::1;:31::i;:::-;26024:57;;26094:21;26118:81;26184:4;26118:47;26138:26;;26118:15;:19;;:47;;;;:::i;:81::-;26094:105;;26210:22;26235:86;26316:4;26235:62;26269:27;;26235:15;:33;;:62;;;;:::i;:86::-;26210:111:::0;-1:-1:-1;26332:32:0::1;26351:13:::0;26332:32;::::1;:::i;:::-;::::0;-1:-1:-1;26375:33:0::1;26394:14:::0;26332:32;26375:33:::1;:::i;:::-;26446:1;26421:22;:26:::0;;;26458:17:::1;:21:::0;;;26519:9:::1;::::0;26511:75:::1;::::0;26375:33;;-1:-1:-1;26446:1:0;;-1:-1:-1;;;;;26519:9:0;;::::1;::::0;26375:33;;26446:1;26511:75;26446:1;26511:75;26375:33;26519:9;26511:75:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26619:14:0::1;::::0;26611:56:::1;::::0;26492:94;;-1:-1:-1;;;;;;26619:14:0::1;::::0;26648:13;;26611:56:::1;::::0;;;26648:13;26619:14;26611:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;26700:15:0::1;::::0;26692:82:::1;::::0;26597:70;;-1:-1:-1;;;;;;26700:15:0::1;::::0;26730:14;;26692:82:::1;::::0;;;26730:14;26700:15;26692:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26678:96;;;;;26787:49;26800:18;26820:15;26787:12;:49::i;:::-;26852:121;::::0;;8094:25:1;;;8150:2;8135:18;;8128:34;;;8178:18;;;8171:34;;;26852:121:0::1;::::0;8082:2:1;8067:18;26852:121:0::1;;;;;;;27024:4;27000:21;:28;26996:164;;;27067:9;::::0;27059:89:::1;::::0;-1:-1:-1;;;;;27067:9:0;;::::1;::::0;27108:21:::1;::::0;27059:89:::1;::::0;;;27108:21;27067:9;27059:89:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27045:103:0;;-1:-1:-1;;26996:164:0::1;-1:-1:-1::0;;12331:16:0;:24;;-1:-1:-1;;;;12331:24:0;;;-1:-1:-1;;;;;;;;;25322:1845:0:o;36128:235::-;36175:7;;:12;:34;;;;-1:-1:-1;36191:13:0;;:18;36175:34;36171:47;;;36128:235::o;36171:47::-;36248:7;;;36230:15;:25;36290:13;;;36266:21;:37;-1:-1:-1;36316:11:0;;;;36338:17;36128:235::o;28760:708::-;28916:7;28911:28;;28925:14;:12;:14::i;:::-;-1:-1:-1;;;;;28956:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28980:22:0;;;;;;:11;:22;;;;;;;;28979:23;28956:46;28952:467;;;29019:48;29041:6;29049:9;29060:6;29019:21;:48::i;:::-;28952:467;;;-1:-1:-1;;;;;29090:19:0;;;;;;:11;:19;;;;;;;;29089:20;:46;;;;-1:-1:-1;;;;;;29113:22:0;;;;;;:11;:22;;;;;;;;29089:46;29085:334;;;29152:46;29172:6;29180:9;29191:6;29152:19;:46::i;29085:334::-;-1:-1:-1;;;;;29220:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29243:22:0;;;;;;:11;:22;;;;;;;;29220:45;29216:203;;;29282:48;29304:6;29312:9;29323:6;29282:21;:48::i;29216:203::-;29363:44;29381:6;29389:9;29400:6;29363:17;:44::i;:::-;29436:7;29431:29;;29445:15;36425;;36415:7;:25;36467:21;;36451:13;:37;36371:125;34333:605;34431:7;;34384;;;;9386:23;34384:7;34485:338;34509:9;:16;34505:20;;34485:338;;;34593:7;34569;:21;34577:9;34587:1;34577:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34577:12:0;34569:21;;;;;;;;;;;;;:31;;:83;;;34645:7;34621;:21;34629:9;34639:1;34629:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34629:12:0;34621:21;;;;;;;;;;;;;:31;34569:83;34547:146;;;-1:-1:-1;;34676:7:0;;;9386:23;;-1:-1:-1;34333:605:0;-1:-1:-1;;34333:605:0:o;34547:146::-;34718:34;34730:7;:21;34738:9;34748:1;34738:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34738:12:0;34730:21;;;;;;;;;;;;;34718:7;;:11;:34::i;:::-;34708:44;;34777:34;34789:7;:21;34797:9;34807:1;34797:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34797:12:0;34789:21;;;;;;;;;;;;;34777:7;;:11;:34::i;:::-;34767:44;-1:-1:-1;34527:3:0;;;;:::i;:::-;;;;34485:338;;;-1:-1:-1;34847:7:0;;:20;;9386:23;34847:11;:20::i;:::-;34837:7;:30;34833:61;;;-1:-1:-1;;34877:7:0;;;9386:23;;-1:-1:-1;34333:605:0;-1:-1:-1;34333:605:0:o;34833:61::-;34913:7;;34922;;-1:-1:-1;34333:605:0;-1:-1:-1;34333:605:0:o;7719:235::-;7839:7;7874:12;7867:5;7859:28;;;;-1:-1:-1;;;7859:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7898:9:0;7910:5;7914:1;7910;:5;:::i;33179:412::-;33280:7;33302;33324;33359:12;33374:24;33390:7;33374:15;:24::i;:::-;33359:39;;33409:18;33430:30;33452:7;33430:21;:30::i;:::-;33409:51;-1:-1:-1;33471:23:0;33497:33;33409:51;33497:17;:7;33509:4;33497:11;:17::i;:::-;:21;;:33::i;:::-;33471:59;33566:4;;-1:-1:-1;33572:10:0;;-1:-1:-1;33179:412:0;;-1:-1:-1;;;33179:412:0:o;33599:554::-;33798:7;;;;33895:24;:7;33907:11;33895;:24::i;:::-;33877:42;-1:-1:-1;33930:12:0;33945:21;:4;33954:11;33945:8;:21::i;:::-;33930:36;-1:-1:-1;33977:18:0;33998:27;:10;34013:11;33998:14;:27::i;:::-;33977:48;-1:-1:-1;34036:23:0;34062:33;33977:48;34062:17;:7;34074:4;34062:11;:17::i;:33::-;34114:7;;;;-1:-1:-1;34140:4:0;;-1:-1:-1;33599:554:0;;-1:-1:-1;;;;;;;33599:554:0:o;6943:136::-;7001:7;7028:43;7032:1;7035;7028:43;;;;;;;;;;;;;;;;;:3;:43::i;27899:472::-;27989:16;;;28003:1;27989:16;;;;;;;;27965:21;;27989:16;;;;;;;;;;-1:-1:-1;27989:16:0;27965:40;;28034:4;28016;28021:1;28016:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28016:23:0;;;:7;;;;;;;;;;:23;;;;28060:15;;:22;;;-1:-1:-1;;;28060:22:0;;;;:15;;;;;:20;;:22;;;;;28016:7;;28060:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28050:4;28055:1;28050:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28050:32:0;;;:7;;;;;;;;;:32;28125:15;;28093:62;;28110:4;;28125:15;28143:11;28093:8;:62::i;:::-;28166:15;;:197;;-1:-1:-1;;;28166:197:0;;-1:-1:-1;;;;;28166:15:0;;;;:66;;:197;;28247:11;;28166:15;;28290:4;;28317;;28337:15;;28166:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27954:417;27899:472;:::o;7321:250::-;7379:7;7403:1;7408;7403:6;7399:47;;-1:-1:-1;7433:1:0;7426:8;;7399:47;7458:9;7470:5;7474:1;7470;:5;:::i;:::-;7458:17;-1:-1:-1;7503:1:0;7494:5;7498:1;7458:17;7494:5;:::i;:::-;:10;7486:56;;;;-1:-1:-1;;;7486:56:0;;23984:2:1;7486:56:0;;;23966:21:1;24023:2;24003:18;;;23996:30;24062:34;24042:18;;;24035:62;-1:-1:-1;;;24113:18:1;;;24106:31;24154:19;;7486:56:0;23782:397:1;30815:686:0;30966:15;30996:23;31034:12;31061:23;31099:12;31126:18;31158:19;31169:7;31158:10;:19::i;:::-;-1:-1:-1;;;;;31206:15:0;;;;;;:7;:15;;;;;;30951:226;;-1:-1:-1;30951:226:0;;-1:-1:-1;30951:226:0;;-1:-1:-1;30951:226:0;-1:-1:-1;30951:226:0;-1:-1:-1;30951:226:0;-1:-1:-1;31206:28:0;;31226:7;31206:19;:28::i;:::-;-1:-1:-1;;;;;31188:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31263:7;:15;;;;:28;;31283:7;31263:19;:28::i;:::-;-1:-1:-1;;;;;31245:15:0;;;;;;;:7;:15;;;;;;:46;;;;31323:18;;;;;;;:39;;31346:15;31323:22;:39::i;:::-;-1:-1:-1;;;;;31302:18:0;;;;;;:7;:18;;;;;:60;31373:26;31388:10;31373:14;:26::i;:::-;31410:23;31422:4;31428;31410:11;:23::i;:::-;31466:9;-1:-1:-1;;;;;31449:44:0;31458:6;-1:-1:-1;;;;;31449:44:0;;31477:15;31449:44;;;;1866:25:1;;1854:2;1839:18;;1720:177;31449:44:0;;;;;;;;30940:561;;;;;;30815:686;;;:::o;30109:698::-;30258:15;30288:23;30326:12;30353:23;30391:12;30418:18;30450:19;30461:7;30450:10;:19::i;:::-;-1:-1:-1;;;;;30498:15:0;;;;;;:7;:15;;;;;;30243:226;;-1:-1:-1;30243:226:0;;-1:-1:-1;30243:226:0;;-1:-1:-1;30243:226:0;-1:-1:-1;30243:226:0;-1:-1:-1;30243:226:0;-1:-1:-1;30498:28:0;;30243:226;30498:19;:28::i;:::-;-1:-1:-1;;;;;30480:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30558:18;;;;;:7;:18;;;;;:39;;30581:15;30558:22;:39::i;:::-;-1:-1:-1;;;;;30537:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30629:7;:18;;;;:39;;30652:15;30629:22;:39::i;31509:757::-;31660:15;31690:23;31728:12;31755:23;31793:12;31820:18;31852:19;31863:7;31852:10;:19::i;:::-;-1:-1:-1;;;;;31900:15:0;;;;;;:7;:15;;;;;;31645:226;;-1:-1:-1;31645:226:0;;-1:-1:-1;31645:226:0;;-1:-1:-1;31645:226:0;-1:-1:-1;31645:226:0;-1:-1:-1;31645:226:0;-1:-1:-1;31900:28:0;;31920:7;31900:19;:28::i;:::-;-1:-1:-1;;;;;31882:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31957:7;:15;;;;:28;;31977:7;31957:19;:28::i;29476:625::-;29623:15;29653:23;29691:12;29718:23;29756:12;29783:18;29815:19;29826:7;29815:10;:19::i;:::-;-1:-1:-1;;;;;29863:15:0;;;;;;:7;:15;;;;;;29608:226;;-1:-1:-1;29608:226:0;;-1:-1:-1;29608:226:0;;-1:-1:-1;29608:226:0;-1:-1:-1;29608:226:0;-1:-1:-1;29608:226:0;-1:-1:-1;29863:28:0;;29608:226;29863:19;:28::i;35808:130::-;35872:7;35899:31;35924:5;35899:20;35911:7;;35899;:11;;:20;;;;:::i;35946:174::-;36043:7;36075:37;36106:5;36075:26;36087:13;;36075:7;:11;;:26;;;;:::i;34946:854::-;9900:1;35013:15;;:22;35009:489;;35146:13;;35109:16;;35096:29;;:10;:29;:::i;:::-;35095:64;;;;:::i;:::-;35052:22;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;;35224:13:0;;35209:11;;35196:24;;:10;:24;:::i;:::-;35195:42;;;;:::i;:::-;35174:17;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;35009:489:0;;-1:-1:-1;35009:489:0;;9940:1;35259:15;;:23;35255:243;;35394:13;;35356:17;;35343:30;;:10;:30;:::i;:::-;35342:65;;;;:::i;:::-;35299:22;;:108;;;;;;;:::i;:::-;;;;-1:-1:-1;;35473:13:0;;35457:12;;35444:25;;:10;:25;:::i;:::-;35443:43;;;;:::i;:::-;35422:17;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;35255:243:0;35508:19;35530:10;:8;:10::i;:::-;35508:32;-1:-1:-1;35551:18:0;35572:27;:10;35508:32;35572:14;:27::i;:::-;35651:4;35635:22;;;;:7;:22;;;;;;35551:48;;-1:-1:-1;35635:38:0;;35551:48;35635:26;:38::i;:::-;35626:4;35610:22;;;;:7;:22;;;;;;;;:63;;;;35688:11;:26;;;;;;35684:108;;;35770:4;35754:22;;;;:7;:22;;;;;;:38;;35781:10;35754:26;:38::i;:::-;35745:4;35729:22;;;;:7;:22;;;;;:63;35684:108;34998:802;;34946:854;:::o;32274:147::-;32352:7;;:17;;32364:4;32352:11;:17::i;:::-;32342:7;:27;32393:10;;:20;;32408:4;32393:14;:20::i;:::-;32380:10;:33;-1:-1:-1;;32274:147:0:o;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;814:70;759:131;:::o;895:315::-;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1467:248::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;-1:-1:-1;;1635:23:1;;;1705:2;1690:18;;;1677:32;;-1:-1:-1;1467:248:1:o;2134:316::-;2211:6;2219;2227;2280:2;2268:9;2259:7;2255:23;2251:32;2248:52;;;2296:1;2293;2286:12;2248:52;-1:-1:-1;;2319:23:1;;;2389:2;2374:18;;2361:32;;-1:-1:-1;2440:2:1;2425:18;;;2412:32;;2134:316;-1:-1:-1;2134:316:1:o;2455:180::-;2514:6;2567:2;2555:9;2546:7;2542:23;2538:32;2535:52;;;2583:1;2580;2573:12;2535:52;-1:-1:-1;2606:23:1;;2455:180;-1:-1:-1;2455:180:1:o;2640:456::-;2717:6;2725;2733;2786:2;2774:9;2765:7;2761:23;2757:32;2754:52;;;2802:1;2799;2792:12;2754:52;2841:9;2828:23;2860:31;2885:5;2860:31;:::i;:::-;2910:5;-1:-1:-1;2967:2:1;2952:18;;2939:32;2980:33;2939:32;2980:33;:::i;:::-;2640:456;;3032:7;;-1:-1:-1;;;3086:2:1;3071:18;;;;3058:32;;2640:456::o;3514:118::-;3600:5;3593:13;3586:21;3579:5;3576:32;3566:60;;3622:1;3619;3612:12;3637:309;3702:6;3710;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3815:9;3802:23;3792:33;;3875:2;3864:9;3860:18;3847:32;3888:28;3910:5;3888:28;:::i;:::-;3935:5;3925:15;;;3637:309;;;;;:::o;4159:382::-;4224:6;4232;4285:2;4273:9;4264:7;4260:23;4256:32;4253:52;;;4301:1;4298;4291:12;4253:52;4340:9;4327:23;4359:31;4384:5;4359:31;:::i;:::-;4409:5;-1:-1:-1;4466:2:1;4451:18;;4438:32;4479:30;4438:32;4479:30;:::i;4546:388::-;4614:6;4622;4675:2;4663:9;4654:7;4650:23;4646:32;4643:52;;;4691:1;4688;4681:12;4643:52;4730:9;4717:23;4749:31;4774:5;4749:31;:::i;:::-;4799:5;-1:-1:-1;4856:2:1;4841:18;;4828:32;4869:33;4828:32;4869:33;:::i;4939:241::-;4995:6;5048:2;5036:9;5027:7;5023:23;5019:32;5016:52;;;5064:1;5061;5054:12;5016:52;5103:9;5090:23;5122:28;5144:5;5122:28;:::i;5185:356::-;5387:2;5369:21;;;5406:18;;;5399:30;5465:34;5460:2;5445:18;;5438:62;5532:2;5517:18;;5185:356::o;5958:251::-;6028:6;6081:2;6069:9;6060:7;6056:23;6052:32;6049:52;;;6097:1;6094;6087:12;6049:52;6129:9;6123:16;6148:31;6173:5;6148:31;:::i;6927:127::-;6988:10;6983:3;6979:20;6976:1;6969:31;7019:4;7016:1;7009:15;7043:4;7040:1;7033:15;7059:125;7124:9;;;7145:10;;;7142:36;;;7158:18;;:::i;8556:168::-;8629:9;;;8660;;8677:15;;;8671:22;;8657:37;8647:71;;8698:18;;:::i;8729:217::-;8769:1;8795;8785:132;;8839:10;8834:3;8830:20;8827:1;8820:31;8874:4;8871:1;8864:15;8902:4;8899:1;8892:15;8785:132;-1:-1:-1;8931:9:1;;8729:217::o;10072:127::-;10133:10;10128:3;10124:20;10121:1;10114:31;10164:4;10161:1;10154:15;10188:4;10185:1;10178:15;10204:128;10271:9;;;10292:11;;;10289:37;;;10306:18;;:::i;10337:127::-;10398:10;10393:3;10389:20;10386:1;10379:31;10429:4;10426:1;10419:15;10453:4;10450:1;10443:15;10469:135;10508:3;10529:17;;;10526:43;;10549:18;;:::i;:::-;-1:-1:-1;10596:1:1;10585:13;;10469:135::o;14819:184::-;14889:6;14942:2;14930:9;14921:7;14917:23;14913:32;14910:52;;;14958:1;14955;14948:12;14910:52;-1:-1:-1;14981:16:1;;14819:184;-1:-1:-1;14819:184:1:o;15287:245::-;15354:6;15407:2;15395:9;15386:7;15382:23;15378:32;15375:52;;;15423:1;15420;15413:12;15375:52;15455:9;15449:16;15474:28;15496:5;15474:28;:::i;18420:306::-;18508:6;18516;18524;18577:2;18565:9;18556:7;18552:23;18548:32;18545:52;;;18593:1;18590;18583:12;18545:52;18622:9;18616:16;18606:26;;18672:2;18661:9;18657:18;18651:25;18641:35;;18716:2;18705:9;18701:18;18695:25;18685:35;;18420:306;;;;;:::o;22797:980::-;23059:4;23107:3;23096:9;23092:19;23138:6;23127:9;23120:25;23164:2;23202:6;23197:2;23186:9;23182:18;23175:34;23245:3;23240:2;23229:9;23225:18;23218:31;23269:6;23304;23298:13;23335:6;23327;23320:22;23373:3;23362:9;23358:19;23351:26;;23412:2;23404:6;23400:15;23386:29;;23433:1;23443:195;23457:6;23454:1;23451:13;23443:195;;;23522:13;;-1:-1:-1;;;;;23518:39:1;23506:52;;23613:15;;;;23578:12;;;;23554:1;23472:9;23443:195;;;-1:-1:-1;;;;;;;23694:32:1;;;;23689:2;23674:18;;23667:60;-1:-1:-1;;;23758:3:1;23743:19;23736:35;23655:3;22797:980;-1:-1:-1;;;22797:980:1:o

Swarm Source

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