ETH Price: $2,735.76 (+12.36%)
 

Overview

Max Total Supply

1,000,000,000 SAFU CT

Holders

209 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
1inch: Aggregation Executor
Balance
0 SAFU CT

Value
$0.00
0x220bda5c8994804ac96ebe4df184d25e5c2196d4
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

SAFU Community Tokens is providing a safe and innovative platform where influencers, organisations and brands can create, nurture and grow Web 3.0 communities to their full potential.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SAFUCT

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-24
*/

/**
 *Submitted for verification at Etherscan.io on 2021-10-30
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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;
    uint256 private _lockTime;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

// pragma solidity >=0.5.0;

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

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

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

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

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


// pragma solidity >=0.5.0;

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

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

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



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract SAFUCT is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0xc88098bb4f7C1705107fcEfC8c2eA2d6701C18c4); 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private isBot;
   
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1e9 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SAFU Community Token";
    string private _symbol = "SAFU CT";
    uint8 private _decimals = 9;


    uint256 public _sellFee;
    uint256 public _buyFee;
    uint256 public _taxFee;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
        
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool tradingOpen = false;
    bool canBlacklist = true;
    uint256 private _maxHoldings = 2200001 * 10**9;
    bool public maxHoldingsEnabled = true;
    uint256 public numTokensSellToAddToLiquidity = 2000000 * 10**9;
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

     event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
    }
    
    function oopenTrading() external onlyOwner() {
        _buyFee = 9;
        _sellFee = 18;
        _taxFee=1;
        tradingOpen = true;        
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view 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) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public 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 override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }    
  
    
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

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

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

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already 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 (from!= owner() && to!= owner()) {
           require(tradingOpen, "Trading not yet enabled."); //transfers disabled before openTrading
           require (!isBot[from] && !isBot[to], "Bot!");
       }
       
        // buy
        if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {            
            if(maxHoldingsEnabled){
                if(from == uniswapV2Pair && from != owner() && to != owner() && to != address(uniswapV2Router) && to != address(this)) {
                    uint balance = balanceOf(to);
                    require(balance.add(amount) <= _maxHoldings);
                }
            }
            
            _liquidityFee = _buyFee;
            
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;

        //sell
        if (
            overMinTokenBalance &&
            !inSwap &&
            to == uniswapV2Pair             
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
            _liquidityFee = _sellFee;
        }        
        
        bool takeFee = false;
        
        //take fee only on swaps
        if ( (from==uniswapV2Pair || to==uniswapV2Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]) ) {
            takeFee = true;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    
     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into thirds
        uint256 halfOfLiquify = contractTokenBalance.div(10);
        uint256 otherHalfOfLiquify = contractTokenBalance.div(10);
        uint256 portionForFees = contractTokenBalance.sub(halfOfLiquify).sub(otherHalfOfLiquify);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(halfOfLiquify); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalfOfLiquify, newBalance);
        sendETHToFee(portionForFees);
        
        emit SwapAndLiquify(halfOfLiquify, newBalance, otherHalfOfLiquify);
    }
    
    function sendETHToFee(uint256 amount) private {
        swapTokensForEth(amount); 
        marketingAddress.call{value: address(this).balance}("");
    }
    

   
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        require (taxFee <= 1, "taxFee can't exceed 2%");
        _taxFee = taxFee;
    }
    
    function setBuyFee(uint256 buyFee) external onlyOwner() {
        require (buyFee <= 9, "buy Fee can't exceed 2%");
        _buyFee = buyFee;
    }
    
    function setSellFee(uint256 sellFee) external onlyOwner() {
        require (sellFee <= 9, "sell fee can't exceed 9%");
        _sellFee = sellFee;
    }
    
    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }    
      
    function emergencyWithdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }

    function arrayBlacklist(address[] calldata bots) external onlyOwner() {
        require (canBlacklist == true, "can call this function only once");
        uint256 iterator = 0;
        while(iterator < bots.length){
            blacklist(bots[iterator]);
            iterator += 1;
        }
        canBlacklist = false;
    }

    function blacklist(address account) internal {
        if (account != uniswapV2Pair && account != owner() && account != address(this) && account!= address(uniswapV2Router)) {
            isBot[account] = true;
        }
    }

    function checkBot(address account) public view returns (bool) {
        return isBot[account];
    }

    function removeBlacklist(address account) external onlyOwner {
        require (isBot[account], "Must be blacklisted");
        isBot[account] = false;
    }

    function removeMaxHoldings() external onlyOwner() {
        maxHoldingsEnabled = false;
    }

    
    function setSwapThresholdAmount (uint256 amount) external onlyOwner {
        require (amount <= _tTotal.div(100), "can't exceed 1%");
        numTokensSellToAddToLiquidity = amount * 10 ** 9;
    }    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"inputs":[],"name":"_buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":"bots","type":"address[]"}],"name":"arrayBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","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":[],"name":"initContract","outputs":[],"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":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oopenTrading","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeMaxHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b03191673c88098bb4f7c1705107fcefc8c2ea2d6701c18c4179055670de0b6b3a7640000600b81905562000046906000196200026c565b62000054906000196200028f565b600c556040805180820190915260148082527f5341465520436f6d6d756e69747920546f6b656e00000000000000000000000060209092019182526200009d91600e91620001c6565b506040805180820190915260078082526614d051954810d560ca1b6020909201918252620000ce91600f91620001c6565b506010805460ff199081166009179091556013546014556015546016556018805461ffff60a81b1916600160b01b1790556607d0e3a61c4a00601955601a8054909116600117905566071afd498d0000601b553480156200012e57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c5433600081815260046020908152604080832094909455600b549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620002f1565b828054620001d490620002b5565b90600052602060002090601f016020900481019282620001f8576000855562000243565b82601f106200021357805160ff191683800117855562000243565b8280016001018555821562000243579182015b828111156200024357825182559160200191906001019062000226565b506200025192915062000255565b5090565b5b8082111562000251576000815560010162000256565b6000826200028a57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620002b057634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b612ee880620003016000396000f3fe60806040526004361061026b5760003560e01c8063590f897e116101445780639d1c7acd116100b6578063d12a76881161007a578063d12a768814610750578063db2e21bc14610766578063dd62ed3e1461077b578063ea2f0b37146107c1578063eb91e651146107e1578063f2fde38b1461080157600080fd5b80639d1c7acd14610697578063a457c2d7146106b7578063a5ece941146106d7578063a9059cbb146106f7578063b1a4e0dc1461071757600080fd5b806388f820201161010857806388f82020146105d6578063898876eb1461060f5780638b4cee08146106245780638da5cb5b14610644578063906e9dd01461066257806395d89b411461068257600080fd5b8063590f897e1461056157806367a907c21461057757806370a082311461058c578063715018a6146105ac5780638203f5fe146105c157600080fd5b8063313ce567116101dd57806340b9a54b116101a157806340b9a54b14610492578063437823ec146104a85780634549b039146104c857806349bd5a5e146104e857806352390c02146105085780635342acb41461052857600080fd5b8063313ce567146103fa5780633685d4191461041c578063395093511461043c5780633b124fe71461045c5780633bd5d1731461047257600080fd5b806313114a9d1161022f57806313114a9d1461032e5780631694505e1461034d57806318160ddd1461038557806323b872dd1461039a57806329e04b4a146103ba5780632d838119146103da57600080fd5b8063061c82d01461027757806306fdde0314610299578063095ea7b3146102c45780630cc835a3146102f457806312db00161461031457600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004612a5a565b610821565b005b3480156102a557600080fd5b506102ae6108a3565b6040516102bb9190612a73565b60405180910390f35b3480156102d057600080fd5b506102e46102df366004612add565b610935565b60405190151581526020016102bb565b34801561030057600080fd5b5061029761030f366004612a5a565b61094c565b34801561032057600080fd5b50601a546102e49060ff1681565b34801561033a57600080fd5b50600d545b6040519081526020016102bb565b34801561035957600080fd5b5060175461036d906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561039157600080fd5b50600b5461033f565b3480156103a657600080fd5b506102e46103b5366004612b09565b6109cc565b3480156103c657600080fd5b506102976103d5366004612a5a565b610a35565b3480156103e657600080fd5b5061033f6103f5366004612a5a565b610ac2565b34801561040657600080fd5b5060105460405160ff90911681526020016102bb565b34801561042857600080fd5b50610297610437366004612b4a565b610b46565b34801561044857600080fd5b506102e4610457366004612add565b610cfc565b34801561046857600080fd5b5061033f60135481565b34801561047e57600080fd5b5061029761048d366004612a5a565b610d32565b34801561049e57600080fd5b5061033f60125481565b3480156104b457600080fd5b506102976104c3366004612b4a565b610e1c565b3480156104d457600080fd5b5061033f6104e3366004612b67565b610e6a565b3480156104f457600080fd5b5060185461036d906001600160a01b031681565b34801561051457600080fd5b50610297610523366004612b4a565b610ef7565b34801561053457600080fd5b506102e4610543366004612b4a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561056d57600080fd5b5061033f60115481565b34801561058357600080fd5b5061029761104a565b34801561059857600080fd5b5061033f6105a7366004612b4a565b611098565b3480156105b857600080fd5b506102976110f7565b3480156105cd57600080fd5b5061029761116b565b3480156105e257600080fd5b506102e46105f1366004612b4a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561061b57600080fd5b50610297611358565b34801561063057600080fd5b5061029761063f366004612a5a565b61138e565b34801561065057600080fd5b506000546001600160a01b031661036d565b34801561066e57600080fd5b5061029761067d366004612b4a565b61140e565b34801561068e57600080fd5b506102ae61145a565b3480156106a357600080fd5b506102976106b2366004612b9c565b611469565b3480156106c357600080fd5b506102e46106d2366004612add565b61154f565b3480156106e357600080fd5b5060035461036d906001600160a01b031681565b34801561070357600080fd5b506102e4610712366004612add565b61159e565b34801561072357600080fd5b506102e4610732366004612b4a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561075c57600080fd5b5061033f601b5481565b34801561077257600080fd5b506102976115ab565b34801561078757600080fd5b5061033f610796366004612c11565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107cd57600080fd5b506102976107dc366004612b4a565b611612565b3480156107ed57600080fd5b506102976107fc366004612b4a565b61165d565b34801561080d57600080fd5b5061029761081c366004612b4a565b611706565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161084b90612c3f565b60405180910390fd5b600181111561089e5760405162461bcd60e51b81526020600482015260166024820152757461784665652063616e27742065786365656420322560501b604482015260640161084b565b601355565b6060600e80546108b290612c74565b80601f01602080910402602001604051908101604052809291908181526020018280546108de90612c74565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b60006109423384846117f0565b5060015b92915050565b6000546001600160a01b031633146109765760405162461bcd60e51b815260040161084b90612c3f565b60098111156109c75760405162461bcd60e51b815260206004820152601760248201527f627579204665652063616e277420657863656564203225000000000000000000604482015260640161084b565b601255565b60006109d9848484611914565b610a2b8433610a2685604051806060016040528060288152602001612e66602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611d35565b6117f0565b5060019392505050565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161084b90612c3f565b600b54610a6d906064611d6f565b811115610aae5760405162461bcd60e51b815260206004820152600f60248201526e63616e27742065786365656420312560881b604482015260640161084b565b610abc81633b9aca00612cc4565b601b5550565b6000600c54821115610b295760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161084b565b6000610b33611db1565b9050610b3f8382611d6f565b9392505050565b6000546001600160a01b03163314610b705760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526009602052604090205460ff16610bd85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161084b565b60005b600a54811015610cf857816001600160a01b0316600a8281548110610c0257610c02612ce3565b6000918252602090912001546001600160a01b031603610ce657600a8054610c2c90600190612cf9565b81548110610c3c57610c3c612ce3565b600091825260209091200154600a80546001600160a01b039092169183908110610c6857610c68612ce3565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600a805480610cc057610cc0612d10565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cf081612d26565b915050610bdb565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610942918590610a269086611dd4565b3360008181526009602052604090205460ff1615610da75760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161084b565b6000610db283611e33565b505050506001600160a01b038416600090815260046020526040902054919250610dde91905082611e82565b6001600160a01b038316600090815260046020526040902055600c54610e049082611e82565b600c55600d54610e149084611dd4565b600d55505050565b6000546001600160a01b03163314610e465760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600b54831115610ebe5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161084b565b81610edd576000610ece84611e33565b50939550610946945050505050565b6000610ee884611e33565b50929550610946945050505050565b6000546001600160a01b03163314610f215760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526009602052604090205460ff1615610f8a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161084b565b6001600160a01b03811660009081526004602052604090205415610fe4576001600160a01b038116600090815260046020526040902054610fca90610ac2565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146110745760405162461bcd60e51b815260040161084b90612c3f565b6009601290815560115560016013556018805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526009602052604081205460ff16156110d557506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461094690610ac2565b6000546001600160a01b031633146111215760405162461bcd60e51b815260040161084b90612c3f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111955760405162461bcd60e51b815260040161084b90612c3f565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190612d3f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190612d3f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190612d3f565b601880546001600160a01b03199081166001600160a01b0393841617909155601780549091169282169290921790915560008054909116815260086020526040808220805460ff1990811660019081179092553084529190922080549091169091179055565b6000546001600160a01b031633146113825760405162461bcd60e51b815260040161084b90612c3f565b601a805460ff19169055565b6000546001600160a01b031633146113b85760405162461bcd60e51b815260040161084b90612c3f565b60098111156114095760405162461bcd60e51b815260206004820152601860248201527f73656c6c206665652063616e2774206578636565642039250000000000000000604482015260640161084b565b601155565b6000546001600160a01b031633146114385760405162461bcd60e51b815260040161084b90612c3f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600f80546108b290612c74565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161084b90612c3f565b601854600160b01b900460ff1615156001146114f15760405162461bcd60e51b815260206004820181905260248201527f63616e2063616c6c20746869732066756e6374696f6e206f6e6c79206f6e6365604482015260640161084b565b60005b8181101561153d5761152b83838381811061151157611511612ce3565b90506020020160208101906115269190612b4a565b611ec4565b611536600182612d5c565b90506114f4565b50506018805460ff60b01b1916905550565b60006109423384610a2685604051806060016040528060258152602001612e8e602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611d35565b6000610942338484611914565b6000546001600160a01b031633146115d55760405162461bcd60e51b815260040161084b90612c3f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561160f573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461163c5760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146116875760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526007602052604090205460ff166116e55760405162461bcd60e51b8152602060048201526013602482015272135d5cdd08189948189b1858dadb1a5cdd1959606a1b604482015260640161084b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146117305760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b0381166117955760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084b565b6001600160a01b0382166118b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084b565b6001600160a01b0382166119da5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084b565b60008111611a3c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084b565b6000546001600160a01b03848116911614801590611a6857506000546001600160a01b03838116911614155b15611b3d57601854600160a81b900460ff16611ac65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161084b565b6001600160a01b03831660009081526007602052604090205460ff16158015611b0857506001600160a01b03821660009081526007602052604090205460ff16155b611b3d5760405162461bcd60e51b815260040161084b90602080825260049082015263426f742160e01b604082015260600190565b6018546001600160a01b038481169116148015611b6857506017546001600160a01b03838116911614155b8015611b8d57506001600160a01b03821660009081526008602052604090205460ff16155b15611c4557601a5460ff1615611c3e576018546001600160a01b038481169116148015611bc857506000546001600160a01b03848116911614155b8015611be257506000546001600160a01b03838116911614155b8015611bfc57506017546001600160a01b03838116911614155b8015611c1157506001600160a01b0382163014155b15611c3e576000611c2183611098565b601954909150611c318284611dd4565b1115611c3c57600080fd5b505b6012546015555b6000611c5030611098565b601b5490915081108015908190611c715750601854600160a01b900460ff16155b8015611c8a57506018546001600160a01b038581169116145b15611ca457601b549150611c9d82611f4a565b6011546015555b6018546000906001600160a01b0387811691161480611cd057506018546001600160a01b038681169116145b8015611d1857506001600160a01b03861660009081526008602052604090205460ff1680611d1657506001600160a01b03851660009081526008602052604090205460ff165b155b15611d21575060015b611d2d86868684612014565b505050505050565b60008184841115611d595760405162461bcd60e51b815260040161084b9190612a73565b506000611d668486612cf9565b95945050505050565b6000610b3f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061213f565b6000806000611dbe61216d565b9092509050611dcd8282611d6f565b9250505090565b600080611de18385612d5c565b905083811015610b3f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084b565b6000806000806000806000806000611e4a8a6122ef565b9250925092506000806000611e688d8686611e63611db1565b61232b565b919f909e50909c50959a5093985091965092945050505050565b6000610b3f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d35565b6018546001600160a01b03828116911614801590611ef057506000546001600160a01b03828116911614155b8015611f0557506001600160a01b0381163014155b8015611f1f57506017546001600160a01b03828116911614155b1561160f576001600160a01b0381166000908152600760205260409020805460ff1916600117905550565b6018805460ff60a01b1916600160a01b1790556000611f6a82600a611d6f565b90506000611f7983600a611d6f565b90506000611f9182611f8b8686611e82565b90611e82565b905047611f9d8461237b565b6000611fa94783611e82565b9050611fb5848261250e565b611fbe836125e3565b60408051868152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff60a01b1916905550505050565b8061202157612021612639565b6001600160a01b03841660009081526009602052604090205460ff16801561206257506001600160a01b03831660009081526009602052604090205460ff16155b1561207757612072848484612667565b612123565b6001600160a01b03841660009081526009602052604090205460ff161580156120b857506001600160a01b03831660009081526009602052604090205460ff165b156120c85761207284848461278d565b6001600160a01b03841660009081526009602052604090205460ff16801561210857506001600160a01b03831660009081526009602052604090205460ff165b1561211857612072848484612836565b6121238484846128a9565b8061213957612139601454601355601654601555565b50505050565b600081836121605760405162461bcd60e51b815260040161084b9190612a73565b506000611d668486612d74565b600c54600b546000918291825b600a548110156122bf578260046000600a848154811061219c5761219c612ce3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061220757508160056000600a84815481106121e0576121e0612ce3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561221d57600c54600b54945094505050509091565b61226360046000600a848154811061223757612237612ce3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e82565b92506122ab60056000600a848154811061227f5761227f612ce3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e82565b9150806122b781612d26565b91505061217a565b50600b54600c546122cf91611d6f565b8210156122e657600c54600b549350935050509091565b90939092509050565b6000806000806122fe856128ed565b9050600061230b8661290f565b9050600061231d82611f8b8986611e82565b979296509094509092505050565b600080808061233a888661292b565b90506000612348888761292b565b90506000612356888861292b565b9050600061236882611f8b8686611e82565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123b0576123b0612ce3565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d9190612d3f565b8160018151811061244057612440612ce3565b6001600160a01b03928316602091820292909201015260175461246691309116846117f0565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061249f908590600090869030904290600401612dda565b600060405180830381600087803b1580156124b957600080fd5b505af11580156124cd573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612502929190612e16565b60405180910390a15050565b6017546125269030906001600160a01b0316846117f0565b6017546001600160a01b031663f305d71982308560008061254f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156125b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125dc9190612e37565b5050505050565b6125ec8161237b565b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e612139565b6013541580156126495750601554155b1561265057565b601380546014556015805460165560009182905555565b60008060008060008061267987611e33565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506126ab9088611e82565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546126da9087611e82565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546127099086611dd4565b6001600160a01b03891660009081526004602052604090205561272b816129ad565b6127358483612a36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161277a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061279f87611e33565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506127d19087611e82565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546128079084611dd4565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546127099086611dd4565b60008060008060008061284887611e33565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061287a9088611e82565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546127d19087611e82565b6000806000806000806128bb87611e33565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126da9087611e82565b600061094660646129096013548561292b90919063ffffffff16565b90611d6f565b600061094660646129096015548561292b90919063ffffffff16565b60008260000361293d57506000610946565b60006129498385612cc4565b9050826129568583612d74565b14610b3f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084b565b60006129b7611db1565b905060006129c5838361292b565b306000908152600460205260409020549091506129e29082611dd4565b3060009081526004602090815260408083209390935560099052205460ff1615612a315730600090815260056020526040902054612a209084611dd4565b306000908152600560205260409020555b505050565b600c54612a439083611e82565b600c55600d54612a539082611dd4565b600d555050565b600060208284031215612a6c57600080fd5b5035919050565b600060208083528351808285015260005b81811015612aa057858101830151858201604001528201612a84565b81811115612ab2576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461160f57600080fd5b60008060408385031215612af057600080fd5b8235612afb81612ac8565b946020939093013593505050565b600080600060608486031215612b1e57600080fd5b8335612b2981612ac8565b92506020840135612b3981612ac8565b929592945050506040919091013590565b600060208284031215612b5c57600080fd5b8135610b3f81612ac8565b60008060408385031215612b7a57600080fd5b8235915060208301358015158114612b9157600080fd5b809150509250929050565b60008060208385031215612baf57600080fd5b823567ffffffffffffffff80821115612bc757600080fd5b818501915085601f830112612bdb57600080fd5b813581811115612bea57600080fd5b8660208260051b8501011115612bff57600080fd5b60209290920196919550909350505050565b60008060408385031215612c2457600080fd5b8235612c2f81612ac8565b91506020830135612b9181612ac8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8857607f821691505b602082108103612ca857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612cde57612cde612cae565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612d0b57612d0b612cae565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201612d3857612d38612cae565b5060010190565b600060208284031215612d5157600080fd5b8151610b3f81612ac8565b60008219821115612d6f57612d6f612cae565b500190565b600082612d9157634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b83811015612dcf5781516001600160a01b031687529582019590820190600101612daa565b509495945050505050565b85815284602082015260a060408201526000612df960a0830186612d96565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612e2f6040830184612d96565b949350505050565b600080600060608486031215612e4c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3a82f6672707d96c241249c0c42fe305c3a3e83ff34136ef496a39a2cb881a364736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063590f897e116101445780639d1c7acd116100b6578063d12a76881161007a578063d12a768814610750578063db2e21bc14610766578063dd62ed3e1461077b578063ea2f0b37146107c1578063eb91e651146107e1578063f2fde38b1461080157600080fd5b80639d1c7acd14610697578063a457c2d7146106b7578063a5ece941146106d7578063a9059cbb146106f7578063b1a4e0dc1461071757600080fd5b806388f820201161010857806388f82020146105d6578063898876eb1461060f5780638b4cee08146106245780638da5cb5b14610644578063906e9dd01461066257806395d89b411461068257600080fd5b8063590f897e1461056157806367a907c21461057757806370a082311461058c578063715018a6146105ac5780638203f5fe146105c157600080fd5b8063313ce567116101dd57806340b9a54b116101a157806340b9a54b14610492578063437823ec146104a85780634549b039146104c857806349bd5a5e146104e857806352390c02146105085780635342acb41461052857600080fd5b8063313ce567146103fa5780633685d4191461041c578063395093511461043c5780633b124fe71461045c5780633bd5d1731461047257600080fd5b806313114a9d1161022f57806313114a9d1461032e5780631694505e1461034d57806318160ddd1461038557806323b872dd1461039a57806329e04b4a146103ba5780632d838119146103da57600080fd5b8063061c82d01461027757806306fdde0314610299578063095ea7b3146102c45780630cc835a3146102f457806312db00161461031457600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004612a5a565b610821565b005b3480156102a557600080fd5b506102ae6108a3565b6040516102bb9190612a73565b60405180910390f35b3480156102d057600080fd5b506102e46102df366004612add565b610935565b60405190151581526020016102bb565b34801561030057600080fd5b5061029761030f366004612a5a565b61094c565b34801561032057600080fd5b50601a546102e49060ff1681565b34801561033a57600080fd5b50600d545b6040519081526020016102bb565b34801561035957600080fd5b5060175461036d906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561039157600080fd5b50600b5461033f565b3480156103a657600080fd5b506102e46103b5366004612b09565b6109cc565b3480156103c657600080fd5b506102976103d5366004612a5a565b610a35565b3480156103e657600080fd5b5061033f6103f5366004612a5a565b610ac2565b34801561040657600080fd5b5060105460405160ff90911681526020016102bb565b34801561042857600080fd5b50610297610437366004612b4a565b610b46565b34801561044857600080fd5b506102e4610457366004612add565b610cfc565b34801561046857600080fd5b5061033f60135481565b34801561047e57600080fd5b5061029761048d366004612a5a565b610d32565b34801561049e57600080fd5b5061033f60125481565b3480156104b457600080fd5b506102976104c3366004612b4a565b610e1c565b3480156104d457600080fd5b5061033f6104e3366004612b67565b610e6a565b3480156104f457600080fd5b5060185461036d906001600160a01b031681565b34801561051457600080fd5b50610297610523366004612b4a565b610ef7565b34801561053457600080fd5b506102e4610543366004612b4a565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561056d57600080fd5b5061033f60115481565b34801561058357600080fd5b5061029761104a565b34801561059857600080fd5b5061033f6105a7366004612b4a565b611098565b3480156105b857600080fd5b506102976110f7565b3480156105cd57600080fd5b5061029761116b565b3480156105e257600080fd5b506102e46105f1366004612b4a565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561061b57600080fd5b50610297611358565b34801561063057600080fd5b5061029761063f366004612a5a565b61138e565b34801561065057600080fd5b506000546001600160a01b031661036d565b34801561066e57600080fd5b5061029761067d366004612b4a565b61140e565b34801561068e57600080fd5b506102ae61145a565b3480156106a357600080fd5b506102976106b2366004612b9c565b611469565b3480156106c357600080fd5b506102e46106d2366004612add565b61154f565b3480156106e357600080fd5b5060035461036d906001600160a01b031681565b34801561070357600080fd5b506102e4610712366004612add565b61159e565b34801561072357600080fd5b506102e4610732366004612b4a565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561075c57600080fd5b5061033f601b5481565b34801561077257600080fd5b506102976115ab565b34801561078757600080fd5b5061033f610796366004612c11565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107cd57600080fd5b506102976107dc366004612b4a565b611612565b3480156107ed57600080fd5b506102976107fc366004612b4a565b61165d565b34801561080d57600080fd5b5061029761081c366004612b4a565b611706565b6000546001600160a01b031633146108545760405162461bcd60e51b815260040161084b90612c3f565b60405180910390fd5b600181111561089e5760405162461bcd60e51b81526020600482015260166024820152757461784665652063616e27742065786365656420322560501b604482015260640161084b565b601355565b6060600e80546108b290612c74565b80601f01602080910402602001604051908101604052809291908181526020018280546108de90612c74565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b5050505050905090565b60006109423384846117f0565b5060015b92915050565b6000546001600160a01b031633146109765760405162461bcd60e51b815260040161084b90612c3f565b60098111156109c75760405162461bcd60e51b815260206004820152601760248201527f627579204665652063616e277420657863656564203225000000000000000000604482015260640161084b565b601255565b60006109d9848484611914565b610a2b8433610a2685604051806060016040528060288152602001612e66602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611d35565b6117f0565b5060019392505050565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b815260040161084b90612c3f565b600b54610a6d906064611d6f565b811115610aae5760405162461bcd60e51b815260206004820152600f60248201526e63616e27742065786365656420312560881b604482015260640161084b565b610abc81633b9aca00612cc4565b601b5550565b6000600c54821115610b295760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161084b565b6000610b33611db1565b9050610b3f8382611d6f565b9392505050565b6000546001600160a01b03163314610b705760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526009602052604090205460ff16610bd85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161084b565b60005b600a54811015610cf857816001600160a01b0316600a8281548110610c0257610c02612ce3565b6000918252602090912001546001600160a01b031603610ce657600a8054610c2c90600190612cf9565b81548110610c3c57610c3c612ce3565b600091825260209091200154600a80546001600160a01b039092169183908110610c6857610c68612ce3565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600990925220805460ff19169055600a805480610cc057610cc0612d10565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cf081612d26565b915050610bdb565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610942918590610a269086611dd4565b3360008181526009602052604090205460ff1615610da75760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161084b565b6000610db283611e33565b505050506001600160a01b038416600090815260046020526040902054919250610dde91905082611e82565b6001600160a01b038316600090815260046020526040902055600c54610e049082611e82565b600c55600d54610e149084611dd4565b600d55505050565b6000546001600160a01b03163314610e465760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000600b54831115610ebe5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015260640161084b565b81610edd576000610ece84611e33565b50939550610946945050505050565b6000610ee884611e33565b50929550610946945050505050565b6000546001600160a01b03163314610f215760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526009602052604090205460ff1615610f8a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161084b565b6001600160a01b03811660009081526004602052604090205415610fe4576001600160a01b038116600090815260046020526040902054610fca90610ac2565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146110745760405162461bcd60e51b815260040161084b90612c3f565b6009601290815560115560016013556018805460ff60a81b1916600160a81b179055565b6001600160a01b03811660009081526009602052604081205460ff16156110d557506001600160a01b031660009081526005602052604090205490565b6001600160a01b03821660009081526004602052604090205461094690610ac2565b6000546001600160a01b031633146111215760405162461bcd60e51b815260040161084b90612c3f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111955760405162461bcd60e51b815260040161084b90612c3f565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190612d3f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190612d3f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190612d3f565b601880546001600160a01b03199081166001600160a01b0393841617909155601780549091169282169290921790915560008054909116815260086020526040808220805460ff1990811660019081179092553084529190922080549091169091179055565b6000546001600160a01b031633146113825760405162461bcd60e51b815260040161084b90612c3f565b601a805460ff19169055565b6000546001600160a01b031633146113b85760405162461bcd60e51b815260040161084b90612c3f565b60098111156114095760405162461bcd60e51b815260206004820152601860248201527f73656c6c206665652063616e2774206578636565642039250000000000000000604482015260640161084b565b601155565b6000546001600160a01b031633146114385760405162461bcd60e51b815260040161084b90612c3f565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600f80546108b290612c74565b6000546001600160a01b031633146114935760405162461bcd60e51b815260040161084b90612c3f565b601854600160b01b900460ff1615156001146114f15760405162461bcd60e51b815260206004820181905260248201527f63616e2063616c6c20746869732066756e6374696f6e206f6e6c79206f6e6365604482015260640161084b565b60005b8181101561153d5761152b83838381811061151157611511612ce3565b90506020020160208101906115269190612b4a565b611ec4565b611536600182612d5c565b90506114f4565b50506018805460ff60b01b1916905550565b60006109423384610a2685604051806060016040528060258152602001612e8e602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611d35565b6000610942338484611914565b6000546001600160a01b031633146115d55760405162461bcd60e51b815260040161084b90612c3f565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561160f573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461163c5760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b031633146116875760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b03811660009081526007602052604090205460ff166116e55760405162461bcd60e51b8152602060048201526013602482015272135d5cdd08189948189b1858dadb1a5cdd1959606a1b604482015260640161084b565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b031633146117305760405162461bcd60e51b815260040161084b90612c3f565b6001600160a01b0381166117955760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161084b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166118525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084b565b6001600160a01b0382166118b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119785760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084b565b6001600160a01b0382166119da5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084b565b60008111611a3c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084b565b6000546001600160a01b03848116911614801590611a6857506000546001600160a01b03838116911614155b15611b3d57601854600160a81b900460ff16611ac65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604482015260640161084b565b6001600160a01b03831660009081526007602052604090205460ff16158015611b0857506001600160a01b03821660009081526007602052604090205460ff16155b611b3d5760405162461bcd60e51b815260040161084b90602080825260049082015263426f742160e01b604082015260600190565b6018546001600160a01b038481169116148015611b6857506017546001600160a01b03838116911614155b8015611b8d57506001600160a01b03821660009081526008602052604090205460ff16155b15611c4557601a5460ff1615611c3e576018546001600160a01b038481169116148015611bc857506000546001600160a01b03848116911614155b8015611be257506000546001600160a01b03838116911614155b8015611bfc57506017546001600160a01b03838116911614155b8015611c1157506001600160a01b0382163014155b15611c3e576000611c2183611098565b601954909150611c318284611dd4565b1115611c3c57600080fd5b505b6012546015555b6000611c5030611098565b601b5490915081108015908190611c715750601854600160a01b900460ff16155b8015611c8a57506018546001600160a01b038581169116145b15611ca457601b549150611c9d82611f4a565b6011546015555b6018546000906001600160a01b0387811691161480611cd057506018546001600160a01b038681169116145b8015611d1857506001600160a01b03861660009081526008602052604090205460ff1680611d1657506001600160a01b03851660009081526008602052604090205460ff165b155b15611d21575060015b611d2d86868684612014565b505050505050565b60008184841115611d595760405162461bcd60e51b815260040161084b9190612a73565b506000611d668486612cf9565b95945050505050565b6000610b3f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061213f565b6000806000611dbe61216d565b9092509050611dcd8282611d6f565b9250505090565b600080611de18385612d5c565b905083811015610b3f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161084b565b6000806000806000806000806000611e4a8a6122ef565b9250925092506000806000611e688d8686611e63611db1565b61232b565b919f909e50909c50959a5093985091965092945050505050565b6000610b3f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d35565b6018546001600160a01b03828116911614801590611ef057506000546001600160a01b03828116911614155b8015611f0557506001600160a01b0381163014155b8015611f1f57506017546001600160a01b03828116911614155b1561160f576001600160a01b0381166000908152600760205260409020805460ff1916600117905550565b6018805460ff60a01b1916600160a01b1790556000611f6a82600a611d6f565b90506000611f7983600a611d6f565b90506000611f9182611f8b8686611e82565b90611e82565b905047611f9d8461237b565b6000611fa94783611e82565b9050611fb5848261250e565b611fbe836125e3565b60408051868152602081018390529081018590527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff60a01b1916905550505050565b8061202157612021612639565b6001600160a01b03841660009081526009602052604090205460ff16801561206257506001600160a01b03831660009081526009602052604090205460ff16155b1561207757612072848484612667565b612123565b6001600160a01b03841660009081526009602052604090205460ff161580156120b857506001600160a01b03831660009081526009602052604090205460ff165b156120c85761207284848461278d565b6001600160a01b03841660009081526009602052604090205460ff16801561210857506001600160a01b03831660009081526009602052604090205460ff165b1561211857612072848484612836565b6121238484846128a9565b8061213957612139601454601355601654601555565b50505050565b600081836121605760405162461bcd60e51b815260040161084b9190612a73565b506000611d668486612d74565b600c54600b546000918291825b600a548110156122bf578260046000600a848154811061219c5761219c612ce3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061220757508160056000600a84815481106121e0576121e0612ce3565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561221d57600c54600b54945094505050509091565b61226360046000600a848154811061223757612237612ce3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611e82565b92506122ab60056000600a848154811061227f5761227f612ce3565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611e82565b9150806122b781612d26565b91505061217a565b50600b54600c546122cf91611d6f565b8210156122e657600c54600b549350935050509091565b90939092509050565b6000806000806122fe856128ed565b9050600061230b8661290f565b9050600061231d82611f8b8986611e82565b979296509094509092505050565b600080808061233a888661292b565b90506000612348888761292b565b90506000612356888861292b565b9050600061236882611f8b8686611e82565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123b0576123b0612ce3565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d9190612d3f565b8160018151811061244057612440612ce3565b6001600160a01b03928316602091820292909201015260175461246691309116846117f0565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061249f908590600090869030904290600401612dda565b600060405180830381600087803b1580156124b957600080fd5b505af11580156124cd573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612502929190612e16565b60405180910390a15050565b6017546125269030906001600160a01b0316846117f0565b6017546001600160a01b031663f305d71982308560008061254f6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156125b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125dc9190612e37565b5050505050565b6125ec8161237b565b6003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612139576040519150601f19603f3d011682016040523d82523d6000602084013e612139565b6013541580156126495750601554155b1561265057565b601380546014556015805460165560009182905555565b60008060008060008061267987611e33565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506126ab9088611e82565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546126da9087611e82565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546127099086611dd4565b6001600160a01b03891660009081526004602052604090205561272b816129ad565b6127358483612a36565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161277a91815260200190565b60405180910390a3505050505050505050565b60008060008060008061279f87611e33565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506127d19087611e82565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546128079084611dd4565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546127099086611dd4565b60008060008060008061284887611e33565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061287a9088611e82565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546127d19087611e82565b6000806000806000806128bb87611e33565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506126da9087611e82565b600061094660646129096013548561292b90919063ffffffff16565b90611d6f565b600061094660646129096015548561292b90919063ffffffff16565b60008260000361293d57506000610946565b60006129498385612cc4565b9050826129568583612d74565b14610b3f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161084b565b60006129b7611db1565b905060006129c5838361292b565b306000908152600460205260409020549091506129e29082611dd4565b3060009081526004602090815260408083209390935560099052205460ff1615612a315730600090815260056020526040902054612a209084611dd4565b306000908152600560205260409020555b505050565b600c54612a439083611e82565b600c55600d54612a539082611dd4565b600d555050565b600060208284031215612a6c57600080fd5b5035919050565b600060208083528351808285015260005b81811015612aa057858101830151858201604001528201612a84565b81811115612ab2576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461160f57600080fd5b60008060408385031215612af057600080fd5b8235612afb81612ac8565b946020939093013593505050565b600080600060608486031215612b1e57600080fd5b8335612b2981612ac8565b92506020840135612b3981612ac8565b929592945050506040919091013590565b600060208284031215612b5c57600080fd5b8135610b3f81612ac8565b60008060408385031215612b7a57600080fd5b8235915060208301358015158114612b9157600080fd5b809150509250929050565b60008060208385031215612baf57600080fd5b823567ffffffffffffffff80821115612bc757600080fd5b818501915085601f830112612bdb57600080fd5b813581811115612bea57600080fd5b8660208260051b8501011115612bff57600080fd5b60209290920196919550909350505050565b60008060408385031215612c2457600080fd5b8235612c2f81612ac8565b91506020830135612b9181612ac8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c8857607f821691505b602082108103612ca857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612cde57612cde612cae565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612d0b57612d0b612cae565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201612d3857612d38612cae565b5060010190565b600060208284031215612d5157600080fd5b8151610b3f81612ac8565b60008219821115612d6f57612d6f612cae565b500190565b600082612d9157634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b83811015612dcf5781516001600160a01b031687529582019590820190600101612daa565b509495945050505050565b85815284602082015260a060408201526000612df960a0830186612d96565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612e2f6040830184612d96565b949350505050565b600080600060608486031215612e4c57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3a82f6672707d96c241249c0c42fe305c3a3e83ff34136ef496a39a2cb881a364736f6c634300080d0033

Deployed Bytecode Sourcemap

14479:20273:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32702:156;;;;;;;;;;-1:-1:-1;32702:156:0;;;;;:::i;:::-;;:::i;:::-;;17173:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18085:161;;;;;;;;;;-1:-1:-1;18085:161:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;18085:161:0;1257:187:1;32870:150:0;;;;;;;;;;-1:-1:-1;32870:150:0;;;;;:::i;:::-;;:::i;15872:37::-;;;;;;;;;;-1:-1:-1;15872:37:0;;;;;;;;19206:87;;;;;;;;;;-1:-1:-1;19275:10:0;;19206:87;;;1595:25:1;;;1583:2;1568:18;19206:87:0;1449:177:1;15644:41:0;;;;;;;;;;-1:-1:-1;15644:41:0;;;;-1:-1:-1;;;;;15644:41:0;;;;;;-1:-1:-1;;;;;1822:32:1;;;1804:51;;1792:2;1777:18;15644:41:0;1631:230:1;17450:95:0;;;;;;;;;;-1:-1:-1;17530:7:0;;17450:95;;18254:313;;;;;;;;;;-1:-1:-1;18254:313:0;;;;;:::i;:::-;;:::i;34450:201::-;;;;;;;;;;-1:-1:-1;34450:201:0;;;;;:::i;:::-;;:::i;20146:253::-;;;;;;;;;;-1:-1:-1;20146:253:0;;;;;:::i;:::-;;:::i;17359:83::-;;;;;;;;;;-1:-1:-1;17425:9:0;;17359:83;;17425:9;;;;2469:36:1;;2457:2;2442:18;17359:83:0;2327:184:1;20750:479:0;;;;;;;;;;-1:-1:-1;20750:479:0;;;;;:::i;:::-;;:::i;18575:218::-;;;;;;;;;;-1:-1:-1;18575:218:0;;;;;:::i;:::-;;:::i;15455:22::-;;;;;;;;;;;;;;;;19313:377;;;;;;;;;;-1:-1:-1;19313:377:0;;;;;:::i;:::-;;:::i;15426:22::-;;;;;;;;;;;;;;;;32457:111;;;;;;;;;;-1:-1:-1;32457:111:0;;;;;:::i;:::-;;:::i;19702:436::-;;;;;;;;;;-1:-1:-1;19702:436:0;;;;;:::i;:::-;;:::i;15692:28::-;;;;;;;;;;-1:-1:-1;15692:28:0;;;;-1:-1:-1;;;;;15692:28:0;;;20407:335;;;;;;;;;;-1:-1:-1;20407:335:0;;;;;:::i;:::-;;:::i;32322:123::-;;;;;;;;;;-1:-1:-1;32322:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32410:27:0;32386:4;32410:27;;;:18;:27;;;;;;;;;32322:123;15396:23;;;;;;;;;;;;;;;;17009:156;;;;;;;;;;;;;:::i;17553:198::-;;;;;;;;;;-1:-1:-1;17553:198:0;;;;;:::i;:::-;;:::i;6110:148::-;;;;;;;;;;;;;:::i;16555:442::-;;;;;;;;;;;;;:::i;19078:120::-;;;;;;;;;;-1:-1:-1;19078:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;19170:20:0;19146:4;19170:20;;;:11;:20;;;;;;;;;19078:120;34341:95;;;;;;;;;;;;;:::i;33032:156::-;;;;;;;;;;-1:-1:-1;33032:156:0;;;;;:::i;:::-;;:::i;5885:79::-;;;;;;;;;;-1:-1:-1;5923:7:0;5950:6;-1:-1:-1;;;;;5950:6:0;5885:79;;33200:141;;;;;;;;;;-1:-1:-1;33200:141:0;;;;;:::i;:::-;;:::i;17264:87::-;;;;;;;;;;;;;:::i;33482:336::-;;;;;;;;;;-1:-1:-1;33482:336:0;;;;;:::i;:::-;;:::i;18801:269::-;;;;;;;;;;-1:-1:-1;18801:269:0;;;;;:::i;:::-;;:::i;14601:93::-;;;;;;;;;;-1:-1:-1;14601:93:0;;;;-1:-1:-1;;;;;14601:93:0;;;17759:167;;;;;;;;;;-1:-1:-1;17759:167:0;;;;;:::i;:::-;;:::i;34063:102::-;;;;;;;;;;-1:-1:-1;34063:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;34143:14:0;34119:4;34143:14;;;:5;:14;;;;;;;;;34063:102;15916:62;;;;;;;;;;;;;;;;33359:115;;;;;;;;;;;;;:::i;17934:143::-;;;;;;;;;;-1:-1:-1;17934:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18042:18:0;;;18015:7;18042:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17934:143;32580:110;;;;;;;;;;-1:-1:-1;32580:110:0;;;;;:::i;:::-;;:::i;34173:160::-;;;;;;;;;;-1:-1:-1;34173:160:0;;;;;:::i;:::-;;:::i;6266:244::-;;;;;;;;;;-1:-1:-1;6266:244:0;;;;;:::i;:::-;;:::i;32702:156::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;;;;;;;;;32795:1:::1;32785:6;:11;;32776:47;;;::::0;-1:-1:-1;;;32776:47:0;;5122:2:1;32776:47:0::1;::::0;::::1;5104:21:1::0;5161:2;5141:18;;;5134:30;-1:-1:-1;;;5180:18:1;;;5173:52;5242:18;;32776:47:0::1;4920:346:1::0;32776:47:0::1;32834:7;:16:::0;32702:156::o;17173:83::-;17210:13;17243:5;17236:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17173:83;:::o;18085:161::-;18160:4;18177:39;269:10;18200:7;18209:6;18177:8;:39::i;:::-;-1:-1:-1;18234:4:0;18085:161;;;;;:::o;32870:150::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;32956:1:::1;32946:6;:11;;32937:48;;;::::0;-1:-1:-1;;;32937:48:0;;5858:2:1;32937:48:0::1;::::0;::::1;5840:21:1::0;5897:2;5877:18;;;5870:30;5936:25;5916:18;;;5909:53;5979:18;;32937:48:0::1;5656:347:1::0;32937:48:0::1;32996:7;:16:::0;32870:150::o;18254:313::-;18352:4;18369:36;18379:6;18387:9;18398:6;18369:9;:36::i;:::-;18416:121;18425:6;269:10;18447:89;18485:6;18447:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18447:19:0;;;;;;:11;:19;;;;;;;;269:10;18447:33;;;;;;;;;;:37;:89::i;:::-;18416:8;:121::i;:::-;-1:-1:-1;18555:4:0;18254:313;;;;;:::o;34450:201::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;34548:7:::1;::::0;:16:::1;::::0;34560:3:::1;34548:11;:16::i;:::-;34538:6;:26;;34529:55;;;::::0;-1:-1:-1;;;34529:55:0;;6210:2:1;34529:55:0::1;::::0;::::1;6192:21:1::0;6249:2;6229:18;;;6222:30;-1:-1:-1;;;6268:18:1;;;6261:45;6323:18;;34529:55:0::1;6008:339:1::0;34529:55:0::1;34627:16;:6:::0;34636:7:::1;34627:16;:::i;:::-;34595:29;:48:::0;-1:-1:-1;34450:201:0:o;20146:253::-;20212:7;20251;;20240;:18;;20232:73;;;;-1:-1:-1;;;20232:73:0;;6859:2:1;20232:73:0;;;6841:21:1;6898:2;6878:18;;;6871:30;6937:34;6917:18;;;6910:62;-1:-1:-1;;;6988:18:1;;;6981:40;7038:19;;20232:73:0;6657:406:1;20232:73:0;20316:19;20339:10;:8;:10::i;:::-;20316:33;-1:-1:-1;20367:24:0;:7;20316:33;20367:11;:24::i;:::-;20360:31;20146:253;-1:-1:-1;;;20146:253:0:o;20750:479::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20832:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20824:60;;;::::0;-1:-1:-1;;;20824:60:0;;7270:2:1;20824:60:0::1;::::0;::::1;7252:21:1::0;7309:2;7289:18;;;7282:30;7348:29;7328:18;;;7321:57;7395:18;;20824:60:0::1;7068:351:1::0;20824:60:0::1;20900:9;20895:327;20919:9;:16:::0;20915:20;::::1;20895:327;;;20977:7;-1:-1:-1::0;;;;;20961:23:0::1;:9;20971:1;20961:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;20961:12:0::1;:23:::0;20957:254:::1;;21020:9;21030:16:::0;;:20:::1;::::0;21049:1:::1;::::0;21030:20:::1;:::i;:::-;21020:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21005:9:::1;:12:::0;;-1:-1:-1;;;;;21020:31:0;;::::1;::::0;21015:1;;21005:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21005:46:0::1;-1:-1:-1::0;;;;;21005:46:0;;::::1;;::::0;;21070:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;21109:11:::1;:20:::0;;;;:28;;-1:-1:-1;;21109:28:0::1;::::0;;21156:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21156:15:0;;;;;-1:-1:-1;;;;;;21156:15:0::1;::::0;;;;;20895:327:::1;20750:479:::0;:::o;20957:254::-:1;20937:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20895:327;;;;20750:479:::0;:::o;18575:218::-;269:10;18663:4;18712:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18712:34:0;;;;;;;;;;18663:4;;18680:83;;18703:7;;18712:50;;18751:10;18712:38;:50::i;19313:377::-;269:10;19365:14;19414:19;;;:11;:19;;;;;;;;19413:20;19405:77;;;;-1:-1:-1;;;19405:77:0;;8160:2:1;19405:77:0;;;8142:21:1;8199:2;8179:18;;;8172:30;8238:34;8218:18;;;8211:62;-1:-1:-1;;;8289:18:1;;;8282:42;8341:19;;19405:77:0;7958:408:1;19405:77:0;19494:15;19518:19;19529:7;19518:10;:19::i;:::-;-1:-1:-1;;;;;;;;;19566:15:0;;;;;;:7;:15;;;;;;19493:44;;-1:-1:-1;19566:28:0;;:15;-1:-1:-1;19493:44:0;19566:19;:28::i;:::-;-1:-1:-1;;;;;19548:15:0;;;;;;:7;:15;;;;;:46;19615:7;;:20;;19627:7;19615:11;:20::i;:::-;19605:7;:30;19659:10;;:23;;19674:7;19659:14;:23::i;:::-;19646:10;:36;-1:-1:-1;;;19313:377:0:o;32457:111::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32526:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32526:34:0::1;32556:4;32526:34;::::0;;32457:111::o;19702:436::-;19792:7;19831;;19820;:18;;19812:62;;;;-1:-1:-1;;;19812:62:0;;8573:2:1;19812:62:0;;;8555:21:1;8612:2;8592:18;;;8585:30;8651:33;8631:18;;;8624:61;8702:18;;19812:62:0;8371:355:1;19812:62:0;19890:17;19885:246;;19925:15;19949:19;19960:7;19949:10;:19::i;:::-;-1:-1:-1;19924:44:0;;-1:-1:-1;19983:14:0;;-1:-1:-1;;;;;19983:14:0;19885:246;20032:23;20063:19;20074:7;20063:10;:19::i;:::-;-1:-1:-1;20030:52:0;;-1:-1:-1;20097:22:0;;-1:-1:-1;;;;;20097:22:0;20407:335;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20492:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;20491:21;20483:61;;;::::0;-1:-1:-1;;;20483:61:0;;7270:2:1;20483:61:0::1;::::0;::::1;7252:21:1::0;7309:2;7289:18;;;7282:30;7348:29;7328:18;;;7321:57;7395:18;;20483:61:0::1;7068:351:1::0;20483:61:0::1;-1:-1:-1::0;;;;;20558:16:0;::::1;20577:1;20558:16:::0;;;:7:::1;:16;::::0;;;;;:20;20555:108:::1;;-1:-1:-1::0;;;;;20634:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;20614:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;20595:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;20555:108:::1;-1:-1:-1::0;;;;;20673:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;20673:27:0::1;20696:4;20673:27:::0;;::::1;::::0;;;20711:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;20711:23:0::1;::::0;;::::1;::::0;;20407:335::o;17009:156::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;17075:1:::1;17065:7;:11:::0;;;17087:8:::1;:13:::0;-1:-1:-1;17111:7:0::1;:9:::0;17131:11:::1;:18:::0;;-1:-1:-1;;;;17131:18:0::1;-1:-1:-1::0;;;17131:18:0::1;::::0;;17009:156::o;17553:198::-;-1:-1:-1;;;;;17643:20:0;;17619:7;17643:20;;;:11;:20;;;;;;;;17639:49;;;-1:-1:-1;;;;;;17672:16:0;;;;;:7;:16;;;;;;;17553:198::o;17639:49::-;-1:-1:-1;;;;;17726:16:0;;;;;;:7;:16;;;;;;17706:37;;:19;:37::i;6110:148::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;6217:1:::1;6201:6:::0;;6180:40:::1;::::0;-1:-1:-1;;;;;6201:6:0;;::::1;::::0;6180:40:::1;::::0;6217:1;;6180:40:::1;6248:1;6231:19:::0;;-1:-1:-1;;;;;;6231:19:0::1;::::0;;6110:148::o;16555:442::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;16611:35:::1;16668:42;16611:100;;16756:16;-1:-1:-1::0;;;;;16756:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16738:66:0::1;;16813:4;16820:16;-1:-1:-1::0;;;;;16820:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16738:106;::::0;-1:-1:-1;;;;;;16738:106:0::1;::::0;;;;;;-1:-1:-1;;;;;9217:15:1;;;16738:106:0::1;::::0;::::1;9199:34:1::0;9269:15;;9249:18;;;9242:43;9134:18;;16738:106:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16722:13;:122:::0;;-1:-1:-1;;;;;;16722:122:0;;::::1;-1:-1:-1::0;;;;;16722:122:0;;::::1;;::::0;;;16857:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;5950:6:0;;;;;16904:27;;:18:::1;:27;::::0;;;;;:34;;-1:-1:-1;;16904:34:0;;::::1;-1:-1:-1::0;16904:34:0;;::::1;::::0;;;16976:4:::1;16949:33:::0;;;;;;:40;;;;::::1;::::0;;::::1;::::0;;16555:442::o;34341:95::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;34402:18:::1;:26:::0;;-1:-1:-1;;34402:26:0::1;::::0;;34341:95::o;33032:156::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;33121:1:::1;33110:7;:12;;33101:50;;;::::0;-1:-1:-1;;;33101:50:0;;9498:2:1;33101:50:0::1;::::0;::::1;9480:21:1::0;9537:2;9517:18;;;9510:30;9576:26;9556:18;;;9549:54;9620:18;;33101:50:0::1;9296:348:1::0;33101:50:0::1;33162:8;:18:::0;33032:156::o;33200:141::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;33288:16:::1;:45:::0;;-1:-1:-1;;;;;;33288:45:0::1;-1:-1:-1::0;;;;;33288:45:0;;;::::1;::::0;;;::::1;::::0;;33200:141::o;17264:87::-;17303:13;17336:7;17329:14;;;;;:::i;33482:336::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;33572:12:::1;::::0;-1:-1:-1;;;33572:12:0;::::1;;;:20;;33588:4;33572:20;33563:66;;;::::0;-1:-1:-1;;;33563:66:0;;9851:2:1;33563:66:0::1;::::0;::::1;9833:21:1::0;;;9870:18;;;9863:30;9929:34;9909:18;;;9902:62;9981:18;;33563:66:0::1;9649:356:1::0;33563:66:0::1;33640:16;33671:109;33677:22:::0;;::::1;33671:109;;;33715:25;33725:4;;33730:8;33725:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;33715:9;:25::i;:::-;33755:13;33767:1;33755:13:::0;::::1;:::i;:::-;;;33671:109;;;-1:-1:-1::0;;33790:12:0::1;:20:::0;;-1:-1:-1;;;;33790:20:0::1;::::0;;-1:-1:-1;33482:336:0:o;18801:269::-;18894:4;18911:129;269:10;18934:7;18943:96;18982:15;18943:96;;;;;;;;;;;;;;;;;269:10;18943:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18943:34:0;;;;;;;;;;;;:38;:96::i;17759:167::-;17837:4;17854:42;269:10;17878:9;17889:6;17854:9;:42::i;33359:115::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;5923:7;5950:6;;33418:48:::1;::::0;-1:-1:-1;;;;;5950:6:0;;;;33444:21:::1;33418:48:::0;::::1;;;::::0;33444:21;;33418:48;5923:7;33418:48;33444:21;5950:6;33418:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33359:115::o:0;32580:110::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32647:27:0::1;32677:5;32647:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32647:35:0::1;::::0;;32580:110::o;34173:160::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34254:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;34245:47;;;::::0;-1:-1:-1;;;34245:47:0;;10345:2:1;34245:47:0::1;::::0;::::1;10327:21:1::0;10384:2;10364:18;;;10357:30;-1:-1:-1;;;10403:18:1;;;10396:49;10462:18;;34245:47:0::1;10143:343:1::0;34245:47:0::1;-1:-1:-1::0;;;;;34303:14:0::1;34320:5;34303:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;34303:22:0::1;::::0;;34173:160::o;6266:244::-;6019:6;;-1:-1:-1;;;;;6019:6:0;269:10;6019:22;6011:67;;;;-1:-1:-1;;;6011:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6355:22:0;::::1;6347:73;;;::::0;-1:-1:-1;;;6347:73:0;;10693:2:1;6347:73:0::1;::::0;::::1;10675:21:1::0;10732:2;10712:18;;;10705:30;10771:34;10751:18;;;10744:62;-1:-1:-1;;;10822:18:1;;;10815:36;10868:19;;6347:73:0::1;10491:402:1::0;6347:73:0::1;6457:6;::::0;;6436:38:::1;::::0;-1:-1:-1;;;;;6436:38:0;;::::1;::::0;6457:6;::::1;::::0;6436:38:::1;::::0;::::1;6485:6;:17:::0;;-1:-1:-1;;;;;;6485:17:0::1;-1:-1:-1::0;;;;;6485:17:0;;;::::1;::::0;;;::::1;::::0;;6266:244::o;21237:337::-;-1:-1:-1;;;;;21330:19:0;;21322:68;;;;-1:-1:-1;;;21322:68:0;;11100:2:1;21322:68:0;;;11082:21:1;11139:2;11119:18;;;11112:30;11178:34;11158:18;;;11151:62;-1:-1:-1;;;11229:18:1;;;11222:34;11273:19;;21322:68:0;10898:400:1;21322:68:0;-1:-1:-1;;;;;21409:21:0;;21401:68;;;;-1:-1:-1;;;21401:68:0;;11505:2:1;21401:68:0;;;11487:21:1;11544:2;11524:18;;;11517:30;11583:34;11563:18;;;11556:62;-1:-1:-1;;;11634:18:1;;;11627:32;11676:19;;21401:68:0;11303:398:1;21401:68:0;-1:-1:-1;;;;;21482:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21534:32;;1595:25:1;;;21534:32:0;;1568:18:1;21534:32:0;;;;;;;21237:337;;;:::o;21582:1914::-;-1:-1:-1;;;;;21704:18:0;;21696:68;;;;-1:-1:-1;;;21696:68:0;;11908:2:1;21696:68:0;;;11890:21:1;11947:2;11927:18;;;11920:30;11986:34;11966:18;;;11959:62;-1:-1:-1;;;12037:18:1;;;12030:35;12082:19;;21696:68:0;11706:401:1;21696:68:0;-1:-1:-1;;;;;21783:16:0;;21775:64;;;;-1:-1:-1;;;21775:64:0;;12314:2:1;21775:64:0;;;12296:21:1;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;-1:-1:-1;;;12443:18:1;;;12436:33;12486:19;;21775:64:0;12112:399:1;21775:64:0;21867:1;21858:6;:10;21850:64;;;;-1:-1:-1;;;21850:64:0;;12718:2:1;21850:64:0;;;12700:21:1;12757:2;12737:18;;;12730:30;12796:34;12776:18;;;12769:62;-1:-1:-1;;;12847:18:1;;;12840:39;12896:19;;21850:64:0;12516:405:1;21850:64:0;5923:7;5950:6;-1:-1:-1;;;;;21928:14:0;;;5950:6;;21928:14;;;;:30;;-1:-1:-1;5923:7:0;5950:6;-1:-1:-1;;;;;21946:12:0;;;5950:6;;21946:12;;21928:30;21924:207;;;21982:11;;-1:-1:-1;;;21982:11:0;;;;21974:48;;;;-1:-1:-1;;;21974:48:0;;13128:2:1;21974:48:0;;;13110:21:1;13167:2;13147:18;;;13140:30;13206:26;13186:18;;;13179:54;13250:18;;21974:48:0;12926:348:1;21974:48:0;-1:-1:-1;;;;;22086:11:0;;;;;;:5;:11;;;;;;;;22085:12;:26;;;;-1:-1:-1;;;;;;22102:9:0;;;;;;:5;:9;;;;;;;;22101:10;22085:26;22076:44;;;;-1:-1:-1;;;22076:44:0;;;;;;13481:2:1;13463:21;;;13520:1;13500:18;;;13493:29;-1:-1:-1;;;13553:2:1;13538:18;;13531:34;13597:2;13582:18;;13279:327;22076:44:0;22177:13;;-1:-1:-1;;;;;22169:21:0;;;22177:13;;22169:21;:55;;;;-1:-1:-1;22208:15:0;;-1:-1:-1;;;;;22194:30:0;;;22208:15;;22194:30;;22169:55;:82;;;;-1:-1:-1;;;;;;22229:22:0;;;;;;:18;:22;;;;;;;;22228:23;22169:82;22166:504;;;22283:18;;;;22280:313;;;22332:13;;-1:-1:-1;;;;;22324:21:0;;;22332:13;;22324:21;:40;;;;-1:-1:-1;5923:7:0;5950:6;-1:-1:-1;;;;;22349:15:0;;;5950:6;;22349:15;;22324:40;:57;;;;-1:-1:-1;5923:7:0;5950:6;-1:-1:-1;;;;;22368:13:0;;;5950:6;;22368:13;;22324:57;:91;;;;-1:-1:-1;22399:15:0;;-1:-1:-1;;;;;22385:30:0;;;22399:15;;22385:30;;22324:91;:114;;;;-1:-1:-1;;;;;;22419:19:0;;22433:4;22419:19;;22324:114;22321:257;;;22463:12;22478:13;22488:2;22478:9;:13::i;:::-;22545:12;;22463:28;;-1:-1:-1;22522:19:0;22463:28;22534:6;22522:11;:19::i;:::-;:35;;22514:44;;;;;;22440:138;22321:257;22637:7;;22621:13;:23;22166:504;22682:28;22713:24;22731:4;22713:9;:24::i;:::-;22801:29;;22682:55;;-1:-1:-1;22777:53:0;;;;;;;22877:43;;-1:-1:-1;22914:6:0;;-1:-1:-1;;;22914:6:0;;;;22913:7;22877:43;:79;;;;-1:-1:-1;22943:13:0;;-1:-1:-1;;;;;22937:19:0;;;22943:13;;22937:19;22877:79;22859:320;;;23019:29;;22996:52;;23092:36;23107:20;23092:14;:36::i;:::-;23159:8;;23143:13;:24;22859:320;23294:13;;23207:12;;-1:-1:-1;;;;;23288:19:0;;;23294:13;;23288:19;;:40;;-1:-1:-1;23315:13:0;;-1:-1:-1;;;;;23311:17:0;;;23315:13;;23311:17;23288:40;23287:99;;;;-1:-1:-1;;;;;;23335:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23363:22:0;;;;;;:18;:22;;;;;;;;23335:50;23333:53;23287:99;23282:148;;;-1:-1:-1;23414:4:0;23282:148;23450:38;23465:4;23470:2;23473:6;23480:7;23450:14;:38::i;:::-;21685:1811;;;21582:1914;;;:::o;1584:192::-;1670:7;1706:12;1698:6;;;;1690:29;;;;-1:-1:-1;;;1690:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1730:9:0;1742:5;1746:1;1742;:5;:::i;:::-;1730:17;1584:192;-1:-1:-1;;;;;1584:192:0:o;2044:132::-;2102:7;2129:39;2133:1;2136;2129:39;;;;;;;;;;;;;;;;;:3;:39::i;30472:163::-;30513:7;30534:15;30551;30570:19;:17;:19::i;:::-;30533:56;;-1:-1:-1;30533:56:0;-1:-1:-1;30607:20:0;30533:56;;30607:11;:20::i;:::-;30600:27;;;;30472:163;:::o;1251:181::-;1309:7;;1341:5;1345:1;1341;:5;:::i;:::-;1329:17;;1370:1;1365;:6;;1357:46;;;;-1:-1:-1;;;1357:46:0;;13813:2:1;1357:46:0;;;13795:21:1;13852:2;13832:18;;;13825:30;13891:29;13871:18;;;13864:57;13938:18;;1357:46:0;13611:351:1;29270:419:0;29329:7;29338;29347;29356;29365;29374;29395:23;29420:12;29434:18;29456:20;29468:7;29456:11;:20::i;:::-;29394:82;;;;;;29488:15;29505:23;29530:12;29546:50;29558:7;29567:4;29573:10;29585;:8;:10::i;:::-;29546:11;:50::i;:::-;29487:109;;;;-1:-1:-1;29487:109:0;;-1:-1:-1;29647:15:0;;-1:-1:-1;29664:4:0;;-1:-1:-1;29670:10:0;;-1:-1:-1;29270:419:0;;-1:-1:-1;;;;;29270:419:0:o;1440:136::-;1498:7;1525:43;1529:1;1532;1525:43;;;;;;;;;;;;;;;;;:3;:43::i;33826:229::-;33897:13;;-1:-1:-1;;;;;33886:24:0;;;33897:13;;33886:24;;;;:46;;-1:-1:-1;5923:7:0;5950:6;-1:-1:-1;;;;;33914:18:0;;;5950:6;;33914:18;;33886:46;:74;;;;-1:-1:-1;;;;;;33936:24:0;;33955:4;33936:24;;33886:74;:112;;;;-1:-1:-1;33982:15:0;;-1:-1:-1;;;;;33964:34:0;;;33982:15;;33964:34;;33886:112;33882:166;;;-1:-1:-1;;;;;34015:14:0;;;;;;:5;:14;;;;;:21;;-1:-1:-1;;34015:21:0;34032:4;34015:21;;;33826:229;:::o;23511:1176::-;16347:6;:13;;-1:-1:-1;;;;16347:13:0;-1:-1:-1;;;16347:13:0;;;;23671:28:::1;:20:::0;23696:2:::1;23671:24;:28::i;:::-;23647:52:::0;-1:-1:-1;23710:26:0::1;23739:28;:20:::0;23764:2:::1;23739:24;:28::i;:::-;23710:57:::0;-1:-1:-1;23778:22:0::1;23803:63;23710:57:::0;23803:39:::1;:20:::0;23828:13;23803:24:::1;:39::i;:::-;:43:::0;::::1;:63::i;:::-;23778:88:::0;-1:-1:-1;24169:21:0::1;24235:31;24252:13:::0;24235:16:::1;:31::i;:::-;24397:18;24418:41;:21;24444:14:::0;24418:25:::1;:41::i;:::-;24397:62;;24509:44;24522:18;24542:10;24509:12;:44::i;:::-;24564:28;24577:14;24564:12;:28::i;:::-;24618:61;::::0;;14169:25:1;;;14225:2;14210:18;;14203:34;;;14253:18;;;14246:34;;;24618:61:0::1;::::0;14157:2:1;14142:18;24618:61:0::1;;;;;;;-1:-1:-1::0;;16383:6:0;:14;;-1:-1:-1;;;;16383:14:0;;;-1:-1:-1;;;;23511:1176:0:o;26075:704::-;26186:7;26182:40;;26208:14;:12;:14::i;:::-;-1:-1:-1;;;;;26247:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;26271:22:0;;;;;;:11;:22;;;;;;;;26270:23;26247:46;26243:467;;;26310:48;26332:6;26340:9;26351:6;26310:21;:48::i;:::-;26243:467;;;-1:-1:-1;;;;;26381:19:0;;;;;;:11;:19;;;;;;;;26380:20;:46;;;;-1:-1:-1;;;;;;26404:22:0;;;;;;:11;:22;;;;;;;;26380:46;26376:334;;;26443:46;26463:6;26471:9;26482:6;26443:19;:46::i;26376:334::-;-1:-1:-1;;;;;26511:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;26534:22:0;;;;;;:11;:22;;;;;;;;26511:45;26507:203;;;26573:48;26595:6;26603:9;26614:6;26573:21;:48::i;26507:203::-;26654:44;26672:6;26680:9;26691:6;26654:17;:44::i;:::-;26734:7;26730:41;;26756:15;32243;;32233:7;:25;32285:21;;32269:13;:37;32189:125;26756:15;26075:704;;;;:::o;2184:278::-;2270:7;2305:12;2298:5;2290:28;;;;-1:-1:-1;;;2290:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2329:9:0;2341:5;2345:1;2341;:5;:::i;30643:561::-;30740:7;;30776;;30693;;;;;30800:289;30824:9;:16;30820:20;;30800:289;;;30890:7;30866;:21;30874:9;30884:1;30874:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30874:12:0;30866:21;;;;;;;;;;;;;:31;;:66;;;30925:7;30901;:21;30909:9;30919:1;30909:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30909:12:0;30901:21;;;;;;;;;;;;;:31;30866:66;30862:97;;;30942:7;;30951;;30934:25;;;;;;;30643:561;;:::o;30862:97::-;30984:34;30996:7;:21;31004:9;31014:1;31004:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31004:12:0;30996:21;;;;;;;;;;;;;30984:7;;:11;:34::i;:::-;30974:44;;31043:34;31055:7;:21;31063:9;31073:1;31063:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31063:12:0;31055:21;;;;;;;;;;;;;31043:7;;:11;:34::i;:::-;31033:44;-1:-1:-1;30842:3:0;;;;:::i;:::-;;;;30800:289;;;-1:-1:-1;31125:7:0;;31113;;:20;;:11;:20::i;:::-;31103:7;:30;31099:61;;;31143:7;;31152;;31135:25;;;;;;30643:561;;:::o;31099:61::-;31179:7;;31188;;-1:-1:-1;30643:561:0;-1:-1:-1;30643:561:0:o;29697:330::-;29757:7;29766;29775;29795:12;29810:24;29826:7;29810:15;:24::i;:::-;29795:39;;29845:18;29866:30;29888:7;29866:21;:30::i;:::-;29845:51;-1:-1:-1;29907:23:0;29933:33;29845:51;29933:17;:7;29945:4;29933:11;:17::i;:33::-;29907:59;30002:4;;-1:-1:-1;30008:10:0;;-1:-1:-1;29697:330:0;;-1:-1:-1;;;29697:330:0:o;30035:429::-;30150:7;;;;30206:24;:7;30218:11;30206;:24::i;:::-;30188:42;-1:-1:-1;30241:12:0;30256:21;:4;30265:11;30256:8;:21::i;:::-;30241:36;-1:-1:-1;30288:18:0;30309:27;:10;30324:11;30309:14;:27::i;:::-;30288:48;-1:-1:-1;30347:23:0;30373:33;30288:48;30373:17;:7;30385:4;30373:11;:17::i;:33::-;30425:7;;;;-1:-1:-1;30451:4:0;;-1:-1:-1;30035:429:0;;-1:-1:-1;;;;;;;30035:429:0:o;24874:666::-;25024:16;;;25038:1;25024:16;;;;;;;;25000:21;;25024:16;;;;;;;;;;-1:-1:-1;25024:16:0;25000:40;;25069:4;25051;25056:1;25051:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25051:23:0;;;:7;;;;;;;;;;:23;;;;25095:15;;:22;;;-1:-1:-1;;;25095:22:0;;;;:15;;;;;:20;;:22;;;;;25051:7;;25095:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25085:4;25090:1;25085:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25085:32:0;;;:7;;;;;;;;;:32;25162:15;;25130:62;;25147:4;;25162:15;25180:11;25130:8;:62::i;:::-;25231:15;;:240;;-1:-1:-1;;;25231:240:0;;-1:-1:-1;;;;;25231:15:0;;;;:66;;:240;;25312:11;;25231:15;;25382:4;;25409;;25445:15;;25231:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25497:35;25514:11;25527:4;25497:35;;;;;;;:::i;:::-;;;;;;;;24929:611;24874:666;:::o;25554:513::-;25734:15;;25702:62;;25719:4;;-1:-1:-1;;;;;25734:15:0;25752:11;25702:8;:62::i;:::-;25807:15;;-1:-1:-1;;;;;25807:15:0;:31;25846:9;25879:4;25899:11;25807:15;;26011:7;5923;5950:6;-1:-1:-1;;;;;5950:6:0;;5885:79;26011:7;25807:252;;;;;;-1:-1:-1;;;;;;25807:252:0;;;-1:-1:-1;;;;;16394:15:1;;;25807:252:0;;;16376:34:1;16426:18;;;16419:34;;;;16469:18;;;16462:34;;;;16512:18;;;16505:34;16576:15;;;16555:19;;;16548:44;26033:15:0;16608:19:1;;;16601:35;16310:19;;25807:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25554:513;;:::o;24699:156::-;24756:24;24773:6;24756:16;:24::i;:::-;24792:16;;:55;;-1:-1:-1;;;;;24792:16:0;;;;24821:21;;24792:55;;;;24821:21;24792:16;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31927:250;31973:7;;:12;:34;;;;-1:-1:-1;31989:13:0;;:18;31973:34;31970:46;;;31927:250::o;31970:46::-;32054:7;;;32036:15;:25;32096:13;;;32072:21;:37;-1:-1:-1;32130:11:0;;;;32152:17;31927:250::o;27891:566::-;27994:15;28011:23;28036:12;28050:23;28075:12;28089:18;28111:19;28122:7;28111:10;:19::i;:::-;-1:-1:-1;;;;;28159:15:0;;;;;;:7;:15;;;;;;27993:137;;-1:-1:-1;27993:137:0;;-1:-1:-1;27993:137:0;;-1:-1:-1;27993:137:0;-1:-1:-1;27993:137:0;-1:-1:-1;27993:137:0;-1:-1:-1;28159:28:0;;28179:7;28159:19;:28::i;:::-;-1:-1:-1;;;;;28141:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28216:7;:15;;;;:28;;28236:7;28216:19;:28::i;:::-;-1:-1:-1;;;;;28198:15:0;;;;;;;:7;:15;;;;;;:46;;;;28276:18;;;;;;;:39;;28299:15;28276:22;:39::i;:::-;-1:-1:-1;;;;;28255:18:0;;;;;;:7;:18;;;;;:60;28329:26;28344:10;28329:14;:26::i;:::-;28366:23;28378:4;28384;28366:11;:23::i;:::-;28422:9;-1:-1:-1;;;;;28405:44:0;28414:6;-1:-1:-1;;;;;28405:44:0;;28433:15;28405:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;28405:44:0;;;;;;;;27982:475;;;;;;27891:566;;;:::o;27297:586::-;27398:15;27415:23;27440:12;27454:23;27479:12;27493:18;27515:19;27526:7;27515:10;:19::i;:::-;-1:-1:-1;;;;;27563:15:0;;;;;;:7;:15;;;;;;27397:137;;-1:-1:-1;27397:137:0;;-1:-1:-1;27397:137:0;;-1:-1:-1;27397:137:0;-1:-1:-1;27397:137:0;-1:-1:-1;27397:137:0;-1:-1:-1;27563:28:0;;27397:137;27563:19;:28::i;:::-;-1:-1:-1;;;;;27545:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;27623:18;;;;;:7;:18;;;;;:39;;27646:15;27623:22;:39::i;:::-;-1:-1:-1;;;;;27602:18:0;;;;;;:7;:18;;;;;;;;:60;;;;27694:7;:18;;;;:39;;27717:15;27694:22;:39::i;28465:642::-;28568:15;28585:23;28610:12;28624:23;28649:12;28663:18;28685:19;28696:7;28685:10;:19::i;:::-;-1:-1:-1;;;;;28733:15:0;;;;;;:7;:15;;;;;;28567:137;;-1:-1:-1;28567:137:0;;-1:-1:-1;28567:137:0;;-1:-1:-1;28567:137:0;-1:-1:-1;28567:137:0;-1:-1:-1;28567:137:0;-1:-1:-1;28733:28:0;;28753:7;28733:19;:28::i;:::-;-1:-1:-1;;;;;28715:15:0;;;;;;:7;:15;;;;;;;;:46;;;;28790:7;:15;;;;:28;;28810:7;28790:19;:28::i;26787:502::-;26886:15;26903:23;26928:12;26942:23;26967:12;26981:18;27003:19;27014:7;27003:10;:19::i;:::-;-1:-1:-1;;;;;27051:15:0;;;;;;:7;:15;;;;;;26885:137;;-1:-1:-1;26885:137:0;;-1:-1:-1;26885:137:0;;-1:-1:-1;26885:137:0;-1:-1:-1;26885:137:0;-1:-1:-1;26885:137:0;-1:-1:-1;27051:28:0;;26885:137;27051:19;:28::i;31583:154::-;31647:7;31674:55;31713:5;31674:20;31686:7;;31674;:11;;:20;;;;:::i;:::-;:24;;:55::i;31749:166::-;31819:7;31846:61;31891:5;31846:26;31858:13;;31846:7;:11;;:26;;;;:::i;1784:250::-;1842:7;1866:1;1871;1866:6;1862:47;;-1:-1:-1;1896:1:0;1889:8;;1862:47;1921:9;1933:5;1937:1;1933;:5;:::i;:::-;1921:17;-1:-1:-1;1966:1:0;1957:5;1961:1;1921:17;1957:5;:::i;:::-;:10;1949:56;;;;-1:-1:-1;;;1949:56:0;;17370:2:1;1949:56:0;;;17352:21:1;17409:2;17389:18;;;17382:30;17448:34;17428:18;;;17421:62;-1:-1:-1;;;17499:18:1;;;17492:31;17540:19;;1949:56:0;17168:397:1;31216:355:0;31279:19;31302:10;:8;:10::i;:::-;31279:33;-1:-1:-1;31323:18:0;31344:27;:10;31279:33;31344:14;:27::i;:::-;31423:4;31407:22;;;;:7;:22;;;;;;31323:48;;-1:-1:-1;31407:38:0;;31323:48;31407:26;:38::i;:::-;31398:4;31382:22;;;;:7;:22;;;;;;;;:63;;;;31459:11;:26;;;;;;31456:107;;;31541:4;31525:22;;;;:7;:22;;;;;;:38;;31552:10;31525:26;:38::i;:::-;31516:4;31500:22;;;;:7;:22;;;;;:63;31456:107;31268:303;;31216:355;:::o;29115:147::-;29193:7;;:17;;29205:4;29193:11;:17::i;:::-;29183:7;:27;29234:10;;:20;;29249:4;29234:14;:20::i;:::-;29221:10;:33;-1:-1:-1;;29115:147:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:1;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:1;2297:18;;;;2284:32;;1866:456::o;2516:247::-;2575:6;2628:2;2616:9;2607:7;2603:23;2599:32;2596:52;;;2644:1;2641;2634:12;2596:52;2683:9;2670:23;2702:31;2727:5;2702:31;:::i;2768:341::-;2833:6;2841;2894:2;2882:9;2873:7;2869:23;2865:32;2862:52;;;2910:1;2907;2900:12;2862:52;2946:9;2933:23;2923:33;;3006:2;2995:9;2991:18;2978:32;3053:5;3046:13;3039:21;3032:5;3029:32;3019:60;;3075:1;3072;3065:12;3019:60;3098:5;3088:15;;;2768:341;;;;;:::o;3322:615::-;3408:6;3416;3469:2;3457:9;3448:7;3444:23;3440:32;3437:52;;;3485:1;3482;3475:12;3437:52;3525:9;3512:23;3554:18;3595:2;3587:6;3584:14;3581:34;;;3611:1;3608;3601:12;3581:34;3649:6;3638:9;3634:22;3624:32;;3694:7;3687:4;3683:2;3679:13;3675:27;3665:55;;3716:1;3713;3706:12;3665:55;3756:2;3743:16;3782:2;3774:6;3771:14;3768:34;;;3798:1;3795;3788:12;3768:34;3851:7;3846:2;3836:6;3833:1;3829:14;3825:2;3821:23;3817:32;3814:45;3811:65;;;3872:1;3869;3862:12;3811:65;3903:2;3895:11;;;;;3925:6;;-1:-1:-1;3322:615:1;;-1:-1:-1;;;;3322:615:1:o;4166:388::-;4234:6;4242;4295:2;4283:9;4274:7;4270:23;4266:32;4263:52;;;4311:1;4308;4301:12;4263:52;4350:9;4337:23;4369:31;4394:5;4369:31;:::i;:::-;4419:5;-1:-1:-1;4476:2:1;4461:18;;4448:32;4489:33;4448:32;4489:33;:::i;4559:356::-;4761:2;4743:21;;;4780:18;;;4773:30;4839:34;4834:2;4819:18;;4812:62;4906:2;4891:18;;4559:356::o;5271:380::-;5350:1;5346:12;;;;5393;;;5414:61;;5468:4;5460:6;5456:17;5446:27;;5414:61;5521:2;5513:6;5510:14;5490:18;5487:38;5484:161;;5567:10;5562:3;5558:20;5555:1;5548:31;5602:4;5599:1;5592:15;5630:4;5627:1;5620:15;5484:161;;5271:380;;;:::o;6352:127::-;6413:10;6408:3;6404:20;6401:1;6394:31;6444:4;6441:1;6434:15;6468:4;6465:1;6458:15;6484:168;6524:7;6590:1;6586;6582:6;6578:14;6575:1;6572:21;6567:1;6560:9;6553:17;6549:45;6546:71;;;6597:18;;:::i;:::-;-1:-1:-1;6637:9:1;;6484:168::o;7424:127::-;7485:10;7480:3;7476:20;7473:1;7466:31;7516:4;7513:1;7506:15;7540:4;7537:1;7530:15;7556:125;7596:4;7624:1;7621;7618:8;7615:34;;;7629:18;;:::i;:::-;-1:-1:-1;7666:9:1;;7556:125::o;7686:127::-;7747:10;7742:3;7738:20;7735:1;7728:31;7778:4;7775:1;7768:15;7802:4;7799:1;7792:15;7818:135;7857:3;7878:17;;;7875:43;;7898:18;;:::i;:::-;-1:-1:-1;7945:1:1;7934:13;;7818:135::o;8731:251::-;8801:6;8854:2;8842:9;8833:7;8829:23;8825:32;8822:52;;;8870:1;8867;8860:12;8822:52;8902:9;8896:16;8921:31;8946:5;8921:31;:::i;10010:128::-;10050:3;10081:1;10077:6;10074:1;10071:13;10068:39;;;10087:18;;:::i;:::-;-1:-1:-1;10123:9:1;;10010:128::o;14291:217::-;14331:1;14357;14347:132;;14401:10;14396:3;14392:20;14389:1;14382:31;14436:4;14433:1;14426:15;14464:4;14461:1;14454:15;14347:132;-1:-1:-1;14493:9:1;;14291:217::o;14645:461::-;14698:3;14736:5;14730:12;14763:6;14758:3;14751:19;14789:4;14818:2;14813:3;14809:12;14802:19;;14855:2;14848:5;14844:14;14876:1;14886:195;14900:6;14897:1;14894:13;14886:195;;;14965:13;;-1:-1:-1;;;;;14961:39:1;14949:52;;15021:12;;;;15056:15;;;;14997:1;14915:9;14886:195;;;-1:-1:-1;15097:3:1;;14645:461;-1:-1:-1;;;;;14645:461:1:o;15111:582::-;15410:6;15399:9;15392:25;15453:6;15448:2;15437:9;15433:18;15426:34;15496:3;15491:2;15480:9;15476:18;15469:31;15373:4;15517:57;15569:3;15558:9;15554:19;15546:6;15517:57;:::i;:::-;-1:-1:-1;;;;;15610:32:1;;;;15605:2;15590:18;;15583:60;-1:-1:-1;15674:3:1;15659:19;15652:35;15509:65;15111:582;-1:-1:-1;;;15111:582:1:o;15698:332::-;15905:6;15894:9;15887:25;15948:2;15943;15932:9;15928:18;15921:30;15868:4;15968:56;16020:2;16009:9;16005:18;15997:6;15968:56;:::i;:::-;15960:64;15698:332;-1:-1:-1;;;;15698:332:1:o;16647:306::-;16735:6;16743;16751;16804:2;16792:9;16783:7;16779:23;16775:32;16772:52;;;16820:1;16817;16810:12;16772:52;16849:9;16843:16;16833:26;;16899:2;16888:9;16884:18;16878:25;16868:35;;16943:2;16932:9;16928:18;16922:25;16912:35;;16647:306;;;;;:::o

Swarm Source

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