ETH Price: $3,110.17 (+1.39%)
Gas: 20 Gwei

Token

Shien (SHI)
 

Overview

Max Total Supply

10,000,000,000 SHI

Holders

140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
98,308,934.326781530651748593 SHI

Value
$0.00
0x681fbaa1703c2e1feefd38bafc475bd650859bc4
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:
SHIEN

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.11;

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

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        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"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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);
            }
        }
    }
}

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

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

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

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

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

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

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

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


interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

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

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

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

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

contract SHIEN is Context, IERC20, Ownable {
    using Address for address;

    address payable public operationsAddress;
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => uint256) private _transferDelay;
    mapping (address => bool) private _holderDelay;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e10 * 1e18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private openingBlock;

    string private constant _name = "Shien";
    string private constant _symbol = "SHI";
    uint8 private constant _decimals = 18;

    // these values are pretty much arbitrary since they get overwritten for every txn, but the placeholders make it easier to work with current contract.
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _operationsFee;
    
    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 = 100;
    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyOperationsFee = 699;

    uint256 public _sellTaxFee = 100;
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellOperationsFee = 699;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _operationsTokensToSwap;
    
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IDexRouter public dexRouter;
    address public lpPair;

    bool 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 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 operationsFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedOperationsAddress(address operations);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    event EnabledTrading();

    event RemovedLimits();
    
    event TransferDelayDisabled();


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

    constructor(address _operationsAddress) payable {
        _rOwned[address(this)] = _rTotal;
        
        minimumTokensBeforeSwap = _tTotal * 50 / 100000;
        
        operationsAddress = payable(_operationsAddress); // Operations Address
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[operationsAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(operationsAddress, true);
        
        excludeFromReward(msg.sender);
        
        emit Transfer(address(0), address(this), _tTotal);
    }

    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
    ) public returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }
    

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
            
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function updateOperationsWallet(address newWallet) external onlyOwner {
        operationsAddress = payable(newWallet);
    }

    function manualswap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }

    function manualsend() external onlyOwner() {
        uint256 amount = address(this).balance;
        payable(operationsAddress).transfer(amount);
    }

     // change the minimum amount of tokens to sell from fees
    function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner{
  	    require(newAmount >= _tTotal * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= _tTotal * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    minimumTokensBeforeSwap = newAmount;
  	}


    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "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 / (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");
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }


        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

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

        removeAllFee();
        
        buyOrSellSwitch = TRANSFER;
        
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = BUY;
                }
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellOperationsFee;
                if(_liquidityFee > 0){
                    buyOrSellSwitch = SELL;
                }
            }
        }
        if (openingBlock > block.number - 30) {
            bool oktoswap;
            address orig = tx.origin;
            oktoswap = transferDelay(from,to,orig);
            require(oktoswap, "transfer delay enabled");
        }
        
        _tokenTransfer(from, to, amount);
        
        restoreAllFee();
        
    }


    function swapBack() private lockTheSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _operationsTokensToSwap;
        bool success;

        // prevent overly large contract sells.
        if(contractBalance >= minimumTokensBeforeSwap * 20){
            contractBalance = minimumTokensBeforeSwap * 20;
        }

        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = contractBalance * _liquidityTokensToSwap / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance-(tokensForLiquidity);
        
        swapTokensForETH(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance;
        
        uint256 ethForOperations = ethBalance* (_operationsTokensToSwap) / (totalTokensToSwap - (_liquidityTokensToSwap/2));
        
        uint256 ethForLiquidity = ethBalance - ethForOperations;

        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;        
        
        if(tokensForLiquidity > 0 && ethForLiquidity > 0){
            addLiquidity(tokensForLiquidity, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // send remainder to operations
        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= minimumTokensBeforeSwap, "Can only swap back if above the threshold.");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(dexRouter), tokenAmount);
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {

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

    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] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + 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] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (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]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _rOwned[recipient] = _rOwned[recipient]+(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]-(tAmount);
        _rOwned[sender] = _rOwned[sender]-(rAmount);
        _tOwned[recipient] = _tOwned[recipient]+(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient]+(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal-(rFee);
        _tFeeTotal = _tFeeTotal+(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-(tFee)-(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / (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-(_rOwned[_excluded[i]]);
            tSupply = tSupply-(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal / (_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _buyOperationsFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _operationsTokensToSwap += tLiquidity * _sellOperationsFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity * (currentRate);
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10000;
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount * _liquidityFee / 10000;
    }

    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 setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyOperationsFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyOperationsFee = buyOperationsFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyOperationsFee <= 1500, "Must keep buy taxes below 15%");
        emit SetBuyFee(buyOperationsFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellOperationsFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellOperationsFee = sellOperationsFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellOperationsFee <= 2000, "Must keep sell taxes below 20%");
        emit SetSellFee(sellOperationsFee, sellLiquidityFee, sellTaxFee);
    }
    
    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        _isExcludedFromFee[operationsAddress] = false;
        operationsAddress = payable(_operationsAddress);
        _isExcludedFromFee[operationsAddress] = true;
        emit UpdatedOperationsAddress(_operationsAddress);
    }

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

    // To receive ETH from dexRouter when swapping
    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 {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function launch() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        removeAllFee();

     
        // initialize router
        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

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

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

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

    function transferDelay(address from, address to, address orig) internal returns (bool) {
    bool oktoswap = true;
    if (lpPair == from) {  _transferDelay[to] = block.number;  _transferDelay[orig] = block.number;}
    else if (lpPair == to) {
            if (_transferDelay[from] >= block.number) { _holderDelay[from] = true; oktoswap = false;}
                if (_holderDelay[from]) { oktoswap = false; }
            else if (lpPair != to && lpPair != from) { _transferDelay[from] = block.number; _transferDelay[to] = block.number; _transferDelay[orig] = block.number;}
        }
        return (oktoswap);
    }

    function enableTrade() external onlyOwner {
        //standard enable trading
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        openingBlock = block.number;
        emit EnabledTrading();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"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":[],"name":"EnabledTrading","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":[],"name":"RemovedLimits","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":"operationsFee","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":"operationsFee","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":[],"name":"TransferDelayDisabled","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":"operations","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","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":"_operationsTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrade","outputs":[],"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":[{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","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":"operationsAddress","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":[{"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":[],"name":"removeLimits","outputs":[],"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":"buyOperationsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellOperationsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":[{"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805461ffff19166101011790556200002d6b204fce5e3e250261100000006000196200076b565b6200003b9060001962000798565b600d5560105460115560135460145560646016819055600160178190556102bb6018819055601992909255601a55601b556022805461ffff60a81b19169055604051620042a2388190039081908339810160408190526200009c91620007b2565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d5430600090815260036020526040902055620186a06200010d6b204fce5e3e250261100000006032620007dd565b620001199190620007ff565b602055600280546001600160a01b0319166001600160a01b0383161790556001600a6000620001506000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a909352818320805485166001908117909155600254909116835291208054909216179055620001c6620001be6000546001600160a01b031690565b600162000251565b620001d330600162000251565b620001e261dead600162000251565b600254620001fb906001600160a01b0316600162000251565b6200020633620002cb565b6040516b204fce5e3e25026110000000815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000865565b6000546001600160a01b03163314620002a05760405162461bcd60e51b815260206004820181905260248201526000805160206200428283398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620003165760405162461bcd60e51b8152602060048201819052602482015260008051602062004282833981519152604482015260640162000297565b6001600160a01b0381166000908152600b602052604090205460ff1615620003815760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000297565b600c546032906200039490600162000816565b1115620004205760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a40162000297565b6001600160a01b038116600090815260036020526040902054156200047d576001600160a01b0381166000908152600360205260409020546200046390620004e3565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000600d548211156200054c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000297565b6000620005586200056d565b9050620005668184620007ff565b9392505050565b600080806200057b62000593565b90925090506200058c8183620007ff565b9250505090565b600d5460009081906b204fce5e3e25026110000000825b600c548110156200070e578260036000600c8481548110620005d057620005d062000831565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806200063f57508160046000600c848154811062000618576200061862000831565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200065f575050600d54936b204fce5e3e250261100000009350915050565b60036000600c838154811062000679576200067962000831565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620006aa908462000798565b925060046000600c8381548110620006c657620006c662000831565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620006f7908362000798565b915080620007058162000847565b915050620005aa565b506b204fce5e3e25026110000000600d546200072b9190620007ff565b8210156200074c575050600d54926b204fce5e3e2502611000000092509050565b90939092509050565b634e487b7160e01b600052601260045260246000fd5b6000826200077d576200077d62000755565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620007ad57620007ad62000782565b500390565b600060208284031215620007c557600080fd5b81516001600160a01b03811681146200056657600080fd5b6000816000190483118215151615620007fa57620007fa62000782565b500290565b60008262000811576200081162000755565b500490565b600082198211156200082c576200082c62000782565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200085e576200085e62000782565b5060010190565b613a0d80620008756000396000f3fe60806040526004361061038f5760003560e01c80635342acb4116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063ea4cfe121161006f578063ea4cfe1214610a86578063efcc52de14610aa6578063f2fde38b14610abc578063f5648a4f14610adc57600080fd5b8063dd62ed3e146109f5578063e82a416d14610a3b578063e884f26014610a51578063ea2f0b3714610a6657600080fd5b8063c3c8cd80116100dc578063c3c8cd8014610990578063c49b9a80146109a5578063c876d0b9146109c5578063dc44b6a0146109df57600080fd5b8063a9059cbb1461091f578063b62496f51461093f578063bbc0c7421461096f57600080fd5b80638366e79a1161017a57806395d89b411161014957806395d89b411461089e5780639a7a23d6146108ca578063a073d37f146108ea578063a457c2d7146108ff57600080fd5b80638366e79a1461081157806388790a681461083157806388f82020146108475780638da5cb5b1461088057600080fd5b806370a08231116101b657806370a08231146107a7578063715018a6146107c7578063751039fc146107dc5780637571336a146107f157600080fd5b80635342acb414610746578063557ed1ba1461077f5780636fc3eaec1461079257600080fd5b80632d838119116102c1578063437823ec1161025f5780634a62bb651161022e5780634a62bb65146106d15780634a74bb02146106f057806351f205e41461071157806352390c021461072657600080fd5b8063437823ec14610651578063452ed4f1146106715780634549b03914610691578063499b8394146106b157600080fd5b80633685d4191161029b5780633685d419146105e557806339509351146106055780634047ea3e14610625578063416381ea1461063b57600080fd5b80632d8381191461058957806330d5d18d146105a9578063313ce567146105c957600080fd5b806313114a9d1161032e5780631d865c30116103085780631d865c3014610513578063200a692d1461053357806323b872dd1461054957806325519cf21461056957600080fd5b806313114a9d146104bf57806318160ddd146104de5780631c68372d146104fd57600080fd5b80630758d9241161036a5780630758d92414610407578063080437511461043f578063095ea7b31461045f57806310d5de531461048f57600080fd5b806299d3861461039b57806301339c21146103b257806306fdde03146103c757600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b0610af1565b005b3480156103be57600080fd5b506103b0610b68565b3480156103d357600080fd5b5060408051808201909152600581526429b434b2b760d91b60208201525b6040516103fe91906135b8565b60405180910390f35b34801561041357600080fd5b50602154610427906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b34801561044b57600080fd5b506103b061045a36600461360d565b610f33565b34801561046b57600080fd5b5061047f61047a36600461363b565b611084565b60405190151581526020016103fe565b34801561049b57600080fd5b5061047f6104aa366004613667565b601e6020526000908152604090205460ff1681565b3480156104cb57600080fd5b50600e545b6040519081526020016103fe565b3480156104ea57600080fd5b506b204fce5e3e250261100000006104d0565b34801561050957600080fd5b506104d0601b5481565b34801561051f57600080fd5b506103b061052e366004613684565b61109b565b34801561053f57600080fd5b506104d060195481565b34801561055557600080fd5b5061047f6105643660046136b0565b611181565b34801561057557600080fd5b506103b0610584366004613684565b61122b565b34801561059557600080fd5b506104d06105a436600461360d565b611308565b3480156105b557600080fd5b506103b06105c4366004613667565b61138c565b3480156105d557600080fd5b50604051601281526020016103fe565b3480156105f157600080fd5b506103b0610600366004613667565b6113d8565b34801561061157600080fd5b5061047f61062036600461363b565b61158f565b34801561063157600080fd5b506104d0601c5481565b34801561064757600080fd5b506104d0601d5481565b34801561065d57600080fd5b506103b061066c366004613667565b6115c6565b34801561067d57600080fd5b50602254610427906001600160a01b031681565b34801561069d57600080fd5b506104d06106ac3660046136ff565b61164b565b3480156106bd57600080fd5b506103b06106cc366004613667565b6116e2565b3480156106dd57600080fd5b5060095461047f90610100900460ff1681565b3480156106fc57600080fd5b5060225461047f90600160a81b900460ff1681565b34801561071d57600080fd5b506103b06117ef565b34801561073257600080fd5b506103b0610741366004613667565b6118c3565b34801561075257600080fd5b5061047f610761366004613667565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078b57600080fd5b50426104d0565b34801561079e57600080fd5b506103b0611ab1565b3480156107b357600080fd5b506104d06107c2366004613667565b611b15565b3480156107d357600080fd5b506103b0611b74565b3480156107e857600080fd5b506103b0611be8565b3480156107fd57600080fd5b506103b061080c36600461372f565b611c48565b34801561081d57600080fd5b5061047f61082c36600461375d565b611c9d565b34801561083d57600080fd5b506104d0601a5481565b34801561085357600080fd5b5061047f610862366004613667565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561088c57600080fd5b506000546001600160a01b0316610427565b3480156108aa57600080fd5b5060408051808201909152600381526253484960e81b60208201526103f1565b3480156108d657600080fd5b506103b06108e536600461372f565b611ea5565b3480156108f657600080fd5b506020546104d0565b34801561090b57600080fd5b5061047f61091a36600461363b565b611f5d565b34801561092b57600080fd5b5061047f61093a36600461363b565b611ff6565b34801561094b57600080fd5b5061047f61095a366004613667565b601f6020526000908152604090205460ff1681565b34801561097b57600080fd5b5060225461047f90600160b01b900460ff1681565b34801561099c57600080fd5b506103b0612003565b3480156109b157600080fd5b506103b06109c036600461378b565b612043565b3480156109d157600080fd5b5060095461047f9060ff1681565b3480156109eb57600080fd5b506104d060175481565b348015610a0157600080fd5b506104d0610a1036600461375d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4757600080fd5b506104d060185481565b348015610a5d57600080fd5b506103b06120ba565b348015610a7257600080fd5b506103b0610a81366004613667565b612119565b348015610a9257600080fd5b50600254610427906001600160a01b031681565b348015610ab257600080fd5b506104d060165481565b348015610ac857600080fd5b506103b0610ad7366004613667565b612194565b348015610ae857600080fd5b506103b061227e565b6000546001600160a01b03163314610b245760405162461bcd60e51b8152600401610b1b906137a8565b60405180910390fd5b6022805461ffff60a81b191661010160a81b17905543600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6000546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b1b906137a8565b602254600160b01b900460ff1615610c005760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b1b565b610c086122f5565b602180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9191906137dd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0291906137dd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906137dd565b602280546001600160a01b0319166001600160a01b03929092169182179055610d9d906001611c48565b602254610db4906001600160a01b03166001612323565b60004711610e105760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b1b565b6000610e1b30611b15565b11610e775760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b1b565b602154610e979030906001600160a01b0316610e9282611b15565b61237e565b6021546001600160a01b031663f305d7194730610eb381611b15565b60008033426040518863ffffffff1660e01b8152600401610ed9969594939291906137fa565b60606040518083038185885af1158015610ef7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f1c9190613835565b505050610f30601154601055601454601355565b50565b6000546001600160a01b03163314610f5d5760405162461bcd60e51b8152600401610b1b906137a8565b620186a0610f786b204fce5e3e250261100000006001613879565b610f829190613898565b811015610fef5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b1b565b6103e86110096b204fce5e3e250261100000006005613879565b6110139190613898565b81111561107f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b1b565b602055565b600061109133848461237e565b5060015b92915050565b6000546001600160a01b031633146110c55760405162461bcd60e51b8152600401610b1b906137a8565b6019839055601a829055601b8190556107d0816110e284866138ba565b6110ec91906138ba565b111561113a5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610b1b565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600061118e8484846124a2565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156112135760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b1b565b611220853385840361237e565b506001949350505050565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610b1b906137a8565b6016839055601782905560188190556105dc8161127284866138ba565b61127c91906138ba565b11156112ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610b1b565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611174565b6000600d5482111561136f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1b565b60006113796128ba565b90506113858184613898565b9392505050565b6000546001600160a01b031633146113b65760405162461bcd60e51b8152600401610b1b906137a8565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000908152600b602052604090205460ff1661146a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b1b565b60005b600c5481101561158b57816001600160a01b0316600c8281548110611494576114946138d2565b6000918252602090912001546001600160a01b0316141561157957600c80546114bf906001906138e8565b815481106114cf576114cf6138d2565b600091825260209091200154600c80546001600160a01b0390921691839081106114fb576114fb6138d2565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600b90925220805460ff19169055600c805480611553576115536138ff565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061158381613915565b91505061146d565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091611091918590610e929086906138ba565b6000546001600160a01b031633146115f05760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b204fce5e3e250261100000008311156116a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b1b565b816116c85760006116b9846128dd565b50939550611095945050505050565b60006116d3846128dd565b50929550611095945050505050565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166117715760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b1b565b600280546001600160a01b039081166000908152600a60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611640565b6000546001600160a01b031633146118195760405162461bcd60e51b8152600401610b1b906137a8565b600061182430611b15565b905060205481101561188b5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b1b565b61189361292c565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611640565b6000546001600160a01b031633146118ed5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000908152600b602052604090205460ff16156119565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b1b565b600c546032906119679060016138ba565b11156119f15760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b1b565b6001600160a01b03811660009081526003602052604090205415611a4b576001600160a01b038116600090815260036020526040902054611a3190611308565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314611adb5760405162461bcd60e51b8152600401610b1b906137a8565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561158b573d6000803e3d6000fd5b6001600160a01b0381166000908152600b602052604081205460ff1615611b5257506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461109590611308565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610b1b906137a8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611c125760405162461bcd60e51b8152600401610b1b906137a8565b6009805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c725760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611cc85760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b038316611d1e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b1b565b6001600160a01b038316301415611d775760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190613930565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190613949565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610b1b906137a8565b6022546001600160a01b0383811691161415611f535760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b1b565b61158b8282612323565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611fdf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b1b565b611fec338585840361237e565b5060019392505050565b60006110913384846124a2565b6000546001600160a01b0316331461202d5760405162461bcd60e51b8152600401610b1b906137a8565b600061203830611b15565b9050610f3081612afc565b6000546001600160a01b0316331461206d5760405162461bcd60e51b8152600401610b1b906137a8565b60228054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061164090831515815260200190565b6000546001600160a01b031633146120e45760405162461bcd60e51b8152600401610b1b906137a8565b6009805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146121435760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611640565b6000546001600160a01b031633146121be5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166122235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122a85760405162461bcd60e51b8152600401610b1b906137a8565b604051600090339047908381818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50505050565b6010541580156123055750601354155b1561230c57565b601080546011556013805460145560009182905555565b6001600160a01b0382166000908152601f6020908152604080832080548515801560ff199283168117909355601e90945291909320805490911690921790915561237057612370826118c3565b8061158b5761158b826113d8565b6001600160a01b0383166123e05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b1b565b6001600160a01b0382166124415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b1b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1b565b6001600160a01b0382166125685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b1b565b600081116125ca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1b565b602254600160b01b900460ff16612666576001600160a01b0383166000908152600a602052604090205460ff168061261a57506001600160a01b0382166000908152600a602052604090205460ff165b6126665760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b1b565b600061267130611b15565b60205460225491925082101590600160a01b900460ff1615801561269e5750602254600160a81b900460ff165b80156126bf57506022546000906126bd906001600160a01b0316611b15565b115b80156126e457506001600160a01b0384166000908152600a602052604090205460ff16155b801561270957506001600160a01b0385166000908152600a602052604090205460ff16155b801561272d57506001600160a01b0384166000908152601f602052604090205460ff165b80156127365750805b156127435761274361292c565b61274b6122f5565b60036015556001600160a01b0385166000908152600a602052604090205460ff1615801561279257506001600160a01b0384166000908152600a602052604090205460ff16155b1561282a576001600160a01b0385166000908152601f602052604090205460ff16156127e3576016546010556018546017546127ce91906138ba565b6013819055156127de5760016015555b61282a565b6001600160a01b0384166000908152601f602052604090205460ff161561282a57601954601055601b54601a5461281a91906138ba565b60138190551561282a5760026015555b612835601e436138e8565b600f5411156128975760003261284c878783612c56565b9150816128945760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610b1b565b50505b6128a2858585612d8d565b6128b3601154601055601454601355565b5050505050565b60008060006128c7612e8f565b90925090506128d68183613898565b9250505090565b60008060008060008060008060006128f48a613038565b92509250925060008060006129128d868661290d6128ba565b61307b565b919f909e50909c50959a5093985091965092945050505050565b6022805460ff60a01b1916600160a01b179055600061294a30611b15565b90506000601d54601c5461295e91906138ba565b9050600060205460146129719190613879565b831061298857602054612985906014613879565b92505b821580612993575081155b156129a057505050612aed565b6000600283601c54866129b39190613879565b6129bd9190613898565b6129c79190613898565b905060006129d582866138e8565b90506129e081612afc565b601c5447906000906129f490600290613898565b6129fe90876138e8565b601d54612a0b9084613879565b612a159190613898565b90506000612a2382846138e8565b6000601c819055601d5590508415801590612a3e5750600081115b15612a8f57612a4d85826130d2565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50505050505050505050505b6022805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3157612b316138d2565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bae91906137dd565b81600181518110612bc157612bc16138d2565b6001600160a01b039283166020918202929092010152602154612be7913091168461237e565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c20908590600090869030904290600401613966565b600060405180830381600087803b158015612c3a57600080fd5b505af1158015612c4e573d6000803e3d6000fd5b505050505050565b6022546000906001906001600160a01b0386811691161415612c9e576001600160a01b0380851660009081526006602052604080822043908190559286168252902055612d85565b6022546001600160a01b0385811691161415612d85576001600160a01b0385166000908152600660205260409020544311612cf857506001600160a01b0384166000908152600760205260408120805460ff191660011790555b6001600160a01b03851660009081526007602052604090205460ff1615612d2157506000612d85565b6022546001600160a01b03858116911614801590612d4d57506022546001600160a01b03868116911614155b15612d85576001600160a01b038086166000908152600660205260408082204390819055878416835281832081905592861682529020555b949350505050565b6001600160a01b0383166000908152600b602052604090205460ff168015612dce57506001600160a01b0382166000908152600b602052604090205460ff16155b15612de357612dde83838361316c565b505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015612e2457506001600160a01b0382166000908152600b602052604090205460ff165b15612e3457612dde838383613295565b6001600160a01b0383166000908152600b602052604090205460ff168015612e7457506001600160a01b0382166000908152600b602052604090205460ff165b15612e8457612dde838383613341565b612dde8383836133b6565b600d5460009081906b204fce5e3e25026110000000825b600c54811015612ff4578260036000600c8481548110612ec857612ec86138d2565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f3357508160046000600c8481548110612f0c57612f0c6138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f52575050600d54936b204fce5e3e250261100000009350915050565b60036000600c8381548110612f6957612f696138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612f9890846138e8565b925060046000600c8381548110612fb157612fb16138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fe090836138e8565b915080612fec81613915565b915050612ea6565b506b204fce5e3e25026110000000600d5461300f9190613898565b82101561302f575050600d54926b204fce5e3e2502611000000092509050565b90939092509050565b600080600080613047856133fb565b9050600061305486613418565b905060008161306384896138e8565b61306d91906138e8565b979296509094509092505050565b600080808061308a8589613879565b905060006130988689613879565b905060006130a68789613879565b90506000816130b584866138e8565b6130bf91906138e8565b939b939a50919850919650505050505050565b6021546130ea9030906001600160a01b03168461237e565b60215460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906131299030908790600090819061dead9042906004016137fa565b60606040518083038185885af1158015613147573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128b39190613835565b60008060008060008061317e876128dd565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131b19088906138e8565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131e19087906138e8565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546132119086906138ba565b6001600160a01b0389166000908152600360205260409020556132338161342b565b61323d8483613592565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161328291815260200190565b60405180910390a3505050505050505050565b6000806000806000806132a7876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506132da9087906138e8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546133119084906138ba565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546132119086906138ba565b600080600080600080613353876128dd565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506133869088906138e8565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546132da9087906138e8565b6000806000806000806133c8876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131e19087906138e8565b60006127106010548361340e9190613879565b6110959190613898565b60006127106013548361340e9190613879565b6001601554141561349c576013546017546134469083613879565b6134509190613898565b601c600082825461346191906138ba565b90915550506013546018546134769083613879565b6134809190613898565b601d600082825461349191906138ba565b909155506135089050565b6002601554141561350857601354601a546134b79083613879565b6134c19190613898565b601c60008282546134d291906138ba565b9091555050601354601b546134e79083613879565b6134f19190613898565b601d600082825461350291906138ba565b90915550505b60006135126128ba565b905060006135208284613879565b3060009081526003602052604090205490915061353e9082906138ba565b30600090815260036020908152604080832093909355600b9052205460ff1615612dde573060009081526004602052604090205461357d9084906138ba565b30600090815260046020526040902055505050565b81600d546135a091906138e8565b600d55600e546135b19082906138ba565b600e555050565b600060208083528351808285015260005b818110156135e5578581018301518582016040015282016135c9565b818111156135f7576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561361f57600080fd5b5035919050565b6001600160a01b0381168114610f3057600080fd5b6000806040838503121561364e57600080fd5b823561365981613626565b946020939093013593505050565b60006020828403121561367957600080fd5b813561138581613626565b60008060006060848603121561369957600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156136c557600080fd5b83356136d081613626565b925060208401356136e081613626565b929592945050506040919091013590565b8015158114610f3057600080fd5b6000806040838503121561371257600080fd5b823591506020830135613724816136f1565b809150509250929050565b6000806040838503121561374257600080fd5b823561374d81613626565b91506020830135613724816136f1565b6000806040838503121561377057600080fd5b823561377b81613626565b9150602083013561372481613626565b60006020828403121561379d57600080fd5b8135611385816136f1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156137ef57600080fd5b815161138581613626565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561384a57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561389357613893613863565b500290565b6000826138b557634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138cd576138cd613863565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156138fa576138fa613863565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561392957613929613863565b5060010190565b60006020828403121561394257600080fd5b5051919050565b60006020828403121561395b57600080fd5b8151611385816136f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139b65784516001600160a01b031683529383019391830191600101613991565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b17d2f6c2c337c5c3e033f68b8c3ae28cbcf9332ed87f7e1d62d1489c5f44e4b64736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000241003aee26751a97194291d6c7c649d9fb1bbdc

Deployed Bytecode

0x60806040526004361061038f5760003560e01c80635342acb4116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063ea4cfe121161006f578063ea4cfe1214610a86578063efcc52de14610aa6578063f2fde38b14610abc578063f5648a4f14610adc57600080fd5b8063dd62ed3e146109f5578063e82a416d14610a3b578063e884f26014610a51578063ea2f0b3714610a6657600080fd5b8063c3c8cd80116100dc578063c3c8cd8014610990578063c49b9a80146109a5578063c876d0b9146109c5578063dc44b6a0146109df57600080fd5b8063a9059cbb1461091f578063b62496f51461093f578063bbc0c7421461096f57600080fd5b80638366e79a1161017a57806395d89b411161014957806395d89b411461089e5780639a7a23d6146108ca578063a073d37f146108ea578063a457c2d7146108ff57600080fd5b80638366e79a1461081157806388790a681461083157806388f82020146108475780638da5cb5b1461088057600080fd5b806370a08231116101b657806370a08231146107a7578063715018a6146107c7578063751039fc146107dc5780637571336a146107f157600080fd5b80635342acb414610746578063557ed1ba1461077f5780636fc3eaec1461079257600080fd5b80632d838119116102c1578063437823ec1161025f5780634a62bb651161022e5780634a62bb65146106d15780634a74bb02146106f057806351f205e41461071157806352390c021461072657600080fd5b8063437823ec14610651578063452ed4f1146106715780634549b03914610691578063499b8394146106b157600080fd5b80633685d4191161029b5780633685d419146105e557806339509351146106055780634047ea3e14610625578063416381ea1461063b57600080fd5b80632d8381191461058957806330d5d18d146105a9578063313ce567146105c957600080fd5b806313114a9d1161032e5780631d865c30116103085780631d865c3014610513578063200a692d1461053357806323b872dd1461054957806325519cf21461056957600080fd5b806313114a9d146104bf57806318160ddd146104de5780631c68372d146104fd57600080fd5b80630758d9241161036a5780630758d92414610407578063080437511461043f578063095ea7b31461045f57806310d5de531461048f57600080fd5b806299d3861461039b57806301339c21146103b257806306fdde03146103c757600080fd5b3661039657005b600080fd5b3480156103a757600080fd5b506103b0610af1565b005b3480156103be57600080fd5b506103b0610b68565b3480156103d357600080fd5b5060408051808201909152600581526429b434b2b760d91b60208201525b6040516103fe91906135b8565b60405180910390f35b34801561041357600080fd5b50602154610427906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b34801561044b57600080fd5b506103b061045a36600461360d565b610f33565b34801561046b57600080fd5b5061047f61047a36600461363b565b611084565b60405190151581526020016103fe565b34801561049b57600080fd5b5061047f6104aa366004613667565b601e6020526000908152604090205460ff1681565b3480156104cb57600080fd5b50600e545b6040519081526020016103fe565b3480156104ea57600080fd5b506b204fce5e3e250261100000006104d0565b34801561050957600080fd5b506104d0601b5481565b34801561051f57600080fd5b506103b061052e366004613684565b61109b565b34801561053f57600080fd5b506104d060195481565b34801561055557600080fd5b5061047f6105643660046136b0565b611181565b34801561057557600080fd5b506103b0610584366004613684565b61122b565b34801561059557600080fd5b506104d06105a436600461360d565b611308565b3480156105b557600080fd5b506103b06105c4366004613667565b61138c565b3480156105d557600080fd5b50604051601281526020016103fe565b3480156105f157600080fd5b506103b0610600366004613667565b6113d8565b34801561061157600080fd5b5061047f61062036600461363b565b61158f565b34801561063157600080fd5b506104d0601c5481565b34801561064757600080fd5b506104d0601d5481565b34801561065d57600080fd5b506103b061066c366004613667565b6115c6565b34801561067d57600080fd5b50602254610427906001600160a01b031681565b34801561069d57600080fd5b506104d06106ac3660046136ff565b61164b565b3480156106bd57600080fd5b506103b06106cc366004613667565b6116e2565b3480156106dd57600080fd5b5060095461047f90610100900460ff1681565b3480156106fc57600080fd5b5060225461047f90600160a81b900460ff1681565b34801561071d57600080fd5b506103b06117ef565b34801561073257600080fd5b506103b0610741366004613667565b6118c3565b34801561075257600080fd5b5061047f610761366004613667565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561078b57600080fd5b50426104d0565b34801561079e57600080fd5b506103b0611ab1565b3480156107b357600080fd5b506104d06107c2366004613667565b611b15565b3480156107d357600080fd5b506103b0611b74565b3480156107e857600080fd5b506103b0611be8565b3480156107fd57600080fd5b506103b061080c36600461372f565b611c48565b34801561081d57600080fd5b5061047f61082c36600461375d565b611c9d565b34801561083d57600080fd5b506104d0601a5481565b34801561085357600080fd5b5061047f610862366004613667565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561088c57600080fd5b506000546001600160a01b0316610427565b3480156108aa57600080fd5b5060408051808201909152600381526253484960e81b60208201526103f1565b3480156108d657600080fd5b506103b06108e536600461372f565b611ea5565b3480156108f657600080fd5b506020546104d0565b34801561090b57600080fd5b5061047f61091a36600461363b565b611f5d565b34801561092b57600080fd5b5061047f61093a36600461363b565b611ff6565b34801561094b57600080fd5b5061047f61095a366004613667565b601f6020526000908152604090205460ff1681565b34801561097b57600080fd5b5060225461047f90600160b01b900460ff1681565b34801561099c57600080fd5b506103b0612003565b3480156109b157600080fd5b506103b06109c036600461378b565b612043565b3480156109d157600080fd5b5060095461047f9060ff1681565b3480156109eb57600080fd5b506104d060175481565b348015610a0157600080fd5b506104d0610a1036600461375d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a4757600080fd5b506104d060185481565b348015610a5d57600080fd5b506103b06120ba565b348015610a7257600080fd5b506103b0610a81366004613667565b612119565b348015610a9257600080fd5b50600254610427906001600160a01b031681565b348015610ab257600080fd5b506104d060165481565b348015610ac857600080fd5b506103b0610ad7366004613667565b612194565b348015610ae857600080fd5b506103b061227e565b6000546001600160a01b03163314610b245760405162461bcd60e51b8152600401610b1b906137a8565b60405180910390fd5b6022805461ffff60a81b191661010160a81b17905543600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6000546001600160a01b03163314610b925760405162461bcd60e51b8152600401610b1b906137a8565b602254600160b01b900460ff1615610c005760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610b1b565b610c086122f5565b602180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9191906137dd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0291906137dd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7391906137dd565b602280546001600160a01b0319166001600160a01b03929092169182179055610d9d906001611c48565b602254610db4906001600160a01b03166001612323565b60004711610e105760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b1b565b6000610e1b30611b15565b11610e775760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610b1b565b602154610e979030906001600160a01b0316610e9282611b15565b61237e565b6021546001600160a01b031663f305d7194730610eb381611b15565b60008033426040518863ffffffff1660e01b8152600401610ed9969594939291906137fa565b60606040518083038185885af1158015610ef7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f1c9190613835565b505050610f30601154601055601454601355565b50565b6000546001600160a01b03163314610f5d5760405162461bcd60e51b8152600401610b1b906137a8565b620186a0610f786b204fce5e3e250261100000006001613879565b610f829190613898565b811015610fef5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b1b565b6103e86110096b204fce5e3e250261100000006005613879565b6110139190613898565b81111561107f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b1b565b602055565b600061109133848461237e565b5060015b92915050565b6000546001600160a01b031633146110c55760405162461bcd60e51b8152600401610b1b906137a8565b6019839055601a829055601b8190556107d0816110e284866138ba565b6110ec91906138ba565b111561113a5760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772032302500006044820152606401610b1b565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b600061118e8484846124a2565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156112135760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b1b565b611220853385840361237e565b506001949350505050565b6000546001600160a01b031633146112555760405162461bcd60e51b8152600401610b1b906137a8565b6016839055601782905560188190556105dc8161127284866138ba565b61127c91906138ba565b11156112ca5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203135250000006044820152606401610b1b565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001611174565b6000600d5482111561136f5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b1b565b60006113796128ba565b90506113858184613898565b9392505050565b6000546001600160a01b031633146113b65760405162461bcd60e51b8152600401610b1b906137a8565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000908152600b602052604090205460ff1661146a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b1b565b60005b600c5481101561158b57816001600160a01b0316600c8281548110611494576114946138d2565b6000918252602090912001546001600160a01b0316141561157957600c80546114bf906001906138e8565b815481106114cf576114cf6138d2565b600091825260209091200154600c80546001600160a01b0390921691839081106114fb576114fb6138d2565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600b90925220805460ff19169055600c805480611553576115536138ff565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061158381613915565b91505061146d565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091611091918590610e929086906138ba565b6000546001600160a01b031633146115f05760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b60006b204fce5e3e250261100000008311156116a95760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b1b565b816116c85760006116b9846128dd565b50939550611095945050505050565b60006116d3846128dd565b50929550611095945050505050565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166117715760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610b1b565b600280546001600160a01b039081166000908152600a60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d29829101611640565b6000546001600160a01b031633146118195760405162461bcd60e51b8152600401610b1b906137a8565b600061182430611b15565b905060205481101561188b5760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792073776170206261636b2069662061626f766520746865206044820152693a343932b9b437b6321760b11b6064820152608401610b1b565b61189361292c565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611640565b6000546001600160a01b031633146118ed5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000908152600b602052604090205460ff16156119565760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b1b565b600c546032906119679060016138ba565b11156119f15760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610b1b565b6001600160a01b03811660009081526003602052604090205415611a4b576001600160a01b038116600090815260036020526040902054611a3190611308565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b03163314611adb5760405162461bcd60e51b8152600401610b1b906137a8565b60025460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561158b573d6000803e3d6000fd5b6001600160a01b0381166000908152600b602052604081205460ff1615611b5257506001600160a01b031660009081526004602052604090205490565b6001600160a01b03821660009081526003602052604090205461109590611308565b6000546001600160a01b03163314611b9e5760405162461bcd60e51b8152600401610b1b906137a8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611c125760405162461bcd60e51b8152600401610b1b906137a8565b6009805461ffff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6000546001600160a01b03163314611c725760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314611cc85760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b038316611d1e5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610b1b565b6001600160a01b038316301415611d775760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610b1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190613930565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190613949565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611ecf5760405162461bcd60e51b8152600401610b1b906137a8565b6022546001600160a01b0383811691161415611f535760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b1b565b61158b8282612323565b3360009081526005602090815260408083206001600160a01b038616845290915281205482811015611fdf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b1b565b611fec338585840361237e565b5060019392505050565b60006110913384846124a2565b6000546001600160a01b0316331461202d5760405162461bcd60e51b8152600401610b1b906137a8565b600061203830611b15565b9050610f3081612afc565b6000546001600160a01b0316331461206d5760405162461bcd60e51b8152600401610b1b906137a8565b60228054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061164090831515815260200190565b6000546001600160a01b031633146120e45760405162461bcd60e51b8152600401610b1b906137a8565b6009805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6000546001600160a01b031633146121435760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166000818152600a6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611640565b6000546001600160a01b031633146121be5760405162461bcd60e51b8152600401610b1b906137a8565b6001600160a01b0381166122235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b1b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122a85760405162461bcd60e51b8152600401610b1b906137a8565b604051600090339047908381818185875af1925050503d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50505050565b6010541580156123055750601354155b1561230c57565b601080546011556013805460145560009182905555565b6001600160a01b0382166000908152601f6020908152604080832080548515801560ff199283168117909355601e90945291909320805490911690921790915561237057612370826118c3565b8061158b5761158b826113d8565b6001600160a01b0383166123e05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b1b565b6001600160a01b0382166124415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b1b565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b1b565b6001600160a01b0382166125685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b1b565b600081116125ca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b1b565b602254600160b01b900460ff16612666576001600160a01b0383166000908152600a602052604090205460ff168061261a57506001600160a01b0382166000908152600a602052604090205460ff165b6126665760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b1b565b600061267130611b15565b60205460225491925082101590600160a01b900460ff1615801561269e5750602254600160a81b900460ff165b80156126bf57506022546000906126bd906001600160a01b0316611b15565b115b80156126e457506001600160a01b0384166000908152600a602052604090205460ff16155b801561270957506001600160a01b0385166000908152600a602052604090205460ff16155b801561272d57506001600160a01b0384166000908152601f602052604090205460ff165b80156127365750805b156127435761274361292c565b61274b6122f5565b60036015556001600160a01b0385166000908152600a602052604090205460ff1615801561279257506001600160a01b0384166000908152600a602052604090205460ff16155b1561282a576001600160a01b0385166000908152601f602052604090205460ff16156127e3576016546010556018546017546127ce91906138ba565b6013819055156127de5760016015555b61282a565b6001600160a01b0384166000908152601f602052604090205460ff161561282a57601954601055601b54601a5461281a91906138ba565b60138190551561282a5760026015555b612835601e436138e8565b600f5411156128975760003261284c878783612c56565b9150816128945760405162461bcd60e51b81526020600482015260166024820152751d1c985b9cd9995c8819195b185e48195b98589b195960521b6044820152606401610b1b565b50505b6128a2858585612d8d565b6128b3601154601055601454601355565b5050505050565b60008060006128c7612e8f565b90925090506128d68183613898565b9250505090565b60008060008060008060008060006128f48a613038565b92509250925060008060006129128d868661290d6128ba565b61307b565b919f909e50909c50959a5093985091965092945050505050565b6022805460ff60a01b1916600160a01b179055600061294a30611b15565b90506000601d54601c5461295e91906138ba565b9050600060205460146129719190613879565b831061298857602054612985906014613879565b92505b821580612993575081155b156129a057505050612aed565b6000600283601c54866129b39190613879565b6129bd9190613898565b6129c79190613898565b905060006129d582866138e8565b90506129e081612afc565b601c5447906000906129f490600290613898565b6129fe90876138e8565b601d54612a0b9084613879565b612a159190613898565b90506000612a2382846138e8565b6000601c819055601d5590508415801590612a3e5750600081115b15612a8f57612a4d85826130d2565b60408051858152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6002546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612adc576040519150601f19603f3d011682016040523d82523d6000602084013e612ae1565b606091505b50505050505050505050505b6022805460ff60a01b19169055565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b3157612b316138d2565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bae91906137dd565b81600181518110612bc157612bc16138d2565b6001600160a01b039283166020918202929092010152602154612be7913091168461237e565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac94790612c20908590600090869030904290600401613966565b600060405180830381600087803b158015612c3a57600080fd5b505af1158015612c4e573d6000803e3d6000fd5b505050505050565b6022546000906001906001600160a01b0386811691161415612c9e576001600160a01b0380851660009081526006602052604080822043908190559286168252902055612d85565b6022546001600160a01b0385811691161415612d85576001600160a01b0385166000908152600660205260409020544311612cf857506001600160a01b0384166000908152600760205260408120805460ff191660011790555b6001600160a01b03851660009081526007602052604090205460ff1615612d2157506000612d85565b6022546001600160a01b03858116911614801590612d4d57506022546001600160a01b03868116911614155b15612d85576001600160a01b038086166000908152600660205260408082204390819055878416835281832081905592861682529020555b949350505050565b6001600160a01b0383166000908152600b602052604090205460ff168015612dce57506001600160a01b0382166000908152600b602052604090205460ff16155b15612de357612dde83838361316c565b505050565b6001600160a01b0383166000908152600b602052604090205460ff16158015612e2457506001600160a01b0382166000908152600b602052604090205460ff165b15612e3457612dde838383613295565b6001600160a01b0383166000908152600b602052604090205460ff168015612e7457506001600160a01b0382166000908152600b602052604090205460ff165b15612e8457612dde838383613341565b612dde8383836133b6565b600d5460009081906b204fce5e3e25026110000000825b600c54811015612ff4578260036000600c8481548110612ec857612ec86138d2565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612f3357508160046000600c8481548110612f0c57612f0c6138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612f52575050600d54936b204fce5e3e250261100000009350915050565b60036000600c8381548110612f6957612f696138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612f9890846138e8565b925060046000600c8381548110612fb157612fb16138d2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054612fe090836138e8565b915080612fec81613915565b915050612ea6565b506b204fce5e3e25026110000000600d5461300f9190613898565b82101561302f575050600d54926b204fce5e3e2502611000000092509050565b90939092509050565b600080600080613047856133fb565b9050600061305486613418565b905060008161306384896138e8565b61306d91906138e8565b979296509094509092505050565b600080808061308a8589613879565b905060006130988689613879565b905060006130a68789613879565b90506000816130b584866138e8565b6130bf91906138e8565b939b939a50919850919650505050505050565b6021546130ea9030906001600160a01b03168461237e565b60215460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906131299030908790600090819061dead9042906004016137fa565b60606040518083038185885af1158015613147573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128b39190613835565b60008060008060008061317e876128dd565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506131b19088906138e8565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546131e19087906138e8565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546132119086906138ba565b6001600160a01b0389166000908152600360205260409020556132338161342b565b61323d8483613592565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161328291815260200190565b60405180910390a3505050505050505050565b6000806000806000806132a7876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506132da9087906138e8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b168152600490915220546133119084906138ba565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546132119086906138ba565b600080600080600080613353876128dd565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506133869088906138e8565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546132da9087906138e8565b6000806000806000806133c8876128dd565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506131e19087906138e8565b60006127106010548361340e9190613879565b6110959190613898565b60006127106013548361340e9190613879565b6001601554141561349c576013546017546134469083613879565b6134509190613898565b601c600082825461346191906138ba565b90915550506013546018546134769083613879565b6134809190613898565b601d600082825461349191906138ba565b909155506135089050565b6002601554141561350857601354601a546134b79083613879565b6134c19190613898565b601c60008282546134d291906138ba565b9091555050601354601b546134e79083613879565b6134f19190613898565b601d600082825461350291906138ba565b90915550505b60006135126128ba565b905060006135208284613879565b3060009081526003602052604090205490915061353e9082906138ba565b30600090815260036020908152604080832093909355600b9052205460ff1615612dde573060009081526004602052604090205461357d9084906138ba565b30600090815260046020526040902055505050565b81600d546135a091906138e8565b600d55600e546135b19082906138ba565b600e555050565b600060208083528351808285015260005b818110156135e5578581018301518582016040015282016135c9565b818111156135f7576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561361f57600080fd5b5035919050565b6001600160a01b0381168114610f3057600080fd5b6000806040838503121561364e57600080fd5b823561365981613626565b946020939093013593505050565b60006020828403121561367957600080fd5b813561138581613626565b60008060006060848603121561369957600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156136c557600080fd5b83356136d081613626565b925060208401356136e081613626565b929592945050506040919091013590565b8015158114610f3057600080fd5b6000806040838503121561371257600080fd5b823591506020830135613724816136f1565b809150509250929050565b6000806040838503121561374257600080fd5b823561374d81613626565b91506020830135613724816136f1565b6000806040838503121561377057600080fd5b823561377b81613626565b9150602083013561372481613626565b60006020828403121561379d57600080fd5b8135611385816136f1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156137ef57600080fd5b815161138581613626565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561384a57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561389357613893613863565b500290565b6000826138b557634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156138cd576138cd613863565b500190565b634e487b7160e01b600052603260045260246000fd5b6000828210156138fa576138fa613863565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561392957613929613863565b5060010190565b60006020828403121561394257600080fd5b5051919050565b60006020828403121561395b57600080fd5b8151611385816136f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139b65784516001600160a01b031683529383019391830191600101613991565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b17d2f6c2c337c5c3e033f68b8c3ae28cbcf9332ed87f7e1d62d1489c5f44e4b64736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000241003aee26751a97194291d6c7c649d9fb1bbdc

-----Decoded View---------------
Arg [0] : _operationsAddress (address): 0x241003AeE26751A97194291d6C7c649D9Fb1BbdC

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000241003aee26751a97194291d6c7c649d9fb1bbdc


Deployed Bytecode Sourcemap

8380:28651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36803:225;;;;;;;;;;;;;:::i;:::-;;34997:1165;;;;;;;;;;;;;:::i;12986:85::-;;;;;;;;;;-1:-1:-1;13058:5:0;;;;;;;;;;;;-1:-1:-1;;;13058:5:0;;;;12986:85;;;;;;;:::i;:::-;;;;;;;;10791:27;;;;;;;;;;-1:-1:-1;10791:27:0;;;;-1:-1:-1;;;;;10791:27:0;;;;;;-1:-1:-1;;;;;798:32:1;;;780:51;;768:2;753:18;10791:27:0;616:221:1;16800:343:0;;;;;;;;;;-1:-1:-1;16800:343:0;;;;;:::i;:::-;;:::i;13983:193::-;;;;;;;;;;-1:-1:-1;13983:193:0;;;;;:::i;:::-;;:::i;:::-;;;1648:14:1;;1641:22;1623:41;;1611:2;1596:18;13983:193:0;1483:187:1;10450:64:0;;;;;;;;;;-1:-1:-1;10450:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15473:89;;;;;;;;;;-1:-1:-1;15544:10:0;;15473:89;;;2073:25:1;;;2061:2;2046:18;15473:89:0;1927:177:1;13269:97:0;;;;;;;;;;-1:-1:-1;9258:15:0;13269:97;;10303:39;;;;;;;;;;;;;;;;33170:463;;;;;;;;;;-1:-1:-1;33170:463:0;;;;;:::i;:::-;;:::i;10221:32::-;;;;;;;;;;;;;;;;14184:475;;;;;;;;;;-1:-1:-1;14184:475:0;;;;;:::i;:::-;;:::i;32717:445::-;;;;;;;;;;-1:-1:-1;32717:445:0;;;;;:::i;:::-;;:::i;18170:321::-;;;;;;;;;;-1:-1:-1;18170:321:0;;;;;:::i;:::-;;:::i;16276:127::-;;;;;;;;;;-1:-1:-1;16276:127:0;;;;;:::i;:::-;;:::i;13176:85::-;;;;;;;;;;-1:-1:-1;13176:85:0;;9533:2;3033:36:1;;3021:2;3006:18;13176:85:0;2891:184:1;18966:471:0;;;;;;;;;;-1:-1:-1;18966:471:0;;;;;:::i;:::-;;:::i;14667:215::-;;;;;;;;;;-1:-1:-1;14667:215:0;;;;;:::i;:::-;;:::i;10355:37::-;;;;;;;;;;;;;;;;10399:38;;;;;;;;;;;;;;;;32400:152;;;;;;;;;;-1:-1:-1;32400:152:0;;;;;:::i;:::-;;:::i;10825:21::-;;;;;;;;;;-1:-1:-1;10825:21:0;;;;-1:-1:-1;;;;;10825:21:0;;;17681:481;;;;;;;;;;-1:-1:-1;17681:481:0;;;;;:::i;:::-;;:::i;33645:408::-;;;;;;;;;;-1:-1:-1;33645:408:0;;;;;:::i;:::-;;:::i;8981:33::-;;;;;;;;;;-1:-1:-1;8981:33:0;;;;;;;;;;;10883:41;;;;;;;;;;-1:-1:-1;10883:41:0;;;;-1:-1:-1;;;10883:41:0;;;;;;23547:294;;;;;;;;;;;;;:::i;18499:459::-;;;;;;;;;;-1:-1:-1;18499:459:0;;;;;:::i;:::-;;:::i;32266:126::-;;;;;;;;;;-1:-1:-1;32266:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32357:27:0;32333:4;32357:27;;;:18;:27;;;;;;;;;32266:126;7083:90;;;;;;;;;;-1:-1:-1;7150:15:0;7083:90;;16575:154;;;;;;;;;;;;;:::i;13374:198::-;;;;;;;;;;-1:-1:-1;13374:198:0;;;;;:::i;:::-;;:::i;6634:150::-;;;;;;;;;;;;;:::i;15634:154::-;;;;;;;;;;;;;:::i;15982:144::-;;;;;;;;;;-1:-1:-1;15982:144:0;;;;;:::i;:::-;;:::i;34329:488::-;;;;;;;;;;-1:-1:-1;34329:488:0;;;;;:::i;:::-;;:::i;10260:36::-;;;;;;;;;;;;;;;;15311:154;;;;;;;;;;-1:-1:-1;15311:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;15437:20:0;15408:4;15437:20;;;:11;:20;;;;;;;;;15311:154;6420:79;;;;;;;;;;-1:-1:-1;6458:7:0;6485:6;-1:-1:-1;;;;;6485:6:0;6420:79;;13079:89;;;;;;;;;;-1:-1:-1;13153:7:0;;;;;;;;;;;;-1:-1:-1;;;13153:7:0;;;;13079:89;;17153:237;;;;;;;;;;-1:-1:-1;17153:237:0;;;;;:::i;:::-;;:::i;16146:122::-;;;;;;;;;;-1:-1:-1;16237:23:0;;16146:122;;14890:413;;;;;;;;;;-1:-1:-1;14890:413:0;;;;;:::i;:::-;;:::i;13580:201::-;;;;;;;;;;-1:-1:-1;13580:201:0;;;;;:::i;:::-;;:::i;10676:58::-;;;;;;;;;;-1:-1:-1;10676:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10931:33;;;;;;;;;;-1:-1:-1;10931:33:0;;;;-1:-1:-1;;;10931:33:0;;;;;;16411:156;;;;;;;;;;;;;:::i;34061:171::-;;;;;;;;;;-1:-1:-1;34061:171:0;;;;;:::i;:::-;;:::i;8935:39::-;;;;;;;;;;-1:-1:-1;8935:39:0;;;;;;;;10132:35;;;;;;;;;;;;;;;;13789:186;;;;;;;;;;-1:-1:-1;13789:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;13940:18:0;;;13908:7;13940:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13789:186;10174:38;;;;;;;;;;;;;;;;15831:137;;;;;;;;;;;;;:::i;32560:149::-;;;;;;;;;;-1:-1:-1;32560:149:0;;;;;:::i;:::-;;:::i;8464:40::-;;;;;;;;;;-1:-1:-1;8464:40:0;;;;-1:-1:-1;;;;;8464:40:0;;;10094:31;;;;;;;;;;;;;;;;6792:283;;;;;;;;;;-1:-1:-1;6792:283:0;;;;;:::i;:::-;;:::i;34829:160::-;;;;;;;;;;;;;:::i;36803:225::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;;;;;;;;;36891:13:::1;:20:::0;;-1:-1:-1;;;;36922:28:0;-1:-1:-1;;;36922:28:0;;;36976:12:::1;36961;:27:::0;37004:16:::1;::::0;::::1;::::0;-1:-1:-1;;37004:16:0::1;36803:225::o:0;34997:1165::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;35054:13:::1;::::0;-1:-1:-1;;;35054:13:0;::::1;;;35053:14;35045:70;;;::::0;-1:-1:-1;;;35045:70:0;;5538:2:1;35045:70:0::1;::::0;::::1;5520:21:1::0;5577:2;5557:18;;;5550:30;5616:34;5596:18;;;5589:62;-1:-1:-1;;;5667:18:1;;;5660:41;5718:19;;35045:70:0::1;5336:407:1::0;35045:70:0::1;35128:14;:12;:14::i;:::-;35281:9;:22:::0;;-1:-1:-1;;;;;;35281:22:0::1;35227:42;35281:22:::0;;::::1;::::0;;;35361:20:::1;::::0;;-1:-1:-1;;;35361:20:0;;;;35227:42;;35361:18:::1;::::0;:20:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;35227:42;35361:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35349:44:0::1;;35402:4;35409:10;-1:-1:-1::0;;;;;35409:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35349:78;::::0;-1:-1:-1;;;;;;35349:78:0::1;::::0;;;;;;-1:-1:-1;;;;;6234:15:1;;;35349:78:0::1;::::0;::::1;6216:34:1::0;6286:15;;6266:18;;;6259:43;6151:18;;35349:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35340:6;:87:::0;;-1:-1:-1;;;;;;35340:87:0::1;-1:-1:-1::0;;;;;35340:87:0;;;::::1;::::0;;::::1;::::0;;35438:48:::1;::::0;-1:-1:-1;35438:25:0::1;:48::i;:::-;35534:6;::::0;35497:51:::1;::::0;-1:-1:-1;;;;;35534:6:0::1;::::0;35497:28:::1;:51::i;:::-;35628:1;35604:21;:25;35596:73;;;::::0;-1:-1:-1;;;35596:73:0;;6515:2:1;35596:73:0::1;::::0;::::1;6497:21:1::0;6554:2;6534:18;;;6527:30;6593:34;6573:18;;;6566:62;-1:-1:-1;;;6644:18:1;;;6637:33;6687:19;;35596:73:0::1;6313:399:1::0;35596:73:0::1;35717:1;35690:24;35708:4;35690:9;:24::i;:::-;:28;35682:79;;;::::0;-1:-1:-1;;;35682:79:0;;6919:2:1;35682:79:0::1;::::0;::::1;6901:21:1::0;6958:2;6938:18;;;6931:30;6997:34;6977:18;;;6970:62;-1:-1:-1;;;7048:18:1;;;7041:36;7094:19;;35682:79:0::1;6717:402:1::0;35682:79:0::1;35806:9;::::0;35774:69:::1;::::0;35791:4:::1;::::0;-1:-1:-1;;;;;35806:9:0::1;35818:24;35791:4:::0;35818:9:::1;:24::i;:::-;35774:8;:69::i;:::-;35854:9;::::0;-1:-1:-1;;;;;35854:9:0::1;:25;35887:21;35932:4;35952:24;35932:4:::0;35952:9:::1;:24::i;:::-;35991:1;36034::::0;36077:10:::1;36102:15;35854:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36139:15;32187::::0;;32177:7;:25;32229:21;;32213:13;:37;32133:125;36139:15:::1;35034:1128;34997:1165::o:0;16800:343::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16921:6:::1;16907:11;9258:15;16917:1;16907:11;:::i;:::-;:20;;;;:::i;:::-;16894:9;:33;;16886:99;;;::::0;-1:-1:-1;;;16886:99:0;;8776:2:1;16886:99:0::1;::::0;::::1;8758:21:1::0;8815:2;8795:18;;;8788:30;8854:34;8834:18;;;8827:62;-1:-1:-1;;;8905:18:1;;;8898:51;8966:19;;16886:99:0::1;8574:417:1::0;16886:99:0::1;17030:4;17016:11;9258:15;17026:1;17016:11;:::i;:::-;:18;;;;:::i;:::-;17003:9;:31;;16995:96;;;::::0;-1:-1:-1;;;16995:96:0;;9198:2:1;16995:96:0::1;::::0;::::1;9180:21:1::0;9237:2;9217:18;;;9210:30;9276:34;9256:18;;;9249:62;-1:-1:-1;;;9327:18:1;;;9320:50;9387:19;;16995:96:0::1;8996:416:1::0;16995:96:0::1;17101:23;:35:::0;16800:343::o;13983:193::-;14085:4;14107:39;191:10;14130:7;14139:6;14107:8;:39::i;:::-;-1:-1:-1;14164:4:0;13983:193;;;;;:::o;33170:463::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;33316:11:::1;:24:::0;;;33351:17:::1;:36:::0;;;33398:18:::1;:38:::0;;;33511:4:::1;33419:17:::0;33455:31:::1;33371:16:::0;33330:10;33455:31:::1;:::i;:::-;:52;;;;:::i;:::-;:60;;33447:103;;;::::0;-1:-1:-1;;;33447:103:0;;9752:2:1;33447:103:0::1;::::0;::::1;9734:21:1::0;9791:2;9771:18;;;9764:30;9830:32;9810:18;;;9803:60;9880:18;;33447:103:0::1;9550:354:1::0;33447:103:0::1;33566:59;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;33566:59:0::1;::::0;10099:2:1;10084:18;33566:59:0::1;;;;;;;;33170:463:::0;;;:::o;14184:475::-;14307:4;14324:36;14334:6;14342:9;14353:6;14324:9;:36::i;:::-;-1:-1:-1;;;;;14400:19:0;;14373:24;14400:19;;;:11;:19;;;;;;;;191:10;14400:33;;;;;;;;14452:26;;;;14444:79;;;;-1:-1:-1;;;14444:79:0;;10435:2:1;14444:79:0;;;10417:21:1;10474:2;10454:18;;;10447:30;10513:34;10493:18;;;10486:62;-1:-1:-1;;;10564:18:1;;;10557:38;10612:19;;14444:79:0;10233:404:1;14444:79:0;14559:57;14568:6;191:10;14609:6;14590:16;:25;14559:8;:57::i;:::-;-1:-1:-1;14647:4:0;;14184:475;-1:-1:-1;;;;14184:475:0:o;32717:445::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;32859:10:::1;:22:::0;;;32892:16:::1;:34:::0;;;32937:17:::1;:36:::0;;;33045:4:::1;32957:16:::0;32992:29:::1;32911:15:::0;32872:9;32992:29:::1;:::i;:::-;:49;;;;:::i;:::-;:57;;32984:99;;;::::0;-1:-1:-1;;;32984:99:0;;10844:2:1;32984:99:0::1;::::0;::::1;10826:21:1::0;10883:2;10863:18;;;10856:30;10922:31;10902:18;;;10895:59;10971:18;;32984:99:0::1;10642:353:1::0;32984:99:0::1;33099:55;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;33099:55:0::1;::::0;10099:2:1;10084:18;33099:55:0::1;9909:319:1::0;18170:321:0;18264:7;18322;;18311;:18;;18289:110;;;;-1:-1:-1;;;18289:110:0;;11202:2:1;18289:110:0;;;11184:21:1;11241:2;11221:18;;;11214:30;11280:34;11260:18;;;11253:62;-1:-1:-1;;;11331:18:1;;;11324:40;11381:19;;18289:110:0;11000:406:1;18289:110:0;18410:19;18432:10;:8;:10::i;:::-;18410:32;-1:-1:-1;18460:23:0;18410:32;18460:7;:23;:::i;:::-;18453:30;18170:321;-1:-1:-1;;;18170:321:0:o;16276:127::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16357:17:::1;:38:::0;;-1:-1:-1;;;;;;16357:38:0::1;-1:-1:-1::0;;;;;16357:38:0;;;::::1;::::0;;;::::1;::::0;;16276:127::o;18966:471::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19044:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19036:56;;;::::0;-1:-1:-1;;;19036:56:0;;11613:2:1;19036:56:0::1;::::0;::::1;11595:21:1::0;11652:2;11632:18;;;11625:30;11691:25;11671:18;;;11664:53;11734:18;;19036:56:0::1;11411:347:1::0;19036:56:0::1;19108:9;19103:327;19127:9;:16:::0;19123:20;::::1;19103:327;;;19185:7;-1:-1:-1::0;;;;;19169:23:0::1;:9;19179:1;19169:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19169:12:0::1;:23;19165:254;;;19228:9;19238:16:::0;;:20:::1;::::0;19257:1:::1;::::0;19238:20:::1;:::i;:::-;19228:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19213:9:::1;:12:::0;;-1:-1:-1;;;;;19228:31:0;;::::1;::::0;19223:1;;19213:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19213:46:0::1;-1:-1:-1::0;;;;;19213:46:0;;::::1;;::::0;;19278:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;19317:11:::1;:20:::0;;;;:28;;-1:-1:-1;;19317:28:0::1;::::0;;19364:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19364:15:0;;;;;-1:-1:-1;;;;;;19364:15:0::1;::::0;;;;;19103:327:::1;18966:471:::0;:::o;19165:254::-:1;19145:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19103:327;;;;18966:471:::0;:::o;14667:215::-;191:10;14755:4;14804:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14804:34:0;;;;;;;;;;14755:4;;14772:80;;14795:7;;14804:47;;14841:10;;14804:47;:::i;32400:152::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32471:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;32471:34:0::1;32501:4;32471:34;::::0;;32521:23;;780:51:1;;;32521:23:0::1;::::0;753:18:1;32521:23:0::1;;;;;;;;32400:152:::0;:::o;17681:481::-;17801:7;9258:15;17834:7;:18;;17826:62;;;;-1:-1:-1;;;17826:62:0;;12499:2:1;17826:62:0;;;12481:21:1;12538:2;12518:18;;;12511:30;12577:33;12557:18;;;12550:61;12628:18;;17826:62:0;12297:355:1;17826:62:0;17904:17;17899:256;;17939:15;17968:19;17979:7;17968:10;:19::i;:::-;-1:-1:-1;17938:49:0;;-1:-1:-1;18002:14:0;;-1:-1:-1;;;;;18002:14:0;17899:256;18052:23;18087:19;18098:7;18087:10;:19::i;:::-;-1:-1:-1;18049:57:0;;-1:-1:-1;18121:22:0;;-1:-1:-1;;;;;18121:22:0;33645:408;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33741:32:0;::::1;33733:83;;;::::0;-1:-1:-1;;;33733:83:0;;12859:2:1;33733:83:0::1;::::0;::::1;12841:21:1::0;12898:2;12878:18;;;12871:30;12937:34;12917:18;;;12910:62;-1:-1:-1;;;12988:18:1;;;12981:36;13034:19;;33733:83:0::1;12657:402:1::0;33733:83:0::1;33846:17;::::0;;-1:-1:-1;;;;;33846:17:0;;::::1;33867:5;33827:37:::0;;;:18:::1;:37;::::0;;;;;;;:45;;-1:-1:-1;;33827:45:0;;::::1;::::0;;;33883:47;;-1:-1:-1;;;;;;33883:47:0::1;::::0;;::::1;::::0;;::::1;::::0;;;33941:37;;;;;;;:44;;;;::::1;-1:-1:-1::0;33941:44:0::1;::::0;;;34001;780:51:1;;;34001:44:0::1;::::0;753:18:1;34001:44:0::1;616:221:1::0;23547:294:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;23602:23:::1;23628:24;23646:4;23628:9;:24::i;:::-;23602:50;;23690:23;;23671:15;:42;;23663:97;;;::::0;-1:-1:-1;;;23663:97:0;;13266:2:1;23663:97:0::1;::::0;::::1;13248:21:1::0;13305:2;13285:18;;;13278:30;13344:34;13324:18;;;13317:62;-1:-1:-1;;;13395:18:1;;;13388:40;13445:19;;23663:97:0::1;13064:406:1::0;23663:97:0::1;23771:10;:8;:10::i;:::-;23797:36;::::0;23817:15:::1;2073:25:1::0;;23797:36:0::1;::::0;2061:2:1;2046:18;23797:36:0::1;1927:177:1::0;18499:459:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18580:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18579:21;18571:61;;;::::0;-1:-1:-1;;;18571:61:0;;13677:2:1;18571:61:0::1;::::0;::::1;13659:21:1::0;13716:2;13696:18;;;13689:30;13755:29;13735:18;;;13728:57;13802:18;;18571:61:0::1;13475:351:1::0;18571:61:0::1;18651:9;:16:::0;18675:2:::1;::::0;18651:20:::1;::::0;18670:1:::1;18651:20;:::i;:::-;:26;;18643:116;;;::::0;-1:-1:-1;;;18643:116:0;;14033:2:1;18643:116:0::1;::::0;::::1;14015:21:1::0;14072:2;14052:18;;;14045:30;14111:34;14091:18;;;14084:62;14182:34;14162:18;;;14155:62;-1:-1:-1;;;14233:19:1;;;14226:44;14287:19;;18643:116:0::1;13831:481:1::0;18643:116:0::1;-1:-1:-1::0;;;;;18774:16:0;::::1;18793:1;18774:16:::0;;;:7:::1;:16;::::0;;;;;:20;18770:109:::1;;-1:-1:-1::0;;;;;18850:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18830:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18811:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18770:109:::1;-1:-1:-1::0;;;;;18889:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18889:27:0::1;18912:4;18889:27:::0;;::::1;::::0;;;18927:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18927:23:0::1;::::0;;::::1;::::0;;18499:459::o;16575:154::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16686:17:::1;::::0;16678:43:::1;::::0;16646:21:::1;::::0;-1:-1:-1;;;;;16686:17:0::1;::::0;16678:43;::::1;;;::::0;16646:21;;16629:14:::1;16678:43:::0;16629:14;16678:43;16646:21;16686:17;16678:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;13374:198:::0;-1:-1:-1;;;;;13464:20:0;;13440:7;13464:20;;;:11;:20;;;;;;;;13460:49;;;-1:-1:-1;;;;;;13493:16:0;;;;;:7;:16;;;;;;;13374:198::o;13460:49::-;-1:-1:-1;;;;;13547:16:0;;;;;;:7;:16;;;;;;13527:37;;:19;:37::i;6634:150::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;6743:1:::1;6727:6:::0;;6706:40:::1;::::0;-1:-1:-1;;;;;6727:6:0;;::::1;::::0;6706:40:::1;::::0;6743:1;;6706:40:::1;6774:1;6757:19:::0;;-1:-1:-1;;;;;;6757:19:0::1;::::0;;6634:150::o;15634:154::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;15688:14:::1;:22:::0;;-1:-1:-1;;15721:28:0;;;15765:15:::1;::::0;::::1;::::0;15705:5:::1;::::0;15765:15:::1;15634:154::o:0;15982:144::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16072:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16072:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15982:144::o;34329:488::-;34443:10;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34479:20:0;::::1;34471:59;;;::::0;-1:-1:-1;;;34471:59:0;;14519:2:1;34471:59:0::1;::::0;::::1;14501:21:1::0;14558:2;14538:18;;;14531:30;14597:28;14577:18;;;14570:56;14643:18;;34471:59:0::1;14317:350:1::0;34471:59:0::1;-1:-1:-1::0;;;;;34549:23:0;::::1;34567:4;34549:23;;34541:64;;;::::0;-1:-1:-1;;;34541:64:0;;14874:2:1;34541:64:0::1;::::0;::::1;14856:21:1::0;14913:2;14893:18;;;14886:30;14952;14932:18;;;14925:58;15000:18;;34541:64:0::1;14672:352:1::0;34541:64:0::1;34643:39;::::0;-1:-1:-1;;;34643:39:0;;34676:4:::1;34643:39;::::0;::::1;780:51:1::0;34616:24:0::1;::::0;-1:-1:-1;;;;;34643:24:0;::::1;::::0;::::1;::::0;753:18:1;;34643:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34701:46;::::0;-1:-1:-1;;;34701:46:0;;-1:-1:-1;;;;;15410:32:1;;;34701:46:0::1;::::0;::::1;15392:51:1::0;15459:18;;;15452:34;;;34616:66:0;;-1:-1:-1;34701:23:0;;::::1;::::0;::::1;::::0;15365:18:1;;34701:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34763;::::0;;-1:-1:-1;;;;;15410:32:1;;15392:51;;15474:2;15459:18;;15452:34;;;34693:54:0;;-1:-1:-1;34763:46:0::1;::::0;15365:18:1;34763:46:0::1;;;;;;;34460:357;34329:488:::0;;;;:::o;17153:237::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;17260:6:::1;::::0;-1:-1:-1;;;;;17252:14:0;;::::1;17260:6:::0;::::1;17252:14;;17244:84;;;::::0;-1:-1:-1;;;17244:84:0;;15949:2:1;17244:84:0::1;::::0;::::1;15931:21:1::0;15988:2;15968:18;;;15961:30;16027:34;16007:18;;;16000:62;16098:27;16078:18;;;16071:55;16143:19;;17244:84:0::1;15747:421:1::0;17244:84:0::1;17341:41;17370:4;17376:5;17341:28;:41::i;14890:413::-:0;191:10;14983:4;15027:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15027:34:0;;;;;;;;;;15080:35;;;;15072:85;;;;-1:-1:-1;;;15072:85:0;;16375:2:1;15072:85:0;;;16357:21:1;16414:2;16394:18;;;16387:30;16453:34;16433:18;;;16426:62;-1:-1:-1;;;16504:18:1;;;16497:35;16549:19;;15072:85:0;16173:401:1;15072:85:0;15193:67;191:10;15216:7;15244:15;15225:16;:34;15193:8;:67::i;:::-;-1:-1:-1;15291:4:0;;14890:413;-1:-1:-1;;;14890:413:0:o;13580:201::-;13687:4;13709:42;191:10;13733:9;13744:6;13709:9;:42::i;16411:156::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;16465:23:::1;16491:24;16509:4;16491:9;:24::i;:::-;16465:50;;16526:33;16543:15;16526:16;:33::i;34061:171::-:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;34138:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;34138:32:0::1;-1:-1:-1::0;;;;34138:32:0;;::::1;;::::0;;34186:38:::1;::::0;::::1;::::0;::::1;::::0;34162:8;1648:14:1;1641:22;1623:41;;1611:2;1596:18;;1483:187;15831:137:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;15893:20:::1;:28:::0;;-1:-1:-1;;15893:28:0::1;::::0;;15937:23:::1;::::0;::::1;::::0;15916:5:::1;::::0;15937:23:::1;15831:137::o:0;32560:149::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32629:27:0;::::1;32659:5;32629:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;32629:35:0::1;::::0;;32680:21;;780:51:1;;;32680:21:0::1;::::0;753:18:1;32680:21:0::1;616:221:1::0;6792:283:0;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6897:22:0;::::1;6875:110;;;::::0;-1:-1:-1;;;6875:110:0;;16781:2:1;6875:110:0::1;::::0;::::1;16763:21:1::0;16820:2;16800:18;;;16793:30;16859:34;16839:18;;;16832:62;-1:-1:-1;;;16910:18:1;;;16903:36;16956:19;;6875:110:0::1;16579:402:1::0;6875:110:0::1;7022:6;::::0;;7001:38:::1;::::0;-1:-1:-1;;;;;7001:38:0;;::::1;::::0;7022:6;::::1;::::0;7001:38:::1;::::0;::::1;7050:6;:17:::0;;-1:-1:-1;;;;;;7050:17:0::1;-1:-1:-1::0;;;;;7050:17:0;;;::::1;::::0;;;::::1;::::0;;6792:283::o;34829:160::-;6547:6;;-1:-1:-1;;;;;6547:6:0;191:10;6547:22;6539:67;;;;-1:-1:-1;;;6539:67:0;;;;;;;:::i;:::-;34923:58:::1;::::0;34887:12:::1;::::0;34931:10:::1;::::0;34955:21:::1;::::0;34887:12;34923:58;34887:12;34923:58;34955:21;34931:10;34923:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34829:160:0:o;31890:235::-;31937:7;;:12;:34;;;;-1:-1:-1;31953:13:0;;:18;31937:34;31933:47;;;31890:235::o;31933:47::-;32010:7;;;31992:15;:25;32052:13;;;32028:21;:37;-1:-1:-1;32078:11:0;;;;32100:17;31890:235::o;17398:275::-;-1:-1:-1;;;;;17481:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;17481:39:0;;;;;;;;17531:31;:37;;;;;;;:45;;;;;;;;;;;17587:35;;17597:23;17615:4;17597:17;:23::i;:::-;17636:5;17632:34;;17643:21;17659:4;17643:15;:21::i;19446:371::-;-1:-1:-1;;;;;19573:19:0;;19565:68;;;;-1:-1:-1;;;19565:68:0;;17398:2:1;19565:68:0;;;17380:21:1;17437:2;17417:18;;;17410:30;17476:34;17456:18;;;17449:62;-1:-1:-1;;;17527:18:1;;;17520:34;17571:19;;19565:68:0;17196:400:1;19565:68:0;-1:-1:-1;;;;;19652:21:0;;19644:68;;;;-1:-1:-1;;;19644:68:0;;17803:2:1;19644:68:0;;;17785:21:1;17842:2;17822:18;;;17815:30;17881:34;17861:18;;;17854:62;-1:-1:-1;;;17932:18:1;;;17925:32;17974:19;;19644:68:0;17601:398:1;19644:68:0;-1:-1:-1;;;;;19725:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19777:32;;2073:25:1;;;19777:32:0;;2046:18:1;19777:32:0;;;;;;;19446:371;;;:::o;19825:2132::-;-1:-1:-1;;;;;19947:18:0;;19939:68;;;;-1:-1:-1;;;19939:68:0;;18206:2:1;19939:68:0;;;18188:21:1;18245:2;18225:18;;;18218:30;18284:34;18264:18;;;18257:62;-1:-1:-1;;;18335:18:1;;;18328:35;18380:19;;19939:68:0;18004:401:1;19939:68:0;-1:-1:-1;;;;;20026:16:0;;20018:64;;;;-1:-1:-1;;;20018:64:0;;18612:2:1;20018:64:0;;;18594:21:1;18651:2;18631:18;;;18624:30;18690:34;18670:18;;;18663:62;-1:-1:-1;;;18741:18:1;;;18734:33;18784:19;;20018:64:0;18410:399:1;20018:64:0;20110:1;20101:6;:10;20093:64;;;;-1:-1:-1;;;20093:64:0;;19016:2:1;20093:64:0;;;18998:21:1;19055:2;19035:18;;;19028:30;19094:34;19074:18;;;19067:62;-1:-1:-1;;;19145:18:1;;;19138:39;19194:19;;20093:64:0;18814:405:1;20093:64:0;20182:13;;-1:-1:-1;;;20182:13:0;;;;20178:134;;-1:-1:-1;;;;;20219:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20247:22:0;;;;;;:18;:22;;;;;;;;20219:50;20211:89;;;;-1:-1:-1;;;20211:89:0;;19426:2:1;20211:89:0;;;19408:21:1;19465:2;19445:18;;;19438:30;19504:28;19484:18;;;19477:56;19550:18;;20211:89:0;19224:350:1;20211:89:0;20326:28;20357:24;20375:4;20357:9;:24::i;:::-;20447:23;;20531:16;;20326:55;;-1:-1:-1;20423:47:0;;;;-1:-1:-1;;;20531:16:0;;;;20530:17;:55;;;;-1:-1:-1;20564:21:0;;-1:-1:-1;;;20564:21:0;;;;20530:55;:93;;;;-1:-1:-1;20612:6:0;;20622:1;;20602:17;;-1:-1:-1;;;;;20612:6:0;20602:9;:17::i;:::-;:21;20530:93;:133;;;;-1:-1:-1;;;;;;20641:22:0;;;;;;:18;:22;;;;;;;;20640:23;20530:133;:175;;;;-1:-1:-1;;;;;;20681:24:0;;;;;;:18;:24;;;;;;;;20680:25;20530:175;:221;;;;-1:-1:-1;;;;;;20722:29:0;;;;;;:25;:29;;;;;;;;20530:221;:261;;;;;20768:23;20530:261;20512:328;;;20818:10;:8;:10::i;:::-;20852:14;:12;:14::i;:::-;10046:1;20887:15;:26;-1:-1:-1;;;;;20939:24:0;;;;;;:18;:24;;;;;;;;20938:25;:52;;;;-1:-1:-1;;;;;;20968:22:0;;;;;;:18;:22;;;;;;;;20967:23;20938:52;20934:679;;;-1:-1:-1;;;;;21031:31:0;;;;;;:25;:31;;;;;;;;21027:575;;;21093:10;;21083:7;:20;21157:17;;21138:16;;:36;;21157:17;21138:36;:::i;:::-;21122:13;:52;;;21196:17;21193:85;;9962:1;21237:15;:21;21193:85;21027:575;;;-1:-1:-1;;;;;21338:29:0;;;;;;:25;:29;;;;;;;;21334:268;;;21398:11;;21388:7;:21;21464:18;;21444:17;;:38;;21464:18;21444:38;:::i;:::-;21428:13;:54;;;21504:17;21501:86;;10002:1;21545:15;:22;21501:86;21642:17;21657:2;21642:12;:17;:::i;:::-;21627:12;;:32;21623:228;;;21676:13;21719:9;21754:27;21768:4;21773:2;21719:9;21754:13;:27::i;:::-;21743:38;;21804:8;21796:43;;;;-1:-1:-1;;;21796:43:0;;19781:2:1;21796:43:0;;;19763:21:1;19820:2;19800:18;;;19793:30;-1:-1:-1;;;19839:18:1;;;19832:52;19901:18;;21796:43:0;19579:346:1;21796:43:0;21661:190;;21623:228;21871:32;21886:4;21892:2;21896:6;21871:14;:32::i;:::-;21924:15;32187;;32177:7;:25;32229:21;;32213:13;:37;32133:125;21924:15;19928:2029;;19825:2132;;;:::o;30006:163::-;30048:7;30069:15;30086;30105:19;:17;:19::i;:::-;30068:56;;-1:-1:-1;30068:56:0;-1:-1:-1;30142:19:0;30068:56;;30142:19;:::i;:::-;30135:26;;;;30006:163;:::o;28295:742::-;28395:7;28417;28439;28461;28483;28505;28555:23;28593:12;28620:18;28652:20;28664:7;28652:11;:20::i;:::-;28540:132;;;;;;28684:15;28701:23;28726:12;28742:113;28768:7;28790:4;28809:10;28834;:8;:10::i;:::-;28742:11;:113::i;:::-;28683:172;;;;-1:-1:-1;28683:172:0;;-1:-1:-1;28959:15:0;;-1:-1:-1;28989:4:0;;-1:-1:-1;29008:10:0;;-1:-1:-1;28295:742:0;;-1:-1:-1;;;;;28295:742:0:o;21967:1510::-;12116:16;:23;;-1:-1:-1;;;;12116:23:0;-1:-1:-1;;;12116:23:0;;;;22046:24:::1;22064:4;22046:9;:24::i;:::-;22020:50;;22081:25;22134:23;;22109:22;;:48;;;;:::i;:::-;22081:76;;22168:12;22264:23;;22290:2;22264:28;;;;:::i;:::-;22245:15;:47;22242:124;;22326:23;::::0;:28:::1;::::0;22352:2:::1;22326:28;:::i;:::-;22308:46;;22242:124;22381:20:::0;;;:46:::1;;-1:-1:-1::0;22405:22:0;;22381:46:::1;22378:60;;;22430:7;;;;;22378:60;22507:26;22599:1;22579:17;22554:22;;22536:15;:40;;;;:::i;:::-;:60;;;;:::i;:::-;:64;;;;:::i;:::-;22507:93:::0;-1:-1:-1;22611:26:0::1;22640:36;22507:93:::0;22640:15;:36:::1;:::i;:::-;22611:65;;22697:36;22714:18;22697:16;:36::i;:::-;22906:22;::::0;22775:21:::1;::::0;22754:18:::1;::::0;22906:24:::1;::::0;22929:1:::1;::::0;22906:24:::1;:::i;:::-;22885:46;::::0;:17;:46:::1;:::i;:::-;22857:23;::::0;22844:37:::1;::::0;:10;:37:::1;:::i;:::-;:88;;;;:::i;:::-;22817:115:::0;-1:-1:-1;22953:23:0::1;22979:29;22817:115:::0;22979:10;:29:::1;:::i;:::-;23046:1;23021:22;:26:::0;;;23058:23:::1;:27:::0;22953:55;-1:-1:-1;23117:22:0;;;;;:45:::1;;;23161:1;23143:15;:19;23117:45;23114:216;;;23178:49;23191:18;23211:15;23178:12;:49::i;:::-;23247:71;::::0;;10111:25:1;;;10167:2;10152:18;;10145:34;;;10195:18;;;10188:34;;;23247:71:0::1;::::0;10099:2:1;10084:18;23247:71:0::1;;;;;;;23114:216;23412:17;::::0;23404:65:::1;::::0;-1:-1:-1;;;;;23412:17:0;;::::1;::::0;23443:21:::1;::::0;23404:65:::1;::::0;;;23443:21;23412:17;23404:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;12150:1:0::1;12162:16:::0;:24;;-1:-1:-1;;;;12162:24:0;;;21967:1510::o;23853:481::-;23943:16;;;23957:1;23943:16;;;;;;;;23919:21;;23943:16;;;;;;;;;;-1:-1:-1;23943:16:0;23919:40;;23988:4;23970;23975:1;23970:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23970:23:0;;;:7;;;;;;;;;;:23;;;;24014:9;;:16;;;-1:-1:-1;;;24014:16:0;;;;:9;;;;;:14;;:16;;;;;23970:7;;24014:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24004:4;24009:1;24004:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24004:26:0;;;:7;;;;;;;;;:26;24073:9;;24041:56;;24058:4;;24073:9;24085:11;24041:8;:56::i;:::-;24108:9;;:218;;-1:-1:-1;;;24108:218:0;;-1:-1:-1;;;;;24108:9:0;;;;:60;;:218;;24183:11;;24108:9;;24253:4;;24280;;24300:15;;24108:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23908:426;23853:481;:::o;36170:625::-;36295:6;;36251:4;;36280;;-1:-1:-1;;;;;36295:14:0;;;:6;;:14;36291:469;;;-1:-1:-1;;;;;36314:18:0;;;;;;;:14;:18;;;;;;36335:12;36314:33;;;;36350:20;;;;;;;:35;36291:469;;;36402:6;;-1:-1:-1;;;;;36402:12:0;;;:6;;:12;36398:362;;;-1:-1:-1;;;;;36435:20:0;;;;;;:14;:20;;;;;;36459:12;-1:-1:-1;36431:89:0;;-1:-1:-1;;;;;;36475:18:0;;;;;;:12;:18;;;;;:25;;-1:-1:-1;;36475:25:0;36496:4;36475:25;;;36431:89;-1:-1:-1;;;;;36542:18:0;;;;;;:12;:18;;;;;;;;36538:211;;;-1:-1:-1;36575:5:0;36538:211;;;36606:6;;-1:-1:-1;;;;;36606:12:0;;;:6;;:12;;;;:30;;-1:-1:-1;36622:6:0;;-1:-1:-1;;;;;36622:14:0;;;:6;;:14;;36606:30;36602:147;;;-1:-1:-1;;;;;36640:20:0;;;;;;;:14;:20;;;;;;36663:12;36640:35;;;;36677:18;;;;;;;;:33;;;36712:20;;;;;;;:35;36602:147;36778:8;36170:625;-1:-1:-1;;;;36170:625:0:o;24766:604::-;-1:-1:-1;;;;;24900:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;24924:22:0;;;;;;:11;:22;;;;;;;;24923:23;24900:46;24896:467;;;24963:48;24985:6;24993:9;25004:6;24963:21;:48::i;:::-;24766:604;;;:::o;24896:467::-;-1:-1:-1;;;;;25034:19:0;;;;;;:11;:19;;;;;;;;25033:20;:46;;;;-1:-1:-1;;;;;;25057:22:0;;;;;;:11;:22;;;;;;;;25033:46;25029:334;;;25096:46;25116:6;25124:9;25135:6;25096:19;:46::i;25029:334::-;-1:-1:-1;;;;;25164:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;25187:22:0;;;;;;:11;:22;;;;;;;;25164:45;25160:203;;;25226:48;25248:6;25256:9;25267:6;25226:21;:48::i;25160:203::-;25307:44;25325:6;25333:9;25344:6;25307:17;:44::i;30177:598::-;30275:7;;30228;;;;9258:15;30228:7;30329:332;30353:9;:16;30349:20;;30329:332;;;30437:7;30413;:21;30421:9;30431:1;30421:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30421:12:0;30413:21;;;;;;;;;;;;;:31;;:83;;;30489:7;30465;:21;30473:9;30483:1;30473:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30473:12:0;30465:21;;;;;;;;;;;;;:31;30413:83;30391:146;;;-1:-1:-1;;30520:7:0;;;9258:15;;-1:-1:-1;30177:598:0;-1:-1:-1;;30177:598:0:o;30391:146::-;30571:7;:21;30579:9;30589:1;30579:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30579:12:0;30571:21;;;;;;;;;;;;;30562:31;;:7;:31;:::i;:::-;30552:41;;30627:7;:21;30635:9;30645:1;30635:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30635:12:0;30627:21;;;;;;;;;;;;;30618:31;;:7;:31;:::i;:::-;30608:41;-1:-1:-1;30371:3:0;;;;:::i;:::-;;;;30329:332;;;;9258:15;30685:7;;:19;;;;:::i;:::-;30675:7;:29;30671:60;;;-1:-1:-1;;30714:7:0;;;9258:15;;-1:-1:-1;30177:598:0;-1:-1:-1;30177:598:0:o;30671:60::-;30750:7;;30759;;-1:-1:-1;30177:598:0;-1:-1:-1;30177:598:0:o;29045:406::-;29146:7;29168;29190;29225:12;29240:24;29256:7;29240:15;:24::i;:::-;29225:39;;29275:18;29296:30;29318:7;29296:21;:30::i;:::-;29275:51;-1:-1:-1;29337:23:0;29275:51;29363:14;29372:4;29363:7;:14;:::i;:::-;:27;;;;:::i;:::-;29337:53;29426:4;;-1:-1:-1;29432:10:0;;-1:-1:-1;29045:406:0;;-1:-1:-1;;;29045:406:0:o;29459:539::-;29658:7;;;;29755:21;29764:11;29755:7;:21;:::i;:::-;29737:39;-1:-1:-1;29787:12:0;29802:18;29808:11;29802:4;:18;:::i;:::-;29787:33;-1:-1:-1;29831:18:0;29852:24;29864:11;29852:10;:24;:::i;:::-;29831:45;-1:-1:-1;29887:23:0;29831:45;29913:14;29922:4;29913:7;:14;:::i;:::-;:27;;;;:::i;:::-;29959:7;;;;-1:-1:-1;29985:4:0;;-1:-1:-1;29459:539:0;;-1:-1:-1;;;;;;;29459:539:0:o;24348:410::-;24461:9;;24429:56;;24446:4;;-1:-1:-1;;;;;24461:9:0;24473:11;24429:8;:56::i;:::-;24496:9;;:254;;-1:-1:-1;;;24496:254:0;;-1:-1:-1;;;;;24496:9:0;;;;:25;;24529:9;;24496:254;;24562:4;;24582:11;;24496:9;;;;24702:6;;24724:15;;24496:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26708:677::-;26859:15;26889:23;26927:12;26954:23;26992:12;27019:18;27051:19;27062:7;27051:10;:19::i;:::-;-1:-1:-1;;;;;27099:15:0;;;;;;:7;:15;;;;;;26844:226;;-1:-1:-1;26844:226:0;;-1:-1:-1;26844:226:0;;-1:-1:-1;26844:226:0;-1:-1:-1;26844:226:0;-1:-1:-1;26844:226:0;-1:-1:-1;27099:25:0;;27116:7;;27099:25;:::i;:::-;-1:-1:-1;;;;;27081:15:0;;;;;;:7;:15;;;;;;;;:43;;;;27153:7;:15;;;;:25;;27170:7;;27153:25;:::i;:::-;-1:-1:-1;;;;;27135:15:0;;;;;;;:7;:15;;;;;;:43;;;;27210:18;;;;;;;:36;;27230:15;;27210:36;:::i;:::-;-1:-1:-1;;;;;27189:18:0;;;;;;:7;:18;;;;;:57;27257:26;27272:10;27257:14;:26::i;:::-;27294:23;27306:4;27312;27294:11;:23::i;:::-;27350:9;-1:-1:-1;;;;;27333:44:0;27342:6;-1:-1:-1;;;;;27333:44:0;;27361:15;27333:44;;;;2073:25:1;;2061:2;2046:18;;1927:177;27333:44:0;;;;;;;;26833:552;;;;;;26708:677;;;:::o;26005:695::-;26154:15;26184:23;26222:12;26249:23;26287:12;26314:18;26346:19;26357:7;26346:10;:19::i;:::-;-1:-1:-1;;;;;26394:15:0;;;;;;:7;:15;;;;;;26139:226;;-1:-1:-1;26139:226:0;;-1:-1:-1;26139:226:0;;-1:-1:-1;26139:226:0;-1:-1:-1;26139:226:0;-1:-1:-1;26139:226:0;-1:-1:-1;26394:27:0;;26139:226;;26394:27;:::i;:::-;-1:-1:-1;;;;;26376:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;26453:18;;;;;:7;:18;;;;;:38;;26475:15;;26453:38;:::i;:::-;-1:-1:-1;;;;;26432:18:0;;;;;;:7;:18;;;;;;;;:59;;;;26523:7;:18;;;;:38;;26545:15;;26523:38;:::i;27393:745::-;27544:15;27574:23;27612:12;27639:23;27677:12;27704:18;27736:19;27747:7;27736:10;:19::i;:::-;-1:-1:-1;;;;;27784:15:0;;;;;;:7;:15;;;;;;27529:226;;-1:-1:-1;27529:226:0;;-1:-1:-1;27529:226:0;;-1:-1:-1;27529:226:0;-1:-1:-1;27529:226:0;-1:-1:-1;27529:226:0;-1:-1:-1;27784:25:0;;27801:7;;27784:25;:::i;:::-;-1:-1:-1;;;;;27766:15:0;;;;;;:7;:15;;;;;;;;:43;;;;27838:7;:15;;;;:25;;27855:7;;27838:25;:::i;25378:619::-;25525:15;25555:23;25593:12;25620:23;25658:12;25685:18;25717:19;25728:7;25717:10;:19::i;:::-;-1:-1:-1;;;;;25765:15:0;;;;;;:7;:15;;;;;;25510:226;;-1:-1:-1;25510:226:0;;-1:-1:-1;25510:226:0;;-1:-1:-1;25510:226:0;-1:-1:-1;25510:226:0;-1:-1:-1;25510:226:0;-1:-1:-1;25765:25:0;;25510:226;;25765:25;:::i;31582:124::-;31646:7;31693:5;31683:7;;31673;:17;;;;:::i;:::-;:25;;;;:::i;31714:168::-;31811:7;31869:5;31853:13;;31843:7;:23;;;;:::i;30783:791::-;9962:1;30849:15;;:22;30846:433;;;30945:13;;30926:16;;30913:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;30887:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;31033:13:0;;31013:17;;31000:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;30973:23;;:73;;;;;;;:::i;:::-;;;;-1:-1:-1;30846:433:0;;-1:-1:-1;30846:433:0;;10002:1;31067:15;;:23;31064:215;;;31165:13;;31145:17;;31132:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;31106:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;31254:13:0;;31233:18;;31220:31;;:10;:31;:::i;:::-;:47;;;;:::i;:::-;31193:23;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;31064:215:0;31289:19;31311:10;:8;:10::i;:::-;31289:32;-1:-1:-1;31332:18:0;31353:26;31289:32;31353:10;:26;:::i;:::-;31431:4;31415:22;;;;:7;:22;;;;;;31332:47;;-1:-1:-1;31415:35:0;;31332:47;;31415:35;:::i;:::-;31406:4;31390:22;;;;:7;:22;;;;;;;;:60;;;;31465:11;:26;;;;;;31461:105;;;31547:4;31531:22;;;;:7;:22;;;;;;:35;;31556:10;;31531:35;:::i;:::-;31522:4;31506:22;;;;:7;:22;;;;;:60;30835:739;;30783:791;:::o;28146:141::-;28233:4;28224:7;;:14;;;;:::i;:::-;28214:7;:24;28262:10;;:17;;28274:4;;28262:17;:::i;:::-;28249:10;:30;-1:-1:-1;;28146:141:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;842:180::-;901:6;954:2;942:9;933:7;929:23;925:32;922:52;;;970:1;967;960:12;922:52;-1:-1:-1;993:23:1;;842:180;-1:-1:-1;842:180:1:o;1027:131::-;-1:-1:-1;;;;;1102:31:1;;1092:42;;1082:70;;1148:1;1145;1138:12;1163:315;1231:6;1239;1292:2;1280:9;1271:7;1267:23;1263:32;1260:52;;;1308:1;1305;1298:12;1260:52;1347:9;1334:23;1366:31;1391:5;1366:31;:::i;:::-;1416:5;1468:2;1453:18;;;;1440:32;;-1:-1:-1;;;1163:315:1:o;1675:247::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;2109:316::-;2186:6;2194;2202;2255:2;2243:9;2234:7;2230:23;2226:32;2223:52;;;2271:1;2268;2261:12;2223:52;-1:-1:-1;;2294:23:1;;;2364:2;2349:18;;2336:32;;-1:-1:-1;2415:2:1;2400:18;;;2387:32;;2109:316;-1:-1:-1;2109:316:1:o;2430:456::-;2507:6;2515;2523;2576:2;2564:9;2555:7;2551:23;2547:32;2544:52;;;2592:1;2589;2582:12;2544:52;2631:9;2618:23;2650:31;2675:5;2650:31;:::i;:::-;2700:5;-1:-1:-1;2757:2:1;2742:18;;2729:32;2770:33;2729:32;2770:33;:::i;:::-;2430:456;;2822:7;;-1:-1:-1;;;2876:2:1;2861:18;;;;2848:32;;2430:456::o;3288:118::-;3374:5;3367:13;3360:21;3353:5;3350:32;3340:60;;3396:1;3393;3386:12;3411:309;3476:6;3484;3537:2;3525:9;3516:7;3512:23;3508:32;3505:52;;;3553:1;3550;3543:12;3505:52;3589:9;3576:23;3566:33;;3649:2;3638:9;3634:18;3621:32;3662:28;3684:5;3662:28;:::i;:::-;3709:5;3699:15;;;3411:309;;;;;:::o;3725:382::-;3790:6;3798;3851:2;3839:9;3830:7;3826:23;3822:32;3819:52;;;3867:1;3864;3857:12;3819:52;3906:9;3893:23;3925:31;3950:5;3925:31;:::i;:::-;3975:5;-1:-1:-1;4032:2:1;4017:18;;4004:32;4045:30;4004:32;4045:30;:::i;4112:388::-;4180:6;4188;4241:2;4229:9;4220:7;4216:23;4212:32;4209:52;;;4257:1;4254;4247:12;4209:52;4296:9;4283:23;4315:31;4340:5;4315:31;:::i;:::-;4365:5;-1:-1:-1;4422:2:1;4407:18;;4394:32;4435:33;4394:32;4435:33;:::i;4505:241::-;4561:6;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4669:9;4656:23;4688:28;4710:5;4688:28;:::i;4975:356::-;5177:2;5159:21;;;5196:18;;;5189:30;5255:34;5250:2;5235:18;;5228:62;5322:2;5307:18;;4975:356::o;5748:251::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;5919:9;5913:16;5938:31;5963:5;5938:31;:::i;7124:607::-;-1:-1:-1;;;;;7483:15:1;;;7465:34;;7530:2;7515:18;;7508:34;;;;7573:2;7558:18;;7551:34;;;;7616:2;7601:18;;7594:34;;;;7665:15;;;7659:3;7644:19;;7637:44;7445:3;7697:19;;7690:35;;;;7414:3;7399:19;;7124:607::o;7736:306::-;7824:6;7832;7840;7893:2;7881:9;7872:7;7868:23;7864:32;7861:52;;;7909:1;7906;7899:12;7861:52;7938:9;7932:16;7922:26;;7988:2;7977:9;7973:18;7967:25;7957:35;;8032:2;8021:9;8017:18;8011:25;8001:35;;7736:306;;;;;:::o;8047:127::-;8108:10;8103:3;8099:20;8096:1;8089:31;8139:4;8136:1;8129:15;8163:4;8160:1;8153:15;8179:168;8219:7;8285:1;8281;8277:6;8273:14;8270:1;8267:21;8262:1;8255:9;8248:17;8244:45;8241:71;;;8292:18;;:::i;:::-;-1:-1:-1;8332:9:1;;8179:168::o;8352:217::-;8392:1;8418;8408:132;;8462:10;8457:3;8453:20;8450:1;8443:31;8497:4;8494:1;8487:15;8525:4;8522:1;8515:15;8408:132;-1:-1:-1;8554:9:1;;8352:217::o;9417:128::-;9457:3;9488:1;9484:6;9481:1;9478:13;9475:39;;;9494:18;;:::i;:::-;-1:-1:-1;9530:9:1;;9417:128::o;11763:127::-;11824:10;11819:3;11815:20;11812:1;11805:31;11855:4;11852:1;11845:15;11879:4;11876:1;11869:15;11895:125;11935:4;11963:1;11960;11957:8;11954:34;;;11968:18;;:::i;:::-;-1:-1:-1;12005:9:1;;11895:125::o;12025:127::-;12086:10;12081:3;12077:20;12074:1;12067:31;12117:4;12114:1;12107:15;12141:4;12138:1;12131:15;12157:135;12196:3;-1:-1:-1;;12217:17:1;;12214:43;;;12237:18;;:::i;:::-;-1:-1:-1;12284:1:1;12273:13;;12157:135::o;15029:184::-;15099:6;15152:2;15140:9;15131:7;15127:23;15123:32;15120:52;;;15168:1;15165;15158:12;15120:52;-1:-1:-1;15191:16:1;;15029:184;-1:-1:-1;15029:184:1:o;15497:245::-;15564:6;15617:2;15605:9;15596:7;15592:23;15588:32;15585:52;;;15633:1;15630;15623:12;15585:52;15665:9;15659:16;15684:28;15706:5;15684:28;:::i;20062:980::-;20324:4;20372:3;20361:9;20357:19;20403:6;20392:9;20385:25;20429:2;20467:6;20462:2;20451:9;20447:18;20440:34;20510:3;20505:2;20494:9;20490:18;20483:31;20534:6;20569;20563:13;20600:6;20592;20585:22;20638:3;20627:9;20623:19;20616:26;;20677:2;20669:6;20665:15;20651:29;;20698:1;20708:195;20722:6;20719:1;20716:13;20708:195;;;20787:13;;-1:-1:-1;;;;;20783:39:1;20771:52;;20878:15;;;;20843:12;;;;20819:1;20737:9;20708:195;;;-1:-1:-1;;;;;;;20959:32:1;;;;20954:2;20939:18;;20932:60;-1:-1:-1;;;21023:3:1;21008:19;21001:35;20920:3;20062:980;-1:-1:-1;;;20062:980:1:o

Swarm Source

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